From 6fc5b2cc46e6d63b002a42d83e464c4701a50c67 Mon Sep 17 00:00:00 2001 From: Ian Krieger <48930920+IanKrieger@users.noreply.github.com> Date: Fri, 11 Aug 2023 08:41:15 -0400 Subject: [PATCH 1/2] chore: add node version (#856) --- .node-version | 1 + 1 file changed, 1 insertion(+) create mode 100644 .node-version diff --git a/.node-version b/.node-version new file mode 100644 index 00000000..4a1f488b --- /dev/null +++ b/.node-version @@ -0,0 +1 @@ +18.17.1 From fd1e50aa2ad1f5c13ee14bfa3ea0afb2c57eca11 Mon Sep 17 00:00:00 2001 From: Ian Krieger <48930920+IanKrieger@users.noreply.github.com> Date: Fri, 11 Aug 2023 12:05:45 -0400 Subject: [PATCH 2/2] chore: introduce eslint (#857) * chore: introduce eslint * fix use rsquo --- .eslintignore | 1 + .eslintrc.js | 30 + .github/workflows/sanity-check.yml | 1 + package-lock.json | 1538 ++++++++++++++--- package.json | 16 +- src/App.tsx | 2 +- src/auth/components/AdvertiserAgreed.tsx | 4 +- src/auth/context/auth.interface.ts | 4 +- src/auth/hooks/queries/useAdvertiser.ts | 2 +- src/auth/index.tsx | 6 +- src/auth/registration/AddressField.tsx | 3 +- .../registration/AdvertiserRegistered.tsx | 9 +- src/auth/registration/NameField.tsx | 7 +- src/auth/registration/Register.tsx | 4 +- src/auth/views/AuthVerify.tsx | 1 - src/auth/views/LandingPage.tsx | 1 - src/auth/views/Login.tsx | 2 +- src/auth/views/MagicLink.tsx | 4 +- src/auth/views/components/AuthContainer.tsx | 10 +- src/checkout/hooks/useCreatePaymentSession.ts | 2 +- src/components/AppBar/LandingPageAppBar.tsx | 2 - src/components/Box/BoxContainer.tsx | 4 +- src/components/Button/DashboardButton.tsx | 1 - src/components/Button/DashboardIconButton.tsx | 1 - .../Campaigns/CampaignAgeFilter.tsx | 8 +- .../Campaigns/CampaignDateRange.tsx | 6 +- src/components/Campaigns/Status.tsx | 7 +- src/components/Card/CardContainer.tsx | 4 +- src/components/Card/PaddedCardContainer.tsx | 2 +- src/components/Collapse/CollapseBox.tsx | 4 +- .../Conversion/ConversionDisplay.tsx | 5 +- .../Conversion/ConversionFields.tsx | 7 +- src/components/Country/CountryPicker.tsx | 3 +- src/components/Date/DateRangePicker.tsx | 4 +- src/components/Drawer/MiniSideBar.tsx | 19 +- .../EnhancedTable/EnhancedTable.tsx | 15 +- src/components/EnhancedTable/FilterInput.tsx | 2 +- src/components/EnhancedTable/renderers.tsx | 4 +- src/components/Error/ErrorDetail.tsx | 3 +- src/components/Location/LocationPicker.tsx | 3 +- src/components/Navigation/DraftMenu.tsx | 15 +- src/components/Navigation/Navbar.tsx | 14 +- src/components/Navigation/UserMenu.tsx | 59 - src/components/Platform/PlatformPicker.tsx | 3 +- src/components/Segment/SegmentPicker.tsx | 4 +- src/components/Steps/ActionButtons.tsx | 2 +- src/components/Steps/NextAndBack.tsx | 4 +- src/components/Steps/StepDrawer.tsx | 6 +- src/components/Switch/OnOff.tsx | 2 +- .../TimezoneAwareDatePicker.tsx | 4 +- src/components/TimeZonePicker/index.tsx | 8 +- src/components/Url/UrlResolver.tsx | 6 +- src/components/radioButton/RadioButton.tsx | 2 +- src/form/FormikHelpers.tsx | 28 +- src/form/PersistFormValues.tsx | 2 +- src/form/PersistRegistrationValues.tsx | 2 +- src/graphql/ad-set.generated.tsx | 3 +- src/graphql/advertiser.generated.tsx | 3 +- src/graphql/analytics-overview.generated.tsx | 3 +- src/graphql/campaign.generated.tsx | 3 +- src/graphql/common.generated.tsx | 3 +- src/graphql/creative.generated.tsx | 3 +- src/graphql/url.generated.tsx | 3 +- src/graphql/user.generated.tsx | 3 +- src/user/User.tsx | 7 +- src/user/adSet/AdSetList.tsx | 3 +- src/user/ads/AdList.tsx | 1 - src/user/ads/NewAd.tsx | 6 +- src/user/ads/NotificationAd.tsx | 1 - src/user/ads/NotificationPreview.tsx | 1 - .../components/BaseBarChart.tsx | 1 - .../components/BasePieChart.tsx | 1 - .../components/EngagementHeader.tsx | 1 - .../analyticsOverview/components/LiveFeed.tsx | 1 - .../components/MetricFilter.tsx | 1 - .../components/ReportUtils.tsx | 2 +- .../hooks/usePersistMetricFilter.ts | 2 +- .../analyticsOverview/lib/ads.library.ts | 2 +- .../analyticsOverview/lib/creative.library.ts | 2 +- .../analyticsOverview/lib/os.library.ts | 2 +- .../analyticsOverview/lib/overview.library.ts | 8 +- .../reports/campaign/EngagementsOverview.tsx | 4 +- .../reports/creative/CreativeOverview.tsx | 2 +- .../reports/os/OsOverview.tsx | 1 - .../reports/os/components/OsBarChart.tsx | 4 +- .../reports/os/components/OsPieChart.tsx | 4 +- src/user/analytics/renderers/index.tsx | 1 - src/user/campaignList/CampaignList.tsx | 2 +- src/user/settings/NewKeyPairModal.tsx | 18 +- src/user/settings/Settings.tsx | 2 +- src/user/settings/UserApiKey.tsx | 4 +- src/user/settings/UserForm.tsx | 2 +- .../advanced/components/adSet/AdSetFields.tsx | 1 - .../advanced/components/adSet/NewAdSet.tsx | 8 +- .../components/adSet/fields/AdSetAds.tsx | 1 - .../adSet/fields/ConversionField.tsx | 1 - .../components/adSet/fields/PickerFields.tsx | 1 - .../components/campaign/BudgetSettings.tsx | 1 - .../components/campaign/CampaignSettings.tsx | 1 - .../campaign/fields/BudgetField.tsx | 2 +- .../campaign/fields/LocationField.tsx | 1 - .../campaign/fields/PaymentMethodField.tsx | 1 - .../completionForm/CompletionForm.tsx | 8 +- .../advanced/components/form/EditCampaign.tsx | 1 - .../advanced/components/form/NewCampaign.tsx | 2 +- .../components/form/components/BaseForm.tsx | 1 - .../form/components/PaymentButton.tsx | 1 - .../advanced/components/review/Review.tsx | 2 +- .../components/review/components/AdReview.tsx | 3 +- .../review/components/AdSetReview.tsx | 1 - .../review/components/ReviewContainer.tsx | 2 +- .../review/components/ReviewField.tsx | 2 - src/user/views/user/AdDetailTable.tsx | 1 - src/user/views/user/CampaignDetails.tsx | 2 +- src/user/views/user/CampaignReportView.tsx | 2 +- src/user/views/user/CampaignView.tsx | 2 +- 116 files changed, 1544 insertions(+), 526 deletions(-) create mode 100644 .eslintignore create mode 100644 .eslintrc.js delete mode 100644 src/components/Navigation/UserMenu.tsx diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 00000000..3505e434 --- /dev/null +++ b/.eslintignore @@ -0,0 +1 @@ +**/*.generated.tsx diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 00000000..eb342faa --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,30 @@ +module.exports = { + root: true, + parser: "@typescript-eslint/parser", + plugins: ["@typescript-eslint"], + parserOptions: { + tsconfigRootDir: __dirname, + project: ["./tsconfig.json"], + }, + extends: [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + "plugin:react/recommended", + "plugin:react/jsx-runtime", + "prettier", + ], + settings: { + react: { + version: "detect", + }, + }, + + rules: { + "@typescript-eslint/explicit-module-boundary-types": "off", + "@typescript-eslint/no-explicit-any": "off", + "@typescript-eslint/no-inferrable-types": "off", + "@typescript-eslint/no-unused-vars": ["error", { argsIgnorePattern: "^_" }], + "@typescript-eslint/no-empty-function": "off", + "@typescript-eslint/no-require-imports": "error", + }, +}; diff --git a/.github/workflows/sanity-check.yml b/.github/workflows/sanity-check.yml index 0e4ca842..3ac332f1 100644 --- a/.github/workflows/sanity-check.yml +++ b/.github/workflows/sanity-check.yml @@ -21,4 +21,5 @@ jobs: - run: npm ci - run: npm run tsc - run: npm run check:audit + - run: npm run check:lint - run: npm test diff --git a/package-lock.json b/package-lock.json index 3957240e..aa3f4d8c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -55,8 +55,13 @@ "@types/react": "18.2.15", "@types/react-dom": "18.2.7", "@types/react-router-dom": "5.3.3", + "@typescript-eslint/eslint-plugin": "6.3.0", + "@typescript-eslint/parser": "6.3.0", "@vitejs/plugin-basic-ssl": "1.0.1", "@vitejs/plugin-react": "4.0.3", + "eslint": "8.46.0", + "eslint-config-prettier": "9.0.0", + "eslint-plugin-react": "7.33.1", "husky": "8.0.3", "prettier": "3.0.0", "typescript": "5.1.6", @@ -71,8 +76,6 @@ "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", "dev": true, - "optional": true, - "peer": true, "engines": { "node": ">=0.10.0" } @@ -1830,17 +1833,39 @@ "node": ">=12" } }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "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.6.2", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.6.2.tgz", + "integrity": "sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw==", + "dev": true, + "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==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.1.tgz", + "integrity": "sha512-9t7ZA7NGGK8ckelF0PQCfcxIUzs1Md5rrO6U/c+FIQNanea5UZC0wqKXH4vHBccmu4ZJgZ2idtPeW7+Q2npOEA==", "dev": true, - "optional": true, - "peer": true, "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.4.0", + "espree": "^9.6.0", "globals": "^13.19.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", @@ -1856,12 +1881,10 @@ } }, "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==", + "version": "13.21.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.21.0.tgz", + "integrity": "sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==", "dev": true, - "optional": true, - "peer": true, "dependencies": { "type-fest": "^0.20.2" }, @@ -1877,8 +1900,6 @@ "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, - "optional": true, - "peer": true, "engines": { "node": ">=10" }, @@ -1886,6 +1907,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@eslint/js": { + "version": "8.46.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.46.0.tgz", + "integrity": "sha512-a8TLtmPi8xzPkCbp/OGFUo5yhRkHM2Ko9kOWP4znJr0WAhWyThaw3PnwX4vOTWOAMsV2uRt32PPDcEz63esSaA==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, "node_modules/@fontsource/mulish": { "version": "5.0.5", "resolved": "https://registry.npmjs.org/@fontsource/mulish/-/mulish-5.0.5.tgz", @@ -2693,12 +2723,10 @@ } }, "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==", + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz", + "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==", "dev": true, - "optional": true, - "peer": true, "dependencies": { "@humanwhocodes/object-schema": "^1.2.1", "debug": "^4.1.1", @@ -2713,8 +2741,6 @@ "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", "dev": true, - "optional": true, - "peer": true, "engines": { "node": ">=12.22" }, @@ -2727,9 +2753,7 @@ "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, - "optional": true, - "peer": true + "dev": true }, "node_modules/@jest/expect-utils": { "version": "29.5.0", @@ -3394,6 +3418,12 @@ "integrity": "sha512-FhpRzf927MNQdRZP0J5DLIdTXhjLYzeUTmLAu69mnVksLH9CJY3IuSeEgbKUki7GQZm0WqDkGzyxju2EZGD2wA==", "dev": true }, + "node_modules/@types/json-schema": { + "version": "7.0.12", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", + "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", + "dev": true + }, "node_modules/@types/json-stable-stringify": { "version": "1.0.34", "resolved": "https://registry.npmjs.org/@types/json-stable-stringify/-/json-stable-stringify-1.0.34.tgz", @@ -3498,6 +3528,12 @@ "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" }, + "node_modules/@types/semver": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz", + "integrity": "sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==", + "dev": true + }, "node_modules/@types/stack-utils": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", @@ -3528,6 +3564,196 @@ "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", "dev": true }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.3.0.tgz", + "integrity": "sha512-IZYjYZ0ifGSLZbwMqIip/nOamFiWJ9AH+T/GYNZBWkVcyNQOFGtSMoWV7RvY4poYCMZ/4lHzNl796WOSNxmk8A==", + "dev": true, + "dependencies": { + "@eslint-community/regexpp": "^4.5.1", + "@typescript-eslint/scope-manager": "6.3.0", + "@typescript-eslint/type-utils": "6.3.0", + "@typescript-eslint/utils": "6.3.0", + "@typescript-eslint/visitor-keys": "6.3.0", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.4", + "natural-compare": "^1.4.0", + "natural-compare-lite": "^1.4.0", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.3.0.tgz", + "integrity": "sha512-ibP+y2Gr6p0qsUkhs7InMdXrwldjxZw66wpcQq9/PzAroM45wdwyu81T+7RibNCh8oc0AgrsyCwJByncY0Ongg==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "6.3.0", + "@typescript-eslint/types": "6.3.0", + "@typescript-eslint/typescript-estree": "6.3.0", + "@typescript-eslint/visitor-keys": "6.3.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.3.0.tgz", + "integrity": "sha512-WlNFgBEuGu74ahrXzgefiz/QlVb+qg8KDTpknKwR7hMH+lQygWyx0CQFoUmMn1zDkQjTBBIn75IxtWss77iBIQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "6.3.0", + "@typescript-eslint/visitor-keys": "6.3.0" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.3.0.tgz", + "integrity": "sha512-7Oj+1ox1T2Yc8PKpBvOKWhoI/4rWFd1j7FA/rPE0lbBPXTKjdbtC+7Ev0SeBjEKkIhKWVeZSP+mR7y1Db1CdfQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "6.3.0", + "@typescript-eslint/utils": "6.3.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.3.0.tgz", + "integrity": "sha512-K6TZOvfVyc7MO9j60MkRNWyFSf86IbOatTKGrpTQnzarDZPYPVy0oe3myTMq7VjhfsUAbNUW8I5s+2lZvtx1gg==", + "dev": true, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.3.0.tgz", + "integrity": "sha512-Xh4NVDaC4eYKY4O3QGPuQNp5NxBAlEvNQYOqJquR2MePNxO11E5K3t5x4M4Mx53IZvtpW+mBxIT0s274fLUocg==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "6.3.0", + "@typescript-eslint/visitor-keys": "6.3.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.3.0.tgz", + "integrity": "sha512-hLLg3BZE07XHnpzglNBG8P/IXq/ZVXraEbgY7FM0Cnc1ehM8RMdn9mat3LubJ3KBeYXXPxV1nugWbQPjGeJk6Q==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.12", + "@types/semver": "^7.5.0", + "@typescript-eslint/scope-manager": "6.3.0", + "@typescript-eslint/types": "6.3.0", + "@typescript-eslint/typescript-estree": "6.3.0", + "semver": "^7.5.4" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.3.0.tgz", + "integrity": "sha512-kEhRRj7HnvaSjux1J9+7dBen15CdWmDnwrpyiHsFX6Qx2iW5LOBUgNefOFeh2PjWPlNwN8TOn6+4eBU3J/gupw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "6.3.0", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, "node_modules/@vitejs/plugin-basic-ssl": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@vitejs/plugin-basic-ssl/-/plugin-basic-ssl-1.0.1.tgz", @@ -3770,8 +3996,6 @@ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, - "optional": true, - "peer": true, "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } @@ -3817,8 +4041,6 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, - "optional": true, - "peer": true, "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -3887,6 +4109,38 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", + "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "is-array-buffer": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-includes": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", + "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.3", + "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", @@ -3896,6 +4150,75 @@ "node": ">=8" } }, + "node_modules/array.prototype.flat": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", + "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", + "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.tosorted": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz", + "integrity": "sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0", + "get-intrinsic": "^1.1.3" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.1.tgz", + "integrity": "sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "get-intrinsic": "^1.2.1", + "is-array-buffer": "^3.0.2", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/asap": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", @@ -3961,6 +4284,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/axios": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/axios/-/axios-1.4.0.tgz", @@ -4218,6 +4553,19 @@ "node": ">=8" } }, + "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", @@ -4639,8 +4987,6 @@ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, - "optional": true, - "peer": true, "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -4815,9 +5161,7 @@ "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, - "optional": true, - "peer": true + "dev": true }, "node_modules/deepmerge": { "version": "2.2.1", @@ -4847,6 +5191,22 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/define-properties": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", + "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", + "dev": true, + "dependencies": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -4916,8 +5276,6 @@ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, - "optional": true, - "peer": true, "dependencies": { "esutils": "^2.0.2" }, @@ -5010,10 +5368,103 @@ "is-arrayish": "^0.2.1" } }, - "node_modules/esbuild": { - "version": "0.18.15", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.15.tgz", - "integrity": "sha512-3WOOLhrvuTGPRzQPU6waSDWrDTnQriia72McWcn6UCi43GhCHrXH4S59hKMeez+IITmdUuUyvbU9JIp+t3xlPQ==", + "node_modules/es-abstract": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.1.tgz", + "integrity": "sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "arraybuffer.prototype.slice": "^1.0.1", + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-set-tostringtag": "^2.0.1", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.2.1", + "get-symbol-description": "^1.0.0", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.5", + "is-array-buffer": "^3.0.2", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.10", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.3", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.0", + "safe-array-concat": "^1.0.0", + "safe-regex-test": "^1.0.0", + "string.prototype.trim": "^1.2.7", + "string.prototype.trimend": "^1.0.6", + "string.prototype.trimstart": "^1.0.6", + "typed-array-buffer": "^1.0.0", + "typed-array-byte-length": "^1.0.0", + "typed-array-byte-offset": "^1.0.0", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", + "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3", + "has": "^1.0.3", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", + "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + } + }, + "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.18.15", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.15.tgz", + "integrity": "sha512-3WOOLhrvuTGPRzQPU6waSDWrDTnQriia72McWcn6UCi43GhCHrXH4S59hKMeez+IITmdUuUyvbU9JIp+t3xlPQ==", "dev": true, "hasInstallScript": true, "bin": { @@ -5089,51 +5540,47 @@ } }, "node_modules/eslint": { - "version": "8.33.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.33.0.tgz", - "integrity": "sha512-WjOpFQgKK8VrCnAtl8We0SUOy/oVZ5NHykyMiagV1M9r8IFpIJX7DduK6n1mpfhlG7T1NLWm2SuD8QB7KFySaA==", + "version": "8.46.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.46.0.tgz", + "integrity": "sha512-cIO74PvbW0qU8e0mIvk5IV3ToWdCq5FYG6gWPHHkx6gNdjlbAYvtfHmlCMXxjcoVaIdwy/IAt3+mDkZkfvb2Dg==", "dev": true, - "optional": true, - "peer": true, "dependencies": { - "@eslint/eslintrc": "^1.4.1", - "@humanwhocodes/config-array": "^0.11.8", + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.1", + "@eslint/js": "^8.46.0", + "@humanwhocodes/config-array": "^0.11.10", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", - "ajv": "^6.10.0", + "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", "debug": "^4.3.2", "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.1", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.4.0", - "esquery": "^1.4.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.2", + "espree": "^9.6.1", + "esquery": "^1.4.2", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", "find-up": "^5.0.0", "glob-parent": "^6.0.2", "globals": "^13.19.0", - "grapheme-splitter": "^1.0.4", + "graphemer": "^1.4.0", "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", + "optionator": "^0.9.3", "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", "text-table": "^0.2.0" }, "bin": { @@ -5146,59 +5593,97 @@ "url": "https://opencollective.com/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-config-prettier": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.0.0.tgz", + "integrity": "sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==", + "dev": true, + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-plugin-react": { + "version": "7.33.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.33.1.tgz", + "integrity": "sha512-L093k0WAMvr6VhNwReB8VgOq5s2LesZmrpPdKz/kZElQDzqS7G7+DnKoqT+w4JwuiGeAhAvHO0fvy0Eyk4ejDA==", "dev": true, - "optional": true, - "peer": true, "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" + "array-includes": "^3.1.6", + "array.prototype.flatmap": "^1.3.1", + "array.prototype.tosorted": "^1.1.1", + "doctrine": "^2.1.0", + "estraverse": "^5.3.0", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.6", + "object.fromentries": "^2.0.6", + "object.hasown": "^1.1.2", + "object.values": "^1.1.6", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.4", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.8" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" } }, - "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==", + "node_modules/eslint-plugin-react/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, - "optional": true, - "peer": true, "dependencies": { - "eslint-visitor-keys": "^2.0.0" + "esutils": "^2.0.2" }, "engines": { - "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-react/node_modules/resolve": { + "version": "2.0.0-next.4", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", + "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", + "dev": true, + "dependencies": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" + "bin": { + "resolve": "bin/resolve" }, - "peerDependencies": { - "eslint": ">=5" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "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==", + "node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", "dev": true, - "optional": true, - "peer": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, "engines": { - "node": ">=10" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/eslint-visitor-keys": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", - "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==", + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.2.tgz", + "integrity": "sha512-8drBzUEyZ2llkpCA67iYrgEssKDUu68V8ChqqOfFupIaG/LCVPUT+CoGJpT77zJprs4T/W7p07LP7zAIMuweVw==", "dev": true, - "optional": true, - "peer": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, @@ -5211,8 +5696,6 @@ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, - "optional": true, - "peer": true, "engines": { "node": ">=10" }, @@ -5225,8 +5708,6 @@ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, - "optional": true, - "peer": true, "dependencies": { "is-glob": "^4.0.3" }, @@ -5239,8 +5720,6 @@ "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", "dev": true, - "optional": true, - "peer": true, "dependencies": { "type-fest": "^0.20.2" }, @@ -5256,8 +5735,6 @@ "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, - "optional": true, - "peer": true, "engines": { "node": ">=10" }, @@ -5266,16 +5743,14 @@ } }, "node_modules/espree": { - "version": "9.4.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", - "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dev": true, - "optional": true, - "peer": true, "dependencies": { - "acorn": "^8.8.0", + "acorn": "^8.9.0", "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.3.0" + "eslint-visitor-keys": "^3.4.1" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -5300,12 +5775,10 @@ } }, "node_modules/esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", "dev": true, - "optional": true, - "peer": true, "dependencies": { "estraverse": "^5.1.0" }, @@ -5318,8 +5791,6 @@ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, - "optional": true, - "peer": true, "dependencies": { "estraverse": "^5.2.0" }, @@ -5332,8 +5803,6 @@ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, - "optional": true, - "peer": true, "engines": { "node": ">=4.0" } @@ -5343,8 +5812,6 @@ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, - "optional": true, - "peer": true, "engines": { "node": ">=0.10.0" } @@ -5395,9 +5862,7 @@ "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, - "optional": true, - "peer": true + "dev": true }, "node_modules/fast-glob": { "version": "3.2.12", @@ -5419,17 +5884,13 @@ "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, - "optional": true, - "peer": true + "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, - "optional": true, - "peer": true + "dev": true }, "node_modules/fastq": { "version": "1.15.0", @@ -5490,8 +5951,6 @@ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, - "optional": true, - "peer": true, "dependencies": { "flat-cache": "^3.0.4" }, @@ -5521,8 +5980,6 @@ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, - "optional": true, - "peer": true, "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -5547,8 +6004,6 @@ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", "dev": true, - "optional": true, - "peer": true, "dependencies": { "flatted": "^3.1.0", "rimraf": "^3.0.2" @@ -5561,9 +6016,7 @@ "version": "3.2.7", "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", - "dev": true, - "optional": true, - "peer": true + "dev": true }, "node_modules/follow-redirects": { "version": "1.15.2", @@ -5584,6 +6037,15 @@ } } }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.3" + } + }, "node_modules/form-data": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", @@ -5659,6 +6121,33 @@ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, + "node_modules/function.prototype.name": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", + "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -5686,6 +6175,37 @@ "node": "*" } }, + "node_modules/get-intrinsic": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", @@ -5727,6 +6247,21 @@ "node": ">=4" } }, + "node_modules/globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/globby": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", @@ -5753,19 +6288,29 @@ "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", "dev": true }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "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, - "optional": true, - "peer": true + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true }, "node_modules/graphql": { "version": "16.7.1", @@ -5914,6 +6459,15 @@ "node": ">= 0.4.0" } }, + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -5922,6 +6476,57 @@ "node": ">=8" } }, + "node_modules/has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/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, + "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/header-case": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/header-case/-/header-case-2.0.4.tgz", @@ -6118,8 +6723,6 @@ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, - "optional": true, - "peer": true, "engines": { "node": ">=0.8.19" } @@ -6174,6 +6777,20 @@ "node": ">=12.0.0" } }, + "node_modules/internal-slot": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", + "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/invariant": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", @@ -6196,11 +6813,37 @@ "node": ">=0.10.0" } }, + "node_modules/is-array-buffer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", + "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "is-typed-array": "^1.1.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" }, + "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", @@ -6213,6 +6856,34 @@ "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.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-core-module": { "version": "2.12.1", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", @@ -6224,6 +6895,21 @@ "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-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -6272,6 +6958,18 @@ "tslib": "^2.0.3" } }, + "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", @@ -6281,13 +6979,26 @@ "node": ">=0.12.0" } }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-path-inside": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", "dev": true, - "optional": true, - "peer": true, "engines": { "node": ">=8" } @@ -6308,6 +7019,22 @@ "optional": true, "peer": true }, + "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-relative": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", @@ -6320,6 +7047,63 @@ "node": ">=0.10.0" } }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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-typed-array": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", + "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", + "dev": true, + "dependencies": { + "which-typed-array": "^1.1.11" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-unc-path": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", @@ -6353,6 +7137,18 @@ "tslib": "^2.0.3" } }, + "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-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", @@ -6362,13 +7158,17 @@ "node": ">=0.10.0" } }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true, - "optional": true, - "peer": true + "dev": true }, "node_modules/isomorphic-fetch": { "version": "3.0.0", @@ -6460,21 +7260,9 @@ "ci-info": "^3.2.0", "graceful-fs": "^4.2.9", "picomatch": "^2.2.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.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, - "optional": true, - "peer": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/js-sdsl" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/js-tokens": { @@ -6659,9 +7447,7 @@ "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, - "optional": true, - "peer": true + "dev": true }, "node_modules/json-stable-stringify": { "version": "1.0.2", @@ -6679,9 +7465,7 @@ "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, - "optional": true, - "peer": true + "dev": true }, "node_modules/json-to-pretty-yaml": { "version": "1.2.2", @@ -6756,6 +7540,21 @@ "npm": ">=6" } }, + "node_modules/jsx-ast-utils": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" + }, + "engines": { + "node": ">=4.0" + } + }, "node_modules/jwa": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", @@ -6787,8 +7586,6 @@ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, - "optional": true, - "peer": true, "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" @@ -6846,8 +7643,6 @@ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, - "optional": true, - "peer": true, "dependencies": { "p-locate": "^5.0.0" }, @@ -6878,9 +7673,7 @@ "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, - "optional": true, - "peer": true + "dev": true }, "node_modules/lodash.pick": { "version": "4.4.0", @@ -7176,9 +7969,13 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true, - "optional": true, - "peer": true + "dev": true + }, + "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==", + "dev": true }, "node_modules/no-case": { "version": "3.0.4", @@ -7286,6 +8083,103 @@ "node": ">=0.10.0" } }, + "node_modules/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, + "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.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.entries": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz", + "integrity": "sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz", + "integrity": "sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.hasown": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.2.tgz", + "integrity": "sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.values": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", + "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -7324,8 +8218,6 @@ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", "dev": true, - "optional": true, - "peer": true, "dependencies": { "@aashutoshrathi/word-wrap": "^1.2.3", "deep-is": "^0.1.3", @@ -7390,8 +8282,6 @@ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, - "optional": true, - "peer": true, "dependencies": { "p-limit": "^3.0.2" }, @@ -7644,8 +8534,6 @@ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, - "optional": true, - "peer": true, "engines": { "node": ">= 0.8.0" } @@ -7738,8 +8626,6 @@ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", "dev": true, - "optional": true, - "peer": true, "engines": { "node": ">=6" } @@ -7962,18 +8848,21 @@ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" }, - "node_modules/regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "node_modules/regexp.prototype.flags": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz", + "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==", "dev": true, - "optional": true, - "peer": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "functions-have-names": "^1.2.3" + }, "engines": { - "node": ">=8" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/mysticatea" + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/relay-runtime": { @@ -8111,8 +9000,6 @@ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, - "optional": true, - "peer": true, "dependencies": { "glob": "^7.1.3" }, @@ -8180,6 +9067,24 @@ "tslib": "^2.1.0" } }, + "node_modules/safe-array-concat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.0.tgz", + "integrity": "sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -8199,6 +9104,20 @@ } ] }, + "node_modules/safe-regex-test": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", + "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -8294,8 +9213,6 @@ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, - "optional": true, - "peer": true, "dependencies": { "shebang-regex": "^3.0.0" }, @@ -8308,8 +9225,6 @@ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, - "optional": true, - "peer": true, "engines": { "node": ">=8" } @@ -8323,6 +9238,20 @@ "url": "https://github.com/sponsors/ljharb" } }, + "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/siginfo": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", @@ -8523,6 +9452,70 @@ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, + "node_modules/string.prototype.matchall": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz", + "integrity": "sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "regexp.prototype.flags": "^1.4.3", + "side-channel": "^1.0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz", + "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", + "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", + "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "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", @@ -8540,8 +9533,6 @@ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, - "optional": true, - "peer": true, "engines": { "node": ">=8" }, @@ -8645,9 +9636,7 @@ "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, - "optional": true, - "peer": true + "dev": true }, "node_modules/through": { "version": "2.3.8", @@ -8774,6 +9763,18 @@ "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", "dev": true }, + "node_modules/ts-api-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.1.tgz", + "integrity": "sha512-lC/RGlPmwdrIBFTX59wwNzqh7aR2otPNPR/5brHZm/XKFYKsfqxihXUe9pU3JI+3vGkl+vyCoNNnPhJn3aLK1A==", + "dev": true, + "engines": { + "node": ">=16.13.0" + }, + "peerDependencies": { + "typescript": ">=4.2.0" + } + }, "node_modules/ts-invariant": { "version": "0.10.3", "resolved": "https://registry.npmjs.org/ts-invariant/-/ts-invariant-0.10.3.tgz", @@ -8884,8 +9885,6 @@ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, - "optional": true, - "peer": true, "dependencies": { "prelude-ls": "^1.2.1" }, @@ -8914,6 +9913,71 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/typed-array-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", + "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", + "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", + "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", + "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", @@ -8957,6 +10021,21 @@ "integrity": "sha512-TrY6DsjTQQgyS3E3dBaOXf0TpPD8u9FVrVYmKVegJuFw51n/YB9XPt+U6ydzFG5ZIN7+DIjPbNmXoBj9esYhgQ==", "dev": true }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/unc-path-regex": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", @@ -9052,8 +10131,6 @@ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, - "optional": true, - "peer": true, "dependencies": { "punycode": "^2.1.0" } @@ -9529,8 +10606,6 @@ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, - "optional": true, - "peer": true, "dependencies": { "isexe": "^2.0.0" }, @@ -9541,12 +10616,47 @@ "node": ">= 8" } }, + "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/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==", "dev": true }, + "node_modules/which-typed-array": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", + "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/why-is-node-running": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.2.2.tgz", diff --git a/package.json b/package.json index b5e03f82..8d18baa1 100644 --- a/package.json +++ b/package.json @@ -40,13 +40,13 @@ "test": "vitest", "codegen": "graphql-codegen", "format": "prettier --write .", - "format:check": "prettier --check .", + "check:format": "prettier --check .", "tsc": "tsc", "prepare": "husky install", "check:audit": "check-audit", "audit:resolve": "resolve-audit", - "check:lint": "eslint src --ext .ts", - "lint:fix": "eslint --fix src --ext .ts" + "check:lint": "eslint src", + "lint:fix": "eslint --fix src" }, "devDependencies": { "@graphql-codegen/cli": "2.16.5", @@ -64,6 +64,8 @@ "@types/react": "18.2.15", "@types/react-dom": "18.2.7", "@types/react-router-dom": "5.3.3", + "@typescript-eslint/eslint-plugin": "6.3.0", + "@typescript-eslint/parser": "6.3.0", "@vitejs/plugin-basic-ssl": "1.0.1", "@vitejs/plugin-react": "4.0.3", "husky": "8.0.3", @@ -72,7 +74,10 @@ "vite": "4.4.4", "vite-plugin-checker": "0.6.1", "vite-tsconfig-paths": "4.2.0", - "vitest": "0.33.0" + "vitest": "0.33.0", + "eslint": "8.46.0", + "eslint-config-prettier": "9.0.0", + "eslint-plugin-react": "7.33.1" }, "overrides": { "semver": "7.5.4", @@ -86,7 +91,8 @@ ], "lint-staged": { "*.{ts,tsx}": [ - "prettier --write" + "prettier --write", + "eslint" ] } } diff --git a/src/App.tsx b/src/App.tsx index 4ea76d98..158426b3 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,4 +1,4 @@ -import React, { useState } from "react"; +import { useState } from "react"; import { Redirect, Route, Switch } from "react-router-dom"; diff --git a/src/auth/components/AdvertiserAgreed.tsx b/src/auth/components/AdvertiserAgreed.tsx index 1b6b448c..2848e633 100644 --- a/src/auth/components/AdvertiserAgreed.tsx +++ b/src/auth/components/AdvertiserAgreed.tsx @@ -1,4 +1,4 @@ -import React, { useState } from "react"; +import { ChangeEvent, useState } from "react"; import Typography from "@mui/material/Typography"; import { Card, @@ -26,7 +26,7 @@ export function AdvertiserAgreed() { terms: false, }); - const handleAgreed = (event: React.ChangeEvent) => { + const handleAgreed = (event: ChangeEvent) => { setAgreed({ ...agreed, [event.target.name]: event.target.checked, diff --git a/src/auth/context/auth.interface.ts b/src/auth/context/auth.interface.ts index 689c8e74..5b76cd39 100644 --- a/src/auth/context/auth.interface.ts +++ b/src/auth/context/auth.interface.ts @@ -1,4 +1,4 @@ -import React from "react"; +import { ReactNode } from "react"; import { ResponseUser } from "../lib"; import { PaymentType } from "graphql/types"; @@ -25,5 +25,5 @@ export interface IAuthState { } export interface IAuthProviderProps { - children?: React.ReactNode; + children?: ReactNode; } diff --git a/src/auth/hooks/queries/useAdvertiser.ts b/src/auth/hooks/queries/useAdvertiser.ts index 965a6fe7..fa2330f9 100644 --- a/src/auth/hooks/queries/useAdvertiser.ts +++ b/src/auth/hooks/queries/useAdvertiser.ts @@ -21,7 +21,7 @@ export function useAdvertiser(): { const active = window.localStorage.getItem("activeAdvertiser") ?? ""; const activeAdvertiser = advertisers.find((a) => a.id === active); return { - advertiser: !!activeAdvertiser ? activeAdvertiser : defaultAdvertiser, + advertiser: activeAdvertiser ? activeAdvertiser : defaultAdvertiser, advertisers, }; } diff --git a/src/auth/index.tsx b/src/auth/index.tsx index 518ddb72..ca90789a 100644 --- a/src/auth/index.tsx +++ b/src/auth/index.tsx @@ -1,4 +1,4 @@ -import React, { useEffect, useState } from "react"; +import { useEffect, useState } from "react"; import { IAdvertiser, IAuthProviderProps, @@ -9,9 +9,7 @@ import { getUser, ResponseUser } from "./lib"; import _ from "lodash"; import { setActiveAdvertiser } from "./util"; -export const IAuthProvider: React.FC = ({ - children, -}: IAuthProviderProps) => { +export const IAuthProvider = ({ children }: IAuthProviderProps) => { const [state, setState] = useState(initialState); const [loading, setLoading] = useState(false); diff --git a/src/auth/registration/AddressField.tsx b/src/auth/registration/AddressField.tsx index 65e6b4e3..6bea8c2b 100644 --- a/src/auth/registration/AddressField.tsx +++ b/src/auth/registration/AddressField.tsx @@ -1,13 +1,12 @@ import { Box, Divider, Stack, Typography } from "@mui/material"; import { FormikTextField } from "form/FormikHelpers"; -import React from "react"; import { CountryPicker } from "components/Country/CountryPicker"; export function AddressField() { return ( - Second (and last!) we'll need info on your business. Once you are + Second (and last!) we’ll need info on your business. Once you are finished here, your account setup is complete. diff --git a/src/auth/registration/AdvertiserRegistered.tsx b/src/auth/registration/AdvertiserRegistered.tsx index 2f16b861..634e6736 100644 --- a/src/auth/registration/AdvertiserRegistered.tsx +++ b/src/auth/registration/AdvertiserRegistered.tsx @@ -1,7 +1,4 @@ -import React from "react"; import { Link, Stack, Typography } from "@mui/material"; -import CancelOutlinedIcon from "@mui/icons-material/CancelOutlined"; -import VerifiedIcon from "@mui/icons-material/Verified"; interface Props { error?: string; @@ -9,8 +6,8 @@ interface Props { export function AdvertiserRegistered({ error }: Props) { return ( - - {!!error ? ( + <> + {error ? ( We encountered a problem creating your account. @@ -52,6 +49,6 @@ export function AdvertiserRegistered({ error }: Props) { )} - + ); } diff --git a/src/auth/registration/NameField.tsx b/src/auth/registration/NameField.tsx index cc9208e5..b500af85 100644 --- a/src/auth/registration/NameField.tsx +++ b/src/auth/registration/NameField.tsx @@ -1,13 +1,12 @@ -import { Box, Divider, Stack, Typography } from "@mui/material"; +import { Box, Divider, Typography } from "@mui/material"; import { FormikTextField } from "form/FormikHelpers"; -import React from "react"; export function NameField() { return ( - Thank you for choosing Brave's Ads Platform! Let's get you setup with - your account. First, we'll need your info. + Thank you for choosing Brave’s Ads Platform! Let’s get you + setup with your account. First, we’ll need your info. diff --git a/src/auth/registration/Register.tsx b/src/auth/registration/Register.tsx index 90eff764..03c0fc71 100644 --- a/src/auth/registration/Register.tsx +++ b/src/auth/registration/Register.tsx @@ -1,6 +1,6 @@ import { AuthContainer } from "auth/views/components/AuthContainer"; import { Form, Formik } from "formik"; -import React, { useState } from "react"; +import { useState } from "react"; import { RegistrationSchema } from "validation/RegistrationSchema"; import { initialValues, RegistrationForm } from "auth/registration/types"; import { NameField } from "auth/registration/NameField"; @@ -29,7 +29,7 @@ export function Register() { const steps = [ { label: "Your information", component: }, - { label: "Your business's information", component: }, + { label: "Your business’s information", component: }, ]; return ( diff --git a/src/auth/views/AuthVerify.tsx b/src/auth/views/AuthVerify.tsx index 29f1222a..a4b56e39 100644 --- a/src/auth/views/AuthVerify.tsx +++ b/src/auth/views/AuthVerify.tsx @@ -1,6 +1,5 @@ import { AuthContainer } from "auth/views/components/AuthContainer"; import { useAuthorize } from "auth/hooks/queries/useAuthorize"; -import React from "react"; import { Link as RouterLink, useHistory } from "react-router-dom"; import { CircularProgress, Link, Stack, Typography } from "@mui/material"; import VerifiedIcon from "@mui/icons-material/Verified"; diff --git a/src/auth/views/LandingPage.tsx b/src/auth/views/LandingPage.tsx index 18dbb82b..dee3e3bf 100644 --- a/src/auth/views/LandingPage.tsx +++ b/src/auth/views/LandingPage.tsx @@ -1,6 +1,5 @@ import { Background } from "components/Background/Background"; import { LandingPageAppBar } from "components/AppBar/LandingPageAppBar"; -import React from "react"; import { Box, Button, Stack, Typography } from "@mui/material"; import goals from "../../../images.svg"; import { useIsAuthenticated } from "auth/hooks/queries/useIsAuthenticated"; diff --git a/src/auth/views/Login.tsx b/src/auth/views/Login.tsx index 63b8da9b..8450b22b 100644 --- a/src/auth/views/Login.tsx +++ b/src/auth/views/Login.tsx @@ -1,6 +1,6 @@ import { Alert, Link, TextField, Typography } from "@mui/material"; import { LoadingButton } from "@mui/lab"; -import React, { useState } from "react"; +import { useState } from "react"; import { Link as RouterLink, useHistory } from "react-router-dom"; import { useSignIn } from "auth/hooks/mutations/useSignIn"; import { AuthContainer } from "auth/views/components/AuthContainer"; diff --git a/src/auth/views/MagicLink.tsx b/src/auth/views/MagicLink.tsx index 500edd2c..c8cabdb3 100644 --- a/src/auth/views/MagicLink.tsx +++ b/src/auth/views/MagicLink.tsx @@ -1,4 +1,4 @@ -import React, { useState } from "react"; +import { useState } from "react"; import { Link, Stack, TextField, Typography } from "@mui/material"; import { Link as RouterLink } from "react-router-dom"; @@ -28,7 +28,7 @@ export function MagicLink() { - Don't see the email? Check your spam folder or + Don’t see the email? Check your spam folder or { window.location.replace(url); }) - .catch((e) => { + .catch(() => { alert("Unable to create payment session. Please try again."); setLoading(false); history.push(`/user/main/adsmanager/advanced/${campaignId}/settings`); diff --git a/src/components/AppBar/LandingPageAppBar.tsx b/src/components/AppBar/LandingPageAppBar.tsx index de64e338..207919ad 100644 --- a/src/components/AppBar/LandingPageAppBar.tsx +++ b/src/components/AppBar/LandingPageAppBar.tsx @@ -1,5 +1,3 @@ -import * as React from "react"; - import { AppBar, Box, diff --git a/src/components/Box/BoxContainer.tsx b/src/components/Box/BoxContainer.tsx index 8983f85a..4b152a48 100644 --- a/src/components/Box/BoxContainer.tsx +++ b/src/components/Box/BoxContainer.tsx @@ -1,8 +1,8 @@ -import React, { PropsWithChildren } from "react"; +import { PropsWithChildren, ReactNode } from "react"; import { Box, Typography } from "@mui/material"; export function BoxContainer( - props: { header?: React.ReactNode } & PropsWithChildren, + props: { header?: ReactNode } & PropsWithChildren, ) { return ( diff --git a/src/components/Button/DashboardButton.tsx b/src/components/Button/DashboardButton.tsx index 0f177d72..946480d4 100644 --- a/src/components/Button/DashboardButton.tsx +++ b/src/components/Button/DashboardButton.tsx @@ -1,6 +1,5 @@ import { Button } from "@mui/material"; import ArrowBack from "@mui/icons-material/ArrowBack"; -import React from "react"; import { useHistory } from "react-router-dom"; export function DashboardButton() { diff --git a/src/components/Button/DashboardIconButton.tsx b/src/components/Button/DashboardIconButton.tsx index 9d749851..7a17145d 100644 --- a/src/components/Button/DashboardIconButton.tsx +++ b/src/components/Button/DashboardIconButton.tsx @@ -1,6 +1,5 @@ import { IconButton, Tooltip } from "@mui/material"; import ArrowBack from "@mui/icons-material/ArrowBack"; -import React from "react"; import { useHistory } from "react-router-dom"; export function DashboardIconButton() { diff --git a/src/components/Campaigns/CampaignAgeFilter.tsx b/src/components/Campaigns/CampaignAgeFilter.tsx index 71dd9ba5..49d691e5 100644 --- a/src/components/Campaigns/CampaignAgeFilter.tsx +++ b/src/components/Campaigns/CampaignAgeFilter.tsx @@ -1,7 +1,7 @@ import { FormControlLabel, Switch, Typography } from "@mui/material"; import _ from "lodash"; import moment from "moment"; -import React, { Dispatch } from "react"; +import { Dispatch } from "react"; interface Props { fromDate: Date | null; @@ -9,11 +9,7 @@ interface Props { disabled?: boolean; } -export const CampaignAgeFilter: React.FC = ({ - fromDate, - onChange, - disabled, -}) => { +export const CampaignAgeFilter = ({ fromDate, onChange, disabled }: Props) => { const onOldCampaignToggle = (showOld: boolean) => { onChange( showOld ? null : moment().subtract(6, "month").startOf("day").toDate(), diff --git a/src/components/Campaigns/CampaignDateRange.tsx b/src/components/Campaigns/CampaignDateRange.tsx index 0f2e58e6..18562fee 100644 --- a/src/components/Campaigns/CampaignDateRange.tsx +++ b/src/components/Campaigns/CampaignDateRange.tsx @@ -3,13 +3,11 @@ import ArrowForwardIcon from "@mui/icons-material/ArrowForward"; import { formatISO, parseISO } from "date-fns"; import { useField } from "formik"; -import React, { useState } from "react"; +import { useState } from "react"; import { getDefaultTimezone, TimeZonePicker } from "../TimeZonePicker"; import { TimezoneAwareDatePicker } from "../TimeZonePicker/TimezoneAwareDatePicker"; -export const CampaignDateRange: React.FC<{ isEdit: boolean }> = ({ - isEdit, -}) => { +export const CampaignDateRange = ({ isEdit }: { isEdit: boolean }) => { const [tz, setTz] = useState(getDefaultTimezone()); const [, startMeta, startHelper] = useField("startAt"); const [, endMeta, endHelper] = useField("endAt"); diff --git a/src/components/Campaigns/Status.tsx b/src/components/Campaigns/Status.tsx index 28efbcdd..c8dd1065 100644 --- a/src/components/Campaigns/Status.tsx +++ b/src/components/Campaigns/Status.tsx @@ -1,14 +1,15 @@ import { Chip, Tooltip } from "@mui/material"; -import React from "react"; import { calcColorForState } from "./stateColors"; import _ from "lodash"; import { isAfterEndDate, isBeforeStartDate } from "util/isAfterEndDate"; -export const Status: React.FC<{ +interface Props { state: string; start?: string; end?: string; -}> = ({ state, start, end }) => { +} + +export const Status = ({ state, start, end }: Props) => { let color = calcColorForState(state); let label = _.startCase(state); diff --git a/src/components/Card/CardContainer.tsx b/src/components/Card/CardContainer.tsx index 8e3e40f9..31dd92b4 100644 --- a/src/components/Card/CardContainer.tsx +++ b/src/components/Card/CardContainer.tsx @@ -1,11 +1,11 @@ -import React, { PropsWithChildren } from "react"; +import { PropsWithChildren, ReactNode } from "react"; import { Box, Card, CardContent, Stack, Typography } from "@mui/material"; import { SxProps } from "@mui/system"; export function CardContainer( props: { header?: string; - additionalAction?: React.ReactNode; + additionalAction?: ReactNode; sx?: SxProps; } & PropsWithChildren, ) { diff --git a/src/components/Card/PaddedCardContainer.tsx b/src/components/Card/PaddedCardContainer.tsx index b4db7e6e..811943ac 100644 --- a/src/components/Card/PaddedCardContainer.tsx +++ b/src/components/Card/PaddedCardContainer.tsx @@ -1,5 +1,5 @@ import { Card, CardContent } from "@mui/material"; -import React, { PropsWithChildren } from "react"; +import { PropsWithChildren } from "react"; export function PaddedCardContainer({ children }: PropsWithChildren) { return ( diff --git a/src/components/Collapse/CollapseBox.tsx b/src/components/Collapse/CollapseBox.tsx index 1fe90905..88f7b53c 100644 --- a/src/components/Collapse/CollapseBox.tsx +++ b/src/components/Collapse/CollapseBox.tsx @@ -6,15 +6,13 @@ import { Typography, } from "@mui/material"; import ExpandMoreIcon from "@mui/icons-material/ExpandMore"; -import React, { PropsWithChildren, useState } from "react"; +import { PropsWithChildren } from "react"; interface Props { header: string; } export function CollapseBox({ header, children }: Props & PropsWithChildren) { - const [open, setOpen] = useState(false); - return ( diff --git a/src/components/Conversion/ConversionDisplay.tsx b/src/components/Conversion/ConversionDisplay.tsx index 15f68db7..a3500347 100644 --- a/src/components/Conversion/ConversionDisplay.tsx +++ b/src/components/Conversion/ConversionDisplay.tsx @@ -1,5 +1,4 @@ import { Conversion } from "user/views/adsManager/types"; -import React from "react"; import { FormikErrors } from "formik"; import { ReviewField } from "user/views/adsManager/views/advanced/components/review/components/ReviewField"; import _ from "lodash"; @@ -36,7 +35,7 @@ export function ConversionDisplay({ conversions, convErrors }: Props) { return ( <> {conversions.map((c, idx) => ( - +
- +
))} ); diff --git a/src/components/Conversion/ConversionFields.tsx b/src/components/Conversion/ConversionFields.tsx index d227d38a..e51ace28 100644 --- a/src/components/Conversion/ConversionFields.tsx +++ b/src/components/Conversion/ConversionFields.tsx @@ -1,12 +1,11 @@ import { Box } from "@mui/material"; import { FormikRadioControl, FormikTextField } from "form/FormikHelpers"; -import React from "react"; interface Props { name: string; } -export const ConversionFields: React.FC = ({ name }: Props) => { +export const ConversionFields = ({ name }: Props) => { return ( <> = ({ name }: Props) => { { value: "postclick", label: "Post-Click" }, ]} helperText={ - + <> Post-View: Viewed Ad and converted by visiting site on their own.{" "}
Post-Click: Viewed Ad and converted by clicking its link -
+ } /> diff --git a/src/components/Country/CountryPicker.tsx b/src/components/Country/CountryPicker.tsx index d843b594..f24a94a6 100644 --- a/src/components/Country/CountryPicker.tsx +++ b/src/components/Country/CountryPicker.tsx @@ -1,13 +1,12 @@ import { Autocomplete, Box, FormLabel, TextField } from "@mui/material"; import { useField } from "formik"; -import React from "react"; import { useCountries } from "components/Country/useCountries"; interface Props { name: string; } -export const CountryPicker: React.FC = ({ name }) => { +export const CountryPicker = ({ name }: Props) => { const { data } = useCountries(); const [formProps, meta, helper] = useField(name); diff --git a/src/components/Date/DateRangePicker.tsx b/src/components/Date/DateRangePicker.tsx index 3c2763aa..37a19a0d 100644 --- a/src/components/Date/DateRangePicker.tsx +++ b/src/components/Date/DateRangePicker.tsx @@ -10,12 +10,12 @@ interface Props { onToChange: Dispatch; } -export const DateRangePicker: React.FC = ({ +export const DateRangePicker = ({ from, to, onFromChange, onToChange, -}) => { +}: Props) => { return ( diff --git a/src/components/Drawer/MiniSideBar.tsx b/src/components/Drawer/MiniSideBar.tsx index d7fa51e4..a344573d 100644 --- a/src/components/Drawer/MiniSideBar.tsx +++ b/src/components/Drawer/MiniSideBar.tsx @@ -1,13 +1,10 @@ -import * as React from "react"; import Box from "@mui/material/Box"; import Toolbar from "@mui/material/Toolbar"; import Divider from "@mui/material/Divider"; import { - Button, Drawer, Link, List, - ListItem, ListItemButton, ListItemIcon, ListItemText, @@ -15,7 +12,7 @@ import { MenuItem, Typography, } from "@mui/material"; -import { PropsWithChildren, useState } from "react"; +import { PropsWithChildren, ReactNode, MouseEvent, useState } from "react"; import { Link as RouterLink, useRouteMatch } from "react-router-dom"; import CampaignOutlinedIcon from "@mui/icons-material/CampaignOutlined"; import AccountBalanceOutlinedIcon from "@mui/icons-material/AccountBalanceOutlined"; @@ -28,9 +25,9 @@ import PeopleOutlineOutlinedIcon from "@mui/icons-material/PeopleOutlineOutlined type RouteOption = { label: string; href: string; - icon: React.ReactNode; + icon: ReactNode; disabled?: boolean; - onClick?: (event: React.MouseEvent) => void; + onClick?: (event: MouseEvent) => void; }; const drawerWidth = 120; @@ -118,6 +115,7 @@ export default function MiniSideBar({ children }: PropsWithChildren) { {dashboardRoutes.map((dr) => ( {settingsRoutes.map((sr) => ( - + ))} @@ -166,7 +169,7 @@ export function SupportMenu() { const [anchorEl, setAnchorEl] = useState(null); const open = Boolean(anchorEl); - const handleClick = (event: React.MouseEvent) => { + const handleClick = (event: MouseEvent) => { setAnchorEl(event.currentTarget); }; diff --git a/src/components/EnhancedTable/EnhancedTable.tsx b/src/components/EnhancedTable/EnhancedTable.tsx index bd829b18..dd6716d8 100644 --- a/src/components/EnhancedTable/EnhancedTable.tsx +++ b/src/components/EnhancedTable/EnhancedTable.tsx @@ -15,7 +15,7 @@ import { TableRow, } from "@mui/material"; import _ from "lodash"; -import { ReactNode, useState } from "react"; +import { ChangeEvent, ReactNode, useState } from "react"; import { EnhancedTableHeader } from "./EnhancedTableHeader"; import { EnhancedTableRow } from "./EnhancedTableRow"; import { FilterInput } from "./FilterInput"; @@ -72,7 +72,7 @@ interface EnhancedTableProps { export interface ColumnAccessor extends Pick, "title" | "sx" | "align"> { sortable: boolean; - render: (r: T) => React.ReactNode; + render: (r: T) => ReactNode; getSortValue: (r: T) => string | number | undefined; matchesFilter: (r: T, filter: string) => boolean; } @@ -119,10 +119,7 @@ function mkColumnAccessor( }; } -const LoadingSkeleton: React.FC<{ cols: number; rows: number }> = ({ - cols, - rows, -}) => { +const LoadingSkeleton = ({ cols, rows }: { cols: number; rows: number }) => { return ( <> {_.times(rows, (idx) => ( @@ -163,13 +160,11 @@ export function EnhancedTable(props: EnhancedTableProps) { } }; - const handleChangePage = (event: unknown, newPage: number) => { + const handleChangePage = (_event: unknown, newPage: number) => { setPage(newPage); }; - const handleChangeRowsPerPage = ( - event: React.ChangeEvent, - ) => { + const handleChangeRowsPerPage = (event: ChangeEvent) => { setRowsPerPage(parseInt(event.target.value, 10)); setPage(0); }; diff --git a/src/components/EnhancedTable/FilterInput.tsx b/src/components/EnhancedTable/FilterInput.tsx index 0f106786..ca6c786e 100644 --- a/src/components/EnhancedTable/FilterInput.tsx +++ b/src/components/EnhancedTable/FilterInput.tsx @@ -8,7 +8,7 @@ interface Props { setFilter: (newValue: string) => void; } -export const FilterInput: React.FC = (props) => { +export const FilterInput = (props: Props) => { // to retain responsiveness of the form, whilst still not constantly re-filtering the list, // we keep our own state here that updates immediately, and debounce the updates to // the caller diff --git a/src/components/EnhancedTable/renderers.tsx b/src/components/EnhancedTable/renderers.tsx index 35bb89f1..cb10af4c 100644 --- a/src/components/EnhancedTable/renderers.tsx +++ b/src/components/EnhancedTable/renderers.tsx @@ -2,7 +2,7 @@ import { Box, Tooltip } from "@mui/material"; import _ from "lodash"; import { format, formatDistanceToNow, parseISO } from "date-fns"; import { CellValue } from "./EnhancedTable"; -import React, { ReactChild, ReactNode } from "react"; +import { ReactChild, ReactNode } from "react"; import { formatInTimeZone } from "date-fns-tz"; import enUS from "date-fns/locale/en-US"; import { @@ -20,7 +20,7 @@ import { AdDetails } from "user/ads/AdList"; import { displayFromCampaignState } from "util/displayState"; import { AdSetDetails } from "user/adSet/AdSetList"; -export type CellValueRenderer = (value: CellValue) => React.ReactNode; +export type CellValueRenderer = (value: CellValue) => ReactNode; const ADS_DEFAULT_TIMEZONE = "America/New_York"; const TOOLTIP_FORMAT = "E d LLL yyyy HH:mm:ss zzz"; diff --git a/src/components/Error/ErrorDetail.tsx b/src/components/Error/ErrorDetail.tsx index b79cffd3..8eccf9e9 100644 --- a/src/components/Error/ErrorDetail.tsx +++ b/src/components/Error/ErrorDetail.tsx @@ -9,14 +9,13 @@ import { Box, Typography, } from "@mui/material"; -import React from "react"; interface Props { error?: any; additionalDetails?: string; } -export const ErrorDetail: React.FC = ({ error, additionalDetails }) => { +export const ErrorDetail = ({ error, additionalDetails }: Props) => { if (!error) { return null; } diff --git a/src/components/Location/LocationPicker.tsx b/src/components/Location/LocationPicker.tsx index 656340b1..7062679f 100644 --- a/src/components/Location/LocationPicker.tsx +++ b/src/components/Location/LocationPicker.tsx @@ -4,13 +4,12 @@ import { Autocomplete, Checkbox, TextField } from "@mui/material"; import { useField } from "formik"; import _ from "lodash"; import { useActiveGeocodesQuery } from "graphql/common.generated"; -import React from "react"; import { GeocodeInput } from "graphql/types"; const icon = ; const checkedIcon = ; -export const LocationPicker: React.FC = () => { +export const LocationPicker = () => { const { data } = useActiveGeocodesQuery(); const sorted = _.sortBy(data?.activeGeocodes?.data ?? [], "name"); const [formProps, meta, helper] = useField("geoTargets"); diff --git a/src/components/Navigation/DraftMenu.tsx b/src/components/Navigation/DraftMenu.tsx index 226d27d5..929f64ac 100644 --- a/src/components/Navigation/DraftMenu.tsx +++ b/src/components/Navigation/DraftMenu.tsx @@ -1,16 +1,7 @@ -import * as React from "react"; -import { useContext, useState } from "react"; +import { useContext, useState, MouseEvent } from "react"; import { useHistory } from "react-router-dom"; -import { - Badge, - Button, - IconButton, - Menu, - MenuItem, - Tooltip, -} from "@mui/material"; -import DraftsIcon from "@mui/icons-material/Drafts"; +import { Badge, Button, Menu, MenuItem } from "@mui/material"; import { DraftContext } from "state/context"; export function DraftMenu() { @@ -19,7 +10,7 @@ export function DraftMenu() { const history = useHistory(); const { drafts } = useContext(DraftContext); - const handleClick = (event: React.MouseEvent) => { + const handleClick = (event: MouseEvent) => { setAnchorEl(event.currentTarget); }; diff --git a/src/components/Navigation/Navbar.tsx b/src/components/Navigation/Navbar.tsx index d8119674..b068b030 100644 --- a/src/components/Navigation/Navbar.tsx +++ b/src/components/Navigation/Navbar.tsx @@ -1,17 +1,7 @@ -import * as React from "react"; - import { useHistory, useRouteMatch } from "react-router-dom"; -import { - AppBar, - Button, - Divider, - Link, - Stack, - Toolbar, - Typography, -} from "@mui/material"; -import { UserMenu } from "components/Navigation/UserMenu"; +import { AppBar, Button, Divider, Stack, Toolbar } from "@mui/material"; + import { DraftMenu } from "components/Navigation/DraftMenu"; import moment from "moment"; import ads from "../../../branding.svg"; diff --git a/src/components/Navigation/UserMenu.tsx b/src/components/Navigation/UserMenu.tsx deleted file mode 100644 index 1aec195d..00000000 --- a/src/components/Navigation/UserMenu.tsx +++ /dev/null @@ -1,59 +0,0 @@ -import * as React from "react"; -import { useState } from "react"; - -import { useHistory } from "react-router-dom"; -import { Button, Menu, MenuItem, Snackbar } from "@mui/material"; -import { useSignOut } from "auth/hooks/mutations/useSignOut"; - -export function UserMenu() { - const [anchorEl, setAnchorEl] = useState(null); - const open = Boolean(anchorEl); - const [snackbar, setSnackbar] = useState({ open: false, msg: "" }); - const history = useHistory(); - - const { signOut } = useSignOut({ - onSuccess() { - history.push("/", undefined); - setAnchorEl(null); - }, - onError(msg) { - setSnackbar({ open: true, msg }); - }, - }); - - const handleClick = (event: React.MouseEvent) => { - setAnchorEl(event.currentTarget); - }; - - return ( - <> - - setAnchorEl(null)}> - { - history.push("/user/main/settings"); - setAnchorEl(null); - }} - > - Settings - - { - signOut(); - setAnchorEl(null); - }} - > - Sign Out - - - setSnackbar({ open: false, msg: "" })} - message={snackbar.msg} - /> - - ); -} diff --git a/src/components/Platform/PlatformPicker.tsx b/src/components/Platform/PlatformPicker.tsx index 84362a9d..2d908b8d 100644 --- a/src/components/Platform/PlatformPicker.tsx +++ b/src/components/Platform/PlatformPicker.tsx @@ -1,7 +1,6 @@ import { Autocomplete, TextField } from "@mui/material"; import { useField } from "formik"; import _ from "lodash"; -import React from "react"; interface PlatformLookup { code: string; @@ -12,7 +11,7 @@ interface Props { idx: number; } -export const PlatformPicker: React.FC = ({ idx }: Props) => { +export const PlatformPicker = ({ idx }: Props) => { const [formProps, meta, helper] = useField({ name: `adSets.${idx}.oses`, }); diff --git a/src/components/Segment/SegmentPicker.tsx b/src/components/Segment/SegmentPicker.tsx index 304ca4d5..248e4e53 100644 --- a/src/components/Segment/SegmentPicker.tsx +++ b/src/components/Segment/SegmentPicker.tsx @@ -4,7 +4,7 @@ import { Autocomplete, Box, Checkbox, TextField } from "@mui/material"; import { useField } from "formik"; import _ from "lodash"; import { SegmentFragment, useSegmentsQuery } from "graphql/common.generated"; -import React, { useEffect } from "react"; +import { useEffect } from "react"; import { FormikSwitch } from "form/FormikHelpers"; const icon = ; @@ -14,7 +14,7 @@ interface Props { idx: number; } -export const SegmentPicker: React.FC = ({ idx }: Props) => { +export const SegmentPicker = ({ idx }: Props) => { const { data } = useSegmentsQuery(); const activeSegments = _.sortBy(data?.segments?.data ?? [], (s) => s.name.toLowerCase(), diff --git a/src/components/Steps/ActionButtons.tsx b/src/components/Steps/ActionButtons.tsx index 527a9ca2..6b0b9b78 100644 --- a/src/components/Steps/ActionButtons.tsx +++ b/src/components/Steps/ActionButtons.tsx @@ -1,5 +1,5 @@ import { Button, Stack } from "@mui/material"; -import React, { useContext } from "react"; +import { useContext } from "react"; import { DraftContext } from "state/context"; import { useHistory } from "react-router-dom"; import { useFormikContext } from "formik"; diff --git a/src/components/Steps/NextAndBack.tsx b/src/components/Steps/NextAndBack.tsx index e63c5d78..93b32302 100644 --- a/src/components/Steps/NextAndBack.tsx +++ b/src/components/Steps/NextAndBack.tsx @@ -1,12 +1,12 @@ import { Button, Stack } from "@mui/material"; -import React from "react"; +import { ReactNode } from "react"; interface Props { activeStep: number; steps: number; onNext: () => void; onBack: () => void; - final: React.ReactNode; + final: ReactNode; } export function NextAndBack({ diff --git a/src/components/Steps/StepDrawer.tsx b/src/components/Steps/StepDrawer.tsx index 8c41f6a3..eb8712fe 100644 --- a/src/components/Steps/StepDrawer.tsx +++ b/src/components/Steps/StepDrawer.tsx @@ -1,4 +1,4 @@ -import React, { PropsWithChildren, useRef } from "react"; +import { PropsWithChildren, ReactNode, useRef } from "react"; import { Box, CssBaseline, @@ -21,9 +21,9 @@ interface Props { label: string; path: string; queryParams?: string; - content?: React.ReactNode; + content?: ReactNode; }[]; - finalComponent: React.ReactNode; + finalComponent: ReactNode; } export function StepDrawer({ diff --git a/src/components/Switch/OnOff.tsx b/src/components/Switch/OnOff.tsx index a7c2ada2..04fe7024 100644 --- a/src/components/Switch/OnOff.tsx +++ b/src/components/Switch/OnOff.tsx @@ -1,4 +1,4 @@ -import React, { useState } from "react"; +import { useState } from "react"; import { isPast, parseISO } from "date-fns"; import { Switch, Tooltip, Typography } from "@mui/material"; import { CampaignSource } from "graphql/types"; diff --git a/src/components/TimeZonePicker/TimezoneAwareDatePicker.tsx b/src/components/TimeZonePicker/TimezoneAwareDatePicker.tsx index 9e355b10..d5445748 100644 --- a/src/components/TimeZonePicker/TimezoneAwareDatePicker.tsx +++ b/src/components/TimeZonePicker/TimezoneAwareDatePicker.tsx @@ -22,7 +22,7 @@ const formatDateForInput = (d: Date, tz: string): string => const parseDateFromInput = (s: string, tz: string): Date => zonedTimeToUtc(parseISO(s), tz); -export const TimezoneAwareDatePicker: React.FC = ({ +export const TimezoneAwareDatePicker = ({ tz, value, onChange, @@ -30,7 +30,7 @@ export const TimezoneAwareDatePicker: React.FC = ({ error, label, disabled, -}) => { +}: Props) => { const [formValue, setFormValue] = useState(formatDateForInput(value, tz)); useEffect(() => { setFormValue(formatDateForInput(value, tz)); diff --git a/src/components/TimeZonePicker/index.tsx b/src/components/TimeZonePicker/index.tsx index 0170710a..da1a89d5 100644 --- a/src/components/TimeZonePicker/index.tsx +++ b/src/components/TimeZonePicker/index.tsx @@ -6,7 +6,7 @@ import { SelectChangeEvent, SxProps, } from "@mui/material"; -import React, { Dispatch } from "react"; +import { Dispatch } from "react"; import { useTimeZoneList } from "./useTimeZoneList"; interface Props { @@ -15,11 +15,7 @@ interface Props { sx?: SxProps; } -export const TimeZonePicker: React.FC = ({ - timeZone, - setTimeZone, - sx, -}) => { +export const TimeZonePicker = ({ timeZone, setTimeZone, sx }: Props) => { const timeZoneList = useTimeZoneList(); const onChangeZone = (e: SelectChangeEvent) => { diff --git a/src/components/Url/UrlResolver.tsx b/src/components/Url/UrlResolver.tsx index 71befeff..a3a24a49 100644 --- a/src/components/Url/UrlResolver.tsx +++ b/src/components/Url/UrlResolver.tsx @@ -6,7 +6,7 @@ import { InputAdornment, TextField, } from "@mui/material"; -import React, { useEffect } from "react"; +import { useEffect } from "react"; import _ from "lodash"; import { useField } from "formik"; import { UrlValidationResult, useUrlValidation } from "./use-url-validation"; @@ -33,13 +33,13 @@ function extractViolations( ); } -export const UrlResolver: React.FC = ({ +export const UrlResolver = ({ name, validator, label = "Website URL", disabled = false, helperText, -}) => { +}: Props) => { const [nameField, nameMeta] = useField(name); const [, , isValidHelper] = useField(validator); const hasError = Boolean(nameMeta.error); diff --git a/src/components/radioButton/RadioButton.tsx b/src/components/radioButton/RadioButton.tsx index 452208cd..e697f1b9 100644 --- a/src/components/radioButton/RadioButton.tsx +++ b/src/components/radioButton/RadioButton.tsx @@ -1,4 +1,4 @@ -import React, { Component } from "react"; +import { Component } from "react"; import * as S from "./RadioButton.style"; class RadioButton extends Component { diff --git a/src/form/FormikHelpers.tsx b/src/form/FormikHelpers.tsx index b39c2618..00d363e0 100644 --- a/src/form/FormikHelpers.tsx +++ b/src/form/FormikHelpers.tsx @@ -1,6 +1,7 @@ -import React, { +import { HTMLInputTypeAttribute, PropsWithChildren, + ReactNode, useEffect, } from "react"; import { @@ -21,20 +22,19 @@ import { import { ErrorMessage, useField, useFormikContext } from "formik"; import { useHistory } from "react-router-dom"; import _ from "lodash"; -import { LoadingButton } from "@mui/lab"; type FormikTextFieldProps = TextFieldProps & { name: string; label: string; maxLengthInstantFeedback?: number; - helperText?: React.ReactNode; + helperText?: ReactNode; small?: boolean; type?: HTMLInputTypeAttribute; disabled?: boolean; useTopLabel?: boolean; }; -export const FormikTextField: React.FC = (props) => { +export const FormikTextField = (props: FormikTextFieldProps) => { const [field, meta] = useField(props.name); const hasError = Boolean(meta.error); const showError = hasError && meta.touched; @@ -87,7 +87,7 @@ interface FormikSwitchProps { label: string; } -export const FormikSwitch: React.FC = (props) => { +export const FormikSwitch = (props: FormikSwitchProps) => { const [field] = useField({ type: "checkbox", name: props.name }); return ( <> @@ -104,9 +104,9 @@ interface FormikRadioGroupProps { row?: boolean; } -export const FormikRadioGroup: React.FC< - PropsWithChildren -> = (props) => { +export const FormikRadioGroup = ( + props: PropsWithChildren, +) => { const [field] = useField(props); return ( <> @@ -122,13 +122,11 @@ interface FormikRadioControlProps { name: string; options: Array<{ label: string; value: string | number }>; label?: string; - helperText?: React.ReactNode; + helperText?: ReactNode; disabled?: boolean; } -export const FormikRadioControl: React.FC = ( - props, -) => { +export const FormikRadioControl = (props: FormikRadioControlProps) => { return ( = ( interface FormikSubmitButtonProps { label?: string; - inProgressLabel?: String; + inProgressLabel?: string; isCreate: boolean; allowNavigation?: boolean; } @@ -169,12 +167,12 @@ function extractErrors(errorObject: any): string[] { .flatMap((o) => (_.isString(o) ? [o] : extractErrors(o))); } -export const FormikSubmitButton: React.FC = ({ +export const FormikSubmitButton = ({ label = "Save", inProgressLabel = "Saving...", isCreate, allowNavigation, -}) => { +}: FormikSubmitButtonProps) => { const formik = useFormikContext(); const history = useHistory(); diff --git a/src/form/PersistFormValues.tsx b/src/form/PersistFormValues.tsx index 66f48b0e..e21ad13e 100644 --- a/src/form/PersistFormValues.tsx +++ b/src/form/PersistFormValues.tsx @@ -1,5 +1,5 @@ import { useFormikContext } from "formik"; -import React, { useContext, useEffect } from "react"; +import { useContext, useEffect } from "react"; import { CampaignForm } from "user/views/adsManager/types"; import { DraftContext } from "state/context"; diff --git a/src/form/PersistRegistrationValues.tsx b/src/form/PersistRegistrationValues.tsx index 44816233..0f0f1827 100644 --- a/src/form/PersistRegistrationValues.tsx +++ b/src/form/PersistRegistrationValues.tsx @@ -1,5 +1,5 @@ import { useFormikContext } from "formik"; -import React, { useEffect } from "react"; +import { useEffect } from "react"; import { RegistrationForm } from "auth/registration/types"; import _ from "lodash"; diff --git a/src/graphql/ad-set.generated.tsx b/src/graphql/ad-set.generated.tsx index f555b739..c3d64ee9 100644 --- a/src/graphql/ad-set.generated.tsx +++ b/src/graphql/ad-set.generated.tsx @@ -1,8 +1,9 @@ import * as Types from "./types"; +import * as Apollo from "@apollo/client"; import { gql } from "@apollo/client"; import { CreativeFragmentDoc } from "./creative.generated"; -import * as Apollo from "@apollo/client"; + const defaultOptions = {} as const; export type AdSetFragment = { __typename?: "AdSet"; diff --git a/src/graphql/advertiser.generated.tsx b/src/graphql/advertiser.generated.tsx index 82cde162..ca1215a3 100644 --- a/src/graphql/advertiser.generated.tsx +++ b/src/graphql/advertiser.generated.tsx @@ -1,8 +1,9 @@ import * as Types from "./types"; +import * as Apollo from "@apollo/client"; import { gql } from "@apollo/client"; import { CampaignSummaryFragmentDoc } from "./campaign.generated"; -import * as Apollo from "@apollo/client"; + const defaultOptions = {} as const; export type AdvertiserSummaryFragment = { __typename?: "Advertiser"; diff --git a/src/graphql/analytics-overview.generated.tsx b/src/graphql/analytics-overview.generated.tsx index 4fc01ff7..8c4490ce 100644 --- a/src/graphql/analytics-overview.generated.tsx +++ b/src/graphql/analytics-overview.generated.tsx @@ -1,7 +1,8 @@ import * as Types from "./types"; -import { gql } from "@apollo/client"; import * as Apollo from "@apollo/client"; +import { gql } from "@apollo/client"; + const defaultOptions = {} as const; export type EngagementFragment = { __typename?: "Engagement"; diff --git a/src/graphql/campaign.generated.tsx b/src/graphql/campaign.generated.tsx index 0cf619a8..bb7443a4 100644 --- a/src/graphql/campaign.generated.tsx +++ b/src/graphql/campaign.generated.tsx @@ -1,8 +1,9 @@ import * as Types from "./types"; +import * as Apollo from "@apollo/client"; import { gql } from "@apollo/client"; import { AdSetFragmentDoc } from "./ad-set.generated"; -import * as Apollo from "@apollo/client"; + const defaultOptions = {} as const; export type CampaignFragment = { __typename?: "Campaign"; diff --git a/src/graphql/common.generated.tsx b/src/graphql/common.generated.tsx index 49be7de1..129af17d 100644 --- a/src/graphql/common.generated.tsx +++ b/src/graphql/common.generated.tsx @@ -1,7 +1,8 @@ import * as Types from "./types"; -import { gql } from "@apollo/client"; import * as Apollo from "@apollo/client"; +import { gql } from "@apollo/client"; + const defaultOptions = {} as const; export type GeocodeFragment = { __typename?: "ActiveGeocodesEntry"; diff --git a/src/graphql/creative.generated.tsx b/src/graphql/creative.generated.tsx index 8a4a8126..2b2975b6 100644 --- a/src/graphql/creative.generated.tsx +++ b/src/graphql/creative.generated.tsx @@ -1,7 +1,8 @@ import * as Types from "./types"; -import { gql } from "@apollo/client"; import * as Apollo from "@apollo/client"; +import { gql } from "@apollo/client"; + const defaultOptions = {} as const; export type CreativeFragment = { __typename?: "Creative"; diff --git a/src/graphql/url.generated.tsx b/src/graphql/url.generated.tsx index 52c4f0db..5aea178d 100644 --- a/src/graphql/url.generated.tsx +++ b/src/graphql/url.generated.tsx @@ -1,7 +1,8 @@ import * as Types from "./types"; -import { gql } from "@apollo/client"; import * as Apollo from "@apollo/client"; +import { gql } from "@apollo/client"; + const defaultOptions = {} as const; export type ValidateTargetUrlQueryVariables = Types.Exact<{ url: Types.Scalars["String"]; diff --git a/src/graphql/user.generated.tsx b/src/graphql/user.generated.tsx index 6b6cb91c..67fb303f 100644 --- a/src/graphql/user.generated.tsx +++ b/src/graphql/user.generated.tsx @@ -1,7 +1,8 @@ import * as Types from "./types"; -import { gql } from "@apollo/client"; import * as Apollo from "@apollo/client"; +import { gql } from "@apollo/client"; + const defaultOptions = {} as const; export type UserFragment = { __typename?: "User"; diff --git a/src/user/User.tsx b/src/user/User.tsx index 4e890777..2b4e7c64 100644 --- a/src/user/User.tsx +++ b/src/user/User.tsx @@ -1,4 +1,4 @@ -import React, { useMemo } from "react"; +import { ComponentType, useMemo } from "react"; import { Redirect, Route, Switch } from "react-router-dom"; import { @@ -17,7 +17,6 @@ import { useAdvertiser } from "auth/hooks/queries/useAdvertiser"; import { Navbar } from "components/Navigation/Navbar"; import { CampaignView } from "user/views/user/CampaignView"; import { CampaignReportView } from "user/views/user/CampaignReportView"; -import MiniSideBar from "components/Drawer/MiniSideBar"; import { Profile } from "user/views/user/Profile"; const buildApolloClient = () => { @@ -90,8 +89,8 @@ export function User() { } interface ProtectedProps { - authedComponent?: React.ComponentType; - unauthedComponent?: React.ComponentType; + authedComponent?: ComponentType; + unauthedComponent?: ComponentType; path?: string; } diff --git a/src/user/adSet/AdSetList.tsx b/src/user/adSet/AdSetList.tsx index 11da8a1e..2e7977b3 100644 --- a/src/user/adSet/AdSetList.tsx +++ b/src/user/adSet/AdSetList.tsx @@ -1,4 +1,3 @@ -import React from "react"; import { ColumnDescriptor, StandardRenderers } from "components/EnhancedTable"; import { Chip } from "@mui/material"; import { Status } from "components/Campaigns/Status"; @@ -22,7 +21,7 @@ interface ChipListProps { max?: number; } -const ChipList: React.FC = ({ items, max }) => { +const ChipList = ({ items, max }: ChipListProps) => { if (!items) return null; const MAX_ITEMS = max ?? 10; diff --git a/src/user/ads/AdList.tsx b/src/user/ads/AdList.tsx index 398513a4..6ab70be3 100644 --- a/src/user/ads/AdList.tsx +++ b/src/user/ads/AdList.tsx @@ -5,7 +5,6 @@ import { AdFragment } from "graphql/ad-set.generated"; import { CampaignSource } from "graphql/types"; import { CampaignAdsFragment } from "graphql/campaign.generated"; import { StatsMetric } from "user/analytics/analyticsOverview/types"; -import React from "react"; import { AdDetailTable } from "user/views/user/AdDetailTable"; interface Props { diff --git a/src/user/ads/NewAd.tsx b/src/user/ads/NewAd.tsx index 0fd22f15..74aaa35f 100644 --- a/src/user/ads/NewAd.tsx +++ b/src/user/ads/NewAd.tsx @@ -1,7 +1,7 @@ import { useRecentlyCreatedAdvertiserCreatives } from "user/hooks/useAdvertiserCreatives"; import { CardContainer } from "components/Card/CardContainer"; import { Box, Button, Stack } from "@mui/material"; -import React, { useState } from "react"; +import { useState } from "react"; import { BoxContainer } from "components/Box/BoxContainer"; import AddCircleOutlineIcon from "@mui/icons-material/AddCircleOutline"; import RemoveCircleOutlineIcon from "@mui/icons-material/RemoveCircleOutline"; @@ -15,7 +15,7 @@ export function NewAd() { const creatives = useRecentlyCreatedAdvertiserCreatives(); return ( - + <> )} - + ); } diff --git a/src/user/ads/NotificationAd.tsx b/src/user/ads/NotificationAd.tsx index 58e75f39..58ac1735 100644 --- a/src/user/ads/NotificationAd.tsx +++ b/src/user/ads/NotificationAd.tsx @@ -6,7 +6,6 @@ import { LoadingButton } from "@mui/lab"; import SaveIcon from "@mui/icons-material/Save"; import { creativeInput } from "user/library"; import { CreateNotificationCreativeInput } from "graphql/types"; -import React from "react"; import { useField } from "formik"; import { Creative, initialCreative } from "user/views/adsManager/types"; import { useAdvertiser } from "auth/hooks/queries/useAdvertiser"; diff --git a/src/user/ads/NotificationPreview.tsx b/src/user/ads/NotificationPreview.tsx index bfcd0ba4..460d070e 100644 --- a/src/user/ads/NotificationPreview.tsx +++ b/src/user/ads/NotificationPreview.tsx @@ -2,7 +2,6 @@ import { useField } from "formik"; import { Creative } from "user/views/adsManager/types"; import { Box, Paper, Stack, Typography } from "@mui/material"; import logo from "../../../brave_logo_icon.png"; -import React from "react"; export function NotificationPreview(props: { title?: string; body?: string }) { const [, meta] = useField("newCreative"); diff --git a/src/user/analytics/analyticsOverview/components/BaseBarChart.tsx b/src/user/analytics/analyticsOverview/components/BaseBarChart.tsx index d49805d4..778d6fe7 100644 --- a/src/user/analytics/analyticsOverview/components/BaseBarChart.tsx +++ b/src/user/analytics/analyticsOverview/components/BaseBarChart.tsx @@ -2,7 +2,6 @@ import { Box, Tab, Tabs } from "@mui/material"; import HighchartsReact from "highcharts-react-official"; import * as Highcharts from "highcharts"; import { Options, SeriesOptionsType } from "highcharts"; -import React from "react"; import { Option } from "../types"; interface Props { diff --git a/src/user/analytics/analyticsOverview/components/BasePieChart.tsx b/src/user/analytics/analyticsOverview/components/BasePieChart.tsx index bdbb97e0..d1ee809c 100644 --- a/src/user/analytics/analyticsOverview/components/BasePieChart.tsx +++ b/src/user/analytics/analyticsOverview/components/BasePieChart.tsx @@ -2,7 +2,6 @@ import { Box, Tab, Tabs } from "@mui/material"; import HighchartsReact from "highcharts-react-official"; import * as Highcharts from "highcharts"; import { Options, SeriesOptionsType } from "highcharts"; -import React from "react"; import { Option } from "../types"; interface Props { diff --git a/src/user/analytics/analyticsOverview/components/EngagementHeader.tsx b/src/user/analytics/analyticsOverview/components/EngagementHeader.tsx index cadf93c9..443db9f4 100644 --- a/src/user/analytics/analyticsOverview/components/EngagementHeader.tsx +++ b/src/user/analytics/analyticsOverview/components/EngagementHeader.tsx @@ -1,4 +1,3 @@ -import React from "react"; import { Box, Button, Stack, Typography } from "@mui/material"; import { Status } from "components/Campaigns/Status"; import { CampaignSummaryFragment } from "graphql/campaign.generated"; diff --git a/src/user/analytics/analyticsOverview/components/LiveFeed.tsx b/src/user/analytics/analyticsOverview/components/LiveFeed.tsx index b83c5b77..daa3e7ab 100644 --- a/src/user/analytics/analyticsOverview/components/LiveFeed.tsx +++ b/src/user/analytics/analyticsOverview/components/LiveFeed.tsx @@ -1,4 +1,3 @@ -import React from "react"; import { Box, Chip, Typography } from "@mui/material"; import { OverviewDetail, StatsMetric } from "../types"; diff --git a/src/user/analytics/analyticsOverview/components/MetricFilter.tsx b/src/user/analytics/analyticsOverview/components/MetricFilter.tsx index eb4f0c61..a3a37a98 100644 --- a/src/user/analytics/analyticsOverview/components/MetricFilter.tsx +++ b/src/user/analytics/analyticsOverview/components/MetricFilter.tsx @@ -1,5 +1,4 @@ import MetricSelect from "user/analytics/analyticsOverview/components/MetricSelect"; -import React from "react"; import { Box, Stack, Switch, Tooltip, Typography } from "@mui/material"; import { decideValueAttribute } from "user/analytics/analyticsOverview/lib/overview.library"; import { Metrics, StatsMetric } from "user/analytics/analyticsOverview/types"; diff --git a/src/user/analytics/analyticsOverview/components/ReportUtils.tsx b/src/user/analytics/analyticsOverview/components/ReportUtils.tsx index ba5b27a4..8f3d1327 100644 --- a/src/user/analytics/analyticsOverview/components/ReportUtils.tsx +++ b/src/user/analytics/analyticsOverview/components/ReportUtils.tsx @@ -1,7 +1,7 @@ import { Box } from "@mui/material"; import { LoadingButton } from "@mui/lab"; import SaveIcon from "@mui/icons-material/Save"; -import React, { useState } from "react"; +import { useState } from "react"; import { downloadCSV } from "../lib/csv.library"; import { DateRangePicker } from "components/Date/DateRangePicker"; import { useUser } from "auth/hooks/queries/useUser"; diff --git a/src/user/analytics/analyticsOverview/hooks/usePersistMetricFilter.ts b/src/user/analytics/analyticsOverview/hooks/usePersistMetricFilter.ts index 65969a80..8139c6e7 100644 --- a/src/user/analytics/analyticsOverview/hooks/usePersistMetricFilter.ts +++ b/src/user/analytics/analyticsOverview/hooks/usePersistMetricFilter.ts @@ -1,4 +1,4 @@ -import { useCallback, useEffect, useRef, useState } from "react"; +import { useCallback, useEffect, useState } from "react"; import { Metrics, StatsMetric } from "user/analytics/analyticsOverview/types"; import _ from "lodash"; diff --git a/src/user/analytics/analyticsOverview/lib/ads.library.ts b/src/user/analytics/analyticsOverview/lib/ads.library.ts index c5c3b38a..23c1cee2 100644 --- a/src/user/analytics/analyticsOverview/lib/ads.library.ts +++ b/src/user/analytics/analyticsOverview/lib/ads.library.ts @@ -9,7 +9,7 @@ export function adEngagements( ) { const grouped = _.groupBy(engagements, `${type}id`); const metrics = new Map(); - for (let key in grouped) { + for (const key in grouped) { const group = grouped[key]; const stats = processStats(group); metrics.set(key, stats); diff --git a/src/user/analytics/analyticsOverview/lib/creative.library.ts b/src/user/analytics/analyticsOverview/lib/creative.library.ts index fcf030e1..6ad54507 100644 --- a/src/user/analytics/analyticsOverview/lib/creative.library.ts +++ b/src/user/analytics/analyticsOverview/lib/creative.library.ts @@ -21,7 +21,7 @@ export function creativeEngagements( const metrics: CreativeMetric[] = []; let imageCount = 1; - for (let key in byCreative) { + for (const key in byCreative) { const group = byCreative[key]; const payload = JSON.parse(group[0].creativepayload); const reducedCreative = processStats(group); diff --git a/src/user/analytics/analyticsOverview/lib/os.library.ts b/src/user/analytics/analyticsOverview/lib/os.library.ts index 4cfbd50f..24599836 100644 --- a/src/user/analytics/analyticsOverview/lib/os.library.ts +++ b/src/user/analytics/analyticsOverview/lib/os.library.ts @@ -3,7 +3,7 @@ import { EngagementFragment } from "graphql/analytics-overview.generated"; import { OS, OSMetric } from "../types"; export function processOs(engagements: EngagementFragment[]) { - let stats: OSMetric = { + const stats: OSMetric = { view: { android: 0, ios: 0, linux: 0, macos: 0, windows: 0 }, conversion: { android: 0, ios: 0, linux: 0, macos: 0, windows: 0 }, landed: { android: 0, ios: 0, linux: 0, macos: 0, windows: 0 }, diff --git a/src/user/analytics/analyticsOverview/lib/overview.library.ts b/src/user/analytics/analyticsOverview/lib/overview.library.ts index 3290efba..3eef24c3 100644 --- a/src/user/analytics/analyticsOverview/lib/overview.library.ts +++ b/src/user/analytics/analyticsOverview/lib/overview.library.ts @@ -270,10 +270,10 @@ export const processData = ( const { metric1, metric2, metric3, metric4 } = metrics; // Create data sets for chart - let metric1DataSet: number[][] = []; - let metric2DataSet: number[][] = []; - let metric3DataSet: number[][] = []; - let metric4DataSet: number[][] = []; + const metric1DataSet: number[][] = []; + const metric2DataSet: number[][] = []; + const metric3DataSet: number[][] = []; + const metric4DataSet: number[][] = []; for (const key in groupedData) { const date = moment(key).valueOf(); diff --git a/src/user/analytics/analyticsOverview/reports/campaign/EngagementsOverview.tsx b/src/user/analytics/analyticsOverview/reports/campaign/EngagementsOverview.tsx index 0b0ab506..cc01ad52 100644 --- a/src/user/analytics/analyticsOverview/reports/campaign/EngagementsOverview.tsx +++ b/src/user/analytics/analyticsOverview/reports/campaign/EngagementsOverview.tsx @@ -1,12 +1,11 @@ import { Alert, Box, Divider, Skeleton } from "@mui/material"; import HighchartsReact from "highcharts-react-official"; import * as Highcharts from "highcharts"; -import React, { useState } from "react"; +import { useState } from "react"; import { CampaignWithEngagementsFragment, EngagementFragment, } from "graphql/analytics-overview.generated"; -import { Metrics, StatsMetric } from "../../types"; import { prepareChart, processData, @@ -18,7 +17,6 @@ import LiveFeed from "../../components/LiveFeed"; import { CampaignFormat } from "graphql/types"; import { ErrorDetail } from "components/Error/ErrorDetail"; import { ApolloError } from "@apollo/client"; -import _ from "lodash"; import { usePersistMetricFilter } from "user/analytics/analyticsOverview/hooks/usePersistMetricFilter"; interface Props { diff --git a/src/user/analytics/analyticsOverview/reports/creative/CreativeOverview.tsx b/src/user/analytics/analyticsOverview/reports/creative/CreativeOverview.tsx index 89aa4a77..97144100 100644 --- a/src/user/analytics/analyticsOverview/reports/creative/CreativeOverview.tsx +++ b/src/user/analytics/analyticsOverview/reports/creative/CreativeOverview.tsx @@ -1,7 +1,7 @@ import * as Highcharts from "highcharts"; import { Options } from "highcharts"; import HighchartsReact from "highcharts-react-official"; -import React, { useState } from "react"; +import { useState } from "react"; import { Box, Stack, Tab, Tabs, Typography } from "@mui/material"; import { decideValueAttribute } from "../../lib/overview.library"; import { CampaignFormat } from "graphql/types"; diff --git a/src/user/analytics/analyticsOverview/reports/os/OsOverview.tsx b/src/user/analytics/analyticsOverview/reports/os/OsOverview.tsx index f2f17a81..104cce3f 100644 --- a/src/user/analytics/analyticsOverview/reports/os/OsOverview.tsx +++ b/src/user/analytics/analyticsOverview/reports/os/OsOverview.tsx @@ -1,5 +1,4 @@ import { Box, Stack } from "@mui/material"; -import React from "react"; import { EngagementFragment } from "graphql/analytics-overview.generated"; import { mapOsStats, processOs } from "../../lib/os.library"; import { OsPieChart } from "./components/OsPieChart"; diff --git a/src/user/analytics/analyticsOverview/reports/os/components/OsBarChart.tsx b/src/user/analytics/analyticsOverview/reports/os/components/OsBarChart.tsx index 672b9b1e..e464fa9e 100644 --- a/src/user/analytics/analyticsOverview/reports/os/components/OsBarChart.tsx +++ b/src/user/analytics/analyticsOverview/reports/os/components/OsBarChart.tsx @@ -1,4 +1,4 @@ -import React, { useState } from "react"; +import { useState } from "react"; import { SeriesOptionsType } from "highcharts"; import { CalculatedOSMetric, OS } from "user/analytics/analyticsOverview/types"; import { BaseBarChart } from "../../../components/BaseBarChart"; @@ -10,7 +10,7 @@ export function OsBarChart(props: CalculatedOSMetric) { const mapToSeries = ( metric: keyof CalculatedOSMetric, ): SeriesOptionsType[] => { - let series: SeriesOptionsType = { + const series: SeriesOptionsType = { name: "OS", type: "column", data: oses.map((os) => { diff --git a/src/user/analytics/analyticsOverview/reports/os/components/OsPieChart.tsx b/src/user/analytics/analyticsOverview/reports/os/components/OsPieChart.tsx index 0ba07f27..1aec79fa 100644 --- a/src/user/analytics/analyticsOverview/reports/os/components/OsPieChart.tsx +++ b/src/user/analytics/analyticsOverview/reports/os/components/OsPieChart.tsx @@ -1,7 +1,7 @@ -import React, { useState } from "react"; +import { useState } from "react"; import { mapDevice } from "user/analytics/analyticsOverview/lib/os.library"; -import { OS, OSMetric } from "user/analytics/analyticsOverview/types"; +import { OSMetric } from "user/analytics/analyticsOverview/types"; import { BasePieChart } from "../../../components/BasePieChart"; import { SeriesOptionsType } from "highcharts"; diff --git a/src/user/analytics/renderers/index.tsx b/src/user/analytics/renderers/index.tsx index 619f9af9..4c8777fe 100644 --- a/src/user/analytics/renderers/index.tsx +++ b/src/user/analytics/renderers/index.tsx @@ -1,4 +1,3 @@ -import React from "react"; import { Box, Skeleton, Typography } from "@mui/material"; import { renderMonetaryAmount } from "components/EnhancedTable/renderers"; import { CampaignSummaryFragment } from "graphql/campaign.generated"; diff --git a/src/user/campaignList/CampaignList.tsx b/src/user/campaignList/CampaignList.tsx index 2e8c70d3..abf9b924 100644 --- a/src/user/campaignList/CampaignList.tsx +++ b/src/user/campaignList/CampaignList.tsx @@ -1,4 +1,4 @@ -import React, { useState } from "react"; +import { useState } from "react"; import { EnhancedTable, StandardRenderers } from "components/EnhancedTable"; import { IconButton, Link, Stack, Tooltip } from "@mui/material"; import { diff --git a/src/user/settings/NewKeyPairModal.tsx b/src/user/settings/NewKeyPairModal.tsx index 17d58937..17a51bb7 100644 --- a/src/user/settings/NewKeyPairModal.tsx +++ b/src/user/settings/NewKeyPairModal.tsx @@ -101,14 +101,14 @@ export function NewKeyPairModal({ advertiser }: Props) { Generate a keypair for your organization. Brave Ads will use your - organization's public key to sign and encrypt conversion data. Only - your organization will have access to the private key, which can be - used to decrypt and view conversion data. + organization’s public key to sign and encrypt conversion data. + Only your organization will have access to the private key, which can + be used to decrypt and view conversion data. {publicKey.current !== "" && ( - Your organization's public key: + Your organization’s public key: {publicKey.current} @@ -139,7 +139,7 @@ export function NewKeyPairModal({ advertiser }: Props) { You are attempting to create a new keypair, this will replace - any of your organization's existing keypairs. Please note, + any of your organization’s existing keypairs. Please note, previous keypairs cannot be retrieved or used once replaced. @@ -170,7 +170,7 @@ export function NewKeyPairModal({ advertiser }: Props) { - Your organization's new private key will be: + Your organization’s new private key will be: - Please confirm your organization's new private key: + Please confirm your organization’s new private key: - Once confirmed, your organization's keypair will be replaced - with the new keypair. + Once confirmed, your organization’s keypair will be + replaced with the new keypair. )} {data && ( diff --git a/src/user/settings/UserForm.tsx b/src/user/settings/UserForm.tsx index b7f945b5..49fad274 100644 --- a/src/user/settings/UserForm.tsx +++ b/src/user/settings/UserForm.tsx @@ -1,5 +1,5 @@ import { Stack } from "@mui/material"; -import React, { useState } from "react"; +import { useState } from "react"; import { useUser } from "auth/hooks/queries/useUser"; import { CardContainer } from "components/Card/CardContainer"; import { Form, Formik, FormikValues } from "formik"; diff --git a/src/user/views/adsManager/views/advanced/components/adSet/AdSetFields.tsx b/src/user/views/adsManager/views/advanced/components/adSet/AdSetFields.tsx index 23d4c571..c04e1d10 100644 --- a/src/user/views/adsManager/views/advanced/components/adSet/AdSetFields.tsx +++ b/src/user/views/adsManager/views/advanced/components/adSet/AdSetFields.tsx @@ -1,4 +1,3 @@ -import React from "react"; import { PickerFields } from "./fields/PickerFields"; import { ConversionField } from "./fields/ConversionField"; import { CardContainer } from "components/Card/CardContainer"; diff --git a/src/user/views/adsManager/views/advanced/components/adSet/NewAdSet.tsx b/src/user/views/adsManager/views/advanced/components/adSet/NewAdSet.tsx index f61eb401..47ace689 100644 --- a/src/user/views/adsManager/views/advanced/components/adSet/NewAdSet.tsx +++ b/src/user/views/adsManager/views/advanced/components/adSet/NewAdSet.tsx @@ -10,7 +10,7 @@ import { } from "@mui/material"; import { Link as RouterLink, useHistory } from "react-router-dom"; import { CampaignForm, initialAdSet } from "user/views/adsManager/types"; -import React, { useRef } from "react"; +import { useRef } from "react"; import RemoveCircleOutlineIcon from "@mui/icons-material/RemoveCircleOutline"; export function NewAdSet(props: { isEdit: boolean }) { @@ -26,7 +26,11 @@ export function NewAdSet(props: { isEdit: boolean }) { {(helper: FieldArrayRenderProps) => ( {values.adSets.map((adSet, idx) => ( - + Your campaign has been updated!
- If you added new Ads, we'll be in contact as soon as they are - approved and activated.
+ If you added new Ads, we’ll be in contact as soon as they + are approved and activated.
Thank you for using Brave Ads!
@@ -64,7 +64,7 @@ export function CompletionForm() { Your campaign has been created and is now being reviewed by our ads team.
- We'll be in contact as soon as your campaign is approved and + We’ll be in contact as soon as your campaign is approved and activated.
diff --git a/src/user/views/adsManager/views/advanced/components/form/EditCampaign.tsx b/src/user/views/adsManager/views/advanced/components/form/EditCampaign.tsx index 017e84db..632f6333 100644 --- a/src/user/views/adsManager/views/advanced/components/form/EditCampaign.tsx +++ b/src/user/views/adsManager/views/advanced/components/form/EditCampaign.tsx @@ -1,6 +1,5 @@ import { Container, LinearProgress } from "@mui/material"; import { Formik } from "formik"; -import React from "react"; import { CampaignForm } from "../../../../types"; import { CampaignSchema } from "validation/CampaignSchema"; import { editCampaignValues, transformEditForm } from "user/library"; diff --git a/src/user/views/adsManager/views/advanced/components/form/NewCampaign.tsx b/src/user/views/adsManager/views/advanced/components/form/NewCampaign.tsx index 873b8cd4..d8d2ba9b 100644 --- a/src/user/views/adsManager/views/advanced/components/form/NewCampaign.tsx +++ b/src/user/views/adsManager/views/advanced/components/form/NewCampaign.tsx @@ -1,6 +1,6 @@ import { Container, LinearProgress } from "@mui/material"; import { Formik } from "formik"; -import React, { useContext } from "react"; +import { useContext } from "react"; import { CampaignForm, initialCampaign } from "../../../../types"; import { CampaignSchema } from "validation/CampaignSchema"; import { transformNewForm } from "user/library"; diff --git a/src/user/views/adsManager/views/advanced/components/form/components/BaseForm.tsx b/src/user/views/adsManager/views/advanced/components/form/components/BaseForm.tsx index 95ec59d5..1b126b45 100644 --- a/src/user/views/adsManager/views/advanced/components/form/components/BaseForm.tsx +++ b/src/user/views/adsManager/views/advanced/components/form/components/BaseForm.tsx @@ -1,6 +1,5 @@ import { Form } from "formik"; import { Review } from "../../review/Review"; -import React from "react"; import { CampaignSettings } from "user/views/adsManager/views/advanced/components/campaign/CampaignSettings"; import { StepDrawer } from "components/Steps/StepDrawer"; import { PaymentButton } from "user/views/adsManager/views/advanced/components/form/components/PaymentButton"; diff --git a/src/user/views/adsManager/views/advanced/components/form/components/PaymentButton.tsx b/src/user/views/adsManager/views/advanced/components/form/components/PaymentButton.tsx index 41fd62ec..8b3e944a 100644 --- a/src/user/views/adsManager/views/advanced/components/form/components/PaymentButton.tsx +++ b/src/user/views/adsManager/views/advanced/components/form/components/PaymentButton.tsx @@ -1,5 +1,4 @@ import { FormikSubmitButton } from "form/FormikHelpers"; -import React from "react"; import { useFormikContext } from "formik"; import { CampaignForm } from "user/views/adsManager/types"; diff --git a/src/user/views/adsManager/views/advanced/components/review/Review.tsx b/src/user/views/adsManager/views/advanced/components/review/Review.tsx index f4b18c5a..16373dcf 100644 --- a/src/user/views/adsManager/views/advanced/components/review/Review.tsx +++ b/src/user/views/adsManager/views/advanced/components/review/Review.tsx @@ -1,7 +1,7 @@ import { useFormikContext } from "formik"; import { CampaignForm } from "../../../../types"; import { Box } from "@mui/material"; -import React, { useEffect } from "react"; +import { useEffect } from "react"; import { CampaignReview } from "./components/CampaignReview"; import { AdSetReview } from "./components/AdSetReview"; import { AdReview } from "user/views/adsManager/views/advanced/components/review/components/AdReview"; diff --git a/src/user/views/adsManager/views/advanced/components/review/components/AdReview.tsx b/src/user/views/adsManager/views/advanced/components/review/components/AdReview.tsx index a08b82ec..ce40d382 100644 --- a/src/user/views/adsManager/views/advanced/components/review/components/AdReview.tsx +++ b/src/user/views/adsManager/views/advanced/components/review/components/AdReview.tsx @@ -2,7 +2,6 @@ import { Stack, Typography } from "@mui/material"; import { useRecentlyCreatedAdvertiserCreatives } from "user/hooks/useAdvertiserCreatives"; import { BoxContainer } from "components/Box/BoxContainer"; import { NotificationPreview } from "user/ads/NotificationPreview"; -import React from "react"; import { ReviewContainer } from "user/views/adsManager/views/advanced/components/review/components/ReviewContainer"; export function AdReview() { @@ -20,7 +19,7 @@ export function AdReview() { flexWrap="wrap" > {creatives.map((c) => ( - + ))} diff --git a/src/user/views/adsManager/views/advanced/components/review/components/AdSetReview.tsx b/src/user/views/adsManager/views/advanced/components/review/components/AdSetReview.tsx index 658b5aee..c988b55c 100644 --- a/src/user/views/adsManager/views/advanced/components/review/components/AdSetReview.tsx +++ b/src/user/views/adsManager/views/advanced/components/review/components/AdSetReview.tsx @@ -1,4 +1,3 @@ -import React from "react"; import { AdSetForm, Creative, OS, Segment } from "../../../../../types"; import { FormikErrors } from "formik"; import { ConversionDisplay } from "components/Conversion/ConversionDisplay"; diff --git a/src/user/views/adsManager/views/advanced/components/review/components/ReviewContainer.tsx b/src/user/views/adsManager/views/advanced/components/review/components/ReviewContainer.tsx index de5b1c38..3ad34eb7 100644 --- a/src/user/views/adsManager/views/advanced/components/review/components/ReviewContainer.tsx +++ b/src/user/views/adsManager/views/advanced/components/review/components/ReviewContainer.tsx @@ -1,4 +1,4 @@ -import React, { PropsWithChildren } from "react"; +import { PropsWithChildren } from "react"; import { useHistory, useRouteMatch } from "react-router-dom"; import { CardContainer } from "components/Card/CardContainer"; import { Button } from "@mui/material"; diff --git a/src/user/views/adsManager/views/advanced/components/review/components/ReviewField.tsx b/src/user/views/adsManager/views/advanced/components/review/components/ReviewField.tsx index f31d20a7..07e11ebf 100644 --- a/src/user/views/adsManager/views/advanced/components/review/components/ReviewField.tsx +++ b/src/user/views/adsManager/views/advanced/components/review/components/ReviewField.tsx @@ -19,8 +19,6 @@ interface Props { } export function ReviewField({ caption, value, error }: Props) { - const isError = !!error; - return ( diff --git a/src/user/views/user/AdDetailTable.tsx b/src/user/views/user/AdDetailTable.tsx index 6b98dfa5..7f9e30be 100644 --- a/src/user/views/user/AdDetailTable.tsx +++ b/src/user/views/user/AdDetailTable.tsx @@ -1,4 +1,3 @@ -import React from "react"; import { ColumnDescriptor, EnhancedTable } from "components/EnhancedTable"; import { CampaignAdsFragment } from "graphql/campaign.generated"; import { CampaignFormat } from "graphql/types"; diff --git a/src/user/views/user/CampaignDetails.tsx b/src/user/views/user/CampaignDetails.tsx index a04a15b7..082e8425 100644 --- a/src/user/views/user/CampaignDetails.tsx +++ b/src/user/views/user/CampaignDetails.tsx @@ -1,4 +1,4 @@ -import React, { useState } from "react"; +import { useState } from "react"; import DatasetIcon from "@mui/icons-material/Dataset"; import LibraryBooksIcon from "@mui/icons-material/LibraryBooks"; import { useLoadCampaignAdsQuery } from "graphql/campaign.generated"; diff --git a/src/user/views/user/CampaignReportView.tsx b/src/user/views/user/CampaignReportView.tsx index 49c4f9dc..a6487c62 100644 --- a/src/user/views/user/CampaignReportView.tsx +++ b/src/user/views/user/CampaignReportView.tsx @@ -1,5 +1,5 @@ import { useParams } from "react-router-dom"; -import React, { useState } from "react"; +import { useState } from "react"; import { useAnalyticOverviewQuery } from "graphql/analytics-overview.generated"; import { Box } from "@mui/material"; import moment from "moment"; diff --git a/src/user/views/user/CampaignView.tsx b/src/user/views/user/CampaignView.tsx index daf0ae0c..ac391466 100644 --- a/src/user/views/user/CampaignView.tsx +++ b/src/user/views/user/CampaignView.tsx @@ -1,5 +1,5 @@ import { Box, Skeleton } from "@mui/material"; -import React, { useState } from "react"; +import { useState } from "react"; import { useAdvertiserCampaignsQuery } from "graphql/advertiser.generated"; import { CampaignAgeFilter } from "components/Campaigns/CampaignAgeFilter"; import { CampaignList } from "user/campaignList/CampaignList";