From 8c6217853ad0f3f063aa6c45fac9322e8d3460ba Mon Sep 17 00:00:00 2001
From: Aaron Couch
Date: Tue, 14 May 2024 15:39:15 -0400
Subject: [PATCH 01/21] Update internal_task.yml
---
.github/ISSUE_TEMPLATE/internal_task.yml | 1 -
1 file changed, 1 deletion(-)
diff --git a/.github/ISSUE_TEMPLATE/internal_task.yml b/.github/ISSUE_TEMPLATE/internal_task.yml
index f41909b36..27765e6f8 100644
--- a/.github/ISSUE_TEMPLATE/internal_task.yml
+++ b/.github/ISSUE_TEMPLATE/internal_task.yml
@@ -1,7 +1,6 @@
name: Internal - Task
description: Describes an individual task that needs to be completed
title: "[Task]: "
-labels: ["project: grants.gov"]
assignees:
- octocat
body:
From 90d14d68e7ee66fdfc840889b41b1d32ac69b2e6 Mon Sep 17 00:00:00 2001
From: Aaron Couch
Date: Tue, 14 May 2024 15:40:09 -0400
Subject: [PATCH 02/21] Delete .github/ISSUE_TEMPLATE/internal_30k.md
---
.github/ISSUE_TEMPLATE/internal_30k.md | 27 --------------------------
1 file changed, 27 deletions(-)
delete mode 100644 .github/ISSUE_TEMPLATE/internal_30k.md
diff --git a/.github/ISSUE_TEMPLATE/internal_30k.md b/.github/ISSUE_TEMPLATE/internal_30k.md
deleted file mode 100644
index 4fe2ceaf5..000000000
--- a/.github/ISSUE_TEMPLATE/internal_30k.md
+++ /dev/null
@@ -1,27 +0,0 @@
----
-
-name: Internal - 30k deliverable
-about: Describe a new deliverable at a 30,000 ft view
-title: "[30k]: "
-labels:
- - "deliverable: 30k ft"
-assignees: ""
-
----
-
-### Key links
-
-- Deliverable specification
-- [Simpler Grants.gov full roadmap](https://github.com/orgs/HHS/projects/12)
-- 10k milestones
-
-### Description
-
-- **What:** {1-2 sentence summary of what should be delivered}
-- **Why:** {1-2 sentence summary of why this deliverable is important}
-- **Who**
- - {Audience for this deliverable}
- - {Audience for this deliverable}
-
-> [!NOTE]
-> For more information about this deliverable, please refer to the deliverable specification linked above.
From a9ea8b6bbf879bc3e3ac8a6913060d77111d29f9 Mon Sep 17 00:00:00 2001
From: Aaron Couch
Date: Tue, 14 May 2024 15:40:25 -0400
Subject: [PATCH 03/21] Delete .github/ISSUE_TEMPLATE/internal_adr.yml
---
.github/ISSUE_TEMPLATE/internal_adr.yml | 56 -------------------------
1 file changed, 56 deletions(-)
delete mode 100644 .github/ISSUE_TEMPLATE/internal_adr.yml
diff --git a/.github/ISSUE_TEMPLATE/internal_adr.yml b/.github/ISSUE_TEMPLATE/internal_adr.yml
deleted file mode 100644
index 8bb41ad7d..000000000
--- a/.github/ISSUE_TEMPLATE/internal_adr.yml
+++ /dev/null
@@ -1,56 +0,0 @@
-name: Internal - ADR
-description: Outline an architectural decision that needs to be recorded
-title: "[ADR]: "
-labels: ["project: grants.gov", "docs: adr"]
-assignees:
- - octocat
-body:
- - type: markdown
- attributes:
- value: |
- Describe an architectural decision that needs to be recorded
- - type: markdown
- attributes:
- value: |
- **Example** [Wiki ADR](https://github.com/HHS/simpler-grants-gov/issues/30)
- - type: textarea
- id: description
- attributes:
- label: Description
- description: 1-2 sentence summary of the decision that needs to be made
- validations:
- required: true
- - type: textarea
- id: approvers
- attributes:
- label: Approvers
- description: List individuals or groups that must approve this decision before the ADR is accepted
- validations:
- required: false
- - type: textarea
- id: options
- attributes:
- label: Options
- description: List of options to evaluate
- validations:
- required: false
- - type: textarea
- id: decision-criteria
- attributes:
- label: Decision Criteria
- description: List of decision criteria to evaluate
- validations:
- required: false
- - type: checkboxes
- id: definition-of-done
- attributes:
- label: Definition of Done
- description: Leave the following acceptance criteria unchecked when the ticket is created then mark them as completed as you meet each criterion with the ADR
- options:
- - label: The approvers for this decision have been identified (ideally before work on the ADR starts)
- - label: The ADR is created and stored in `documentation/decisions/adr` with status "Accepted"
- - label: The ADR has been reviewed and approved by the approvers listed above
- - label: The ADR satisfies requirements that are outlined in the ADR template
- - label: Any follow-up tickets have been created (if necessary)
- validations:
- required: true
From 6bfd75e9aaec0991a4012120295b4f063fee484d Mon Sep 17 00:00:00 2001
From: Ryan Lewis <93001277+rylew1@users.noreply.github.com>
Date: Tue, 14 May 2024 12:50:29 -0700
Subject: [PATCH 04/21] [Issue #1757]: setup e2e tests for search (#1)
## Summary
Fixes #1757
## Changes proposed
- Add e2e tests for search page
- Add e2e test (with FE and API) to its own CI job
(`ci-frontend-ci.yml`)
- invokes shell script to wait until API is loaded
---
.github/workflows/ci-frontend-e2e.yml | 61 +++++++
.github/workflows/ci-frontend.yml | 15 +-
api/.gitignore | 3 +
api/bin/wait-for-api.sh | 30 ++++
frontend/.eslintrc.js | 2 +
frontend/.gitignore | 6 +
frontend/package-lock.json | 24 +--
frontend/package.json | 2 +-
.../SearchFilterCheckbox.tsx | 2 +-
frontend/tests/e2e/search/search.spec.ts | 170 ++++++++++++++++++
frontend/tests/e2e/search/searchUtil.ts | 132 ++++++++++++++
frontend/tests/playwright.config.ts | 2 +
12 files changed, 421 insertions(+), 28 deletions(-)
create mode 100644 .github/workflows/ci-frontend-e2e.yml
create mode 100755 api/bin/wait-for-api.sh
create mode 100644 frontend/tests/e2e/search/search.spec.ts
create mode 100644 frontend/tests/e2e/search/searchUtil.ts
diff --git a/.github/workflows/ci-frontend-e2e.yml b/.github/workflows/ci-frontend-e2e.yml
new file mode 100644
index 000000000..1a1712993
--- /dev/null
+++ b/.github/workflows/ci-frontend-e2e.yml
@@ -0,0 +1,61 @@
+name: Frontend E2E Tests
+
+on:
+ workflow_call:
+ pull_request:
+ paths:
+ - frontend/**
+ - .github/workflows/ci-frontend-e2e.yml
+
+defaults:
+ run:
+ working-directory: ./frontend
+
+env:
+ NODE_VERSION: 18
+ LOCKFILE_PATH: ./frontend/package-lock.json
+ PACKAGE_MANAGER: npm
+
+concurrency:
+ group: ${{ github.workflow }}-${{ github.ref }}
+ cancel-in-progress: true
+
+jobs:
+ e2e-tests:
+ name: Run E2E Tests
+ runs-on: ubuntu-latest
+
+ steps:
+ - uses: actions/checkout@v3
+
+ - name: Setup Node.js
+ uses: actions/setup-node@v3
+ with:
+ node-version: ${{ env.NODE_VERSION }}
+ cache: ${{ env.PACKAGE_MANAGER }}
+ cache-dependency-path: ${{ env.LOCKFILE_PATH }}
+
+ - run: npm ci
+
+ - name: Install Playwright Browsers
+ run: npx playwright install --with-deps
+
+ - name: Start API Server for e2e tests
+ run: |
+ cd ../api
+ make init db-seed-local start &
+ cd ../frontend
+ # Ensure the API wait script is executable
+ chmod +x ../api/bin/wait-for-api.sh
+ ../api/bin/wait-for-api.sh
+ shell: bash
+
+ - name: Run E2E Tests
+ run: npm run test:e2e
+
+ - uses: actions/upload-artifact@v3
+ if: always()
+ with:
+ name: playwright-report
+ path: ./frontend/playwright-report/
+ retention-days: 30
diff --git a/.github/workflows/ci-frontend.yml b/.github/workflows/ci-frontend.yml
index a1e299d8c..67766d706 100644
--- a/.github/workflows/ci-frontend.yml
+++ b/.github/workflows/ci-frontend.yml
@@ -1,4 +1,4 @@
-name: Front-end Checks
+name: Frontend Checks
on:
workflow_call:
@@ -34,9 +34,6 @@ jobs:
cache: ${{ env.PACKAGE_MANAGER }}
- run: npm ci
- - name: Install Playwright Browsers
- run: npx playwright install --with-deps
-
- name: Run lint
run: npm run lint
@@ -58,16 +55,6 @@ jobs:
skip-step: none
output: comment
- - name: Run e2e tests
- run: npm run test:e2e
-
- - uses: actions/upload-artifact@v3
- if: always()
- with:
- name: playwright-report
- path: ./frontend/playwright-report/
- retention-days: 30
-
# Confirms the front end still builds successfully
check-frontend-builds:
name: FE Build Check
diff --git a/api/.gitignore b/api/.gitignore
index ff0117b53..2b1784734 100644
--- a/api/.gitignore
+++ b/api/.gitignore
@@ -26,3 +26,6 @@ coverage.*
# VSCode Workspace
*.code-workspace
.vscode
+
+#e2e
+/test-results/
diff --git a/api/bin/wait-for-api.sh b/api/bin/wait-for-api.sh
new file mode 100755
index 000000000..f68a9b13d
--- /dev/null
+++ b/api/bin/wait-for-api.sh
@@ -0,0 +1,30 @@
+#!/bin/bash
+# wait-for-api.sh
+
+set -e
+
+# Color formatting for readability
+GREEN='\033[0;32m'
+RED='\033[0;31m'
+NO_COLOR='\033[0m'
+
+MAX_WAIT_TIME=800 # seconds, adjust as necessary
+WAIT_TIME=0
+
+echo "Waiting for API server to become ready..."
+
+# Use curl to check the API server health endpoint
+until curl --output /dev/null --silent --head --fail http://localhost:8080/health;
+do
+ printf '.'
+ sleep 5
+
+ WAIT_TIME=$(($WAIT_TIME + 5))
+ if [ $WAIT_TIME -gt $MAX_WAIT_TIME ]
+ then
+ echo -e "${RED}ERROR: API server did not become ready within ${MAX_WAIT_TIME} seconds.${NO_COLOR}"
+ exit 1
+ fi
+done
+
+echo -e "${GREEN}API server is ready after ~${WAIT_TIME} seconds.${NO_COLOR}"
diff --git a/frontend/.eslintrc.js b/frontend/.eslintrc.js
index 023b61c5f..280ce11e3 100644
--- a/frontend/.eslintrc.js
+++ b/frontend/.eslintrc.js
@@ -49,6 +49,8 @@ module.exports = {
"@typescript-eslint/no-unused-vars": "error",
// The usage of `any` defeats the purpose of typescript. Consider using `unknown` type instead instead.
"@typescript-eslint/no-explicit-any": "error",
+ // Just warn since playwright tests may not use screen the way jest would
+ "testing-library/prefer-screen-queries": "warn",
},
},
],
diff --git a/frontend/.gitignore b/frontend/.gitignore
index 41bd6facb..f38f90c87 100644
--- a/frontend/.gitignore
+++ b/frontend/.gitignore
@@ -45,3 +45,9 @@ npm-debug.log*
# uswds assets
/public/uswds
+
+# playwright e2e
+/test-results/
+/playwright-report/
+/blob-report/
+/playwright/.cache/
diff --git a/frontend/package-lock.json b/frontend/package-lock.json
index 2477fba54..68a0052ab 100644
--- a/frontend/package-lock.json
+++ b/frontend/package-lock.json
@@ -28,7 +28,7 @@
},
"devDependencies": {
"@ianvs/prettier-plugin-sort-imports": "^4.0.2",
- "@playwright/test": "^1.42.0",
+ "@playwright/test": "^1.44.0",
"@storybook/addon-designs": "^7.0.1",
"@storybook/addon-essentials": "^7.1.0",
"@storybook/nextjs": "^7.1.0",
@@ -5139,12 +5139,12 @@
}
},
"node_modules/@playwright/test": {
- "version": "1.43.0",
- "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.43.0.tgz",
- "integrity": "sha512-Ebw0+MCqoYflop7wVKj711ccbNlrwTBCtjY5rlbiY9kHL2bCYxq+qltK6uPsVBGGAOb033H2VO0YobcQVxoW7Q==",
+ "version": "1.44.0",
+ "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.44.0.tgz",
+ "integrity": "sha512-rNX5lbNidamSUorBhB4XZ9SQTjAqfe5M+p37Z8ic0jPFBMo5iCtQz1kRWkEMg+rYOKSlVycpQmpqjSFq7LXOfg==",
"dev": true,
"dependencies": {
- "playwright": "1.43.0"
+ "playwright": "1.44.0"
},
"bin": {
"playwright": "cli.js"
@@ -20767,12 +20767,12 @@
}
},
"node_modules/playwright": {
- "version": "1.43.0",
- "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.43.0.tgz",
- "integrity": "sha512-SiOKHbVjTSf6wHuGCbqrEyzlm6qvXcv7mENP+OZon1I07brfZLGdfWV0l/efAzVx7TF3Z45ov1gPEkku9q25YQ==",
+ "version": "1.44.0",
+ "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.44.0.tgz",
+ "integrity": "sha512-F9b3GUCLQ3Nffrfb6dunPOkE5Mh68tR7zN32L4jCk4FjQamgesGay7/dAAe1WaMEGV04DkdJfcJzjoCKygUaRQ==",
"dev": true,
"dependencies": {
- "playwright-core": "1.43.0"
+ "playwright-core": "1.44.0"
},
"bin": {
"playwright": "cli.js"
@@ -20785,9 +20785,9 @@
}
},
"node_modules/playwright-core": {
- "version": "1.43.0",
- "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.43.0.tgz",
- "integrity": "sha512-iWFjyBUH97+pUFiyTqSLd8cDMMOS0r2ZYz2qEsPjH8/bX++sbIJT35MSwKnp1r/OQBAqC5XO99xFbJ9XClhf4w==",
+ "version": "1.44.0",
+ "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.44.0.tgz",
+ "integrity": "sha512-ZTbkNpFfYcGWohvTTl+xewITm7EOuqIqex0c7dNZ+aXsbrLj0qI8XlGKfPpipjm0Wny/4Lt4CJsWJk1stVS5qQ==",
"dev": true,
"bin": {
"playwright-core": "cli.js"
diff --git a/frontend/package.json b/frontend/package.json
index f97eb31f5..048464bb1 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -43,7 +43,7 @@
},
"devDependencies": {
"@ianvs/prettier-plugin-sort-imports": "^4.0.2",
- "@playwright/test": "^1.42.0",
+ "@playwright/test": "^1.44.0",
"@storybook/addon-designs": "^7.0.1",
"@storybook/addon-essentials": "^7.1.0",
"@storybook/nextjs": "^7.1.0",
diff --git a/frontend/src/components/search/SearchFilterAccordion/SearchFilterCheckbox.tsx b/frontend/src/components/search/SearchFilterAccordion/SearchFilterCheckbox.tsx
index 4304bf2a7..027cf8864 100644
--- a/frontend/src/components/search/SearchFilterAccordion/SearchFilterCheckbox.tsx
+++ b/frontend/src/components/search/SearchFilterAccordion/SearchFilterCheckbox.tsx
@@ -37,7 +37,7 @@ const SearchFilterCheckbox: React.FC = ({
onChange={handleChange}
disabled={!mounted}
checked={option.isChecked === true}
- // value={option.id} // TODO: consider poassing explicit value
+ // value={option.id} // TODO: consider passing explicit value
/>
);
};
diff --git a/frontend/tests/e2e/search/search.spec.ts b/frontend/tests/e2e/search/search.spec.ts
new file mode 100644
index 000000000..99d046961
--- /dev/null
+++ b/frontend/tests/e2e/search/search.spec.ts
@@ -0,0 +1,170 @@
+import {
+ clickAccordionWithTitle,
+ clickMobileNavMenu,
+ clickSearchNavLink,
+ expectCheckboxIDIsChecked,
+ expectSortBy,
+ expectURLContainsQueryParam,
+ fillSearchInputAndSubmit,
+ getMobileMenuButton,
+ getSearchInput,
+ hasMobileMenu,
+ refreshPageWithCurrentURL,
+ selectSortBy,
+ toggleCheckboxes,
+ waitForSearchResultsLoaded,
+} from "./searchUtil";
+import { expect, test } from "@playwright/test";
+
+test("should navigate from index to search page", async ({ page }) => {
+ // Start from the index page with feature flag set
+ await page.goto("/?_ff=showSearchV0:true");
+
+ // Mobile chrome must first click the menu button
+ if (await hasMobileMenu(page)) {
+ const menuButton = getMobileMenuButton(page);
+ await clickMobileNavMenu(menuButton);
+ }
+
+ await clickSearchNavLink(page);
+
+ // Verify that the new URL is correct
+ expectURLContainsQueryParam(page, "status", "forecasted,posted");
+
+ // Verify the presence of "Search" content on the page
+ await expect(page.locator("h1")).toContainText(
+ "Search funding opportunities",
+ );
+
+ // Verify that the 'forecasted' and 'posted' are checked
+ await expectCheckboxIDIsChecked(page, "#status-forecasted");
+ await expectCheckboxIDIsChecked(page, "#status-posted");
+});
+
+test.describe("Search page tests", () => {
+ test.beforeEach(async ({ page }) => {
+ // Navigate to the search page with the feature flag set
+ await page.goto("/search?_ff=showSearchV0:true");
+ });
+
+ test("should return 0 results when searching for obscure term", async ({
+ page,
+ browserName,
+ }) => {
+ // TODO (Issue #2005): fix test for webkit
+ test.skip(
+ browserName === "webkit",
+ "Skipping test for WebKit due to a query param issue.",
+ );
+
+ const searchTerm = "0resultearch";
+
+ await fillSearchInputAndSubmit(searchTerm, page);
+
+ expectURLContainsQueryParam(page, "query", searchTerm);
+
+ const resultsHeading = page.getByRole("heading", {
+ name: /0 Opportunities/i,
+ });
+ await expect(resultsHeading).toBeVisible();
+
+ await expect(page.locator("div.usa-prose h2")).toHaveText(
+ "Your search did not return any results.",
+ );
+ });
+
+ test("should show and hide loading state", async ({ page, browserName }) => {
+ // TODO (Issue #2005): fix test for webkit
+ test.skip(
+ browserName === "webkit",
+ "Skipping test for WebKit due to a query param issue.",
+ );
+ const searchTerm = "advanced";
+ await fillSearchInputAndSubmit(searchTerm, page);
+
+ const loadingIndicator = page.locator("text='Loading results...'");
+ await expect(loadingIndicator).toBeVisible();
+ await expect(loadingIndicator).toBeHidden();
+
+ const searchTerm2 = "agency";
+ await fillSearchInputAndSubmit(searchTerm2, page);
+ await expect(loadingIndicator).toBeVisible();
+ await expect(loadingIndicator).toBeHidden();
+ });
+ test("should retain filters in a new tab", async ({ page }) => {
+ // Set all inputs, then refresh the page. Those same inputs should be
+ // set from query params.
+ const searchTerm = "education";
+ const statusCheckboxes = {
+ "status-forecasted": "forecasted",
+ "status-posted": "posted",
+ };
+ const fundingInstrumentCheckboxes = {
+ "funding-instrument-cooperative_agreement": "cooperative_agreement",
+ "funding-instrument-grant": "grant",
+ };
+
+ const eligibilityCheckboxes = {
+ "eligibility-state_governments": "state_governments",
+ "eligibility-county_governments": "county_governments",
+ };
+ const agencyCheckboxes = {
+ ARPAH: "ARPAH",
+ AC: "AC",
+ };
+ const categoryCheckboxes = {
+ "category-recovery_act": "recovery_act",
+ "category-agriculture": "agriculture",
+ };
+
+ await selectSortBy(page, "agencyDesc");
+
+ await waitForSearchResultsLoaded(page);
+ await fillSearchInputAndSubmit(searchTerm, page);
+ await toggleCheckboxes(page, statusCheckboxes, "status");
+
+ await clickAccordionWithTitle(page, "Funding instrument");
+ await toggleCheckboxes(
+ page,
+ fundingInstrumentCheckboxes,
+ "fundingInstrument",
+ );
+
+ await clickAccordionWithTitle(page, "Eligibility");
+ await toggleCheckboxes(page, eligibilityCheckboxes, "eligibility");
+
+ await clickAccordionWithTitle(page, "Agency");
+ await toggleCheckboxes(page, agencyCheckboxes, "agency");
+
+ await clickAccordionWithTitle(page, "Category");
+ await toggleCheckboxes(page, categoryCheckboxes, "category");
+
+ /***********************************************************/
+ /* Page refreshed should have all the same inputs selected
+ /***********************************************************/
+
+ await refreshPageWithCurrentURL(page);
+
+ // Expect search inputs are retained in the new tab
+ await expectSortBy(page, "agencyDesc");
+ const searchInput = getSearchInput(page);
+ await expect(searchInput).toHaveValue(searchTerm);
+
+ for (const [checkboxID] of Object.entries(statusCheckboxes)) {
+ await expectCheckboxIDIsChecked(page, `#${checkboxID}`);
+ }
+
+ for (const [checkboxID] of Object.entries(fundingInstrumentCheckboxes)) {
+ await expectCheckboxIDIsChecked(page, `#${checkboxID}`);
+ }
+ for (const [checkboxID] of Object.entries(eligibilityCheckboxes)) {
+ await expectCheckboxIDIsChecked(page, `#${checkboxID}`);
+ }
+ for (const [checkboxID] of Object.entries(agencyCheckboxes)) {
+ await expectCheckboxIDIsChecked(page, `#${checkboxID}`);
+ }
+ for (const [checkboxID] of Object.entries(categoryCheckboxes)) {
+ await expectCheckboxIDIsChecked(page, `#${checkboxID}`);
+ }
+ });
+});
diff --git a/frontend/tests/e2e/search/searchUtil.ts b/frontend/tests/e2e/search/searchUtil.ts
new file mode 100644
index 000000000..87d066533
--- /dev/null
+++ b/frontend/tests/e2e/search/searchUtil.ts
@@ -0,0 +1,132 @@
+// =========================
+// Test Helper Functions
+// =========================
+
+import { Locator, Page, expect } from "@playwright/test";
+
+export function getSearchInput(page: Page) {
+ return page.locator("#query");
+}
+
+export async function fillSearchInputAndSubmit(term: string, page: Page) {
+ const searchInput = getSearchInput(page);
+ await searchInput.fill(term);
+ await page.click(".usa-search >> button[type='submit']");
+ expectURLContainsQueryParam(page, "query", term);
+}
+
+export function expectURLContainsQueryParam(
+ page: Page,
+ queryParamName: string,
+ queryParamValue: string,
+) {
+ const currentURL = page.url();
+ expect(currentURL).toContain(`${queryParamName}=${queryParamValue}`);
+}
+
+export async function waitForURLContainsQueryParam(
+ page: Page,
+ queryParamName: string,
+ queryParamValue: string,
+ timeout = 30000, // query params get set after a debounce period
+) {
+ const endTime = Date.now() + timeout;
+
+ while (Date.now() < endTime) {
+ const url = new URL(page.url());
+ const params = new URLSearchParams(url.search);
+ const actualValue = params.get(queryParamName);
+
+ if (actualValue === queryParamValue) {
+ return;
+ }
+
+ await page.waitForTimeout(500);
+ }
+
+ throw new Error(
+ `URL did not contain query parameter ${queryParamName}=${queryParamValue} within ${timeout}ms`,
+ );
+}
+
+export async function clickSearchNavLink(page: Page) {
+ await page.click("nav >> text=Search");
+}
+
+export function getMobileMenuButton(page: Page) {
+ return page.locator("button >> text=MENU");
+}
+
+export async function hasMobileMenu(page: Page) {
+ const menuButton = getMobileMenuButton(page);
+ return await menuButton.isVisible();
+}
+
+export async function clickMobileNavMenu(menuButton: Locator) {
+ await menuButton.click();
+}
+
+export async function expectCheckboxIDIsChecked(
+ page: Page,
+ idWithHash: string,
+) {
+ const checkbox: Locator = page.locator(idWithHash);
+ await expect(checkbox).toBeChecked();
+}
+
+export async function toggleCheckboxes(
+ page: Page,
+ checkboxObject: Record,
+ queryParamName: string,
+) {
+ let runningQueryParams = "";
+ for (const [checkboxID, queryParamValue] of Object.entries(checkboxObject)) {
+ await toggleCheckbox(page, checkboxID);
+ runningQueryParams += runningQueryParams
+ ? `,${queryParamValue}`
+ : queryParamValue;
+ await waitForURLContainsQueryParam(
+ page,
+ queryParamName,
+ runningQueryParams,
+ );
+ }
+}
+
+export async function toggleCheckbox(page: Page, idWithoutHash: string) {
+ const checkBox = page.locator(`label[for=${idWithoutHash}]`);
+ await checkBox.isEnabled();
+ await checkBox.click();
+}
+
+export async function refreshPageWithCurrentURL(page: Page) {
+ const currentURL = page.url();
+ await page.goto(currentURL); // go to new url in same tab
+ return page;
+}
+
+export async function selectSortBy(page: Page, sortByValue: string) {
+ await page.locator("#search-sort-by-select").selectOption(sortByValue);
+}
+
+export async function expectSortBy(page: Page, value: string) {
+ const selectedValue = await page
+ .locator('select[name="search-sort-by"]')
+ .inputValue();
+ expect(selectedValue).toBe(value);
+}
+
+export async function waitForSearchResultsLoaded(page: Page) {
+ // Wait for number of opportunities to show
+ const resultsHeading = page.locator('h2:has-text("Opportunities")');
+ await resultsHeading.waitFor({ state: "visible", timeout: 60000 });
+}
+
+export async function clickAccordionWithTitle(
+ page: Page,
+ accordionTitle: string,
+) {
+ await page
+ .locator(`button.usa-accordion__button:has-text("${accordionTitle}")`)
+ .click();
+}
diff --git a/frontend/tests/playwright.config.ts b/frontend/tests/playwright.config.ts
index ecf694eae..9d7ddb4c0 100644
--- a/frontend/tests/playwright.config.ts
+++ b/frontend/tests/playwright.config.ts
@@ -28,6 +28,8 @@ export default defineConfig({
/* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */
trace: "on-first-retry",
+ screenshot: "on",
+ video: "on-first-retry",
},
/* Configure projects for major browsers */
From 493fb4e65096a86facdd5e2e2f8593db5f463d5e Mon Sep 17 00:00:00 2001
From: Ryan Lewis <93001277+rylew1@users.noreply.github.com>
Date: Wed, 22 May 2024 10:39:57 -0700
Subject: [PATCH 05/21] [Issue #37]: finish e2e tests (#38)
## Summary
Fixes #37
## Changes proposed
- add some of the relevant tests from bug bash
---
frontend/README.md | 4 +-
frontend/tests/e2e/search/search.spec.ts | 79 ++++++++++++++++++-
.../{searchUtil.ts => searchSpecUtil.ts} | 79 ++++++++++++++++++-
3 files changed, 155 insertions(+), 7 deletions(-)
rename frontend/tests/e2e/search/{searchUtil.ts => searchSpecUtil.ts} (59%)
diff --git a/frontend/README.md b/frontend/README.md
index 587ce3460..2238207f7 100644
--- a/frontend/README.md
+++ b/frontend/README.md
@@ -144,7 +144,9 @@ To run E2E tests using VS Code:
1. Download the VS Code extension described in these [Playwright docs](https://playwright.dev/docs/running-tests#run-tests-in-vs-code)
2. Follow the [instructions](https://playwright.dev/docs/getting-started-vscode#running-tests) Playwright provides
-In CI, the "Front-end Checks" workflow (`.github/workflows/ci-frontend.yml`) summary will include an "Artifacts" section where there is an attached "playwright-report". [Playwright docs](https://playwright.dev/docs/ci-intro#html-report) describe how to view HTML Report in more detail.
+Playwright E2E tests run "local-to-local", requiring both the frontend and the API to be running for the tests to pass - and for the database to be seeded with data.
+
+In CI, the "Front-end Checks" workflow (`.github/workflows/ci-frontend-e2e.yml`) summary will include an "Artifacts" section where there is an attached "playwright-report". [Playwright docs](https://playwright.dev/docs/ci-intro#html-report) describe how to view HTML Report in more detail.
## 🤖 Type checking, linting, and formatting
diff --git a/frontend/tests/e2e/search/search.spec.ts b/frontend/tests/e2e/search/search.spec.ts
index 99d046961..85904bc6a 100644
--- a/frontend/tests/e2e/search/search.spec.ts
+++ b/frontend/tests/e2e/search/search.spec.ts
@@ -1,19 +1,25 @@
import {
clickAccordionWithTitle,
+ clickLastPaginationPage,
clickMobileNavMenu,
+ clickPaginationPageNumber,
clickSearchNavLink,
expectCheckboxIDIsChecked,
expectSortBy,
expectURLContainsQueryParam,
fillSearchInputAndSubmit,
+ getFirstSearchResultTitle,
+ getLastSearchResultTitle,
getMobileMenuButton,
+ getNumberOfOpportunitySearchResults,
getSearchInput,
hasMobileMenu,
refreshPageWithCurrentURL,
+ selectOppositeSortOption,
selectSortBy,
toggleCheckboxes,
- waitForSearchResultsLoaded,
-} from "./searchUtil";
+ waitForSearchResultsInitialLoad,
+} from "./searchSpecUtil";
import { expect, test } from "@playwright/test";
test("should navigate from index to search page", async ({ page }) => {
@@ -63,6 +69,7 @@ test.describe("Search page tests", () => {
expectURLContainsQueryParam(page, "query", searchTerm);
+ // eslint-disable-next-line testing-library/prefer-screen-queries
const resultsHeading = page.getByRole("heading", {
name: /0 Opportunities/i,
});
@@ -91,7 +98,7 @@ test.describe("Search page tests", () => {
await expect(loadingIndicator).toBeVisible();
await expect(loadingIndicator).toBeHidden();
});
- test("should retain filters in a new tab", async ({ page }) => {
+ test("should refresh and retain filters in a new tab", async ({ page }) => {
// Set all inputs, then refresh the page. Those same inputs should be
// set from query params.
const searchTerm = "education";
@@ -119,7 +126,7 @@ test.describe("Search page tests", () => {
await selectSortBy(page, "agencyDesc");
- await waitForSearchResultsLoaded(page);
+ await waitForSearchResultsInitialLoad(page);
await fillSearchInputAndSubmit(searchTerm, page);
await toggleCheckboxes(page, statusCheckboxes, "status");
@@ -167,4 +174,68 @@ test.describe("Search page tests", () => {
await expectCheckboxIDIsChecked(page, `#${checkboxID}`);
}
});
+
+ test("resets page back to 1 when choosing a filter", async ({ page }) => {
+ await clickPaginationPageNumber(page, 2);
+
+ // Verify that page 1 is highlighted
+ let currentPageButton = page.locator(".usa-pagination__button.usa-current");
+ await expect(currentPageButton).toHaveAttribute("aria-label", "Page 2");
+
+ // Select the 'Closed' checkbox under 'Opportunity status'
+ const statusCheckboxes = {
+ "status-closed": "closed",
+ };
+ await toggleCheckboxes(page, statusCheckboxes, "status");
+
+ // Wait for the page to reload
+ await waitForSearchResultsInitialLoad(page);
+
+ // Verify that page 1 is highlighted
+ currentPageButton = page.locator(".usa-pagination__button.usa-current");
+ await expect(currentPageButton).toHaveAttribute("aria-label", "Page 1");
+
+ // It should not have a page query param set
+ expectURLContainsQueryParam(page, "page", "1", false);
+ });
+
+ test("last result becomes first result when flipping sort order", async ({
+ page,
+ }) => {
+ await clickLastPaginationPage(page);
+
+ await waitForSearchResultsInitialLoad(page);
+
+ const lastSearchResultTitle = await getLastSearchResultTitle(page);
+
+ await selectOppositeSortOption(page);
+
+ const firstSearchResultTitle = await getFirstSearchResultTitle(page);
+
+ expect(firstSearchResultTitle).toBe(lastSearchResultTitle);
+ });
+
+ test("number of results is the same with none or all opportunity status checked", async ({
+ page,
+ }) => {
+ const initialNumberOfOpportunityResults =
+ await getNumberOfOpportunitySearchResults(page);
+
+ // check all 4 boxes
+ const statusCheckboxes = {
+ "status-forecasted": "forecasted",
+ "status-posted": "posted",
+ "status-closed": "closed",
+ "status-archived": "archived",
+ };
+
+ await toggleCheckboxes(page, statusCheckboxes, "status");
+
+ const updatedNumberOfOpportunityResults =
+ await getNumberOfOpportunitySearchResults(page);
+
+ expect(initialNumberOfOpportunityResults).toBe(
+ updatedNumberOfOpportunityResults,
+ );
+ });
});
diff --git a/frontend/tests/e2e/search/searchUtil.ts b/frontend/tests/e2e/search/searchSpecUtil.ts
similarity index 59%
rename from frontend/tests/e2e/search/searchUtil.ts
rename to frontend/tests/e2e/search/searchSpecUtil.ts
index 87d066533..f54d32b15 100644
--- a/frontend/tests/e2e/search/searchUtil.ts
+++ b/frontend/tests/e2e/search/searchSpecUtil.ts
@@ -19,9 +19,16 @@ export function expectURLContainsQueryParam(
page: Page,
queryParamName: string,
queryParamValue: string,
+ shouldContain = true,
) {
const currentURL = page.url();
- expect(currentURL).toContain(`${queryParamName}=${queryParamValue}`);
+ const queryParam = `${queryParamName}=${queryParamValue}`;
+
+ if (shouldContain) {
+ expect(currentURL).toContain(queryParam);
+ } else {
+ expect(currentURL).not.toContain(queryParam);
+ }
}
export async function waitForURLContainsQueryParam(
@@ -116,7 +123,7 @@ export async function expectSortBy(page: Page, value: string) {
expect(selectedValue).toBe(value);
}
-export async function waitForSearchResultsLoaded(page: Page) {
+export async function waitForSearchResultsInitialLoad(page: Page) {
// Wait for number of opportunities to show
const resultsHeading = page.locator('h2:has-text("Opportunities")');
await resultsHeading.waitFor({ state: "visible", timeout: 60000 });
@@ -130,3 +137,71 @@ export async function clickAccordionWithTitle(
.locator(`button.usa-accordion__button:has-text("${accordionTitle}")`)
.click();
}
+
+export async function clickPaginationPageNumber(
+ page: Page,
+ pageNumber: number,
+) {
+ const paginationButton = page.locator(
+ `button[data-testid="pagination-page-number"][aria-label="Page ${pageNumber}"]`,
+ );
+ await paginationButton.first().click();
+}
+
+export async function clickLastPaginationPage(page: Page) {
+ const paginationButtons = page.locator("li > button");
+ const count = await paginationButtons.count();
+
+ // must be more than 1 page
+ if (count > 2) {
+ await paginationButtons.nth(count - 2).click();
+ }
+}
+
+export async function getFirstSearchResultTitle(page: Page) {
+ const firstResultSelector = page.locator(
+ ".usa-list--unstyled > li:first-child h2 a",
+ );
+ return await firstResultSelector.textContent();
+}
+
+export async function getLastSearchResultTitle(page: Page) {
+ const lastResultSelector = page.locator(
+ ".usa-list--unstyled > li:last-child h2 a",
+ );
+ return await lastResultSelector.textContent();
+}
+
+// If descending, select the ascending variant
+export async function selectOppositeSortOption(page: Page) {
+ const sortByDropdown = page.locator("#search-sort-by-select");
+ const currentValue = await sortByDropdown.inputValue();
+ let oppositeValue;
+
+ if (currentValue.includes("Asc")) {
+ oppositeValue = currentValue.replace("Asc", "Desc");
+ } else if (currentValue.includes("Desc")) {
+ oppositeValue = currentValue.replace("Desc", "Asc");
+ } else {
+ throw new Error(`Unexpected sort value: ${currentValue}`);
+ }
+
+ await sortByDropdown.selectOption(oppositeValue);
+}
+
+export async function waitForLoaderToBeHidden(page: Page) {
+ await page.waitForSelector(
+ ".display-flex.flex-align-center.flex-justify-center.margin-bottom-15.margin-top-15",
+ { state: "hidden" },
+ );
+}
+
+export async function getNumberOfOpportunitySearchResults(page: Page) {
+ await waitForLoaderToBeHidden(page);
+ const opportunitiesText = await page
+ .locator("h2.tablet-lg\\:grid-col-fill")
+ .textContent();
+ return opportunitiesText
+ ? parseInt(opportunitiesText.replace(/\D/g, ""), 10)
+ : 0;
+}
From cd18a47fb821c2d1bb56fb779149d8d172ee4a48 Mon Sep 17 00:00:00 2001
From: Ryan Lewis <93001277+rylew1@users.noreply.github.com>
Date: Wed, 22 May 2024 10:48:20 -0700
Subject: [PATCH 06/21] [Issue #1957]: sortby posted date desc default (#4)
## Summary
Fixes #1957
## Changes proposed
- Update sortby labels and ordering
---
frontend/src/app/api/SearchOpportunityAPI.ts | 10 ++++++----
.../src/components/search/SearchSortBy.tsx | 20 +++++++++----------
.../src/types/search/searchRequestTypes.ts | 8 +++++++-
.../components/search/SearchSortBy.test.tsx | 6 +++---
4 files changed, 26 insertions(+), 18 deletions(-)
diff --git a/frontend/src/app/api/SearchOpportunityAPI.ts b/frontend/src/app/api/SearchOpportunityAPI.ts
index c515bb7bc..36fdb31ac 100644
--- a/frontend/src/app/api/SearchOpportunityAPI.ts
+++ b/frontend/src/app/api/SearchOpportunityAPI.ts
@@ -109,7 +109,7 @@ export default class SearchOpportunityAPI extends BaseApi {
closeDate: "close_date",
};
- let order_by: PaginationOrderBy = "opportunity_id";
+ let order_by: PaginationOrderBy = "post_date";
if (sortby) {
for (const [key, value] of Object.entries(orderByFieldLookup)) {
if (sortby.startsWith(key)) {
@@ -119,9 +119,11 @@ export default class SearchOpportunityAPI extends BaseApi {
}
}
- const sort_direction: PaginationSortDirection = sortby?.endsWith("Desc")
- ? "descending"
- : "ascending";
+ // default to descending
+ let sort_direction: PaginationSortDirection = "descending";
+ if (sortby) {
+ sort_direction = sortby?.endsWith("Desc") ? "descending" : "ascending";
+ }
return {
order_by,
diff --git a/frontend/src/components/search/SearchSortBy.tsx b/frontend/src/components/search/SearchSortBy.tsx
index ebd706898..5c5475534 100644
--- a/frontend/src/components/search/SearchSortBy.tsx
+++ b/frontend/src/components/search/SearchSortBy.tsx
@@ -7,16 +7,16 @@ type SortOption = {
};
const SORT_OPTIONS: SortOption[] = [
- { label: "Opportunity Number (Ascending)", value: "opportunityNumberAsc" },
- { label: "Opportunity Number (Descending)", value: "opportunityNumberDesc" },
- { label: "Opportunity Title (Ascending)", value: "opportunityTitleAsc" },
- { label: "Opportunity Title (Descending)", value: "opportunityTitleDesc" },
- { label: "Agency (Ascending)", value: "agencyAsc" },
- { label: "Agency (Descending)", value: "agencyDesc" },
- { label: "Posted Date (Ascending)", value: "postedDateAsc" },
- { label: "Posted Date (Descending)", value: "postedDateDesc" },
- { label: "Close Date (Ascending)", value: "closeDateAsc" },
- { label: "Close Date (Descending)", value: "closeDateDesc" },
+ { label: "Posted Date (newest)", value: "postedDateDesc" },
+ { label: "Posted Date (oldest)", value: "postedDateAsc" },
+ { label: "Close Date (newest)", value: "closeDateDesc" },
+ { label: "Close Date (oldest)", value: "closeDateAsc" },
+ { label: "Opportunity Title (A to Z)", value: "opportunityTitleAsc" },
+ { label: "Opportunity Title (Z to A)", value: "opportunityTitleDesc" },
+ { label: "Agency (A to Z)", value: "agencyAsc" },
+ { label: "Agency (Z to A)", value: "agencyDesc" },
+ { label: "Opportunity Number (descending)", value: "opportunityNumberDesc" },
+ { label: "Opportunity Number (ascending)", value: "opportunityNumberAsc" },
];
interface SearchSortByProps {
diff --git a/frontend/src/types/search/searchRequestTypes.ts b/frontend/src/types/search/searchRequestTypes.ts
index 83afcad5c..94e78635f 100644
--- a/frontend/src/types/search/searchRequestTypes.ts
+++ b/frontend/src/types/search/searchRequestTypes.ts
@@ -6,7 +6,13 @@ export interface SearchFilterRequestBody {
funding_category?: { one_of: string[] };
}
-export type PaginationOrderBy = "opportunity_id" | "opportunity_number";
+export type PaginationOrderBy =
+ | "opportunity_id"
+ | "opportunity_number"
+ | "opportunity_title"
+ | "agency_code"
+ | "post_date"
+ | "close_date";
export type PaginationSortDirection = "ascending" | "descending";
export interface PaginationRequestBody {
order_by: PaginationOrderBy;
diff --git a/frontend/tests/components/search/SearchSortBy.test.tsx b/frontend/tests/components/search/SearchSortBy.test.tsx
index 3dff473bd..17b6f732e 100644
--- a/frontend/tests/components/search/SearchSortBy.test.tsx
+++ b/frontend/tests/components/search/SearchSortBy.test.tsx
@@ -12,7 +12,7 @@ jest.mock("../../../src/hooks/useSearchParamUpdater", () => ({
}));
describe("SearchSortBy", () => {
- const initialQueryParams = "opportunityNumberAsc";
+ const initialQueryParams = "postedDateDesc";
const mockFormRef = React.createRef();
it("should not have basic accessibility issues", async () => {
@@ -36,7 +36,7 @@ describe("SearchSortBy", () => {
);
expect(
- screen.getByDisplayValue("Opportunity Number (Ascending)"),
+ screen.getByDisplayValue("Posted Date (newest)"),
).toBeInTheDocument();
});
@@ -57,7 +57,7 @@ describe("SearchSortBy", () => {
});
expect(
- screen.getByDisplayValue("Opportunity Title (Descending)"),
+ screen.getByDisplayValue("Opportunity Title (Z to A)"),
).toBeInTheDocument();
expect(requestSubmitMock).toHaveBeenCalled();
From 16f708e17e6716ec852da07116d370acfd43245b Mon Sep 17 00:00:00 2001
From: Michael Chouinard <46358556+chouinar@users.noreply.github.com>
Date: Wed, 22 May 2024 13:48:48 -0400
Subject: [PATCH 07/21] Upgrade dependencies for API (May 21, 2024) (#48)
### Time to review: __1 mins__
## Changes proposed
Needed to upgrade dependencies for the API for grype issue:
https://github.com/navapbc/simpler-grants-gov/actions/runs/9180615894/job/25245519194?pr=47
## Additional information
As usual, just ran `poetry update`
---
api/poetry.lock | 53 ++++++++++++++++++++-----------------------------
1 file changed, 21 insertions(+), 32 deletions(-)
diff --git a/api/poetry.lock b/api/poetry.lock
index 2b372c21e..5fe4fa9e1 100644
--- a/api/poetry.lock
+++ b/api/poetry.lock
@@ -21,13 +21,13 @@ tz = ["backports.zoneinfo"]
[[package]]
name = "annotated-types"
-version = "0.6.0"
+version = "0.7.0"
description = "Reusable constraint types to use with typing.Annotated"
optional = false
python-versions = ">=3.8"
files = [
- {file = "annotated_types-0.6.0-py3-none-any.whl", hash = "sha256:0641064de18ba7a25dee8f96403ebc39113d0cb953a01429249d5c7564666a43"},
- {file = "annotated_types-0.6.0.tar.gz", hash = "sha256:563339e807e53ffd9c267e99fc6d9ea23eb8443c08f112651963e24e22f84a5d"},
+ {file = "annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53"},
+ {file = "annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89"},
]
[[package]]
@@ -156,17 +156,17 @@ files = [
[[package]]
name = "boto3"
-version = "1.34.103"
+version = "1.34.110"
description = "The AWS SDK for Python"
optional = false
python-versions = ">=3.8"
files = [
- {file = "boto3-1.34.103-py3-none-any.whl", hash = "sha256:59b6499f1bb423dd99de6566a20d0a7cf1a5476824be3a792290fd86600e8365"},
- {file = "boto3-1.34.103.tar.gz", hash = "sha256:58d097241f3895c4a4c80c9e606689c6e06d77f55f9f53a4cc02dee7e03938b9"},
+ {file = "boto3-1.34.110-py3-none-any.whl", hash = "sha256:2fc871b4a5090716c7a71af52c462e539529227f4d4888fd04896d5028f9cedc"},
+ {file = "boto3-1.34.110.tar.gz", hash = "sha256:83ffe2273da7bdfdb480d85b0705f04e95bd110e9741f23328b7c76c03e6d53c"},
]
[package.dependencies]
-botocore = ">=1.34.103,<1.35.0"
+botocore = ">=1.34.110,<1.35.0"
jmespath = ">=0.7.1,<2.0.0"
s3transfer = ">=0.10.0,<0.11.0"
@@ -175,13 +175,13 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"]
[[package]]
name = "botocore"
-version = "1.34.103"
+version = "1.34.110"
description = "Low-level, data-driven core of boto 3."
optional = false
python-versions = ">=3.8"
files = [
- {file = "botocore-1.34.103-py3-none-any.whl", hash = "sha256:0330d139f18f78d38127e65361859e24ebd6a8bcba184f903c01bb999a3fa431"},
- {file = "botocore-1.34.103.tar.gz", hash = "sha256:5f07e2c7302c0a9f469dcd08b4ddac152e9f5888b12220242c20056255010939"},
+ {file = "botocore-1.34.110-py3-none-any.whl", hash = "sha256:1edf3a825ec0a5edf238b2d42ad23305de11d5a71bb27d6f9a58b7e8862df1b6"},
+ {file = "botocore-1.34.110.tar.gz", hash = "sha256:b2c98c40ecf0b1facb9e61ceb7dfa28e61ae2456490554a16c8dbf99f20d6a18"},
]
[package.dependencies]
@@ -836,13 +836,13 @@ files = [
[[package]]
name = "mako"
-version = "1.3.3"
+version = "1.3.5"
description = "A super-fast templating language that borrows the best ideas from the existing templating languages."
optional = false
python-versions = ">=3.8"
files = [
- {file = "Mako-1.3.3-py3-none-any.whl", hash = "sha256:5324b88089a8978bf76d1629774fcc2f1c07b82acdf00f4c5dd8ceadfffc4b40"},
- {file = "Mako-1.3.3.tar.gz", hash = "sha256:e16c01d9ab9c11f7290eef1cfefc093fb5a45ee4a3da09e2fec2e4d1bae54e73"},
+ {file = "Mako-1.3.5-py3-none-any.whl", hash = "sha256:260f1dbc3a519453a9c856dedfe4beb4e50bd5a26d96386cb6c80856556bb91a"},
+ {file = "Mako-1.3.5.tar.gz", hash = "sha256:48dbc20568c1d276a2698b36d968fa76161bf127194907ea6fc594fa81f943bc"},
]
[package.dependencies]
@@ -978,7 +978,7 @@ files = [
[package.dependencies]
marshmallow = [
- {version = ">=3.13.0,<4.0"},
+ {version = ">=3.13.0,<4.0", optional = true, markers = "python_version < \"3.7\" or extra != \"enum\""},
{version = ">=3.18.0,<4.0", optional = true, markers = "python_version >= \"3.7\" and extra == \"enum\""},
]
typeguard = {version = ">=2.4.1,<4.0.0", optional = true, markers = "extra == \"union\""}
@@ -1141,13 +1141,13 @@ files = [
[[package]]
name = "platformdirs"
-version = "4.2.1"
+version = "4.2.2"
description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`."
optional = false
python-versions = ">=3.8"
files = [
- {file = "platformdirs-4.2.1-py3-none-any.whl", hash = "sha256:17d5a1161b3fd67b390023cb2d3b026bbd40abde6fdb052dfbd3a29c3ba22ee1"},
- {file = "platformdirs-4.2.1.tar.gz", hash = "sha256:031cd18d4ec63ec53e82dceaac0417d218a6863f7745dfcc9efe7793b7039bdf"},
+ {file = "platformdirs-4.2.2-py3-none-any.whl", hash = "sha256:2d7a1657e36a80ea911db832a8a6ece5ee53d8de21edd5cc5879af6530b1bfee"},
+ {file = "platformdirs-4.2.2.tar.gz", hash = "sha256:38b7b51f512eed9e84a22788b4bce1de17c0adb134d6becb09836e37d8654cd3"},
]
[package.extras]
@@ -1563,7 +1563,6 @@ files = [
{file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"},
{file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"},
{file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"},
- {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"},
{file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"},
{file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"},
{file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"},
@@ -1571,16 +1570,8 @@ files = [
{file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"},
{file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"},
{file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"},
- {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"},
{file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"},
{file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"},
- {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"},
- {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"},
- {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a08c6f0fe150303c1c6b71ebcd7213c2858041a7e01975da3a99aed1e7a378ef"},
- {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"},
- {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"},
- {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"},
- {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"},
{file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"},
{file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"},
{file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"},
@@ -1597,7 +1588,6 @@ files = [
{file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"},
{file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"},
{file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"},
- {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"},
{file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"},
{file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"},
{file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"},
@@ -1605,7 +1595,6 @@ files = [
{file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"},
{file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"},
{file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"},
- {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"},
{file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"},
{file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"},
{file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"},
@@ -1613,13 +1602,13 @@ files = [
[[package]]
name = "requests"
-version = "2.31.0"
+version = "2.32.2"
description = "Python HTTP for Humans."
optional = false
-python-versions = ">=3.7"
+python-versions = ">=3.8"
files = [
- {file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"},
- {file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"},
+ {file = "requests-2.32.2-py3-none-any.whl", hash = "sha256:fc06670dd0ed212426dfeb94fc1b983d917c4f9847c863f313c9dfaaffb7c23c"},
+ {file = "requests-2.32.2.tar.gz", hash = "sha256:dd951ff5ecf3e3b3aa26b40703ba77495dab41da839ae72ef3c8e5d8e2433289"},
]
[package.dependencies]
From 25b0295506439ff8dacfded16269ecc21d9edc4a Mon Sep 17 00:00:00 2001
From: Michael Chouinard <46358556+chouinar@users.noreply.github.com>
Date: Wed, 22 May 2024 13:58:12 -0400
Subject: [PATCH 08/21] [Issue #9] Setup opensearch locally (#39)
## Summary
Fixes #9
### Time to review: __10 mins__
## Changes proposed
Setup a search index to run locally via Docker
Updated makefile to automatically initialize the index + added a script
to wait for the index to start up before proceeding.
Setup a very basic client for connecting to the search index (will be
expanded more in subsequent PRs)
Basic test / test utils to verify it is working (also will be expanded)
## Context for reviewers
This is the first step in getting the search index working locally. This
actually gets it running, and the client works, we just aren't doing
anything meaningful with it yet besides tests.
## Additional information
This doesn't yet create an index that we can use, except in the test.
However, if you want to test out a search index, you can go to
http://localhost:5601/app/dev_tools#/console (after running `make init`)
to run some queries against the (one node) cluster.
https://opensearch.org/docs/latest/getting-started/communicate/#sending-requests-in-dev-tools
provides some examples of how to create + use indexes that you can
follow.
---
api/Makefile | 15 ++++-
api/bin/wait-for-local-opensearch.sh | 31 +++++++++
api/docker-compose.yml | 37 +++++++++++
api/local.env | 9 +++
api/poetry.lock | 66 ++++++++++++++++---
api/pyproject.toml | 7 ++
api/src/adapters/search/__init__.py | 4 ++
api/src/adapters/search/opensearch_client.py | 36 ++++++++++
api/src/adapters/search/opensearch_config.py | 33 ++++++++++
api/tests/conftest.py | 29 ++++++++
api/tests/src/adapters/search/__init__.py | 0
.../src/adapters/search/test_opensearch.py | 58 ++++++++++++++++
12 files changed, 315 insertions(+), 10 deletions(-)
create mode 100755 api/bin/wait-for-local-opensearch.sh
create mode 100644 api/src/adapters/search/__init__.py
create mode 100644 api/src/adapters/search/opensearch_client.py
create mode 100644 api/src/adapters/search/opensearch_config.py
create mode 100644 api/tests/src/adapters/search/__init__.py
create mode 100644 api/tests/src/adapters/search/test_opensearch.py
diff --git a/api/Makefile b/api/Makefile
index f2774d3a7..d5daab1d2 100644
--- a/api/Makefile
+++ b/api/Makefile
@@ -100,7 +100,7 @@ start-debug:
run-logs: start
docker-compose logs --follow --no-color $(APP_NAME)
-init: build init-db
+init: build init-db init-opensearch
clean-volumes: ## Remove project docker volumes (which includes the DB state)
docker-compose down --volumes
@@ -179,6 +179,19 @@ create-erds: # Create ERD diagrams for our DB schema
setup-postgres-db: ## Does any initial setup necessary for our local database to work
$(PY_RUN_CMD) setup-postgres-db
+##################################################
+# Opensearch
+##################################################
+
+init-opensearch: start-opensearch
+# TODO - in subsequent PRs, we'll add more to this command to setup the search index locally
+
+start-opensearch:
+ docker-compose up --detach opensearch-node
+ docker-compose up --detach opensearch-dashboards
+ ./bin/wait-for-local-opensearch.sh
+
+
##################################################
# Testing
diff --git a/api/bin/wait-for-local-opensearch.sh b/api/bin/wait-for-local-opensearch.sh
new file mode 100755
index 000000000..a14af8048
--- /dev/null
+++ b/api/bin/wait-for-local-opensearch.sh
@@ -0,0 +1,31 @@
+#!/bin/bash
+# wait-for-local-opensearch
+
+set -e
+
+# Color formatting
+RED='\033[0;31m'
+NO_COLOR='\033[0m'
+
+MAX_WAIT_TIME=30 # seconds
+WAIT_TIME=0
+
+# Curl the healthcheck endpoint of the local opensearch
+# until it returns a success response
+until curl --output /dev/null --silent http://localhost:9200/_cluster/health;
+do
+ echo "waiting on OpenSearch to initialize..."
+ sleep 3
+
+ WAIT_TIME=$(($WAIT_TIME+3))
+ if [ $WAIT_TIME -gt $MAX_WAIT_TIME ]
+ then
+ echo -e "${RED}ERROR: OpenSearch appears to not be starting up, running \"docker logs opensearch-node\" to troubleshoot.${NO_COLOR}"
+ docker logs opensearch-node
+ exit 1
+ fi
+done
+
+echo "OpenSearch is ready after ~${WAIT_TIME} seconds"
+
+
diff --git a/api/docker-compose.yml b/api/docker-compose.yml
index a364c74c3..9ec206214 100644
--- a/api/docker-compose.yml
+++ b/api/docker-compose.yml
@@ -12,6 +12,41 @@ services:
volumes:
- grantsdbdata:/var/lib/postgresql/data
+ opensearch-node:
+ image: opensearchproject/opensearch:latest
+ container_name: opensearch-node
+ environment:
+ - cluster.name=opensearch-cluster # Name the cluster
+ - node.name=opensearch-node # Name the node that will run in this container
+ - discovery.type=single-node # Nodes to look for when discovering the cluster
+ - bootstrap.memory_lock=true # Disable JVM heap memory swapping
+ - "OPENSEARCH_JAVA_OPTS=-Xms512m -Xmx512m" # Set min and max JVM heap sizes to at least 50% of system RAM
+ - DISABLE_INSTALL_DEMO_CONFIG=true # Prevents execution of bundled demo script which installs demo certificates and security configurations to OpenSearch
+ - DISABLE_SECURITY_PLUGIN=true # Disables Security plugin
+ ulimits:
+ memlock:
+ soft: -1 # Set memlock to unlimited (no soft or hard limit)
+ hard: -1
+ nofile:
+ soft: 65536 # Maximum number of open files for the opensearch user - set to at least 65536
+ hard: 65536
+ volumes:
+ - opensearch-data:/usr/share/opensearch/data # Creates volume called opensearch-data and mounts it to the container
+ ports:
+ - 9200:9200 # REST API
+ - 9600:9600 # Performance Analyzer
+
+ opensearch-dashboards:
+ image: opensearchproject/opensearch-dashboards:latest
+ container_name: opensearch-dashboards
+ ports:
+ - 5601:5601 # Map host port 5601 to container port 5601
+ expose:
+ - "5601" # Expose port 5601 for web access to OpenSearch Dashboards
+ environment:
+ - 'OPENSEARCH_HOSTS=["http://opensearch-node:9200"]'
+ - DISABLE_SECURITY_DASHBOARDS_PLUGIN=true # disables security dashboards plugin in OpenSearch Dashboards
+
grants-api:
build:
context: .
@@ -28,6 +63,8 @@ services:
- .:/api
depends_on:
- grants-db
+ - opensearch-node
volumes:
grantsdbdata:
+ opensearch-data:
diff --git a/api/local.env b/api/local.env
index fc1c1c1a4..4ca4c86b5 100644
--- a/api/local.env
+++ b/api/local.env
@@ -59,6 +59,15 @@ DB_SSL_MODE=allow
# could contain sensitive information.
HIDE_SQL_PARAMETER_LOGS=TRUE
+############################
+# Opensearch Environment Variables
+############################
+
+OPENSEARCH_HOST=opensearch-node
+OPENSEARCH_PORT=9200
+OPENSEARCH_USE_SSL=FALSE
+OPENSEARCH_VERIFY_CERTS=FALSE
+
############################
# AWS Defaults
############################
diff --git a/api/poetry.lock b/api/poetry.lock
index 5fe4fa9e1..017f1460e 100644
--- a/api/poetry.lock
+++ b/api/poetry.lock
@@ -1106,6 +1106,30 @@ files = [
{file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"},
]
+[[package]]
+name = "opensearch-py"
+version = "2.5.0"
+description = "Python client for OpenSearch"
+optional = false
+python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,<4,>=2.7"
+files = [
+ {file = "opensearch-py-2.5.0.tar.gz", hash = "sha256:0dde4ac7158a717d92a8cd81964cb99705a4b80bcf9258ba195b9a9f23f5226d"},
+ {file = "opensearch_py-2.5.0-py2.py3-none-any.whl", hash = "sha256:cf093a40e272b60663f20417fc1264ac724dcf1e03c1a4542a6b44835b1e6c49"},
+]
+
+[package.dependencies]
+certifi = ">=2022.12.07"
+python-dateutil = "*"
+requests = ">=2.4.0,<3.0.0"
+six = "*"
+urllib3 = ">=1.26.18,<2"
+
+[package.extras]
+async = ["aiohttp (>=3,<4)"]
+develop = ["black", "botocore", "coverage (<8.0.0)", "jinja2", "mock", "myst-parser", "pytest (>=3.0.0)", "pytest-cov", "pytest-mock (<4.0.0)", "pytz", "pyyaml", "requests (>=2.0.0,<3.0.0)", "sphinx", "sphinx-copybutton", "sphinx-rtd-theme"]
+docs = ["aiohttp (>=3,<4)", "myst-parser", "sphinx", "sphinx-copybutton", "sphinx-rtd-theme"]
+kerberos = ["requests-kerberos"]
+
[[package]]
name = "packaging"
version = "24.0"
@@ -1902,6 +1926,31 @@ files = [
{file = "types_PyYAML-6.0.12.20240311-py3-none-any.whl", hash = "sha256:b845b06a1c7e54b8e5b4c683043de0d9caf205e7434b3edc678ff2411979b8f6"},
]
+[[package]]
+name = "types-requests"
+version = "2.31.0.1"
+description = "Typing stubs for requests"
+optional = false
+python-versions = "*"
+files = [
+ {file = "types-requests-2.31.0.1.tar.gz", hash = "sha256:3de667cffa123ce698591de0ad7db034a5317457a596eb0b4944e5a9d9e8d1ac"},
+ {file = "types_requests-2.31.0.1-py3-none-any.whl", hash = "sha256:afb06ef8f25ba83d59a1d424bd7a5a939082f94b94e90ab5e6116bd2559deaa3"},
+]
+
+[package.dependencies]
+types-urllib3 = "*"
+
+[[package]]
+name = "types-urllib3"
+version = "1.26.25.14"
+description = "Typing stubs for urllib3"
+optional = false
+python-versions = "*"
+files = [
+ {file = "types-urllib3-1.26.25.14.tar.gz", hash = "sha256:229b7f577c951b8c1b92c1bc2b2fdb0b49847bd2af6d1cc2a2e3dd340f3bda8f"},
+ {file = "types_urllib3-1.26.25.14-py3-none-any.whl", hash = "sha256:9683bbb7fb72e32bfe9d2be6e04875fbe1b3eeec3cbb4ea231435aa7fd6b4f0e"},
+]
+
[[package]]
name = "typing-extensions"
version = "4.11.0"
@@ -1941,20 +1990,19 @@ files = [
[[package]]
name = "urllib3"
-version = "2.2.1"
+version = "1.26.18"
description = "HTTP library with thread-safe connection pooling, file post, and more."
optional = false
-python-versions = ">=3.8"
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*"
files = [
- {file = "urllib3-2.2.1-py3-none-any.whl", hash = "sha256:450b20ec296a467077128bff42b73080516e71b56ff59a60a02bef2232c4fa9d"},
- {file = "urllib3-2.2.1.tar.gz", hash = "sha256:d0570876c61ab9e520d776c38acbbb5b05a776d3f9ff98a5c8fd5162a444cf19"},
+ {file = "urllib3-1.26.18-py2.py3-none-any.whl", hash = "sha256:34b97092d7e0a3a8cf7cd10e386f401b3737364026c45e622aa02903dffe0f07"},
+ {file = "urllib3-1.26.18.tar.gz", hash = "sha256:f8ecc1bba5667413457c529ab955bf8c67b45db799d159066261719e328580a0"},
]
[package.extras]
-brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"]
-h2 = ["h2 (>=4,<5)"]
-socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"]
-zstd = ["zstandard (>=0.18.0)"]
+brotli = ["brotli (==1.0.9)", "brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotlipy (>=0.6.0)"]
+secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress", "pyOpenSSL (>=0.14)", "urllib3-secure-extra"]
+socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"]
[[package]]
name = "watchdog"
@@ -2050,4 +2098,4 @@ files = [
[metadata]
lock-version = "2.0"
python-versions = "^3.12"
-content-hash = "c53875955c1b910c3d4aa1748dce786e3cfa6f507895d7ca4111391333decb13"
+content-hash = "9671a2d68d2b1bc91b8ce111a7a32d08292475e0d1c4f058c33bf650349757e0"
diff --git a/api/pyproject.toml b/api/pyproject.toml
index f0a06b447..0f3c2f10b 100644
--- a/api/pyproject.toml
+++ b/api/pyproject.toml
@@ -22,6 +22,7 @@ gunicorn = "^22.0.0"
psycopg = { extras = ["binary"], version = "^3.1.10" }
pydantic-settings = "^2.0.3"
flask-cors = "^4.0.0"
+opensearch-py = "^2.5.0"
[tool.poetry.group.dev.dependencies]
black = "^23.9.1"
@@ -43,6 +44,12 @@ sadisplay = "0.4.9"
ruff = "^0.4.0"
debugpy = "^1.8.1"
freezegun = "^1.5.0"
+# This isn't the latest version of types-requests
+# because otherwise it depends on urllib3 v2 but opensearch-py
+# needs urlib3 v1. This should be temporary as opensearch-py
+# has an unreleased change to switch to v2, so I'm guessing
+# in the next few weeks we can just make this the latest?
+types-requests = "2.31.0.1"
[build-system]
requires = ["poetry-core>=1.0.0"]
diff --git a/api/src/adapters/search/__init__.py b/api/src/adapters/search/__init__.py
new file mode 100644
index 000000000..166441e1d
--- /dev/null
+++ b/api/src/adapters/search/__init__.py
@@ -0,0 +1,4 @@
+from src.adapters.search.opensearch_client import SearchClient, get_opensearch_client
+from src.adapters.search.opensearch_config import get_opensearch_config
+
+__all__ = ["SearchClient", "get_opensearch_client", "get_opensearch_config"]
diff --git a/api/src/adapters/search/opensearch_client.py b/api/src/adapters/search/opensearch_client.py
new file mode 100644
index 000000000..dadcfd7c4
--- /dev/null
+++ b/api/src/adapters/search/opensearch_client.py
@@ -0,0 +1,36 @@
+from typing import Any
+
+import opensearchpy
+
+from src.adapters.search.opensearch_config import OpensearchConfig, get_opensearch_config
+
+# More configuration/setup coming in:
+# TODO - https://github.com/navapbc/simpler-grants-gov/issues/13
+
+# Alias the OpenSearch client so that it doesn't need to be imported everywhere
+# and to make it clear it's a client
+SearchClient = opensearchpy.OpenSearch
+
+
+def get_opensearch_client(
+ opensearch_config: OpensearchConfig | None = None,
+) -> SearchClient:
+ if opensearch_config is None:
+ opensearch_config = get_opensearch_config()
+
+ # See: https://opensearch.org/docs/latest/clients/python-low-level/ for more details
+ return opensearchpy.OpenSearch(**_get_connection_parameters(opensearch_config))
+
+
+def _get_connection_parameters(opensearch_config: OpensearchConfig) -> dict[str, Any]:
+ # TODO - we'll want to add the AWS connection params here when we set that up
+ # See: https://opensearch.org/docs/latest/clients/python-low-level/#connecting-to-amazon-opensearch-serverless
+
+ return dict(
+ hosts=[{"host": opensearch_config.host, "port": opensearch_config.port}],
+ http_compress=True,
+ use_ssl=opensearch_config.use_ssl,
+ verify_certs=opensearch_config.verify_certs,
+ ssl_assert_hostname=False,
+ ssl_show_warn=False,
+ )
diff --git a/api/src/adapters/search/opensearch_config.py b/api/src/adapters/search/opensearch_config.py
new file mode 100644
index 000000000..4975feb3e
--- /dev/null
+++ b/api/src/adapters/search/opensearch_config.py
@@ -0,0 +1,33 @@
+import logging
+
+from pydantic import Field
+from pydantic_settings import SettingsConfigDict
+
+from src.util.env_config import PydanticBaseEnvConfig
+
+logger = logging.getLogger(__name__)
+
+
+class OpensearchConfig(PydanticBaseEnvConfig):
+ model_config = SettingsConfigDict(env_prefix="OPENSEARCH_")
+
+ host: str # OPENSEARCH_HOST
+ port: int # OPENSEARCH_PORT
+ use_ssl: bool = Field(default=True) # OPENSEARCH_USE_SSL
+ verify_certs: bool = Field(default=True) # OPENSEARCH_VERIFY_CERTS
+
+
+def get_opensearch_config() -> OpensearchConfig:
+ opensearch_config = OpensearchConfig()
+
+ logger.info(
+ "Constructed opensearch configuration",
+ extra={
+ "host": opensearch_config.host,
+ "port": opensearch_config.port,
+ "use_ssl": opensearch_config.use_ssl,
+ "verify_certs": opensearch_config.verify_certs,
+ },
+ )
+
+ return opensearch_config
diff --git a/api/tests/conftest.py b/api/tests/conftest.py
index 928932b67..97173e9a7 100644
--- a/api/tests/conftest.py
+++ b/api/tests/conftest.py
@@ -11,6 +11,7 @@
import src.adapters.db as db
import src.app as app_entry
import tests.src.db.models.factories as factories
+from src.adapters import search
from src.constants.schema import Schemas
from src.db import models
from src.db.models.lookup.sync_lookup_values import sync_lookup_values
@@ -143,6 +144,34 @@ def test_foreign_schema(db_schema_prefix):
return f"{db_schema_prefix}{Schemas.LEGACY}"
+####################
+# Opensearch Fixtures
+####################
+
+
+@pytest.fixture(scope="session")
+def search_client() -> search.SearchClient:
+ return search.get_opensearch_client()
+
+
+@pytest.fixture(scope="session")
+def opportunity_index(search_client):
+ # TODO - will adjust this in the future to use utils we'll build
+ # for setting up / aliasing indexes. For now, keep it simple
+
+ # create a random index name just to make sure it won't ever conflict
+ # with an actual one, similar to how we create schemas for database tests
+ index_name = f"test_{uuid.uuid4().int}_opportunity"
+
+ search_client.indices.create(index_name, body={})
+
+ try:
+ yield index_name
+ finally:
+ # Try to clean up the index at the end
+ search_client.indices.delete(index_name)
+
+
####################
# Test App & Client
####################
diff --git a/api/tests/src/adapters/search/__init__.py b/api/tests/src/adapters/search/__init__.py
new file mode 100644
index 000000000..e69de29bb
diff --git a/api/tests/src/adapters/search/test_opensearch.py b/api/tests/src/adapters/search/test_opensearch.py
new file mode 100644
index 000000000..490ffcb3b
--- /dev/null
+++ b/api/tests/src/adapters/search/test_opensearch.py
@@ -0,0 +1,58 @@
+########################################
+# This is a placeholder set of tests,
+# we'll evolve / change the structure
+# as we continue developing this
+#
+# Just wanted something simple so I can verify
+# the early steps of this setup are working
+# before we actually have code to use
+########################################
+
+
+def test_index_is_running(search_client, opportunity_index):
+ # Very simple test, will rewrite / remove later once we have something
+ # more meaningful to test.
+
+ existing_indexes = search_client.cat.indices(format="json")
+
+ found_opportunity_index = False
+ for index in existing_indexes:
+ if index["index"] == opportunity_index:
+ found_opportunity_index = True
+ break
+
+ assert found_opportunity_index is True
+
+ # Add a few records to the index
+
+ record1 = {
+ "opportunity_id": 1,
+ "opportunity_title": "Research into how to make a search engine",
+ "opportunity_status": "posted",
+ }
+ record2 = {
+ "opportunity_id": 2,
+ "opportunity_title": "Research about words, and more words!",
+ "opportunity_status": "forecasted",
+ }
+
+ search_client.index(index=opportunity_index, body=record1, id=1, refresh=True)
+ search_client.index(index=opportunity_index, body=record2, id=2, refresh=True)
+
+ search_request = {
+ "query": {
+ "bool": {
+ "must": {
+ "simple_query_string": {"query": "research", "fields": ["opportunity_title"]}
+ }
+ }
+ }
+ }
+ response = search_client.search(index=opportunity_index, body=search_request)
+ assert response["hits"]["total"]["value"] == 2
+
+ filter_request = {
+ "query": {"bool": {"filter": [{"terms": {"opportunity_status": ["forecasted"]}}]}}
+ }
+ response = search_client.search(index=opportunity_index, body=filter_request)
+ assert response["hits"]["total"]["value"] == 1
From b40344d25f3e6ae65ed11012c0b24410f60e03e4 Mon Sep 17 00:00:00 2001
From: Michael Chouinard <46358556+chouinar@users.noreply.github.com>
Date: Wed, 22 May 2024 14:05:43 -0400
Subject: [PATCH 09/21] [Issue #12] Setup the opportunity v1 endpoint which
will be backed by the index (#44)
## Summary
Fixes #12
### Time to review: __5 mins__
## Changes proposed
Made a new set of v1 endpoints that are basically copy-pastes of the
v0.1 opportunity endpoints
## Context for reviewers
Some changes I want to make to the schemas wouldn't make sense without
the search index (eg. adding the filter counts to the response). As we
have no idea what the actual launch of the v0.1 endpoint is going to
look like, I don't want to mess with any of that code or try to make a
weird hacky approach that needs to account for both the DB
implementation and the search index one.
Also, I think we've heard that with the launch of the search index,
we'll be "officially" launched, so might as well call in v1 at the same
time.
Other than adjusting the names of a few schemas in v0.1, I left that
implementation alone and just copied the boilerplate that I'll fill out
in subsequent tickets.
## Additional information
The endpoint appears locally:
![Screenshot 2024-05-20 at 12 18 32
PM](https://github.com/navapbc/simpler-grants-gov/assets/46358556/86231ec1-417a-41c6-ad88-3d06bb6214e5)
---------
Co-authored-by: nava-platform-bot
---
api/openapi.generated.yml | 740 +++++++++++++++++-
.../opportunities_v0_1/opportunity_routes.py | 8 +-
.../opportunities_v0_1/opportunity_schemas.py | 26 +-
api/src/api/opportunities_v1/__init__.py | 6 +
.../opportunities_v1/opportunity_blueprint.py | 9 +
.../opportunities_v1/opportunity_routes.py | 66 ++
.../opportunities_v1/opportunity_schemas.py | 298 +++++++
api/src/app.py | 2 +
api/src/services/opportunities_v1/__init__.py | 0
.../opportunities_v1/get_opportunity.py | 24 +
.../opportunities_v1/search_opportunities.py | 39 +
.../test_opportunity_route_search.py | 1 -
.../src/api/opportunities_v1/__init__.py | 0
.../src/api/opportunities_v1/conftest.py | 183 +++++
.../opportunities_v1/test_opportunity_auth.py | 21 +
.../test_opportunity_route_get.py | 97 +++
.../test_opportunity_route_search.py | 19 +
17 files changed, 1488 insertions(+), 51 deletions(-)
create mode 100644 api/src/api/opportunities_v1/__init__.py
create mode 100644 api/src/api/opportunities_v1/opportunity_blueprint.py
create mode 100644 api/src/api/opportunities_v1/opportunity_routes.py
create mode 100644 api/src/api/opportunities_v1/opportunity_schemas.py
create mode 100644 api/src/services/opportunities_v1/__init__.py
create mode 100644 api/src/services/opportunities_v1/get_opportunity.py
create mode 100644 api/src/services/opportunities_v1/search_opportunities.py
create mode 100644 api/tests/src/api/opportunities_v1/__init__.py
create mode 100644 api/tests/src/api/opportunities_v1/conftest.py
create mode 100644 api/tests/src/api/opportunities_v1/test_opportunity_auth.py
create mode 100644 api/tests/src/api/opportunities_v1/test_opportunity_route_get.py
create mode 100644 api/tests/src/api/opportunities_v1/test_opportunity_route_search.py
diff --git a/api/openapi.generated.yml b/api/openapi.generated.yml
index b6b756ae0..7302ded44 100644
--- a/api/openapi.generated.yml
+++ b/api/openapi.generated.yml
@@ -23,6 +23,7 @@ tags:
- name: Health
- name: Opportunity v0
- name: Opportunity v0.1
+- name: Opportunity v1
servers: .
paths:
/health:
@@ -204,7 +205,7 @@ paths:
$ref: '#/components/schemas/OpportunitySearch'
security:
- ApiKeyAuth: []
- /v0.1/opportunities/search:
+ /v1/opportunities/search:
post:
parameters: []
responses:
@@ -220,7 +221,7 @@ paths:
data:
type: array
items:
- $ref: '#/components/schemas/Opportunity'
+ $ref: '#/components/schemas/OpportunityV1'
status_code:
type: integer
description: The HTTP status code
@@ -291,6 +292,118 @@ paths:
- $ref: '#/components/schemas/ValidationIssue'
description: Authentication error
tags:
+ - Opportunity v1
+ summary: Opportunity Search
+ description: '
+
+ __ALPHA VERSION__
+
+
+ This endpoint in its current form is primarily for testing and feedback.
+
+
+ Features in this endpoint are still under heavy development, and subject to
+ change. Not for production use.
+
+
+ See [Release Phases](https://github.com/github/roadmap?tab=readme-ov-file#release-phases)
+ for further details.
+
+ '
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/OpportunitySearchRequestV1'
+ security:
+ - ApiKeyAuth: []
+ /v0.1/opportunities/search:
+ post:
+ parameters: []
+ responses:
+ '200':
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ message:
+ type: string
+ description: The message to return
+ data:
+ type: array
+ items:
+ $ref: '#/components/schemas/OpportunityV01'
+ status_code:
+ type: integer
+ description: The HTTP status code
+ pagination_info:
+ description: The pagination information for paginated endpoints
+ type: &id007
+ - object
+ allOf:
+ - $ref: '#/components/schemas/PaginationInfo'
+ warnings:
+ type: array
+ items:
+ type: &id008
+ - object
+ allOf:
+ - $ref: '#/components/schemas/ValidationIssue'
+ description: Successful response
+ '422':
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ message:
+ type: string
+ description: The message to return
+ data:
+ $ref: '#/components/schemas/ErrorResponse'
+ status_code:
+ type: integer
+ description: The HTTP status code
+ pagination_info:
+ description: The pagination information for paginated endpoints
+ type: *id007
+ allOf:
+ - $ref: '#/components/schemas/PaginationInfo'
+ warnings:
+ type: array
+ items:
+ type: *id008
+ allOf:
+ - $ref: '#/components/schemas/ValidationIssue'
+ description: Validation error
+ '401':
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ message:
+ type: string
+ description: The message to return
+ data:
+ $ref: '#/components/schemas/ErrorResponse'
+ status_code:
+ type: integer
+ description: The HTTP status code
+ pagination_info:
+ description: The pagination information for paginated endpoints
+ type: *id007
+ allOf:
+ - $ref: '#/components/schemas/PaginationInfo'
+ warnings:
+ type: array
+ items:
+ type: *id008
+ allOf:
+ - $ref: '#/components/schemas/ValidationIssue'
+ description: Authentication error
+ tags:
- Opportunity v0.1
summary: Opportunity Search
description: '
@@ -313,7 +426,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/OpportunitySearchRequest'
+ $ref: '#/components/schemas/OpportunitySearchRequestV01'
examples:
example1:
summary: No filters
@@ -382,14 +495,14 @@ paths:
description: The HTTP status code
pagination_info:
description: The pagination information for paginated endpoints
- type: &id007
+ type: &id009
- object
allOf:
- $ref: '#/components/schemas/PaginationInfo'
warnings:
type: array
items:
- type: &id008
+ type: &id010
- object
allOf:
- $ref: '#/components/schemas/ValidationIssue'
@@ -410,13 +523,13 @@ paths:
description: The HTTP status code
pagination_info:
description: The pagination information for paginated endpoints
- type: *id007
+ type: *id009
allOf:
- $ref: '#/components/schemas/PaginationInfo'
warnings:
type: array
items:
- type: *id008
+ type: *id010
allOf:
- $ref: '#/components/schemas/ValidationIssue'
description: Authentication error
@@ -436,13 +549,13 @@ paths:
description: The HTTP status code
pagination_info:
description: The pagination information for paginated endpoints
- type: *id007
+ type: *id009
allOf:
- $ref: '#/components/schemas/PaginationInfo'
warnings:
type: array
items:
- type: *id008
+ type: *id010
allOf:
- $ref: '#/components/schemas/ValidationIssue'
description: Not found
@@ -461,6 +574,116 @@ paths:
change. Not for production use.
+ See [Release Phases](https://github.com/github/roadmap?tab=readme-ov-file#release-phases)
+ for further details.
+
+ '
+ security:
+ - ApiKeyAuth: []
+ /v1/opportunities/{opportunity_id}:
+ get:
+ parameters:
+ - in: path
+ name: opportunity_id
+ schema:
+ type: integer
+ required: true
+ responses:
+ '200':
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ message:
+ type: string
+ description: The message to return
+ data:
+ $ref: '#/components/schemas/OpportunityV1'
+ status_code:
+ type: integer
+ description: The HTTP status code
+ pagination_info:
+ description: The pagination information for paginated endpoints
+ type: &id011
+ - object
+ allOf:
+ - $ref: '#/components/schemas/PaginationInfo'
+ warnings:
+ type: array
+ items:
+ type: &id012
+ - object
+ allOf:
+ - $ref: '#/components/schemas/ValidationIssue'
+ description: Successful response
+ '401':
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ message:
+ type: string
+ description: The message to return
+ data:
+ $ref: '#/components/schemas/ErrorResponse'
+ status_code:
+ type: integer
+ description: The HTTP status code
+ pagination_info:
+ description: The pagination information for paginated endpoints
+ type: *id011
+ allOf:
+ - $ref: '#/components/schemas/PaginationInfo'
+ warnings:
+ type: array
+ items:
+ type: *id012
+ allOf:
+ - $ref: '#/components/schemas/ValidationIssue'
+ description: Authentication error
+ '404':
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ message:
+ type: string
+ description: The message to return
+ data:
+ $ref: '#/components/schemas/ErrorResponse'
+ status_code:
+ type: integer
+ description: The HTTP status code
+ pagination_info:
+ description: The pagination information for paginated endpoints
+ type: *id011
+ allOf:
+ - $ref: '#/components/schemas/PaginationInfo'
+ warnings:
+ type: array
+ items:
+ type: *id012
+ allOf:
+ - $ref: '#/components/schemas/ValidationIssue'
+ description: Not found
+ tags:
+ - Opportunity v1
+ summary: Opportunity Get
+ description: '
+
+ __ALPHA VERSION__
+
+
+ This endpoint in its current form is primarily for testing and feedback.
+
+
+ Features in this endpoint are still under heavy development, and subject to
+ change. Not for production use.
+
+
See [Release Phases](https://github.com/github/roadmap?tab=readme-ov-file#release-phases)
for further details.
@@ -486,20 +709,20 @@ paths:
type: string
description: The message to return
data:
- $ref: '#/components/schemas/Opportunity'
+ $ref: '#/components/schemas/OpportunityV01'
status_code:
type: integer
description: The HTTP status code
pagination_info:
description: The pagination information for paginated endpoints
- type: &id009
+ type: &id013
- object
allOf:
- $ref: '#/components/schemas/PaginationInfo'
warnings:
type: array
items:
- type: &id010
+ type: &id014
- object
allOf:
- $ref: '#/components/schemas/ValidationIssue'
@@ -520,13 +743,13 @@ paths:
description: The HTTP status code
pagination_info:
description: The pagination information for paginated endpoints
- type: *id009
+ type: *id013
allOf:
- $ref: '#/components/schemas/PaginationInfo'
warnings:
type: array
items:
- type: *id010
+ type: *id014
allOf:
- $ref: '#/components/schemas/ValidationIssue'
description: Authentication error
@@ -546,13 +769,13 @@ paths:
description: The HTTP status code
pagination_info:
description: The pagination information for paginated endpoints
- type: *id009
+ type: *id013
allOf:
- $ref: '#/components/schemas/PaginationInfo'
warnings:
type: array
items:
- type: *id010
+ type: *id014
allOf:
- $ref: '#/components/schemas/ValidationIssue'
description: Not found
@@ -768,7 +991,7 @@ components:
type: string
format: date-time
readOnly: true
- FundingInstrumentFilter:
+ FundingInstrumentFilterV1:
type: object
properties:
one_of:
@@ -782,7 +1005,7 @@ components:
- other
type:
- string
- FundingCategoryFilter:
+ FundingCategoryFilterV1:
type: object
properties:
one_of:
@@ -818,7 +1041,7 @@ components:
- other
type:
- string
- ApplicantTypeFilter:
+ ApplicantTypeFilterV1:
type: object
properties:
one_of:
@@ -845,7 +1068,7 @@ components:
- unrestricted
type:
- string
- OpportunityStatusFilter:
+ OpportunityStatusFilterV1:
type: object
properties:
one_of:
@@ -859,7 +1082,7 @@ components:
- archived
type:
- string
- AgencyFilter:
+ AgencyFilterV1:
type: object
properties:
one_of:
@@ -869,34 +1092,34 @@ components:
type: string
minLength: 2
example: US-ABC
- OpportunitySearchFilter:
+ OpportunitySearchFilterV1:
type: object
properties:
funding_instrument:
type:
- object
allOf:
- - $ref: '#/components/schemas/FundingInstrumentFilter'
+ - $ref: '#/components/schemas/FundingInstrumentFilterV1'
funding_category:
type:
- object
allOf:
- - $ref: '#/components/schemas/FundingCategoryFilter'
+ - $ref: '#/components/schemas/FundingCategoryFilterV1'
applicant_type:
type:
- object
allOf:
- - $ref: '#/components/schemas/ApplicantTypeFilter'
+ - $ref: '#/components/schemas/ApplicantTypeFilterV1'
opportunity_status:
type:
- object
allOf:
- - $ref: '#/components/schemas/OpportunityStatusFilter'
+ - $ref: '#/components/schemas/OpportunityStatusFilterV1'
agency:
type:
- object
allOf:
- - $ref: '#/components/schemas/AgencyFilter'
+ - $ref: '#/components/schemas/AgencyFilterV1'
OpportunityPagination:
type: object
properties:
@@ -932,7 +1155,7 @@ components:
- page_offset
- page_size
- sort_direction
- OpportunitySearchRequest:
+ OpportunitySearchRequestV1:
type: object
properties:
query:
@@ -945,7 +1168,7 @@ components:
type:
- object
allOf:
- - $ref: '#/components/schemas/OpportunitySearchFilter'
+ - $ref: '#/components/schemas/OpportunitySearchFilterV1'
pagination:
type:
- object
@@ -953,7 +1176,456 @@ components:
- $ref: '#/components/schemas/OpportunityPagination'
required:
- pagination
- OpportunityAssistanceListing:
+ OpportunityAssistanceListingV1:
+ type: object
+ properties:
+ program_title:
+ type: string
+ description: The name of the program, see https://sam.gov/content/assistance-listings
+ for more detail
+ example: Space Technology
+ assistance_listing_number:
+ type: string
+ description: The assistance listing number, see https://sam.gov/content/assistance-listings
+ for more detail
+ example: '43.012'
+ OpportunitySummaryV1:
+ type: object
+ properties:
+ summary_description:
+ type: string
+ description: The summary of the opportunity
+ example: This opportunity aims to unravel the mysteries of the universe.
+ is_cost_sharing:
+ type: boolean
+ description: Whether or not the opportunity has a cost sharing/matching
+ requirement
+ is_forecast:
+ type: boolean
+ description: Whether the opportunity is forecasted, that is, the information
+ is only an estimate and not yet official
+ example: false
+ close_date:
+ type: string
+ format: date
+ description: The date that the opportunity will close - only set if is_forecast=False
+ close_date_description:
+ type: string
+ description: Optional details regarding the close date
+ example: Proposals are due earlier than usual.
+ post_date:
+ type: string
+ format: date
+ description: The date the opportunity was posted
+ archive_date:
+ type: string
+ format: date
+ description: When the opportunity will be archived
+ expected_number_of_awards:
+ type: integer
+ description: The number of awards the opportunity is expected to award
+ example: 10
+ estimated_total_program_funding:
+ type: integer
+ description: The total program funding of the opportunity in US Dollars
+ example: 10000000
+ award_floor:
+ type: integer
+ description: The minimum amount an opportunity would award
+ example: 10000
+ award_ceiling:
+ type: integer
+ description: The maximum amount an opportunity would award
+ example: 100000
+ additional_info_url:
+ type: string
+ description: A URL to a website that can provide additional information
+ about the opportunity
+ example: grants.gov
+ additional_info_url_description:
+ type: string
+ description: The text to display for the additional_info_url link
+ example: Click me for more info
+ forecasted_post_date:
+ type: string
+ format: date
+ description: Forecasted opportunity only. The date the opportunity is expected
+ to be posted, and transition out of being a forecast
+ forecasted_close_date:
+ type: string
+ format: date
+ description: Forecasted opportunity only. The date the opportunity is expected
+ to be close once posted.
+ forecasted_close_date_description:
+ type: string
+ description: Forecasted opportunity only. Optional details regarding the
+ forecasted closed date.
+ example: Proposals will probably be due on this date
+ forecasted_award_date:
+ type: string
+ format: date
+ description: Forecasted opportunity only. The date the grantor plans to
+ award the opportunity.
+ forecasted_project_start_date:
+ type: string
+ format: date
+ description: Forecasted opportunity only. The date the grantor expects the
+ award recipient should start their project
+ fiscal_year:
+ type: integer
+ description: Forecasted opportunity only. The fiscal year the project is
+ expected to be funded and launched
+ funding_category_description:
+ type: string
+ description: Additional information about the funding category
+ example: Economic Support
+ applicant_eligibility_description:
+ type: string
+ description: Additional information about the types of applicants that are
+ eligible
+ example: All types of domestic applicants are eligible to apply
+ agency_code:
+ type: string
+ description: The agency who owns the opportunity
+ example: US-ABC
+ agency_name:
+ type: string
+ description: The name of the agency who owns the opportunity
+ example: US Alphabetical Basic Corp
+ agency_phone_number:
+ type: string
+ description: The phone number of the agency who owns the opportunity
+ example: 123-456-7890
+ agency_contact_description:
+ type: string
+ description: Information regarding contacting the agency who owns the opportunity
+ example: For more information, reach out to Jane Smith at agency US-ABC
+ agency_email_address:
+ type: string
+ description: The contact email of the agency who owns the opportunity
+ example: fake_email@grants.gov
+ agency_email_address_description:
+ type: string
+ description: The text for the link to the agency email address
+ example: Click me to email the agency
+ funding_instruments:
+ type: array
+ items:
+ enum:
+ - cooperative_agreement
+ - grant
+ - procurement_contract
+ - other
+ type:
+ - string
+ funding_categories:
+ type: array
+ items:
+ enum:
+ - recovery_act
+ - agriculture
+ - arts
+ - business_and_commerce
+ - community_development
+ - consumer_protection
+ - disaster_prevention_and_relief
+ - education
+ - employment_labor_and_training
+ - energy
+ - environment
+ - food_and_nutrition
+ - health
+ - housing
+ - humanities
+ - infrastructure_investment_and_jobs_act
+ - information_and_statistics
+ - income_security_and_social_services
+ - law_justice_and_legal_services
+ - natural_resources
+ - opportunity_zone_benefits
+ - regional_development
+ - science_technology_and_other_research_and_development
+ - transportation
+ - affordable_care_act
+ - other
+ type:
+ - string
+ applicant_types:
+ type: array
+ items:
+ enum:
+ - state_governments
+ - county_governments
+ - city_or_township_governments
+ - special_district_governments
+ - independent_school_districts
+ - public_and_state_institutions_of_higher_education
+ - private_institutions_of_higher_education
+ - federally_recognized_native_american_tribal_governments
+ - other_native_american_tribal_organizations
+ - public_and_indian_housing_authorities
+ - nonprofits_non_higher_education_with_501c3
+ - nonprofits_non_higher_education_without_501c3
+ - individuals
+ - for_profit_organizations_other_than_small_businesses
+ - small_businesses
+ - other
+ - unrestricted
+ type:
+ - string
+ OpportunityV1:
+ type: object
+ properties:
+ opportunity_id:
+ type: integer
+ readOnly: true
+ description: The internal ID of the opportunity
+ example: 12345
+ opportunity_number:
+ type: string
+ description: The funding opportunity number
+ example: ABC-123-XYZ-001
+ opportunity_title:
+ type: string
+ description: The title of the opportunity
+ example: Research into conservation techniques
+ agency:
+ type: string
+ description: The agency who created the opportunity
+ example: US-ABC
+ category:
+ description: The opportunity category
+ example: !!python/object/apply:src.constants.lookup_constants.OpportunityCategory
+ - discretionary
+ enum:
+ - discretionary
+ - mandatory
+ - continuation
+ - earmark
+ - other
+ type:
+ - string
+ category_explanation:
+ type: string
+ description: Explanation of the category when the category is 'O' (other)
+ example: null
+ opportunity_assistance_listings:
+ type: array
+ items:
+ type:
+ - object
+ allOf:
+ - $ref: '#/components/schemas/OpportunityAssistanceListingV1'
+ summary:
+ type:
+ - object
+ allOf:
+ - $ref: '#/components/schemas/OpportunitySummaryV1'
+ opportunity_status:
+ description: The current status of the opportunity
+ example: !!python/object/apply:src.constants.lookup_constants.OpportunityStatus
+ - posted
+ enum:
+ - forecasted
+ - posted
+ - closed
+ - archived
+ type:
+ - string
+ created_at:
+ type: string
+ format: date-time
+ readOnly: true
+ updated_at:
+ type: string
+ format: date-time
+ readOnly: true
+ FundingInstrumentFilterV01:
+ type: object
+ properties:
+ one_of:
+ type: array
+ minItems: 1
+ items:
+ enum:
+ - cooperative_agreement
+ - grant
+ - procurement_contract
+ - other
+ type:
+ - string
+ FundingCategoryFilterV01:
+ type: object
+ properties:
+ one_of:
+ type: array
+ minItems: 1
+ items:
+ enum:
+ - recovery_act
+ - agriculture
+ - arts
+ - business_and_commerce
+ - community_development
+ - consumer_protection
+ - disaster_prevention_and_relief
+ - education
+ - employment_labor_and_training
+ - energy
+ - environment
+ - food_and_nutrition
+ - health
+ - housing
+ - humanities
+ - infrastructure_investment_and_jobs_act
+ - information_and_statistics
+ - income_security_and_social_services
+ - law_justice_and_legal_services
+ - natural_resources
+ - opportunity_zone_benefits
+ - regional_development
+ - science_technology_and_other_research_and_development
+ - transportation
+ - affordable_care_act
+ - other
+ type:
+ - string
+ ApplicantTypeFilterV01:
+ type: object
+ properties:
+ one_of:
+ type: array
+ minItems: 1
+ items:
+ enum:
+ - state_governments
+ - county_governments
+ - city_or_township_governments
+ - special_district_governments
+ - independent_school_districts
+ - public_and_state_institutions_of_higher_education
+ - private_institutions_of_higher_education
+ - federally_recognized_native_american_tribal_governments
+ - other_native_american_tribal_organizations
+ - public_and_indian_housing_authorities
+ - nonprofits_non_higher_education_with_501c3
+ - nonprofits_non_higher_education_without_501c3
+ - individuals
+ - for_profit_organizations_other_than_small_businesses
+ - small_businesses
+ - other
+ - unrestricted
+ type:
+ - string
+ OpportunityStatusFilterV01:
+ type: object
+ properties:
+ one_of:
+ type: array
+ minItems: 1
+ items:
+ enum:
+ - forecasted
+ - posted
+ - closed
+ - archived
+ type:
+ - string
+ AgencyFilterV01:
+ type: object
+ properties:
+ one_of:
+ type: array
+ minItems: 1
+ items:
+ type: string
+ minLength: 2
+ example: US-ABC
+ OpportunitySearchFilterV01:
+ type: object
+ properties:
+ funding_instrument:
+ type:
+ - object
+ allOf:
+ - $ref: '#/components/schemas/FundingInstrumentFilterV01'
+ funding_category:
+ type:
+ - object
+ allOf:
+ - $ref: '#/components/schemas/FundingCategoryFilterV01'
+ applicant_type:
+ type:
+ - object
+ allOf:
+ - $ref: '#/components/schemas/ApplicantTypeFilterV01'
+ opportunity_status:
+ type:
+ - object
+ allOf:
+ - $ref: '#/components/schemas/OpportunityStatusFilterV01'
+ agency:
+ type:
+ - object
+ allOf:
+ - $ref: '#/components/schemas/AgencyFilterV01'
+ OpportunityPagination1:
+ type: object
+ properties:
+ order_by:
+ type: string
+ enum:
+ - opportunity_id
+ - opportunity_number
+ - opportunity_title
+ - post_date
+ - close_date
+ - agency_code
+ description: The field to sort the response by
+ sort_direction:
+ description: Whether to sort the response ascending or descending
+ enum:
+ - ascending
+ - descending
+ type:
+ - string
+ page_size:
+ type: integer
+ minimum: 1
+ description: The size of the page to fetch
+ example: 25
+ page_offset:
+ type: integer
+ minimum: 1
+ description: The page number to fetch, starts counting from 1
+ example: 1
+ required:
+ - order_by
+ - page_offset
+ - page_size
+ - sort_direction
+ OpportunitySearchRequestV01:
+ type: object
+ properties:
+ query:
+ type: string
+ minLength: 1
+ maxLength: 100
+ description: Query string which searches against several text fields
+ example: research
+ filters:
+ type:
+ - object
+ allOf:
+ - $ref: '#/components/schemas/OpportunitySearchFilterV01'
+ pagination:
+ type:
+ - object
+ allOf:
+ - $ref: '#/components/schemas/OpportunityPagination1'
+ required:
+ - pagination
+ OpportunityAssistanceListingV01:
type: object
properties:
program_title:
@@ -966,7 +1638,7 @@ components:
description: The assistance listing number, see https://sam.gov/content/assistance-listings
for more detail
example: '43.012'
- OpportunitySummary:
+ OpportunitySummaryV01:
type: object
properties:
summary_description:
@@ -1150,7 +1822,7 @@ components:
- unrestricted
type:
- string
- Opportunity:
+ OpportunityV01:
type: object
properties:
opportunity_id:
@@ -1192,12 +1864,12 @@ components:
type:
- object
allOf:
- - $ref: '#/components/schemas/OpportunityAssistanceListing'
+ - $ref: '#/components/schemas/OpportunityAssistanceListingV01'
summary:
type:
- object
allOf:
- - $ref: '#/components/schemas/OpportunitySummary'
+ - $ref: '#/components/schemas/OpportunitySummaryV01'
opportunity_status:
description: The current status of the opportunity
example: !!python/object/apply:src.constants.lookup_constants.OpportunityStatus
diff --git a/api/src/api/opportunities_v0_1/opportunity_routes.py b/api/src/api/opportunities_v0_1/opportunity_routes.py
index a3b57f6f1..6ae77d6d0 100644
--- a/api/src/api/opportunities_v0_1/opportunity_routes.py
+++ b/api/src/api/opportunities_v0_1/opportunity_routes.py
@@ -62,10 +62,12 @@
@opportunity_blueprint.post("/opportunities/search")
@opportunity_blueprint.input(
- opportunity_schemas.OpportunitySearchRequestSchema, arg_name="search_params", examples=examples
+ opportunity_schemas.OpportunitySearchRequestV01Schema,
+ arg_name="search_params",
+ examples=examples,
)
# many=True allows us to return a list of opportunity objects
-@opportunity_blueprint.output(opportunity_schemas.OpportunitySchema(many=True))
+@opportunity_blueprint.output(opportunity_schemas.OpportunityV01Schema(many=True))
@opportunity_blueprint.auth_required(api_key_auth)
@opportunity_blueprint.doc(description=SHARED_ALPHA_DESCRIPTION)
@flask_db.with_db_session()
@@ -90,7 +92,7 @@ def opportunity_search(db_session: db.Session, search_params: dict) -> response.
@opportunity_blueprint.get("/opportunities/")
-@opportunity_blueprint.output(opportunity_schemas.OpportunitySchema)
+@opportunity_blueprint.output(opportunity_schemas.OpportunityV01Schema)
@opportunity_blueprint.auth_required(api_key_auth)
@opportunity_blueprint.doc(description=SHARED_ALPHA_DESCRIPTION)
@flask_db.with_db_session()
diff --git a/api/src/api/opportunities_v0_1/opportunity_schemas.py b/api/src/api/opportunities_v0_1/opportunity_schemas.py
index 257b05cd8..a54384660 100644
--- a/api/src/api/opportunities_v0_1/opportunity_schemas.py
+++ b/api/src/api/opportunities_v0_1/opportunity_schemas.py
@@ -10,7 +10,7 @@
from src.pagination.pagination_schema import generate_pagination_schema
-class OpportunitySummarySchema(Schema):
+class OpportunitySummaryV01Schema(Schema):
summary_description = fields.String(
metadata={
"description": "The summary of the opportunity",
@@ -178,7 +178,7 @@ class OpportunitySummarySchema(Schema):
applicant_types = fields.List(fields.Enum(ApplicantType))
-class OpportunityAssistanceListingSchema(Schema):
+class OpportunityAssistanceListingV01Schema(Schema):
program_title = fields.String(
metadata={
"description": "The name of the program, see https://sam.gov/content/assistance-listings for more detail",
@@ -193,7 +193,7 @@ class OpportunityAssistanceListingSchema(Schema):
)
-class OpportunitySchema(Schema):
+class OpportunityV01Schema(Schema):
opportunity_id = fields.Integer(
dump_only=True,
metadata={"description": "The internal ID of the opportunity", "example": 12345},
@@ -227,9 +227,9 @@ class OpportunitySchema(Schema):
)
opportunity_assistance_listings = fields.List(
- fields.Nested(OpportunityAssistanceListingSchema())
+ fields.Nested(OpportunityAssistanceListingV01Schema())
)
- summary = fields.Nested(OpportunitySummarySchema())
+ summary = fields.Nested(OpportunitySummaryV01Schema())
opportunity_status = fields.Enum(
OpportunityStatus,
@@ -243,35 +243,35 @@ class OpportunitySchema(Schema):
updated_at = fields.DateTime(dump_only=True)
-class OpportunitySearchFilterSchema(Schema):
+class OpportunitySearchFilterV01Schema(Schema):
funding_instrument = fields.Nested(
- StrSearchSchemaBuilder("FundingInstrumentFilterSchema")
+ StrSearchSchemaBuilder("FundingInstrumentFilterV01Schema")
.with_one_of(allowed_values=FundingInstrument)
.build()
)
funding_category = fields.Nested(
- StrSearchSchemaBuilder("FundingCategoryFilterSchema")
+ StrSearchSchemaBuilder("FundingCategoryFilterV01Schema")
.with_one_of(allowed_values=FundingCategory)
.build()
)
applicant_type = fields.Nested(
- StrSearchSchemaBuilder("ApplicantTypeFilterSchema")
+ StrSearchSchemaBuilder("ApplicantTypeFilterV01Schema")
.with_one_of(allowed_values=ApplicantType)
.build()
)
opportunity_status = fields.Nested(
- StrSearchSchemaBuilder("OpportunityStatusFilterSchema")
+ StrSearchSchemaBuilder("OpportunityStatusFilterV01Schema")
.with_one_of(allowed_values=OpportunityStatus)
.build()
)
agency = fields.Nested(
- StrSearchSchemaBuilder("AgencyFilterSchema")
+ StrSearchSchemaBuilder("AgencyFilterV01Schema")
.with_one_of(example="US-ABC", minimum_length=2)
.build()
)
-class OpportunitySearchRequestSchema(Schema):
+class OpportunitySearchRequestV01Schema(Schema):
query = fields.String(
metadata={
"description": "Query string which searches against several text fields",
@@ -280,7 +280,7 @@ class OpportunitySearchRequestSchema(Schema):
validate=[validators.Length(min=1, max=100)],
)
- filters = fields.Nested(OpportunitySearchFilterSchema())
+ filters = fields.Nested(OpportunitySearchFilterV01Schema())
pagination = fields.Nested(
generate_pagination_schema(
diff --git a/api/src/api/opportunities_v1/__init__.py b/api/src/api/opportunities_v1/__init__.py
new file mode 100644
index 000000000..c757789dc
--- /dev/null
+++ b/api/src/api/opportunities_v1/__init__.py
@@ -0,0 +1,6 @@
+from src.api.opportunities_v1.opportunity_blueprint import opportunity_blueprint
+
+# import opportunity_routes module to register the API routes on the blueprint
+import src.api.opportunities_v1.opportunity_routes # noqa: F401 E402 isort:skip
+
+__all__ = ["opportunity_blueprint"]
diff --git a/api/src/api/opportunities_v1/opportunity_blueprint.py b/api/src/api/opportunities_v1/opportunity_blueprint.py
new file mode 100644
index 000000000..db88ee426
--- /dev/null
+++ b/api/src/api/opportunities_v1/opportunity_blueprint.py
@@ -0,0 +1,9 @@
+from apiflask import APIBlueprint
+
+opportunity_blueprint = APIBlueprint(
+ "opportunity_v1",
+ __name__,
+ tag="Opportunity v1",
+ cli_group="opportunity_v1",
+ url_prefix="/v1",
+)
diff --git a/api/src/api/opportunities_v1/opportunity_routes.py b/api/src/api/opportunities_v1/opportunity_routes.py
new file mode 100644
index 000000000..0d94996b0
--- /dev/null
+++ b/api/src/api/opportunities_v1/opportunity_routes.py
@@ -0,0 +1,66 @@
+import logging
+
+import src.adapters.db as db
+import src.adapters.db.flask_db as flask_db
+import src.api.opportunities_v1.opportunity_schemas as opportunity_schemas
+import src.api.response as response
+from src.api.opportunities_v1.opportunity_blueprint import opportunity_blueprint
+from src.auth.api_key_auth import api_key_auth
+from src.logging.flask_logger import add_extra_data_to_current_request_logs
+from src.services.opportunities_v1.get_opportunity import get_opportunity
+from src.services.opportunities_v1.search_opportunities import search_opportunities
+from src.util.dict_util import flatten_dict
+
+logger = logging.getLogger(__name__)
+
+# Descriptions in OpenAPI support markdown https://swagger.io/specification/
+SHARED_ALPHA_DESCRIPTION = """
+__ALPHA VERSION__
+
+This endpoint in its current form is primarily for testing and feedback.
+
+Features in this endpoint are still under heavy development, and subject to change. Not for production use.
+
+See [Release Phases](https://github.com/github/roadmap?tab=readme-ov-file#release-phases) for further details.
+"""
+
+
+@opportunity_blueprint.post("/opportunities/search")
+@opportunity_blueprint.input(
+ opportunity_schemas.OpportunitySearchRequestV1Schema, arg_name="search_params"
+)
+# many=True allows us to return a list of opportunity objects
+@opportunity_blueprint.output(opportunity_schemas.OpportunityV1Schema(many=True))
+@opportunity_blueprint.auth_required(api_key_auth)
+@opportunity_blueprint.doc(description=SHARED_ALPHA_DESCRIPTION)
+def opportunity_search(search_params: dict) -> response.ApiResponse:
+ add_extra_data_to_current_request_logs(flatten_dict(search_params, prefix="request.body"))
+ logger.info("POST /v1/opportunities/search")
+
+ opportunities, pagination_info = search_opportunities(search_params)
+
+ add_extra_data_to_current_request_logs(
+ {
+ "response.pagination.total_pages": pagination_info.total_pages,
+ "response.pagination.total_records": pagination_info.total_records,
+ }
+ )
+ logger.info("Successfully fetched opportunities")
+
+ return response.ApiResponse(
+ message="Success", data=opportunities, pagination_info=pagination_info
+ )
+
+
+@opportunity_blueprint.get("/opportunities/")
+@opportunity_blueprint.output(opportunity_schemas.OpportunityV1Schema)
+@opportunity_blueprint.auth_required(api_key_auth)
+@opportunity_blueprint.doc(description=SHARED_ALPHA_DESCRIPTION)
+@flask_db.with_db_session()
+def opportunity_get(db_session: db.Session, opportunity_id: int) -> response.ApiResponse:
+ add_extra_data_to_current_request_logs({"opportunity.opportunity_id": opportunity_id})
+ logger.info("GET /v1/opportunities/:opportunity_id")
+ with db_session.begin():
+ opportunity = get_opportunity(db_session, opportunity_id)
+
+ return response.ApiResponse(message="Success", data=opportunity)
diff --git a/api/src/api/opportunities_v1/opportunity_schemas.py b/api/src/api/opportunities_v1/opportunity_schemas.py
new file mode 100644
index 000000000..5f72c7958
--- /dev/null
+++ b/api/src/api/opportunities_v1/opportunity_schemas.py
@@ -0,0 +1,298 @@
+from src.api.schemas.extension import Schema, fields, validators
+from src.api.schemas.search_schema import StrSearchSchemaBuilder
+from src.constants.lookup_constants import (
+ ApplicantType,
+ FundingCategory,
+ FundingInstrument,
+ OpportunityCategory,
+ OpportunityStatus,
+)
+from src.pagination.pagination_schema import generate_pagination_schema
+
+
+class OpportunitySummaryV1Schema(Schema):
+ summary_description = fields.String(
+ metadata={
+ "description": "The summary of the opportunity",
+ "example": "This opportunity aims to unravel the mysteries of the universe.",
+ }
+ )
+ is_cost_sharing = fields.Boolean(
+ metadata={
+ "description": "Whether or not the opportunity has a cost sharing/matching requirement",
+ }
+ )
+ is_forecast = fields.Boolean(
+ metadata={
+ "description": "Whether the opportunity is forecasted, that is, the information is only an estimate and not yet official",
+ "example": False,
+ }
+ )
+
+ close_date = fields.Date(
+ metadata={
+ "description": "The date that the opportunity will close - only set if is_forecast=False",
+ }
+ )
+ close_date_description = fields.String(
+ metadata={
+ "description": "Optional details regarding the close date",
+ "example": "Proposals are due earlier than usual.",
+ }
+ )
+
+ post_date = fields.Date(
+ metadata={
+ "description": "The date the opportunity was posted",
+ }
+ )
+ archive_date = fields.Date(
+ metadata={
+ "description": "When the opportunity will be archived",
+ }
+ )
+ # not including unarchive date at the moment
+
+ expected_number_of_awards = fields.Integer(
+ metadata={
+ "description": "The number of awards the opportunity is expected to award",
+ "example": 10,
+ }
+ )
+ estimated_total_program_funding = fields.Integer(
+ metadata={
+ "description": "The total program funding of the opportunity in US Dollars",
+ "example": 10_000_000,
+ }
+ )
+ award_floor = fields.Integer(
+ metadata={
+ "description": "The minimum amount an opportunity would award",
+ "example": 10_000,
+ }
+ )
+ award_ceiling = fields.Integer(
+ metadata={
+ "description": "The maximum amount an opportunity would award",
+ "example": 100_000,
+ }
+ )
+
+ additional_info_url = fields.String(
+ metadata={
+ "description": "A URL to a website that can provide additional information about the opportunity",
+ "example": "grants.gov",
+ }
+ )
+ additional_info_url_description = fields.String(
+ metadata={
+ "description": "The text to display for the additional_info_url link",
+ "example": "Click me for more info",
+ }
+ )
+
+ forecasted_post_date = fields.Date(
+ metadata={
+ "description": "Forecasted opportunity only. The date the opportunity is expected to be posted, and transition out of being a forecast"
+ }
+ )
+ forecasted_close_date = fields.Date(
+ metadata={
+ "description": "Forecasted opportunity only. The date the opportunity is expected to be close once posted."
+ }
+ )
+ forecasted_close_date_description = fields.String(
+ metadata={
+ "description": "Forecasted opportunity only. Optional details regarding the forecasted closed date.",
+ "example": "Proposals will probably be due on this date",
+ }
+ )
+ forecasted_award_date = fields.Date(
+ metadata={
+ "description": "Forecasted opportunity only. The date the grantor plans to award the opportunity."
+ }
+ )
+ forecasted_project_start_date = fields.Date(
+ metadata={
+ "description": "Forecasted opportunity only. The date the grantor expects the award recipient should start their project"
+ }
+ )
+ fiscal_year = fields.Integer(
+ metadata={
+ "description": "Forecasted opportunity only. The fiscal year the project is expected to be funded and launched"
+ }
+ )
+
+ funding_category_description = fields.String(
+ metadata={
+ "description": "Additional information about the funding category",
+ "example": "Economic Support",
+ }
+ )
+ applicant_eligibility_description = fields.String(
+ metadata={
+ "description": "Additional information about the types of applicants that are eligible",
+ "example": "All types of domestic applicants are eligible to apply",
+ }
+ )
+
+ agency_code = fields.String(
+ metadata={
+ "description": "The agency who owns the opportunity",
+ "example": "US-ABC",
+ }
+ )
+ agency_name = fields.String(
+ metadata={
+ "description": "The name of the agency who owns the opportunity",
+ "example": "US Alphabetical Basic Corp",
+ }
+ )
+ agency_phone_number = fields.String(
+ metadata={
+ "description": "The phone number of the agency who owns the opportunity",
+ "example": "123-456-7890",
+ }
+ )
+ agency_contact_description = fields.String(
+ metadata={
+ "description": "Information regarding contacting the agency who owns the opportunity",
+ "example": "For more information, reach out to Jane Smith at agency US-ABC",
+ }
+ )
+ agency_email_address = fields.String(
+ metadata={
+ "description": "The contact email of the agency who owns the opportunity",
+ "example": "fake_email@grants.gov",
+ }
+ )
+ agency_email_address_description = fields.String(
+ metadata={
+ "description": "The text for the link to the agency email address",
+ "example": "Click me to email the agency",
+ }
+ )
+
+ funding_instruments = fields.List(fields.Enum(FundingInstrument))
+ funding_categories = fields.List(fields.Enum(FundingCategory))
+ applicant_types = fields.List(fields.Enum(ApplicantType))
+
+
+class OpportunityAssistanceListingV1Schema(Schema):
+ program_title = fields.String(
+ metadata={
+ "description": "The name of the program, see https://sam.gov/content/assistance-listings for more detail",
+ "example": "Space Technology",
+ }
+ )
+ assistance_listing_number = fields.String(
+ metadata={
+ "description": "The assistance listing number, see https://sam.gov/content/assistance-listings for more detail",
+ "example": "43.012",
+ }
+ )
+
+
+class OpportunityV1Schema(Schema):
+ opportunity_id = fields.Integer(
+ dump_only=True,
+ metadata={"description": "The internal ID of the opportunity", "example": 12345},
+ )
+
+ opportunity_number = fields.String(
+ metadata={"description": "The funding opportunity number", "example": "ABC-123-XYZ-001"}
+ )
+ opportunity_title = fields.String(
+ metadata={
+ "description": "The title of the opportunity",
+ "example": "Research into conservation techniques",
+ }
+ )
+ agency = fields.String(
+ metadata={"description": "The agency who created the opportunity", "example": "US-ABC"}
+ )
+
+ category = fields.Enum(
+ OpportunityCategory,
+ metadata={
+ "description": "The opportunity category",
+ "example": OpportunityCategory.DISCRETIONARY,
+ },
+ )
+ category_explanation = fields.String(
+ metadata={
+ "description": "Explanation of the category when the category is 'O' (other)",
+ "example": None,
+ }
+ )
+
+ opportunity_assistance_listings = fields.List(
+ fields.Nested(OpportunityAssistanceListingV1Schema())
+ )
+ summary = fields.Nested(OpportunitySummaryV1Schema())
+
+ opportunity_status = fields.Enum(
+ OpportunityStatus,
+ metadata={
+ "description": "The current status of the opportunity",
+ "example": OpportunityStatus.POSTED,
+ },
+ )
+
+ created_at = fields.DateTime(dump_only=True)
+ updated_at = fields.DateTime(dump_only=True)
+
+
+class OpportunitySearchFilterV1Schema(Schema):
+ funding_instrument = fields.Nested(
+ StrSearchSchemaBuilder("FundingInstrumentFilterV1Schema")
+ .with_one_of(allowed_values=FundingInstrument)
+ .build()
+ )
+ funding_category = fields.Nested(
+ StrSearchSchemaBuilder("FundingCategoryFilterV1Schema")
+ .with_one_of(allowed_values=FundingCategory)
+ .build()
+ )
+ applicant_type = fields.Nested(
+ StrSearchSchemaBuilder("ApplicantTypeFilterV1Schema")
+ .with_one_of(allowed_values=ApplicantType)
+ .build()
+ )
+ opportunity_status = fields.Nested(
+ StrSearchSchemaBuilder("OpportunityStatusFilterV1Schema")
+ .with_one_of(allowed_values=OpportunityStatus)
+ .build()
+ )
+ agency = fields.Nested(
+ StrSearchSchemaBuilder("AgencyFilterV1Schema")
+ .with_one_of(example="US-ABC", minimum_length=2)
+ .build()
+ )
+
+
+class OpportunitySearchRequestV1Schema(Schema):
+ query = fields.String(
+ metadata={
+ "description": "Query string which searches against several text fields",
+ "example": "research",
+ },
+ validate=[validators.Length(min=1, max=100)],
+ )
+
+ filters = fields.Nested(OpportunitySearchFilterV1Schema())
+
+ pagination = fields.Nested(
+ generate_pagination_schema(
+ "OpportunityPaginationSchema",
+ [
+ "opportunity_id",
+ "opportunity_number",
+ "opportunity_title",
+ "post_date",
+ "close_date",
+ "agency_code",
+ ],
+ ),
+ required=True,
+ )
diff --git a/api/src/app.py b/api/src/app.py
index 8e617cce8..0d584a683 100644
--- a/api/src/app.py
+++ b/api/src/app.py
@@ -13,6 +13,7 @@
from src.api.healthcheck import healthcheck_blueprint
from src.api.opportunities_v0 import opportunity_blueprint as opportunities_v0_blueprint
from src.api.opportunities_v0_1 import opportunity_blueprint as opportunities_v0_1_blueprint
+from src.api.opportunities_v1 import opportunity_blueprint as opportunities_v1_blueprint
from src.api.response import restructure_error_response
from src.api.schemas import response_schema
from src.auth.api_key_auth import get_app_security_scheme
@@ -101,6 +102,7 @@ def register_blueprints(app: APIFlask) -> None:
app.register_blueprint(healthcheck_blueprint)
app.register_blueprint(opportunities_v0_blueprint)
app.register_blueprint(opportunities_v0_1_blueprint)
+ app.register_blueprint(opportunities_v1_blueprint)
app.register_blueprint(data_migration_blueprint)
app.register_blueprint(task_blueprint)
diff --git a/api/src/services/opportunities_v1/__init__.py b/api/src/services/opportunities_v1/__init__.py
new file mode 100644
index 000000000..e69de29bb
diff --git a/api/src/services/opportunities_v1/get_opportunity.py b/api/src/services/opportunities_v1/get_opportunity.py
new file mode 100644
index 000000000..9b26cfada
--- /dev/null
+++ b/api/src/services/opportunities_v1/get_opportunity.py
@@ -0,0 +1,24 @@
+from sqlalchemy import select
+from sqlalchemy.orm import noload, selectinload
+
+import src.adapters.db as db
+from src.api.route_utils import raise_flask_error
+from src.db.models.opportunity_models import Opportunity
+
+
+def get_opportunity(db_session: db.Session, opportunity_id: int) -> Opportunity:
+ opportunity: Opportunity | None = (
+ db_session.execute(
+ select(Opportunity)
+ .where(Opportunity.opportunity_id == opportunity_id)
+ .where(Opportunity.is_draft.is_(False))
+ .options(selectinload("*"), noload(Opportunity.all_opportunity_summaries))
+ )
+ .unique()
+ .scalar_one_or_none()
+ )
+
+ if opportunity is None:
+ raise_flask_error(404, message=f"Could not find Opportunity with ID {opportunity_id}")
+
+ return opportunity
diff --git a/api/src/services/opportunities_v1/search_opportunities.py b/api/src/services/opportunities_v1/search_opportunities.py
new file mode 100644
index 000000000..1823bc31d
--- /dev/null
+++ b/api/src/services/opportunities_v1/search_opportunities.py
@@ -0,0 +1,39 @@
+import logging
+from typing import Sequence, Tuple
+
+from pydantic import BaseModel, Field
+
+from src.db.models.opportunity_models import Opportunity
+from src.pagination.pagination_models import PaginationInfo, PaginationParams
+
+logger = logging.getLogger(__name__)
+
+
+class SearchOpportunityFilters(BaseModel):
+ funding_instrument: dict | None = Field(default=None)
+ funding_category: dict | None = Field(default=None)
+ applicant_type: dict | None = Field(default=None)
+ opportunity_status: dict | None = Field(default=None)
+ agency: dict | None = Field(default=None)
+
+
+class SearchOpportunityParams(BaseModel):
+ pagination: PaginationParams
+
+ query: str | None = Field(default=None)
+ filters: SearchOpportunityFilters | None = Field(default=None)
+
+
+def search_opportunities(raw_search_params: dict) -> Tuple[Sequence[Opportunity], PaginationInfo]:
+ search_params = SearchOpportunityParams.model_validate(raw_search_params)
+
+ pagination_info = PaginationInfo(
+ page_offset=search_params.pagination.page_offset,
+ page_size=search_params.pagination.page_size,
+ order_by=search_params.pagination.order_by,
+ sort_direction=search_params.pagination.sort_direction,
+ total_records=0,
+ total_pages=0,
+ )
+
+ return [], pagination_info
diff --git a/api/tests/src/api/opportunities_v0_1/test_opportunity_route_search.py b/api/tests/src/api/opportunities_v0_1/test_opportunity_route_search.py
index 4ee7c6ba4..6529fc651 100644
--- a/api/tests/src/api/opportunities_v0_1/test_opportunity_route_search.py
+++ b/api/tests/src/api/opportunities_v0_1/test_opportunity_route_search.py
@@ -1121,6 +1121,5 @@ def test_opportunity_search_invalid_request_422(
)
assert resp.status_code == 422
- print(resp.get_json())
response_data = resp.get_json()["errors"]
assert response_data == expected_response_data
diff --git a/api/tests/src/api/opportunities_v1/__init__.py b/api/tests/src/api/opportunities_v1/__init__.py
new file mode 100644
index 000000000..e69de29bb
diff --git a/api/tests/src/api/opportunities_v1/conftest.py b/api/tests/src/api/opportunities_v1/conftest.py
new file mode 100644
index 000000000..c00490cff
--- /dev/null
+++ b/api/tests/src/api/opportunities_v1/conftest.py
@@ -0,0 +1,183 @@
+from src.constants.lookup_constants import (
+ ApplicantType,
+ FundingCategory,
+ FundingInstrument,
+ OpportunityStatus,
+)
+from src.db.models.opportunity_models import (
+ Opportunity,
+ OpportunityAssistanceListing,
+ OpportunitySummary,
+)
+
+
+def get_search_request(
+ page_offset: int = 1,
+ page_size: int = 5,
+ order_by: str = "opportunity_id",
+ sort_direction: str = "descending",
+ query: str | None = None,
+ funding_instrument_one_of: list[FundingInstrument] | None = None,
+ funding_category_one_of: list[FundingCategory] | None = None,
+ applicant_type_one_of: list[ApplicantType] | None = None,
+ opportunity_status_one_of: list[OpportunityStatus] | None = None,
+ agency_one_of: list[str] | None = None,
+):
+ req = {
+ "pagination": {
+ "page_offset": page_offset,
+ "page_size": page_size,
+ "order_by": order_by,
+ "sort_direction": sort_direction,
+ }
+ }
+
+ filters = {}
+
+ if funding_instrument_one_of is not None:
+ filters["funding_instrument"] = {"one_of": funding_instrument_one_of}
+
+ if funding_category_one_of is not None:
+ filters["funding_category"] = {"one_of": funding_category_one_of}
+
+ if applicant_type_one_of is not None:
+ filters["applicant_type"] = {"one_of": applicant_type_one_of}
+
+ if opportunity_status_one_of is not None:
+ filters["opportunity_status"] = {"one_of": opportunity_status_one_of}
+
+ if agency_one_of is not None:
+ filters["agency"] = {"one_of": agency_one_of}
+
+ if len(filters) > 0:
+ req["filters"] = filters
+
+ if query is not None:
+ req["query"] = query
+
+ return req
+
+
+#####################################
+# Validation utils
+#####################################
+
+
+def validate_opportunity(db_opportunity: Opportunity, resp_opportunity: dict):
+ assert db_opportunity.opportunity_id == resp_opportunity["opportunity_id"]
+ assert db_opportunity.opportunity_number == resp_opportunity["opportunity_number"]
+ assert db_opportunity.opportunity_title == resp_opportunity["opportunity_title"]
+ assert db_opportunity.agency == resp_opportunity["agency"]
+ assert db_opportunity.category == resp_opportunity["category"]
+ assert db_opportunity.category_explanation == resp_opportunity["category_explanation"]
+
+ validate_opportunity_summary(db_opportunity.summary, resp_opportunity["summary"])
+ validate_assistance_listings(
+ db_opportunity.opportunity_assistance_listings,
+ resp_opportunity["opportunity_assistance_listings"],
+ )
+
+ assert db_opportunity.opportunity_status == resp_opportunity["opportunity_status"]
+
+
+def validate_opportunity_summary(db_summary: OpportunitySummary, resp_summary: dict):
+ if db_summary is None:
+ assert resp_summary is None
+ return
+
+ assert db_summary.summary_description == resp_summary["summary_description"]
+ assert db_summary.is_cost_sharing == resp_summary["is_cost_sharing"]
+ assert db_summary.is_forecast == resp_summary["is_forecast"]
+ assert str(db_summary.close_date) == str(resp_summary["close_date"])
+ assert db_summary.close_date_description == resp_summary["close_date_description"]
+ assert str(db_summary.post_date) == str(resp_summary["post_date"])
+ assert str(db_summary.archive_date) == str(resp_summary["archive_date"])
+ assert db_summary.expected_number_of_awards == resp_summary["expected_number_of_awards"]
+ assert (
+ db_summary.estimated_total_program_funding
+ == resp_summary["estimated_total_program_funding"]
+ )
+ assert db_summary.award_floor == resp_summary["award_floor"]
+ assert db_summary.award_ceiling == resp_summary["award_ceiling"]
+ assert db_summary.additional_info_url == resp_summary["additional_info_url"]
+ assert (
+ db_summary.additional_info_url_description
+ == resp_summary["additional_info_url_description"]
+ )
+
+ assert str(db_summary.forecasted_post_date) == str(resp_summary["forecasted_post_date"])
+ assert str(db_summary.forecasted_close_date) == str(resp_summary["forecasted_close_date"])
+ assert (
+ db_summary.forecasted_close_date_description
+ == resp_summary["forecasted_close_date_description"]
+ )
+ assert str(db_summary.forecasted_award_date) == str(resp_summary["forecasted_award_date"])
+ assert str(db_summary.forecasted_project_start_date) == str(
+ resp_summary["forecasted_project_start_date"]
+ )
+ assert db_summary.fiscal_year == resp_summary["fiscal_year"]
+
+ assert db_summary.funding_category_description == resp_summary["funding_category_description"]
+ assert (
+ db_summary.applicant_eligibility_description
+ == resp_summary["applicant_eligibility_description"]
+ )
+
+ assert db_summary.agency_code == resp_summary["agency_code"]
+ assert db_summary.agency_name == resp_summary["agency_name"]
+ assert db_summary.agency_phone_number == resp_summary["agency_phone_number"]
+ assert db_summary.agency_contact_description == resp_summary["agency_contact_description"]
+ assert db_summary.agency_email_address == resp_summary["agency_email_address"]
+ assert (
+ db_summary.agency_email_address_description
+ == resp_summary["agency_email_address_description"]
+ )
+
+ assert set(db_summary.funding_instruments) == set(resp_summary["funding_instruments"])
+ assert set(db_summary.funding_categories) == set(resp_summary["funding_categories"])
+ assert set(db_summary.applicant_types) == set(resp_summary["applicant_types"])
+
+
+def validate_assistance_listings(
+ db_assistance_listings: list[OpportunityAssistanceListing], resp_listings: list[dict]
+) -> None:
+ # In order to compare this list, sort them both the same and compare from there
+ db_assistance_listings.sort(key=lambda a: (a.assistance_listing_number, a.program_title))
+ resp_listings.sort(key=lambda a: (a["assistance_listing_number"], a["program_title"]))
+
+ assert len(db_assistance_listings) == len(resp_listings)
+ for db_assistance_listing, resp_listing in zip(
+ db_assistance_listings, resp_listings, strict=True
+ ):
+ assert (
+ db_assistance_listing.assistance_listing_number
+ == resp_listing["assistance_listing_number"]
+ )
+ assert db_assistance_listing.program_title == resp_listing["program_title"]
+
+
+def validate_search_pagination(
+ search_response: dict,
+ search_request: dict,
+ expected_total_pages: int,
+ expected_total_records: int,
+ expected_response_record_count: int,
+):
+ pagination_info = search_response["pagination_info"]
+ assert pagination_info["page_offset"] == search_request["pagination"]["page_offset"]
+ assert pagination_info["page_size"] == search_request["pagination"]["page_size"]
+ assert pagination_info["order_by"] == search_request["pagination"]["order_by"]
+ assert pagination_info["sort_direction"] == search_request["pagination"]["sort_direction"]
+
+ assert pagination_info["total_pages"] == expected_total_pages
+ assert pagination_info["total_records"] == expected_total_records
+
+ searched_opportunities = search_response["data"]
+ assert len(searched_opportunities) == expected_response_record_count
+
+ # Verify data is sorted as expected
+ reverse = pagination_info["sort_direction"] == "descending"
+ resorted_opportunities = sorted(
+ searched_opportunities, key=lambda u: u[pagination_info["order_by"]], reverse=reverse
+ )
+ assert resorted_opportunities == searched_opportunities
diff --git a/api/tests/src/api/opportunities_v1/test_opportunity_auth.py b/api/tests/src/api/opportunities_v1/test_opportunity_auth.py
new file mode 100644
index 000000000..352c57bfc
--- /dev/null
+++ b/api/tests/src/api/opportunities_v1/test_opportunity_auth.py
@@ -0,0 +1,21 @@
+import pytest
+
+from tests.src.api.opportunities_v1.conftest import get_search_request
+
+
+@pytest.mark.parametrize(
+ "method,url,body",
+ [
+ ("POST", "/v1/opportunities/search", get_search_request()),
+ ("GET", "/v1/opportunities/1", None),
+ ],
+)
+def test_opportunity_unauthorized_401(client, api_auth_token, method, url, body):
+ # open is just the generic method that post/get/etc. call under the hood
+ response = client.open(url, method=method, json=body, headers={"X-Auth": "incorrect token"})
+
+ assert response.status_code == 401
+ assert (
+ response.get_json()["message"]
+ == "The server could not verify that you are authorized to access the URL requested"
+ )
diff --git a/api/tests/src/api/opportunities_v1/test_opportunity_route_get.py b/api/tests/src/api/opportunities_v1/test_opportunity_route_get.py
new file mode 100644
index 000000000..875cddfd3
--- /dev/null
+++ b/api/tests/src/api/opportunities_v1/test_opportunity_route_get.py
@@ -0,0 +1,97 @@
+import pytest
+
+from src.db.models.opportunity_models import Opportunity
+from tests.src.api.opportunities_v1.conftest import validate_opportunity
+from tests.src.db.models.factories import (
+ CurrentOpportunitySummaryFactory,
+ OpportunityFactory,
+ OpportunitySummaryFactory,
+)
+
+
+@pytest.fixture
+def truncate_opportunities(db_session):
+ # Note that we can't just do db_session.query(Opportunity).delete() as the cascade deletes won't work automatically:
+ # https://docs.sqlalchemy.org/en/20/orm/queryguide/dml.html#orm-queryguide-update-delete-caveats
+ # but if we do it individually they will
+ opportunities = db_session.query(Opportunity).all()
+ for opp in opportunities:
+ db_session.delete(opp)
+
+ # Force the deletes to the DB
+ db_session.commit()
+
+
+#####################################
+# GET opportunity tests
+#####################################
+
+
+@pytest.mark.parametrize(
+ "opportunity_params,opportunity_summary_params",
+ [
+ ({}, {}),
+ # Only an opportunity exists, no other connected records
+ (
+ {
+ "opportunity_assistance_listings": [],
+ },
+ None,
+ ),
+ # Summary exists, but none of the list values set
+ (
+ {},
+ {
+ "link_funding_instruments": [],
+ "link_funding_categories": [],
+ "link_applicant_types": [],
+ },
+ ),
+ # All possible values set to null/empty
+ # Note this uses traits on the factories to handle setting everything
+ ({"all_fields_null": True}, {"all_fields_null": True}),
+ ],
+)
+def test_get_opportunity_200(
+ client, api_auth_token, enable_factory_create, opportunity_params, opportunity_summary_params
+):
+ # Split the setup of the opportunity from the opportunity summary to simplify the factory usage a bit
+ db_opportunity = OpportunityFactory.create(
+ **opportunity_params, current_opportunity_summary=None
+ ) # We'll set the current opportunity below
+
+ if opportunity_summary_params is not None:
+ db_opportunity_summary = OpportunitySummaryFactory.create(
+ **opportunity_summary_params, opportunity=db_opportunity
+ )
+ CurrentOpportunitySummaryFactory.create(
+ opportunity=db_opportunity, opportunity_summary=db_opportunity_summary
+ )
+
+ resp = client.get(
+ f"/v1/opportunities/{db_opportunity.opportunity_id}", headers={"X-Auth": api_auth_token}
+ )
+ assert resp.status_code == 200
+ response_data = resp.get_json()["data"]
+
+ validate_opportunity(db_opportunity, response_data)
+
+
+def test_get_opportunity_404_not_found(client, api_auth_token, truncate_opportunities):
+ resp = client.get("/v1/opportunities/1", headers={"X-Auth": api_auth_token})
+ assert resp.status_code == 404
+ assert resp.get_json()["message"] == "Could not find Opportunity with ID 1"
+
+
+def test_get_opportunity_404_not_found_is_draft(client, api_auth_token, enable_factory_create):
+ # The endpoint won't return drafts, so this'll be a 404 despite existing
+ opportunity = OpportunityFactory.create(is_draft=True)
+
+ resp = client.get(
+ f"/v1/opportunities/{opportunity.opportunity_id}", headers={"X-Auth": api_auth_token}
+ )
+ assert resp.status_code == 404
+ assert (
+ resp.get_json()["message"]
+ == f"Could not find Opportunity with ID {opportunity.opportunity_id}"
+ )
diff --git a/api/tests/src/api/opportunities_v1/test_opportunity_route_search.py b/api/tests/src/api/opportunities_v1/test_opportunity_route_search.py
new file mode 100644
index 000000000..6e79419db
--- /dev/null
+++ b/api/tests/src/api/opportunities_v1/test_opportunity_route_search.py
@@ -0,0 +1,19 @@
+from tests.src.api.opportunities_v1.conftest import get_search_request
+
+
+def test_opportunity_route_search_200(client, api_auth_token):
+ req = get_search_request()
+
+ resp = client.post("/v1/opportunities/search", json=req, headers={"X-Auth": api_auth_token})
+
+ assert resp.status_code == 200
+
+ # The endpoint meaningfully only returns the pagination params back
+ # at the moment, so just validate that for now.
+ resp_body = resp.get_json()
+ assert resp_body["pagination_info"]["page_offset"] == req["pagination"]["page_offset"]
+ assert resp_body["pagination_info"]["page_size"] == req["pagination"]["page_size"]
+ assert resp_body["pagination_info"]["sort_direction"] == req["pagination"]["sort_direction"]
+ assert resp_body["pagination_info"]["order_by"] == req["pagination"]["order_by"]
+ assert resp_body["pagination_info"]["total_records"] == 0
+ assert resp_body["pagination_info"]["total_pages"] == 0
From 879e7430d0bd9fd273dd85bd5502bdd9c3af9ac7 Mon Sep 17 00:00:00 2001
From: Michael Chouinard <46358556+chouinar@users.noreply.github.com>
Date: Wed, 22 May 2024 16:15:25 -0400
Subject: [PATCH 10/21] [Issue #10] Populate the search index from the
opportunity tables (#47)
## Summary
Fixes #10
### Time to review: __10 mins__
## Changes proposed
Setup a script to populate the search index by loading opportunities
from the DB, jsonify'ing them, loading them into a new index, and then
aliasing that index.
Several utilities were created for simplifying working with the
OpenSearch client (a wrapper for setting up configuration / patterns)
## Context for reviewers
Iterating over the opportunities and doing something with them is a
common pattern in several of our scripts, so nothing is really different
there.
The meaningful implementation is how we handle creating and aliasing the
index. In OpenSearch you can give any index an alias (including putting
multiple indexes behind the same alias). The approach is pretty simple:
* Create an index
* Load opportunities into the index
* Atomically swap the index backing the `opportunity-index-alias`
* Delete the old index if they exist
This approach means that our search endpoint just needs to query the
alias, and we can keep making new indexes and swapping them out behind
the scenes. Because we could remake the index every few minutes, if we
ever need to re-configure things like the number of shards, or any other
index-creation configuration, we just update that in this script and
wait for it to run again.
## Additional information
I ran this locally after loading `83250` records, and it took about 61s.
You can run this locally yourself by doing:
```sh
make init
make db-seed-local
poetry run flask load-search-data load-opportunity-data
```
If you'd like to see the data, you can test it out on
http://localhost:5601/app/dev_tools#/console - here is an example query
that filters by the word `research` across a few fields and filters to
just forecasted/posted.
```json
GET opportunity-index-alias/_search
{
"size": 25,
"from": 0,
"query": {
"bool": {
"must": [
{
"simple_query_string": {
"query": "research",
"default_operator": "AND",
"fields": ["agency.keyword^16", "opportunity_title^2", "opportunity_number^12", "summary.summary_description", "opportunity_assistance_listings.assistance_listing_number^10", "opportunity_assistance_listings.program_title^4"]
}
}
],
"filter": [
{
"terms": {
"opportunity_status": [
"forecasted",
"posted"
]
}
}
]
}
}
}
```
---
api/src/adapters/search/__init__.py | 4 +-
api/src/adapters/search/opensearch_client.py | 115 ++++++++++++++++--
api/src/app.py | 4 +
api/src/search/__init__.py | 0
api/src/search/backend/__init__.py | 2 +
.../backend/load_opportunities_to_index.py | 112 +++++++++++++++++
api/src/search/backend/load_search_data.py | 15 +++
.../backend/load_search_data_blueprint.py | 5 +
api/tests/conftest.py | 24 ++--
.../src/adapters/search/test_opensearch.py | 58 ---------
.../adapters/search/test_opensearch_client.py | 105 ++++++++++++++++
api/tests/src/search/__init__.py | 0
api/tests/src/search/backend/__init__.py | 0
.../test_load_opportunities_to_index.py | 91 ++++++++++++++
14 files changed, 455 insertions(+), 80 deletions(-)
create mode 100644 api/src/search/__init__.py
create mode 100644 api/src/search/backend/__init__.py
create mode 100644 api/src/search/backend/load_opportunities_to_index.py
create mode 100644 api/src/search/backend/load_search_data.py
create mode 100644 api/src/search/backend/load_search_data_blueprint.py
delete mode 100644 api/tests/src/adapters/search/test_opensearch.py
create mode 100644 api/tests/src/adapters/search/test_opensearch_client.py
create mode 100644 api/tests/src/search/__init__.py
create mode 100644 api/tests/src/search/backend/__init__.py
create mode 100644 api/tests/src/search/backend/test_load_opportunities_to_index.py
diff --git a/api/src/adapters/search/__init__.py b/api/src/adapters/search/__init__.py
index 166441e1d..6b2607a04 100644
--- a/api/src/adapters/search/__init__.py
+++ b/api/src/adapters/search/__init__.py
@@ -1,4 +1,4 @@
-from src.adapters.search.opensearch_client import SearchClient, get_opensearch_client
+from src.adapters.search.opensearch_client import SearchClient
from src.adapters.search.opensearch_config import get_opensearch_config
-__all__ = ["SearchClient", "get_opensearch_client", "get_opensearch_config"]
+__all__ = ["SearchClient", "get_opensearch_config"]
diff --git a/api/src/adapters/search/opensearch_client.py b/api/src/adapters/search/opensearch_client.py
index dadcfd7c4..b93d33917 100644
--- a/api/src/adapters/search/opensearch_client.py
+++ b/api/src/adapters/search/opensearch_client.py
@@ -1,25 +1,114 @@
-from typing import Any
+import logging
+from typing import Any, Sequence
import opensearchpy
from src.adapters.search.opensearch_config import OpensearchConfig, get_opensearch_config
-# More configuration/setup coming in:
-# TODO - https://github.com/navapbc/simpler-grants-gov/issues/13
+logger = logging.getLogger(__name__)
-# Alias the OpenSearch client so that it doesn't need to be imported everywhere
-# and to make it clear it's a client
-SearchClient = opensearchpy.OpenSearch
+class SearchClient:
+ def __init__(self, opensearch_config: OpensearchConfig | None = None) -> None:
+ if opensearch_config is None:
+ opensearch_config = get_opensearch_config()
-def get_opensearch_client(
- opensearch_config: OpensearchConfig | None = None,
-) -> SearchClient:
- if opensearch_config is None:
- opensearch_config = get_opensearch_config()
+ # See: https://opensearch.org/docs/latest/clients/python-low-level/ for more details
+ self._client = opensearchpy.OpenSearch(**_get_connection_parameters(opensearch_config))
- # See: https://opensearch.org/docs/latest/clients/python-low-level/ for more details
- return opensearchpy.OpenSearch(**_get_connection_parameters(opensearch_config))
+ def create_index(
+ self, index_name: str, *, shard_count: int = 1, replica_count: int = 1
+ ) -> None:
+ """
+ Create an empty search index
+ """
+ body = {
+ "settings": {
+ "index": {"number_of_shards": shard_count, "number_of_replicas": replica_count}
+ }
+ }
+
+ logger.info("Creating search index %s", index_name, extra={"index_name": index_name})
+ self._client.indices.create(index_name, body=body)
+
+ def delete_index(self, index_name: str) -> None:
+ """
+ Delete an index. Can also delete all indexes via a prefix.
+ """
+ logger.info("Deleting search index %s", index_name, extra={"index_name": index_name})
+ self._client.indices.delete(index=index_name)
+
+ def bulk_upsert(
+ self,
+ index_name: str,
+ records: Sequence[dict[str, Any]],
+ primary_key_field: str,
+ *,
+ refresh: bool = True
+ ) -> None:
+ """
+ Bulk upsert records to an index
+
+ See: https://opensearch.org/docs/latest/api-reference/document-apis/bulk/ for details
+ In this method we only use the "index" operation which creates or updates a record
+ based on the id value.
+ """
+
+ bulk_operations = []
+
+ for record in records:
+ # For each record, we create two entries in the bulk operation list
+ # which include the unique ID + the actual record on separate lines
+ # When this is sent to the search index, this will send two lines like:
+ #
+ # {"index": {"_id": 123}}
+ # {"opportunity_id": 123, "opportunity_title": "example title", ...}
+ bulk_operations.append({"index": {"_id": record[primary_key_field]}})
+ bulk_operations.append(record)
+
+ logger.info(
+ "Upserting records to %s",
+ index_name,
+ extra={"index_name": index_name, "record_count": int(len(bulk_operations) / 2)},
+ )
+ self._client.bulk(index=index_name, body=bulk_operations, refresh=refresh)
+
+ def swap_alias_index(
+ self, index_name: str, alias_name: str, *, delete_prior_indexes: bool = False
+ ) -> None:
+ """
+ For a given index, set it to the given alias. If any existing index(es) are
+ attached to the alias, remove them from the alias.
+
+ This operation is done atomically.
+ """
+ extra = {"index_name": index_name, "index_alias": alias_name}
+ logger.info("Swapping index that backs alias %s", alias_name, extra=extra)
+
+ existing_index_mapping = self._client.cat.aliases(alias_name, format="json")
+ existing_indexes = [i["index"] for i in existing_index_mapping]
+
+ logger.info(
+ "Found existing indexes", extra=extra | {"existing_indexes": ",".join(existing_indexes)}
+ )
+
+ actions = [{"add": {"index": index_name, "alias": alias_name}}]
+
+ for index in existing_indexes:
+ actions.append({"remove": {"index": index, "alias": alias_name}})
+
+ self._client.indices.update_aliases({"actions": actions})
+
+ # Cleanup old indexes now that they aren't connected to the alias
+ if delete_prior_indexes:
+ for index in existing_indexes:
+ self.delete_index(index)
+
+ def search(self, index_name: str, search_query: dict) -> dict:
+ # TODO - add more when we build out the request/response parsing logic
+ # we use something like Pydantic to help reorganize the response
+ # object into something easier to parse.
+ return self._client.search(index=index_name, body=search_query)
def _get_connection_parameters(opensearch_config: OpensearchConfig) -> dict[str, Any]:
diff --git a/api/src/app.py b/api/src/app.py
index 0d584a683..e9604157b 100644
--- a/api/src/app.py
+++ b/api/src/app.py
@@ -18,6 +18,7 @@
from src.api.schemas import response_schema
from src.auth.api_key_auth import get_app_security_scheme
from src.data_migration.data_migration_blueprint import data_migration_blueprint
+from src.search.backend.load_search_data_blueprint import load_search_data_blueprint
from src.task import task_blueprint
logger = logging.getLogger(__name__)
@@ -103,8 +104,11 @@ def register_blueprints(app: APIFlask) -> None:
app.register_blueprint(opportunities_v0_blueprint)
app.register_blueprint(opportunities_v0_1_blueprint)
app.register_blueprint(opportunities_v1_blueprint)
+
+ # Non-api blueprints
app.register_blueprint(data_migration_blueprint)
app.register_blueprint(task_blueprint)
+ app.register_blueprint(load_search_data_blueprint)
def get_project_root_dir() -> str:
diff --git a/api/src/search/__init__.py b/api/src/search/__init__.py
new file mode 100644
index 000000000..e69de29bb
diff --git a/api/src/search/backend/__init__.py b/api/src/search/backend/__init__.py
new file mode 100644
index 000000000..00a43e108
--- /dev/null
+++ b/api/src/search/backend/__init__.py
@@ -0,0 +1,2 @@
+# import all files so they get initialized and attached to the blueprint
+from . import load_search_data # noqa: F401
diff --git a/api/src/search/backend/load_opportunities_to_index.py b/api/src/search/backend/load_opportunities_to_index.py
new file mode 100644
index 000000000..a01357a96
--- /dev/null
+++ b/api/src/search/backend/load_opportunities_to_index.py
@@ -0,0 +1,112 @@
+import logging
+from enum import StrEnum
+from typing import Iterator, Sequence
+
+from pydantic import Field
+from pydantic_settings import SettingsConfigDict
+from sqlalchemy import select
+from sqlalchemy.orm import noload, selectinload
+
+import src.adapters.db as db
+import src.adapters.search as search
+from src.api.opportunities_v0_1.opportunity_schemas import OpportunityV01Schema
+from src.db.models.opportunity_models import CurrentOpportunitySummary, Opportunity
+from src.task.task import Task
+from src.util.datetime_util import get_now_us_eastern_datetime
+from src.util.env_config import PydanticBaseEnvConfig
+
+logger = logging.getLogger(__name__)
+
+
+class LoadOpportunitiesToIndexConfig(PydanticBaseEnvConfig):
+ model_config = SettingsConfigDict(env_prefix="LOAD_OPP_SEARCH_")
+
+ shard_count: int = Field(default=1) # LOAD_OPP_SEARCH_SHARD_COUNT
+ replica_count: int = Field(default=1) # LOAD_OPP_SEARCH_REPLICA_COUNT
+
+ # TODO - these might make sense to come from some sort of opportunity-search-index-config?
+ # look into this a bit more when we setup the search endpoint itself.
+ alias_name: str = Field(default="opportunity-index-alias") # LOAD_OPP_SEARCH_ALIAS_NAME
+ index_prefix: str = Field(default="opportunity-index") # LOAD_OPP_INDEX_PREFIX
+
+
+class LoadOpportunitiesToIndex(Task):
+ class Metrics(StrEnum):
+ RECORDS_LOADED = "records_loaded"
+
+ def __init__(
+ self,
+ db_session: db.Session,
+ search_client: search.SearchClient,
+ config: LoadOpportunitiesToIndexConfig | None = None,
+ ) -> None:
+ super().__init__(db_session)
+
+ self.search_client = search_client
+
+ if config is None:
+ config = LoadOpportunitiesToIndexConfig()
+ self.config = config
+
+ current_timestamp = get_now_us_eastern_datetime().strftime("%Y-%m-%d_%H-%M-%S")
+ self.index_name = f"{self.config.index_prefix}-{current_timestamp}"
+ self.set_metrics({"index_name": self.index_name})
+
+ def run_task(self) -> None:
+ # create the index
+ self.search_client.create_index(
+ self.index_name,
+ shard_count=self.config.shard_count,
+ replica_count=self.config.replica_count,
+ )
+
+ # load the records
+ for opp_batch in self.fetch_opportunities():
+ self.load_records(opp_batch)
+
+ # handle aliasing of endpoints
+ self.search_client.swap_alias_index(
+ self.index_name, self.config.alias_name, delete_prior_indexes=True
+ )
+
+ def fetch_opportunities(self) -> Iterator[Sequence[Opportunity]]:
+ """
+ Fetch the opportunities in batches. The iterator returned
+ will give you each individual batch to be processed.
+
+ Fetches all opportunities where:
+ * is_draft = False
+ * current_opportunity_summary is not None
+ """
+ return (
+ self.db_session.execute(
+ select(Opportunity)
+ .join(CurrentOpportunitySummary)
+ .where(
+ Opportunity.is_draft.is_(False),
+ CurrentOpportunitySummary.opportunity_status.isnot(None),
+ )
+ .options(selectinload("*"), noload(Opportunity.all_opportunity_summaries))
+ .execution_options(yield_per=5000)
+ )
+ .scalars()
+ .partitions()
+ )
+
+ def load_records(self, records: Sequence[Opportunity]) -> None:
+ logger.info("Loading batch of opportunities...")
+ schema = OpportunityV01Schema()
+ json_records = []
+
+ for record in records:
+ logger.info(
+ "Preparing opportunity for upload to search index",
+ extra={
+ "opportunity_id": record.opportunity_id,
+ "opportunity_status": record.opportunity_status,
+ },
+ )
+ json_records.append(schema.dump(record))
+ self.increment(self.Metrics.RECORDS_LOADED)
+
+ self.search_client.bulk_upsert(self.index_name, json_records, "opportunity_id")
diff --git a/api/src/search/backend/load_search_data.py b/api/src/search/backend/load_search_data.py
new file mode 100644
index 000000000..cf6f0445f
--- /dev/null
+++ b/api/src/search/backend/load_search_data.py
@@ -0,0 +1,15 @@
+import src.adapters.db as db
+import src.adapters.search as search
+from src.adapters.db import flask_db
+from src.search.backend.load_opportunities_to_index import LoadOpportunitiesToIndex
+from src.search.backend.load_search_data_blueprint import load_search_data_blueprint
+
+
+@load_search_data_blueprint.cli.command(
+ "load-opportunity-data", help="Load opportunity data from our database to the search index"
+)
+@flask_db.with_db_session()
+def load_opportunity_data(db_session: db.Session) -> None:
+ search_client = search.SearchClient()
+
+ LoadOpportunitiesToIndex(db_session, search_client).run()
diff --git a/api/src/search/backend/load_search_data_blueprint.py b/api/src/search/backend/load_search_data_blueprint.py
new file mode 100644
index 000000000..fffd9f915
--- /dev/null
+++ b/api/src/search/backend/load_search_data_blueprint.py
@@ -0,0 +1,5 @@
+from apiflask import APIBlueprint
+
+load_search_data_blueprint = APIBlueprint(
+ "load-search-data", __name__, enable_openapi=False, cli_group="load-search-data"
+)
diff --git a/api/tests/conftest.py b/api/tests/conftest.py
index 97173e9a7..4b45c4f2c 100644
--- a/api/tests/conftest.py
+++ b/api/tests/conftest.py
@@ -151,25 +151,35 @@ def test_foreign_schema(db_schema_prefix):
@pytest.fixture(scope="session")
def search_client() -> search.SearchClient:
- return search.get_opensearch_client()
+ client = search.SearchClient()
+ try:
+ yield client
+ finally:
+ # Just in case a test setup an index
+ # in a way that didn't clean it up, delete
+ # all indexes at the end of a run that start with test
+ client.delete_index("test-*")
@pytest.fixture(scope="session")
def opportunity_index(search_client):
- # TODO - will adjust this in the future to use utils we'll build
- # for setting up / aliasing indexes. For now, keep it simple
-
# create a random index name just to make sure it won't ever conflict
# with an actual one, similar to how we create schemas for database tests
- index_name = f"test_{uuid.uuid4().int}_opportunity"
+ index_name = f"test-opportunity-index-{uuid.uuid4().int}"
- search_client.indices.create(index_name, body={})
+ search_client.create_index(index_name)
try:
yield index_name
finally:
# Try to clean up the index at the end
- search_client.indices.delete(index_name)
+ search_client.delete_index(index_name)
+
+
+@pytest.fixture(scope="session")
+def opportunity_index_alias(search_client):
+ # Note we don't actually create anything, this is just a random name
+ return f"test-opportunity-index-alias-{uuid.uuid4().int}"
####################
diff --git a/api/tests/src/adapters/search/test_opensearch.py b/api/tests/src/adapters/search/test_opensearch.py
deleted file mode 100644
index 490ffcb3b..000000000
--- a/api/tests/src/adapters/search/test_opensearch.py
+++ /dev/null
@@ -1,58 +0,0 @@
-########################################
-# This is a placeholder set of tests,
-# we'll evolve / change the structure
-# as we continue developing this
-#
-# Just wanted something simple so I can verify
-# the early steps of this setup are working
-# before we actually have code to use
-########################################
-
-
-def test_index_is_running(search_client, opportunity_index):
- # Very simple test, will rewrite / remove later once we have something
- # more meaningful to test.
-
- existing_indexes = search_client.cat.indices(format="json")
-
- found_opportunity_index = False
- for index in existing_indexes:
- if index["index"] == opportunity_index:
- found_opportunity_index = True
- break
-
- assert found_opportunity_index is True
-
- # Add a few records to the index
-
- record1 = {
- "opportunity_id": 1,
- "opportunity_title": "Research into how to make a search engine",
- "opportunity_status": "posted",
- }
- record2 = {
- "opportunity_id": 2,
- "opportunity_title": "Research about words, and more words!",
- "opportunity_status": "forecasted",
- }
-
- search_client.index(index=opportunity_index, body=record1, id=1, refresh=True)
- search_client.index(index=opportunity_index, body=record2, id=2, refresh=True)
-
- search_request = {
- "query": {
- "bool": {
- "must": {
- "simple_query_string": {"query": "research", "fields": ["opportunity_title"]}
- }
- }
- }
- }
- response = search_client.search(index=opportunity_index, body=search_request)
- assert response["hits"]["total"]["value"] == 2
-
- filter_request = {
- "query": {"bool": {"filter": [{"terms": {"opportunity_status": ["forecasted"]}}]}}
- }
- response = search_client.search(index=opportunity_index, body=filter_request)
- assert response["hits"]["total"]["value"] == 1
diff --git a/api/tests/src/adapters/search/test_opensearch_client.py b/api/tests/src/adapters/search/test_opensearch_client.py
new file mode 100644
index 000000000..d9ba22194
--- /dev/null
+++ b/api/tests/src/adapters/search/test_opensearch_client.py
@@ -0,0 +1,105 @@
+import uuid
+
+import pytest
+
+########################################################################
+# These tests are primarily looking to validate
+# that our wrappers around the OpenSearch client
+# are being used correctly / account for error cases correctly.
+#
+# We are not validating all the intricacies of OpenSearch itself.
+########################################################################
+
+
+@pytest.fixture
+def generic_index(search_client):
+ # This is very similar to the opportunity_index fixture, but
+ # is reused per unit test rather than a global value
+ index_name = f"test-index-{uuid.uuid4().int}"
+
+ search_client.create_index(index_name)
+
+ try:
+ yield index_name
+ finally:
+ # Try to clean up the index at the end
+ search_client.delete_index(index_name)
+
+
+def test_create_and_delete_index_duplicate(search_client):
+ index_name = f"test-index-{uuid.uuid4().int}"
+
+ search_client.create_index(index_name)
+ with pytest.raises(Exception, match="already exists"):
+ search_client.create_index(index_name)
+
+ # Cleanup the index
+ search_client.delete_index(index_name)
+ with pytest.raises(Exception, match="no such index"):
+ search_client.delete_index(index_name)
+
+
+def test_bulk_upsert(search_client, generic_index):
+ records = [
+ {"id": 1, "title": "Green Eggs & Ham", "notes": "why are the eggs green?"},
+ {"id": 2, "title": "The Cat in the Hat", "notes": "silly cat wears a hat"},
+ {"id": 3, "title": "One Fish, Two Fish, Red Fish, Blue Fish", "notes": "fish"},
+ ]
+
+ search_client.bulk_upsert(generic_index, records, primary_key_field="id")
+
+ # Verify the records are in the index
+ for record in records:
+ assert search_client._client.get(generic_index, record["id"])["_source"] == record
+
+ # Can update + add more
+ records = [
+ {"id": 1, "title": "Green Eggs & Ham", "notes": "Sam, eat the eggs"},
+ {"id": 2, "title": "The Cat in the Hat", "notes": "watch the movie"},
+ {"id": 3, "title": "One Fish, Two Fish, Red Fish, Blue Fish", "notes": "colors & numbers"},
+ {"id": 4, "title": "How the Grinch Stole Christmas", "notes": "who"},
+ ]
+ search_client.bulk_upsert(generic_index, records, primary_key_field="id")
+
+ for record in records:
+ assert search_client._client.get(generic_index, record["id"])["_source"] == record
+
+
+def test_swap_alias_index(search_client, generic_index):
+ alias_name = f"tmp-alias-{uuid.uuid4().int}"
+
+ # Populate the generic index, we won't immediately use this one
+ records = [
+ {"id": 1, "data": "abc123"},
+ {"id": 2, "data": "def456"},
+ {"id": 3, "data": "xyz789"},
+ ]
+ search_client.bulk_upsert(generic_index, records, primary_key_field="id")
+
+ # Create a different index that we'll attach to the alias first.
+ tmp_index = f"test-tmp-index-{uuid.uuid4().int}"
+ search_client.create_index(tmp_index)
+ # Add a few records
+ tmp_index_records = [
+ {"id": 1, "data": "abc123"},
+ {"id": 2, "data": "xyz789"},
+ ]
+ search_client.bulk_upsert(tmp_index, tmp_index_records, primary_key_field="id")
+
+ # Set the alias
+ search_client.swap_alias_index(tmp_index, alias_name, delete_prior_indexes=True)
+
+ # Can search by this alias and get records from the tmp index
+ resp = search_client.search(alias_name, {})
+ resp_records = [record["_source"] for record in resp["hits"]["hits"]]
+ assert resp_records == tmp_index_records
+
+ # Swap the index to the generic one + delete the tmp one
+ search_client.swap_alias_index(generic_index, alias_name, delete_prior_indexes=True)
+
+ resp = search_client.search(alias_name, {})
+ resp_records = [record["_source"] for record in resp["hits"]["hits"]]
+ assert resp_records == records
+
+ # Verify the tmp one was deleted
+ assert search_client._client.indices.exists(tmp_index) is False
diff --git a/api/tests/src/search/__init__.py b/api/tests/src/search/__init__.py
new file mode 100644
index 000000000..e69de29bb
diff --git a/api/tests/src/search/backend/__init__.py b/api/tests/src/search/backend/__init__.py
new file mode 100644
index 000000000..e69de29bb
diff --git a/api/tests/src/search/backend/test_load_opportunities_to_index.py b/api/tests/src/search/backend/test_load_opportunities_to_index.py
new file mode 100644
index 000000000..a079b83c8
--- /dev/null
+++ b/api/tests/src/search/backend/test_load_opportunities_to_index.py
@@ -0,0 +1,91 @@
+import pytest
+
+from src.search.backend.load_opportunities_to_index import (
+ LoadOpportunitiesToIndex,
+ LoadOpportunitiesToIndexConfig,
+)
+from tests.conftest import BaseTestClass
+from tests.src.db.models.factories import OpportunityFactory
+
+
+class TestLoadOpportunitiesToIndex(BaseTestClass):
+ @pytest.fixture(scope="class")
+ def load_opportunities_to_index(self, db_session, search_client, opportunity_index_alias):
+ config = LoadOpportunitiesToIndexConfig(
+ alias_name=opportunity_index_alias, index_prefix="test-load-opps"
+ )
+ return LoadOpportunitiesToIndex(db_session, search_client, config)
+
+ def test_load_opportunities_to_index(
+ self,
+ truncate_opportunities,
+ enable_factory_create,
+ search_client,
+ opportunity_index_alias,
+ load_opportunities_to_index,
+ ):
+ # Create 25 opportunities we will load into the search index
+ opportunities = []
+ opportunities.extend(OpportunityFactory.create_batch(size=6, is_posted_summary=True))
+ opportunities.extend(OpportunityFactory.create_batch(size=3, is_forecasted_summary=True))
+ opportunities.extend(OpportunityFactory.create_batch(size=2, is_closed_summary=True))
+ opportunities.extend(
+ OpportunityFactory.create_batch(size=8, is_archived_non_forecast_summary=True)
+ )
+ opportunities.extend(
+ OpportunityFactory.create_batch(size=6, is_archived_forecast_summary=True)
+ )
+
+ # Create some opportunities that won't get fetched / loaded into search
+ OpportunityFactory.create_batch(size=3, is_draft=True)
+ OpportunityFactory.create_batch(size=4, no_current_summary=True)
+
+ load_opportunities_to_index.run()
+ # Verify some metrics first
+ assert (
+ len(opportunities)
+ == load_opportunities_to_index.metrics[
+ load_opportunities_to_index.Metrics.RECORDS_LOADED
+ ]
+ )
+
+ # Just do some rough validation that the data is present
+ resp = search_client.search(opportunity_index_alias, {"size": 100})
+
+ total_records = resp["hits"]["total"]["value"]
+ assert total_records == len(opportunities)
+
+ records = [record["_source"] for record in resp["hits"]["hits"]]
+ assert set([opp.opportunity_id for opp in opportunities]) == set(
+ [record["opportunity_id"] for record in records]
+ )
+
+ # Rerunning without changing anything about the data in the DB doesn't meaningfully change anything
+ load_opportunities_to_index.index_name = load_opportunities_to_index.index_name + "-another"
+ load_opportunities_to_index.run()
+ resp = search_client.search(opportunity_index_alias, {"size": 100})
+
+ total_records = resp["hits"]["total"]["value"]
+ assert total_records == len(opportunities)
+
+ records = [record["_source"] for record in resp["hits"]["hits"]]
+ assert set([opp.opportunity_id for opp in opportunities]) == set(
+ [record["opportunity_id"] for record in records]
+ )
+
+ # Rerunning but first add a few more opportunities to show up
+ opportunities.extend(OpportunityFactory.create_batch(size=3))
+ load_opportunities_to_index.index_name = (
+ load_opportunities_to_index.index_name + "-new-data"
+ )
+ load_opportunities_to_index.run()
+
+ resp = search_client.search(opportunity_index_alias, {"size": 100})
+
+ total_records = resp["hits"]["total"]["value"]
+ assert total_records == len(opportunities)
+
+ records = [record["_source"] for record in resp["hits"]["hits"]]
+ assert set([opp.opportunity_id for opp in opportunities]) == set(
+ [record["opportunity_id"] for record in records]
+ )
From 2572fe00077df2ba7e98448751698729d2c2e5f2 Mon Sep 17 00:00:00 2001
From: Aaron Couch
Date: Thu, 23 May 2024 16:26:15 -0400
Subject: [PATCH 11/21] Move Pages to App Router (#7)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
## Summary
Fixes #6
### Time to review: __60 mins__
## Changes proposed
### Move pages from page to app router:
1. Move all pages to
[`[locale]`](https://next-intl-docs.vercel.app/docs/getting-started/app-router/with-i18n-routing#getting-started)
folder
2. Add
[`generateMetata()`](https://nextjs.org/docs/app/api-reference/functions/generate-metadata#generatemetadata-function)
function and [next-intl
`getTranslations()`](https://next-intl-docs.vercel.app/docs/environments/metadata-route-handlers#metadata-api)
implementation
* @rylew1 commented we could remove this from each page. To do that we
could use [prop
arguments](https://nextjs.org/docs/app/api-reference/functions/generate-metadata#with-segment-props)
and update the based on the param. There is also more we can do with the
metadata to properly add [app links and twitter
cards](https://nextjs.org/docs/app/api-reference/functions/generate-metadata#applinks).
TODO: create ticket
4. Replace i18n's `useTranslation` with next-intl's `useTranslations`
5. Remove hard-coded strings that were present b/c we were still b/w
i18next and next-intl
#### Changes
* [Move process page to
app](https://github.com/navapbc/simpler-grants-gov/pull/7/commits/32ba4ee29365444aa3260237912c340def137ad2)
* [Move research page to
app](https://github.com/navapbc/simpler-grants-gov/pull/7/commits/5b5ad1a5ecb21f82378c5d9eaf58bcdd246aa8fc)
* [Move health page to
app](https://github.com/navapbc/simpler-grants-gov/pull/7/commits/a3e62551644aa85fdef5921e89123cad66b4ec1c)
* [Move feature flag page to
app](https://github.com/navapbc/simpler-grants-gov/pull/7/commits/395baed01983914f9ba04242abf6e379c4695216)
* [Move search page to app
router](https://github.com/navapbc/simpler-grants-gov/pull/7/commits/1e261e3d9723d83a34492e05facc2a04b96d19d8)
* [Move newsletter pages to app
router](https://github.com/navapbc/simpler-grants-gov/pull/7/commits/b509ef8a1744ae51f96de17fad266b6baa566962)
* [Move home page to app
router](https://github.com/navapbc/simpler-grants-gov/pull/7/commits/de1be98ac22e68266bc61bd619821a2da1045c36)
* [Move home page to app
router](https://github.com/navapbc/simpler-grants-gov/pull/7/commits/74077aeb617650fb3eefb23a237fa3f95814ab5d)
* [Move 404 page to app
router](https://github.com/navapbc/simpler-grants-gov/pull/7/commits/ccbc9563ba63647db7fb1ee8365f166396014e9d)
### Misc
1. [Delete hello
api](https://github.com/navapbc/simpler-grants-gov/pull/7/commits/5bad6ea9c5656515bed20a215c8751b825214368)
* This was left from the project creation
2. [Add USWDS icon
component](https://github.com/navapbc/simpler-grants-gov/pull/7/commits/0120c7bd15f5ec4f8f36ab7249c3c802c1b47c34)
* as noted in a slack discussion, when trying to access [one of the
icons](https://github.com/trussworks/react-uswds/blob/main/src/components/Icon/Icons.ts)
using ` ` next errors: `You cannot dot into a client module
from a server component. You can only pass the imported name through`.
I'm not sure why it thinks the Icon component is a client module. [Dan
A.
suggests](https://github.com/vercel/next.js/issues/51593#issuecomment-1748001262)
trussworks should re-export as named exports. I tried importing the SVGs
directly from the trussworks library but [svgr requires a custom webpack
config](https://react-svgr.com/docs/next/) which is a road I didn't want
to go down and [react svg](https://www.npmjs.com/package/react-svg)
through an error in the app router 😥 .
* I implemented @sawyerh 's
[suggestion](https://github.com/navapbc/simpler-grants-gov/pull/7/commits/0120c7bd15f5ec4f8f36ab7249c3c802c1b47c34#diff-dadb35bd2f3f61f2c179f033cd0a2874fc343974236f2fb8613664703c751429),
which did not work initially b/c next reported the USWDS icon was
corrupt, which was fixed by adding a `viewBox` to the svg element 😮💨 .
* [Remove unused
WtGIContent](https://github.com/navapbc/simpler-grants-gov/pull/7/commits/75490f73af2d2c2ec3705c2a02d2d27692316fc6)
### Layout and component updates
* [Move layout and update for app
router](https://github.com/navapbc/simpler-grants-gov/pull/7/commits/af112fd25935549048c9941be7c160b28c01ae7f)
* [Update global components for the app
router](https://github.com/navapbc/simpler-grants-gov/pull/7/commits/40119e66c99b2c4047967111cf06e1f904e6eab6)
### Remaining next-intl config and removal of
* [Move i18n strings for app
router](https://github.com/navapbc/simpler-grants-gov/pull/7/commits/eb3c07c82f4dfe2845f9532943c3ef71b1789ff0)
* [Adds next-intl config and removes
i18n](https://github.com/navapbc/simpler-grants-gov/pull/7/commits/c546571fdc5443e15cbcecc48db2ef33fcad77c0)
* [Update tests for app
router](https://github.com/navapbc/simpler-grants-gov/pull/7/commits/3b9b1931bb36fa9795a38e0898c9f40ad8deb4af)
* [Removes i18next and next-i18n
packages](https://github.com/navapbc/simpler-grants-gov/pull/7/commits/9d2e08ad44f21b0f8b62a60cc66fdda7843314b2)
* [Update storybook settings for app
router](https://github.com/navapbc/simpler-grants-gov/pull/7/commits/39f115d6eb8f57d8aefbe12002b12c01d1dad2c4)
---
frontend/.storybook/I18nStoryWrapper.tsx | 30 ++
frontend/.storybook/i18next.js | 22 --
frontend/.storybook/main.js | 6 +-
frontend/.storybook/preview.js | 43 ---
frontend/.storybook/preview.tsx | 64 ++++
frontend/jest.config.js | 5 +-
frontend/next-i18next.config.js | 52 ----
frontend/next.config.js | 8 +-
frontend/package-lock.json | 92 ++----
frontend/package.json | 3 -
frontend/public/img/uswds-sprite.svg | 1 +
frontend/public/locales/en/common.json | 294 ------------------
frontend/public/locales/es/common.json | 8 -
.../dev/feature-flags/FeatureFlagsTable.tsx | 61 ++++
.../app/[locale]/dev/feature-flags/page.tsx | 30 ++
frontend/src/app/[locale]/health/page.tsx | 3 +
.../[locale]/newsletter/NewsletterForm.tsx | 217 +++++++++++++
.../[locale]/newsletter/confirmation/page.tsx | 66 ++++
frontend/src/app/[locale]/newsletter/page.tsx | 71 +++++
.../[locale]/newsletter/unsubscribe/page.tsx | 69 ++++
frontend/src/app/[locale]/page.tsx | 31 ++
.../src/app/[locale]/process/ProcessIntro.tsx | 51 +++
.../app/[locale]/process/ProcessInvolved.tsx | 67 ++++
.../[locale]/process}/ProcessMilestones.tsx | 147 ++++-----
frontend/src/app/[locale]/process/page.tsx | 38 +++
.../[locale]/research}/ResearchArchetypes.tsx | 13 +-
.../app/[locale]/research/ResearchImpact.tsx | 80 +++++
.../[locale]/research}/ResearchIntro.tsx | 4 +-
.../research}/ResearchMethodology.tsx | 48 ++-
.../[locale]/research}/ResearchThemes.tsx | 4 +-
frontend/src/app/[locale]/research/page.tsx | 41 +++
.../app/{ => [locale]}/search/SearchForm.tsx | 22 +-
.../src/app/{ => [locale]}/search/actions.ts | 6 +-
.../src/app/{ => [locale]}/search/error.tsx | 2 +-
.../src/app/{ => [locale]}/search/loading.tsx | 2 +-
.../src/app/{ => [locale]}/search/page.tsx | 15 +-
frontend/src/app/layout.tsx | 4 +-
frontend/src/app/not-found.tsx | 15 +-
frontend/src/app/template.tsx | 2 +-
frontend/src/components/AppBetaAlert.tsx | 23 --
frontend/src/components/AppLayout.tsx | 59 ----
frontend/src/components/BetaAlert.tsx | 47 +--
frontend/src/components/Footer.tsx | 88 +++---
frontend/src/components/GrantsIdentifier.tsx | 58 ++--
frontend/src/components/Header.tsx | 38 +--
frontend/src/components/Hero.tsx | 13 +-
frontend/src/components/Layout.tsx | 64 ++--
frontend/src/components/USWDSIcon.tsx | 23 ++
.../content/FundingContent.tsx | 6 +-
.../content/IndexGoalContent.tsx | 15 +-
.../content/ProcessAndResearchContent.tsx | 19 +-
.../components/search/SearchResultsList.tsx | 2 +-
frontend/src/hooks/useSearchFormState.ts | 2 +-
frontend/src/i18n/messages/en/index.ts | 9 +-
frontend/src/middleware.ts | 2 +-
frontend/src/pages/404.tsx | 39 ---
frontend/src/pages/_app.tsx | 28 --
frontend/src/pages/api/hello.ts | 13 -
frontend/src/pages/content/ProcessIntro.tsx | 58 ----
.../src/pages/content/ProcessInvolved.tsx | 70 -----
frontend/src/pages/content/ResearchImpact.tsx | 83 -----
frontend/src/pages/content/WtGIContent.tsx | 90 ------
frontend/src/pages/dev/feature-flags.tsx | 87 ------
frontend/src/pages/health.tsx | 15 -
frontend/src/pages/index.tsx | 40 ---
.../src/pages/newsletter/confirmation.tsx | 71 -----
frontend/src/pages/newsletter/index.tsx | 276 ----------------
frontend/src/pages/newsletter/unsubscribe.tsx | 78 -----
frontend/src/pages/process.tsx | 45 ---
frontend/src/pages/research.tsx | 49 ---
.../components/FundingContent.stories.tsx | 2 +-
.../components/GoalContent.stories.tsx | 2 +-
.../components/ProcessContent.stories.tsx | 2 +-
.../components/ReaserchImpact.stories.tsx | 2 +-
.../components/ReaserchIntro.stories.tsx | 2 +-
.../components/ReaserchThemes.stories.tsx | 2 +-
.../components/ResearchArchetypes.stories.tsx | 2 +-
.../ResearchMethodology.stories.tsx | 2 +-
.../components/WtGIContent.stories.tsx | 17 -
frontend/stories/pages/404.stories.tsx | 2 +-
frontend/stories/pages/Index.stories.tsx | 2 +-
frontend/stories/pages/process.stories.tsx | 2 +-
frontend/stories/pages/research.stories.tsx | 2 +-
frontend/stories/pages/search.stories.tsx | 2 +-
frontend/tests/components/AppLayout.test.tsx | 29 --
frontend/tests/components/BetaAlert.test.tsx | 11 +-
frontend/tests/components/Footer.test.tsx | 20 +-
.../tests/components/FullWidthAlert.test.tsx | 2 +-
.../tests/components/FundingContent.test.tsx | 4 +-
.../tests/components/GoalContent.test.tsx | 4 +-
.../components/GrantsIdentifier.test.tsx | 19 +-
frontend/tests/components/Header.test.tsx | 14 +-
frontend/tests/components/Hero.test.tsx | 2 +-
frontend/tests/components/Layout.test.tsx | 10 +-
.../ProcessAndResearchContent.test.tsx | 4 +-
.../tests/components/ProcessIntro.test.tsx | 4 +-
.../tests/components/ProcessInvolved.test.tsx | 4 +-
.../components/ProcessMilestones.test.tsx | 4 +-
.../components/ResearchArchetypes.test.tsx | 4 +-
.../tests/components/ResearchImpact.test.tsx | 4 +-
.../tests/components/ResearchIntro.test.tsx | 4 +-
.../components/ResearchMethodology.test.tsx | 4 +-
.../tests/components/ResearchThemes.test.tsx | 4 +-
frontend/tests/components/USWDSIcon.test.tsx | 12 +
.../tests/components/WtGIContent.test.tsx | 10 -
frontend/tests/e2e/404.spec.ts | 20 ++
frontend/tests/e2e/newsletter.spec.ts | 2 +-
frontend/tests/e2e/search/search.spec.ts | 2 +
frontend/tests/errors.test.ts | 2 +-
frontend/tests/jest-i18n.ts | 53 ----
frontend/tests/pages/404.test.tsx | 27 --
.../tests/pages/dev/feature-flags.test.tsx | 12 +-
frontend/tests/pages/index.test.tsx | 5 +-
.../pages/newsletter/confirmation.test.tsx | 4 +-
.../tests/pages/newsletter/index.test.tsx | 18 +-
.../pages/newsletter/unsubscribe.test.tsx | 4 +-
frontend/tests/pages/process.test.tsx | 5 +-
frontend/tests/pages/research.test.tsx | 5 +-
frontend/tests/playwright.config.ts | 1 +
frontend/tsconfig.json | 1 +
120 files changed, 1345 insertions(+), 2279 deletions(-)
create mode 100644 frontend/.storybook/I18nStoryWrapper.tsx
delete mode 100644 frontend/.storybook/i18next.js
delete mode 100644 frontend/.storybook/preview.js
create mode 100644 frontend/.storybook/preview.tsx
delete mode 100644 frontend/next-i18next.config.js
create mode 100644 frontend/public/img/uswds-sprite.svg
delete mode 100644 frontend/public/locales/en/common.json
delete mode 100644 frontend/public/locales/es/common.json
create mode 100644 frontend/src/app/[locale]/dev/feature-flags/FeatureFlagsTable.tsx
create mode 100644 frontend/src/app/[locale]/dev/feature-flags/page.tsx
create mode 100644 frontend/src/app/[locale]/health/page.tsx
create mode 100644 frontend/src/app/[locale]/newsletter/NewsletterForm.tsx
create mode 100644 frontend/src/app/[locale]/newsletter/confirmation/page.tsx
create mode 100644 frontend/src/app/[locale]/newsletter/page.tsx
create mode 100644 frontend/src/app/[locale]/newsletter/unsubscribe/page.tsx
create mode 100644 frontend/src/app/[locale]/page.tsx
create mode 100644 frontend/src/app/[locale]/process/ProcessIntro.tsx
create mode 100644 frontend/src/app/[locale]/process/ProcessInvolved.tsx
rename frontend/src/{pages/content => app/[locale]/process}/ProcessMilestones.tsx (50%)
create mode 100644 frontend/src/app/[locale]/process/page.tsx
rename frontend/src/{pages/content => app/[locale]/research}/ResearchArchetypes.tsx (91%)
create mode 100644 frontend/src/app/[locale]/research/ResearchImpact.tsx
rename frontend/src/{pages/content => app/[locale]/research}/ResearchIntro.tsx (81%)
rename frontend/src/{pages/content => app/[locale]/research}/ResearchMethodology.tsx (53%)
rename frontend/src/{pages/content => app/[locale]/research}/ResearchThemes.tsx (93%)
create mode 100644 frontend/src/app/[locale]/research/page.tsx
rename frontend/src/app/{ => [locale]}/search/SearchForm.tsx (80%)
rename frontend/src/app/{ => [locale]}/search/actions.ts (68%)
rename frontend/src/app/{ => [locale]}/search/error.tsx (98%)
rename frontend/src/app/{ => [locale]}/search/loading.tsx (88%)
rename frontend/src/app/{ => [locale]}/search/page.tsx (71%)
delete mode 100644 frontend/src/components/AppBetaAlert.tsx
delete mode 100644 frontend/src/components/AppLayout.tsx
create mode 100644 frontend/src/components/USWDSIcon.tsx
rename frontend/src/{pages => components}/content/FundingContent.tsx (93%)
rename frontend/src/{pages => components}/content/IndexGoalContent.tsx (80%)
rename frontend/src/{pages => components}/content/ProcessAndResearchContent.tsx (77%)
delete mode 100644 frontend/src/pages/404.tsx
delete mode 100644 frontend/src/pages/_app.tsx
delete mode 100644 frontend/src/pages/api/hello.ts
delete mode 100644 frontend/src/pages/content/ProcessIntro.tsx
delete mode 100644 frontend/src/pages/content/ProcessInvolved.tsx
delete mode 100644 frontend/src/pages/content/ResearchImpact.tsx
delete mode 100644 frontend/src/pages/content/WtGIContent.tsx
delete mode 100644 frontend/src/pages/dev/feature-flags.tsx
delete mode 100644 frontend/src/pages/health.tsx
delete mode 100644 frontend/src/pages/index.tsx
delete mode 100644 frontend/src/pages/newsletter/confirmation.tsx
delete mode 100644 frontend/src/pages/newsletter/index.tsx
delete mode 100644 frontend/src/pages/newsletter/unsubscribe.tsx
delete mode 100644 frontend/src/pages/process.tsx
delete mode 100644 frontend/src/pages/research.tsx
delete mode 100644 frontend/stories/components/WtGIContent.stories.tsx
delete mode 100644 frontend/tests/components/AppLayout.test.tsx
create mode 100644 frontend/tests/components/USWDSIcon.test.tsx
delete mode 100644 frontend/tests/components/WtGIContent.test.tsx
create mode 100644 frontend/tests/e2e/404.spec.ts
delete mode 100644 frontend/tests/jest-i18n.ts
delete mode 100644 frontend/tests/pages/404.test.tsx
diff --git a/frontend/.storybook/I18nStoryWrapper.tsx b/frontend/.storybook/I18nStoryWrapper.tsx
new file mode 100644
index 000000000..f05ca54a0
--- /dev/null
+++ b/frontend/.storybook/I18nStoryWrapper.tsx
@@ -0,0 +1,30 @@
+/**
+ * @file Storybook decorator, enabling internationalization for each story.
+ * @see https://storybook.js.org/docs/writing-stories/decorators
+ */
+import { StoryContext } from "@storybook/react";
+
+import { NextIntlClientProvider } from "next-intl";
+import React from "react";
+
+import { defaultLocale, formats, timeZone } from "../src/i18n/config";
+
+const I18nStoryWrapper = (
+ Story: React.ComponentType,
+ context: StoryContext,
+) => {
+ const locale = (context.globals.locale as string) ?? defaultLocale;
+
+ return (
+
+
+
+ );
+};
+
+export default I18nStoryWrapper;
diff --git a/frontend/.storybook/i18next.js b/frontend/.storybook/i18next.js
deleted file mode 100644
index a3eeb9d9c..000000000
--- a/frontend/.storybook/i18next.js
+++ /dev/null
@@ -1,22 +0,0 @@
-// Configure i18next for Storybook
-// See https://storybook.js.org/addons/storybook-react-i18next
-import i18nConfig from "../next-i18next.config";
-import i18next from "i18next";
-import LanguageDetector from "i18next-browser-languagedetector";
-import Backend from "i18next-http-backend";
-import { initReactI18next } from "react-i18next";
-
-i18next
- .use(initReactI18next)
- .use(LanguageDetector)
- .use(Backend)
- .init({
- ...i18nConfig,
- backend: {
- loadPath: `${
- process.env.NEXT_PUBLIC_BASE_PATH ?? ""
- }/locales/{{lng}}/{{ns}}.json`,
- },
- });
-
-export default i18next;
diff --git a/frontend/.storybook/main.js b/frontend/.storybook/main.js
index 6ef68f43b..a673aa99b 100644
--- a/frontend/.storybook/main.js
+++ b/frontend/.storybook/main.js
@@ -25,11 +25,7 @@ function blockSearchEnginesInHead(head) {
*/
const config = {
stories: ["../stories/**/*.stories.@(mdx|js|jsx|ts|tsx)"],
- addons: [
- "@storybook/addon-essentials",
- "storybook-react-i18next",
- "@storybook/addon-designs",
- ],
+ addons: ["@storybook/addon-essentials", "@storybook/addon-designs"],
framework: {
name: "@storybook/nextjs",
options: {
diff --git a/frontend/.storybook/preview.js b/frontend/.storybook/preview.js
deleted file mode 100644
index d75bcc900..000000000
--- a/frontend/.storybook/preview.js
+++ /dev/null
@@ -1,43 +0,0 @@
-// @ts-check
-import i18nConfig from "../next-i18next.config";
-
-// Apply global styling to our stories
-import "../src/styles/styles.scss";
-
-// Import i18next config.
-import i18n from "./i18next.js";
-
-// Generate the options for the Language menu using the locale codes.
-// Teams can override these labels, but this helps ensure that the language
-// is at least exposed in the list.
-const initialLocales = {};
-i18nConfig.i18n.locales.forEach((locale) => (initialLocales[locale] = locale));
-
-const parameters = {
- actions: { argTypesRegex: "^on[A-Z].*" },
- controls: {
- matchers: {
- color: /(background|color)$/i,
- date: /Date$/,
- },
- },
- // Configure i18next and locale/dropdown options.
- i18n,
-};
-
-/**
- * @type {import("@storybook/react").Preview}
- */
-const preview = {
- parameters,
- globals: {
- locale: "en",
- locales: {
- ...initialLocales,
- en: "English",
- es: "Español",
- },
- },
-};
-
-export default preview;
diff --git a/frontend/.storybook/preview.tsx b/frontend/.storybook/preview.tsx
new file mode 100644
index 000000000..9b135fadc
--- /dev/null
+++ b/frontend/.storybook/preview.tsx
@@ -0,0 +1,64 @@
+/**
+ * @file Setup the toolbar, styling, and global context for each Storybook story.
+ * @see https://storybook.js.org/docs/configure#configure-story-rendering
+ */
+import { Loader, Preview } from "@storybook/react";
+
+import "../src/styles/styles.scss";
+
+import { defaultLocale, locales } from "../src/i18n/config";
+import { getMessagesWithFallbacks } from "../src/i18n/getMessagesWithFallbacks";
+import I18nStoryWrapper from "./I18nStoryWrapper";
+
+const parameters = {
+ nextjs: {
+ appDirectory: true,
+ },
+ controls: {
+ matchers: {
+ color: /(background|color)$/i,
+ date: /Date$/,
+ },
+ },
+ options: {
+ storySort: {
+ method: "alphabetical",
+ order: [
+ "Welcome",
+ "Core",
+ // Storybook infers the title when not explicitly set, but is case-sensitive
+ // so we need to explicitly set both casings here for this to properly sort.
+ "Components",
+ "components",
+ "Templates",
+ "Pages",
+ "pages",
+ ],
+ },
+ },
+};
+
+const i18nMessagesLoader: Loader = async (context) => {
+ const messages = await getMessagesWithFallbacks(
+ context.globals.locale as string,
+ );
+ return { messages };
+};
+
+const preview: Preview = {
+ loaders: [i18nMessagesLoader],
+ decorators: [I18nStoryWrapper],
+ parameters,
+ globalTypes: {
+ locale: {
+ description: "Active language",
+ defaultValue: defaultLocale,
+ toolbar: {
+ icon: "globe",
+ items: locales,
+ },
+ },
+ },
+};
+
+export default preview;
diff --git a/frontend/jest.config.js b/frontend/jest.config.js
index 8b2ea6cd4..0ed77a928 100644
--- a/frontend/jest.config.js
+++ b/frontend/jest.config.js
@@ -9,10 +9,7 @@ const createJestConfig = nextJest({
// Add any custom config to be passed to Jest
/** @type {import('jest').Config} */
const customJestConfig = {
- setupFilesAfterEnv: [
- "/tests/jest.setup.js",
- "/tests/jest-i18n.ts",
- ],
+ setupFilesAfterEnv: ["/tests/jest.setup.js"],
testEnvironment: "jsdom",
// if using TypeScript with a baseUrl set to the root directory then you need the below for alias' to work
moduleDirectories: ["node_modules", "/"],
diff --git a/frontend/next-i18next.config.js b/frontend/next-i18next.config.js
deleted file mode 100644
index 5ebe1d0a8..000000000
--- a/frontend/next-i18next.config.js
+++ /dev/null
@@ -1,52 +0,0 @@
-// @ts-check
-/**
- * Next.js i18n routing options
- * https://nextjs.org/docs/advanced-features/i18n-routing
- * @type {import('next').NextConfig['i18n']}
- */
-const i18n = {
- defaultLocale: "en",
- // Source of truth for the list of languages supported by the application. Other tools (i18next, Storybook, tests) reference this.
- // These must be BCP47 language tags: https://en.wikipedia.org/wiki/IETF_language_tag#List_of_common_primary_language_subtags
- locales: ["en", "es"],
-};
-
-/**
- * i18next and react-i18next options
- * https://www.i18next.com/overview/configuration-options
- * https://react.i18next.com/latest/i18next-instance
- * @type {import("i18next").InitOptions}
- */
-const i18next = {
- // Default namespace to load, typically overridden within components,
- // but set here to prevent the system from attempting to load
- // translation.json, which is the default, and doesn't exist
- // in this codebase
- ns: "common",
- defaultNS: "common",
- fallbackLng: i18n.defaultLocale,
- interpolation: {
- escapeValue: false, // React already does escaping
- },
-};
-
-/**
- * next-i18next options
- * https://github.com/i18next/next-i18next#options
- * @type {Partial}
- */
-const nextI18next = {
- // Locale resources are loaded once when the server is started, which
- // is good for production but not ideal for local development. Show
- // updates to locale files without having to restart the server:
- reloadOnPrerender: process.env.NODE_ENV === "development",
-};
-
-/**
- * @type {import("next-i18next").UserConfig}
- */
-module.exports = {
- i18n,
- ...i18next,
- ...nextI18next,
-};
diff --git a/frontend/next.config.js b/frontend/next.config.js
index a7743e46f..9e5127fac 100644
--- a/frontend/next.config.js
+++ b/frontend/next.config.js
@@ -1,5 +1,5 @@
// @ts-check
-const { i18n } = require("./next-i18next.config");
+
const withNextIntl = require("next-intl/plugin")("./src/i18n/server.ts");
const sassOptions = require("./scripts/sassOptions");
@@ -16,17 +16,11 @@ const appSassOptions = sassOptions(basePath);
/** @type {import('next').NextConfig} */
const nextConfig = {
basePath,
- i18n,
reactStrictMode: true,
// Output only the necessary files for a deployment, excluding irrelevant node_modules
// https://nextjs.org/docs/app/api-reference/next-config-js/output
output: "standalone",
sassOptions: appSassOptions,
- transpilePackages: [
- // Continue to support older browsers (ES5)
- // https://github.com/i18next/i18next/issues/1948
- "i18next",
- ],
};
module.exports = withNextIntl(nextConfig);
diff --git a/frontend/package-lock.json b/frontend/package-lock.json
index 68a0052ab..c4253e22e 100644
--- a/frontend/package-lock.json
+++ b/frontend/package-lock.json
@@ -13,15 +13,12 @@
"@opentelemetry/api": "^1.8.0",
"@trussworks/react-uswds": "^7.0.0",
"@uswds/uswds": "^3.6.0",
- "i18next": "^23.0.0",
"js-cookie": "^3.0.5",
"lodash": "^4.17.21",
"next": "^14.1.4",
- "next-i18next": "^15.0.0",
"next-intl": "^3.2.1",
"react": "^18.2.0",
"react-dom": "^18.2.0",
- "react-i18next": "^14.0.0",
"server-only": "^0.0.1",
"sharp": "^0.33.0",
"use-debounce": "^10.0.0"
@@ -2143,6 +2140,7 @@
"version": "7.23.9",
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.9.tgz",
"integrity": "sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw==",
+ "dev": true,
"dependencies": {
"regenerator-runtime": "^0.14.0"
},
@@ -9188,15 +9186,6 @@
"@types/node": "*"
}
},
- "node_modules/@types/hoist-non-react-statics": {
- "version": "3.3.5",
- "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.5.tgz",
- "integrity": "sha512-SbcrWzkKBw2cdwRTwQAswfpB9g9LJWfjtUeW/jvNwbhC8cpmmNYVePa+ncbUe0rGTQ7G3Ff6mYUN2VMfLVr+Sg==",
- "dependencies": {
- "@types/react": "*",
- "hoist-non-react-statics": "^3.3.0"
- }
- },
"node_modules/@types/html-minifier-terser": {
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz",
@@ -9378,7 +9367,8 @@
"node_modules/@types/prop-types": {
"version": "15.7.11",
"resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.11.tgz",
- "integrity": "sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng=="
+ "integrity": "sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==",
+ "dev": true
},
"node_modules/@types/qs": {
"version": "6.9.11",
@@ -9396,6 +9386,7 @@
"version": "18.2.74",
"resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.74.tgz",
"integrity": "sha512-9AEqNZZyBx8OdZpxzQlaFEVCSFUM2YXJH46yPOiOpm078k6ZLOCcuAzGum/zK8YBwY+dbahVNbHrbgrAwIRlqw==",
+ "dev": true,
"dependencies": {
"@types/prop-types": "*",
"csstype": "^3.0.2"
@@ -12064,16 +12055,6 @@
"integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==",
"dev": true
},
- "node_modules/core-js": {
- "version": "3.35.1",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.35.1.tgz",
- "integrity": "sha512-IgdsbxNyMskrTFxa9lWHyMwAJU5gXOPP+1yO+K59d50VLVAIDAbs7gIv705KzALModfK3ZrSZTPNpC0PQgIZuw==",
- "hasInstallScript": true,
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/core-js"
- }
- },
"node_modules/core-js-compat": {
"version": "3.35.1",
"resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.35.1.tgz",
@@ -12470,7 +12451,8 @@
"node_modules/csstype": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
- "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="
+ "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==",
+ "dev": true
},
"node_modules/damerau-levenshtein": {
"version": "1.0.8",
@@ -15649,14 +15631,6 @@
"minimalistic-crypto-utils": "^1.0.1"
}
},
- "node_modules/hoist-non-react-statics": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz",
- "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==",
- "dependencies": {
- "react-is": "^16.7.0"
- }
- },
"node_modules/hosted-git-info": {
"version": "2.8.9",
"resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz",
@@ -15722,6 +15696,8 @@
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/html-parse-stringify/-/html-parse-stringify-3.0.1.tgz",
"integrity": "sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg==",
+ "dev": true,
+ "peer": true,
"dependencies": {
"void-elements": "3.1.0"
}
@@ -15860,6 +15836,7 @@
"version": "23.8.2",
"resolved": "https://registry.npmjs.org/i18next/-/i18next-23.8.2.tgz",
"integrity": "sha512-Z84zyEangrlERm0ZugVy4bIt485e/H8VecGUZkZWrH7BDePG6jT73QdL9EA1tRTTVVMpry/MgWIP1FjEn0DRXA==",
+ "dev": true,
"funding": [
{
"type": "individual",
@@ -15874,6 +15851,7 @@
"url": "https://www.i18next.com/how-to/faq#i18next-is-awesome.-how-can-i-support-the-project"
}
],
+ "peer": true,
"dependencies": {
"@babel/runtime": "^7.23.2"
}
@@ -15887,11 +15865,6 @@
"@babel/runtime": "^7.23.2"
}
},
- "node_modules/i18next-fs-backend": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/i18next-fs-backend/-/i18next-fs-backend-2.3.1.tgz",
- "integrity": "sha512-tvfXskmG/9o+TJ5Fxu54sSO5OkY6d+uMn+K6JiUGLJrwxAVfer+8V3nU8jq3ts9Pe5lXJv4b1N7foIjJ8Iy2Gg=="
- },
"node_modules/i18next-http-backend": {
"version": "2.4.3",
"resolved": "https://registry.npmjs.org/i18next-http-backend/-/i18next-http-backend-2.4.3.tgz",
@@ -19716,41 +19689,6 @@
}
}
},
- "node_modules/next-i18next": {
- "version": "15.2.0",
- "resolved": "https://registry.npmjs.org/next-i18next/-/next-i18next-15.2.0.tgz",
- "integrity": "sha512-Rl5yZ4oGffsB0AjRykZ5PzNQ2M6am54MaMayldGmH/UKZisrIxk2SKEPJvaHhKlWe1qgdNi2FkodwK8sEjfEmg==",
- "funding": [
- {
- "type": "individual",
- "url": "https://locize.com/i18next.html"
- },
- {
- "type": "individual",
- "url": "https://www.i18next.com/how-to/faq#i18next-is-awesome.-how-can-i-support-the-project"
- },
- {
- "type": "individual",
- "url": "https://locize.com"
- }
- ],
- "dependencies": {
- "@babel/runtime": "^7.23.2",
- "@types/hoist-non-react-statics": "^3.3.4",
- "core-js": "^3",
- "hoist-non-react-statics": "^3.3.2",
- "i18next-fs-backend": "^2.3.1"
- },
- "engines": {
- "node": ">=14"
- },
- "peerDependencies": {
- "i18next": ">= 23.7.13",
- "next": ">= 12.0.0",
- "react": ">= 17.0.2",
- "react-i18next": ">= 13.5.0"
- }
- },
"node_modules/next-intl": {
"version": "3.11.1",
"resolved": "https://registry.npmjs.org/next-intl/-/next-intl-3.11.1.tgz",
@@ -22187,6 +22125,8 @@
"version": "14.0.1",
"resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-14.0.1.tgz",
"integrity": "sha512-TMV8hFismBmpMdIehoFHin/okfvgjFhp723RYgIqB4XyhDobVMyukyM3Z8wtTRmajyFMZrBl/OaaXF2P6WjUAw==",
+ "dev": true,
+ "peer": true,
"dependencies": {
"@babel/runtime": "^7.22.5",
"html-parse-stringify": "^3.0.1"
@@ -22207,7 +22147,8 @@
"node_modules/react-is": {
"version": "16.13.1",
"resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
- "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
+ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==",
+ "dev": true
},
"node_modules/react-refresh": {
"version": "0.14.0",
@@ -22520,7 +22461,8 @@
"node_modules/regenerator-runtime": {
"version": "0.14.1",
"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz",
- "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw=="
+ "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==",
+ "dev": true
},
"node_modules/regenerator-transform": {
"version": "0.15.2",
@@ -25176,6 +25118,8 @@
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz",
"integrity": "sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==",
+ "dev": true,
+ "peer": true,
"engines": {
"node": ">=0.10.0"
}
diff --git a/frontend/package.json b/frontend/package.json
index 048464bb1..114ae1cb9 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -28,15 +28,12 @@
"@opentelemetry/api": "^1.8.0",
"@trussworks/react-uswds": "^7.0.0",
"@uswds/uswds": "^3.6.0",
- "i18next": "^23.0.0",
"js-cookie": "^3.0.5",
"lodash": "^4.17.21",
"next": "^14.1.4",
- "next-i18next": "^15.0.0",
"next-intl": "^3.2.1",
"react": "^18.2.0",
"react-dom": "^18.2.0",
- "react-i18next": "^14.0.0",
"server-only": "^0.0.1",
"sharp": "^0.33.0",
"use-debounce": "^10.0.0"
diff --git a/frontend/public/img/uswds-sprite.svg b/frontend/public/img/uswds-sprite.svg
new file mode 100644
index 000000000..8ae1eca92
--- /dev/null
+++ b/frontend/public/img/uswds-sprite.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/frontend/public/locales/en/common.json b/frontend/public/locales/en/common.json
deleted file mode 100644
index 788b4be6e..000000000
--- a/frontend/public/locales/en/common.json
+++ /dev/null
@@ -1,294 +0,0 @@
-{
- "Beta_alert": {
- "alert_title": "Attention! Go to www.grants.gov to search and apply for grants.",
- "alert": "Simpler.Grants.gov is a work in progress. Thank you for your patience as we build this new website."
- },
- "Index": {
- "page_title": "Simpler.Grants.gov",
- "meta_description": "A one‑stop shop for all federal discretionary funding to make it easy for you to discover, understand, and apply for opportunities.",
- "goal": {
- "title": "The goal",
- "paragraph_1": "We want Grants.gov to be an extremely simple, accessible, and easy-to-use tool for posting, finding, sharing, and applying for federal financial assistance. Our mission is to increase access to grants and improve the grants experience for everyone.",
- "title_2": "For applicants",
- "paragraph_2": "We’re improving the way you search for and discover funding opportunities, making it easier to find and apply.",
- "title_3": "For grantmakers",
- "paragraph_3": "If you work for a federal grantmaking agency, we’re making it easier for your communities to find the funding they need.",
- "cta": "Sign up for project updates"
- },
- "process_and_research": {
- "title_1": "The process",
- "title_2": "The research",
- "paragraph_1": "This project is transparent, iterative, and agile. All of the code we’re writing is open source and our roadmap is public. As we release new versions, you can try out functional software and give us feedback on what works and what can be improved to inform what happens next.",
- "paragraph_2": "We conducted extensive research in 2023 to gather insights from applicants, potential applicants, and grantmakers. We’re using these findings to guide our work. And your ongoing feedback will inform and inspire new features as we build a simpler Grants.gov together.",
- "cta_1": "Learn about what’s happening",
- "cta_2": "Read the research findings"
- },
- "fo_title": "Improvements to funding opportunity announcements",
- "fo_paragraph_1": "Funding opportunities should not only be easy to find, share, and apply for. They should also be easy to read and understand. Our objective is to simplify and organize funding opportunities announcements. ",
- "fo_paragraph_2": "We want to help grantmakers write clear, concise announcements that encourage strong submissions from qualified applicants and make opportunities more accessible to everyone.",
- "fo_title_2": "View our grant announcement prototypes",
- "fo_paragraph_3": "We recently simplified the language of four grant announcements and applied visual and user‑centered design principles to increase their readability and usability.",
- "acl_prototype": "Link to ACL Notice of Funding Opportunity example pdf",
- "acf_prototype": "Link to ACF Notice of Funding Opportunity example pdf",
- "cdc_prototype": "Link to CDC Notice of Funding Opportunity example pdf",
- "samhsa_prototype": "Link to SAMHSA Notice of Funding Opportunity example pdf",
- "fo_title_3": "We want to hear from you!",
- "fo_paragraph_4": "We value your feedback. Tell us what you think of grant announcements and grants.gov.",
- "fo_title_4": "Are you a first‑time applicant? Created a workspace but haven't applied yet?",
- "fo_paragraph_5": "We're especially interested in hearing from first‑time applicants and organizations that have never applied for funding opportunities. We encourage you to review our announcements and share your feedback, regardless of your experience with federal grants.",
- "wtgi_paragraph_2": "Questions? Contact us at {{email}} ."
- },
- "Research": {
- "page_title": "Research | Simpler.Grants.gov",
- "meta_description": "A one‑stop shop for all federal discretionary funding to make it easy for you to discover, understand, and apply for opportunities.",
- "intro": {
- "title": "Our existing research",
- "content": "We conducted extensive research in 2023 to gather insights from applicants, potential applicants, and grantmakers. We’re using these findings to guide our work. And your ongoing feedback will inform and inspire new features as we build a simpler Grants.gov together."
- },
- "methodology": {
- "title": "The methodology",
- "paragraph_1": "Applicants and grantmakers were selected for a series of user interviews to better understand their experience using Grants.gov. We recruited equitably to ensure a diverse pool of participants.
The quantity of participants was well above industry standards. Of the applicants who were interviewed, 26% were first-time applicants, 39% were occasional applicants, and 34% were frequent applicants.
With the findings from these interviews, we defined user archetypes and general themes to guide the Simpler.Grants.gov user experience.
",
- "title_2": "Research objectives:",
- "paragraph_2": "Examine existing user journeys and behaviors, identifying how Grants.gov fits into their overall approach Learn from user experiences, roles, challenges Identify barriers and how a simpler Grants.gov can create a more intuitive user experience, especially for new users ",
- "title_3": "Want to be notified when there are upcoming user research efforts?",
- "cta": "Sign up for project updates"
- },
- "archetypes": {
- "title": "Applicant archetypes",
- "paragraph_1": "Archetypes are compelling summaries that highlight the types of applicants that Grants.gov serves. They’re informed by and summarize user research data, and represent user behaviors, attitudes, motivations, pain points, and goals. We’ll use these archetypes to influence our design decisions, guide the product’s direction, and keep our work human-centered. ",
- "novice": {
- "title": "The Novice",
- "paragraph_1": "Applicants lacking familiarity with the grant application process, including first-time or infrequent applicants and those who never apply",
- "paragraph_2": "Novices are often new to the grants application process. They face a steep learning curve to find and apply for funding opportunities. Solving their needs will generate a more inclusive Grants.gov experience."
- },
- "collaborator": {
- "title": "The Collaborator",
- "paragraph_1": "Applicants who've applied before, working with colleagues or partner organizations to increase their chances of success",
- "paragraph_2": "Collaborators have more familiarity with Grants.gov. But they face challenges with coordinating application materials, and often resorting to tools and resources outside of Grants.gov."
- },
- "maestro": {
- "title": "The Maestro",
- "paragraph_1": "Frequent applicants familiar with Grants.gov, who are often directly responsible for managing multiple applications at once",
- "paragraph_2": "Maestros have an established approach to applying, which may include software and tools outside of Grants.gov. Their primary concerns are rooted in determining grant feasibility and staying ahead of deadlines."
- },
- "supervisor": {
- "title": "The Supervisor",
- "paragraph_1": "Applicants who have a more senior role at organizations and have less frequent direct involvement with Grants.gov than Maestros.",
- "paragraph_2": "Supervisors are responsible for oversight, approvals, final submissions, and keeping registrations up to date. Their time is limited, as they're often busy with the organization's other needs."
- }
- },
- "themes": {
- "title": "General themes",
- "paragraph_1": "The existing Grants.gov website works best for those who use it regularly. Larger organizations and teams of Collaborators and Maestros are typically more familiar with the ins and outs of the system. To create a simpler Grants.gov with an intuitive user experience that addresses the needs of all archetypes, four themes were defined:",
- "title_2": "Frictionless functionality ",
- "paragraph_2": "Reduce the burden on applicants and grantmakers, from both a process and systems perspective, by addressing the pain points that negatively affect their experience",
- "title_3": "Sophisticated self-direction",
- "paragraph_3": "Meet users where they are during crucial moments, by providing a guided journey through opt-in contextual support that reduces their need to find help outside the system",
- "title_4": "Demystify the grants process",
- "paragraph_4": "Ensure that all users have the same easy access to instructional and educational information that empowers them to have a smoother, informed, and confident user experience",
- "title_5": "Create an ownable identity",
- "paragraph_5": "Create a presence that reflections our mission and supports our users through visual brand, content strategy, and user interface design systems"
- },
- "impact": {
- "title": "Where can we have the most impact?",
- "paragraph_1": "The most burden is on the Novice to become an expert on the grants process and system. In order to execute our mission, there is a need to improve awareness, access, and choice. This requires reaching out to those who are unfamiliar with the grant application process.",
- "paragraph_2": "There are many common barriers that users face:",
- "title_2": "Are there challenges you’ve experienced that aren’t captured here?",
- "paragraph_3": "If you would like to share your experiences and challenges as either an applicant or grantmaker, reach out to us at simpler@grants.gov or sign up for project updates to be notified of upcoming user research efforts.",
- "boxes": [
- {
- "title": "Digital connectivity",
- "content": "Depending on availability and geography, a stable internet connection is not a guarantee to support a digital-only experience."
- },
- {
- "title": "Organization size",
- "content": "Not all organizations have dedicated resources for seeking grant funding. Many are 1-person shops who are trying to do it all."
- },
- {
- "title": "Overworked",
- "content": "New organizations are often too burdened with internal paperwork and infrastructure to support external funding and reporting."
- },
- {
- "title": "Expertise",
- "content": "Small organizations face higher turnover, and alumni often take their institutional knowledge and expertise with them when they leave."
- },
- {
- "title": "Cognitive load",
- "content": "Applicants often apply for funding through several agencies, requiring they learn multiple processes and satisfy varying requirements."
- },
- {
- "title": "Language",
- "content": "Applicants are faced with a lot of jargon without context or definitions, which is especially difficult when English is not their native language."
- },
- {
- "title": "Education",
- "content": "It often requires a high level of education to comprehend the complexity and language of funding opportunity announcements."
- },
- {
- "title": "Lost at the start",
- "content": "Novices don’t see a clear call-to-action for getting started, and they have trouble finding the one-on-one help at the beginning of the process."
- },
- {
- "title": "Overwhelmed by search",
- "content": "New applicants misuse the keyword search function and have trouble understanding the acronyms and terminology."
- },
- {
- "title": "Confused by announcements",
- "content": "Novices have difficulty determining their eligibility and understanding the details of the funding opportunity announcement."
- },
- {
- "title": "Time",
- "content": "Most individuals wear a lot of hats (community advocate, program lead, etc.) and \"grants applicant\" is only part of their responsibilities and requires efficiency."
- },
- {
- "title": "Blindsided by requirements",
- "content": "New applicants are caught off guard by SAM.gov registration and often miss the format and file name requirements."
- }
- ]
- }
- },
- "Process": {
- "page_title": "Process | Simpler.Grants.gov",
- "meta_description": "A one‑stop shop for all federal discretionary funding to make it easy for you to discover, understand, and apply for opportunities.",
- "intro": {
- "title": "Our open process",
- "content": "This project is transparent, iterative, and agile. All of the code we’re writing is open source and our roadmap is public. As we regularly release new versions of Simpler.Grants.gov, you'll see what we're building and prioritizing. With each iteration, you'll be able to try out functional software and give us feedback on what works and what can be improved to inform what happens next.",
- "boxes": [
- {
- "title": "Transparent",
- "content": "We’re building a simpler Grants.gov in the open. You can see our plans and our progress. And you can join us in shaping the vision and details of the features we build."
- },
- {
- "title": "Iterative",
- "content": "We’re releasing features early and often through a continuous cycle of planning, implementation, and assessment. Each cycle will incrementally improve the product, as we incorporate your feedback from the prior iteration."
- },
- {
- "title": "Agile",
- "content": "We’re building a simpler Grants.gov with you , not for you . Our process gives us the flexibility to swiftly respond to feedback and adapt to changing priorities and requirements."
- }
- ]
- },
- "milestones": {
- "tag": "The high-level roadmap",
- "icon_list": [
- {
- "title": "Find",
- "content": "Improve how applicants discover funding opportunities that they’re qualified for and that meet their needs.
"
- },
- {
- "title": "Advanced reporting",
- "content": "Improve stakeholders’ capacity to understand, analyze, and assess grants from application to acceptance.
Make non-confidential Grants.gov data open for public analysis.
"
- },
- {
- "title": "Apply",
- "content": "Streamline the application process to make it easier for all applicants to apply for funding opportunities.
"
- }
- ],
- "roadmap_1": "Find",
- "title_1": "Milestone 1",
- "name_1": "Laying the foundation with a modern Application Programming Interface (API)",
- "paragraph_1": "To make it easier to discover funding opportunities, we’re starting with a new modern API to make grants data more accessible. Our API‑first approach will prioritize data at the beginning, and make sure data remains a priority as we iterate. It’s crucial that the Grants.gov website, 3rd‑party apps, and other services can more easily access grants data. Our new API will foster innovation and be a foundation for interacting with grants in new ways, like SMS, phone, email, chat, and notifications.",
- "sub_title_1": "What’s an API?",
- "sub_paragraph_1": "Think of the API as a liaison between the Grants.gov website and the information and services that power it. It’s software that allows two applications to talk to each other or sends data back and forth between a website and a user.",
- "sub_title_2": "Are you interested in the tech?",
- "sub_paragraph_2": "We’re building a RESTful API. And we’re starting with an initial endpoint that allows API users to retrieve basic information about each funding opportunity.",
- "cta_1": "View the API milestone on GitHub",
- "roadmap_2": "Find",
- "title_2": "Milestone 2",
- "name_2": "A new search interface accessible to everyone",
- "paragraph_2": "Once our new API is in place, we’ll begin focusing on how applicants most commonly access grants data. Our first user-facing milestone will be a simple search interface that makes data from our modern API accessible to anyone who wants to try out new ways to search for funding opportunities.",
- "sub_title_3": "Can’t wait to try out the new search?",
- "sub_paragraph_3": "Search will be the first feature on Simpler.Grants.gov that you’ll be able to test. It’ll be quite basic at first, and you’ll need to continue using www.grants.gov as we iterate. But your feedback will inform what happens next.",
- "sub_paragraph_4": "Be sure to sign up for product updates so you know when the new search is available.",
- "cta_2": "View the search milestone on GitHub"
- },
- "involved": {
- "title_1": "Do you have data expertise?",
- "paragraph_1": "We're spending time up-front collaborating with stakeholders on API design and data standards. If you have subject matter expertise with grants data, we want to talk. Contact us at simpler@grants.gov .",
- "title_2": "Are you code-savvy?",
- "paragraph_2": "If you’re interested in contributing to the open-source project or exploring the details of exactly what we’re building, check out the project at https://github.com/HHS/simpler-grants-gov or join our community at wiki.simpler.hhs.gov ."
- }
- },
- "Newsletter": {
- "page_title": "Newsletter | Simpler.Grants.gov",
- "title": "Newsletter signup",
- "intro": "Subscribe to get Simpler.Grants.gov project updates in your inbox!",
- "paragraph_1": "If you sign up for the Simpler.Grants.gov newsletter, we’ll keep you informed of our progress and you’ll know about every opportunity to get involved.",
- "list": "Hear about upcoming milestones Be the first to know when we launch new code Test out new features and functionalities Participate in usability tests and other user research efforts Learn about ways to provide feedback ",
- "disclaimer": "The Simpler.Grants.gov newsletter is powered by the Sendy data service. Personal information is not stored within Simpler.Grants.gov.",
- "errors": {
- "missing_name": "Enter your first name.",
- "missing_email": "Enter your email address.",
- "invalid_email": "Enter an email address in the correct format, like name@example.com.",
- "already_subscribed": "{{email_address}} is already subscribed. If you’re not seeing our emails, check your spam folder and add no-reply@grants.gov to your contacts, address book, or safe senders list. If you continue to not receive our emails, contact simpler@grants.gov .",
- "sendy": "Sorry, an unexpected error in our system occured when trying to save your subscription. If this continues to happen, you may email simpler@grants.gov . Error: {{sendy_error}}"
- }
- },
- "Newsletter_confirmation": {
- "page_title": "Newsletter Confirmation | Simpler.Grants.gov",
- "title": "You’re subscribed",
- "intro": "You are signed up to receive project updates from Simpler.Grants.gov.",
- "paragraph_1": "Thank you for subscribing. We’ll keep you informed of our progress and you’ll know about every opportunity to get involved.",
- "heading": "Learn more",
- "paragraph_2": "You can read all about our transparent process and what we’re doing now, or explore our existing user research and the findings that are guiding our work.",
- "disclaimer": "The Simpler.Grants.gov newsletter is powered by the Sendy data service. Personal information is not stored within Simpler.Grants.gov. "
- },
- "Newsletter_unsubscribe": {
- "page_title": "Newsletter Unsubscribe | Simpler.Grants.gov",
- "title": "You have unsubscribed",
- "intro": "You will no longer receive project updates from Simpler.Grants.gov. ",
- "paragraph_1": "Did you unsubscribe by accident? Sign up again.",
- "button_resub": "Re-subscribe",
- "heading": "Learn more",
- "paragraph_2": "You can read all about our transparent process and what we’re doing now, or explore our existing user research and the findings that are guiding our work.",
- "disclaimer": "The Simpler.Grants.gov newsletter is powered by the Sendy data service. Personal information is not stored within Simpler.Grants.gov. "
- },
- "ErrorPages": {
- "page_not_found": {
- "title": "Oops! Page Not Found",
- "message_content_1": "The page you have requested cannot be displayed because it does not exist, has been moved, or the server has been instructed not to let you view it. There is nothing to see here.",
- "visit_homepage_button": "Return Home"
- }
- },
- "Header": {
- "nav_link_home": "Home",
- "nav_link_process": "Process",
- "nav_link_research": "Research",
- "nav_link_newsletter": "Newsletter",
- "nav_menu_toggle": "Menu",
- "title": "Simpler.Grants.gov"
- },
- "Hero": {
- "title": "We're building a simpler Grants.gov!",
- "content": "This new website will be your go‑to resource to follow our progress as we improve and modernize the Grants.gov experience, making it easier to find, share, and apply for grants.",
- "github_link": "Follow on GitHub"
- },
- "Footer": {
- "agency_name": "Grants.gov",
- "agency_contact_center": "Grants.gov Program Management Office",
- "telephone": "1-877-696-6775",
- "return_to_top": "Return to top",
- "link_twitter": "Twitter",
- "link_youtube": "YouTube",
- "link_github": "Github",
- "link_rss": "RSS",
- "link_newsletter": "Newsletter",
- "link_blog": "Blog",
- "logo_alt": "Grants.gov logo"
- },
- "Identifier": {
- "identity": "An official website of the U.S. Department of Health and Human Services ",
- "gov_content": "Looking for U.S. government information and services? Visit USA.gov ",
- "link_about": "About HHS",
- "link_accessibility": "Accessibility support",
- "link_foia": "FOIA requests",
- "link_fear": "EEO/No Fear Act",
- "link_ig": "Office of the Inspector General",
- "link_performance": "Performance reports",
- "link_privacy": "Privacy Policy",
- "logo_alt": "HHS logo"
- },
- "Layout": {
- "skip_to_main": "Skip to main content"
- }
-}
diff --git a/frontend/public/locales/es/common.json b/frontend/public/locales/es/common.json
deleted file mode 100644
index d1d16ccfd..000000000
--- a/frontend/public/locales/es/common.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "Index": {
- "title": "Página principal"
- },
- "Header": {
- "title": "Título del sitio"
- }
-}
diff --git a/frontend/src/app/[locale]/dev/feature-flags/FeatureFlagsTable.tsx b/frontend/src/app/[locale]/dev/feature-flags/FeatureFlagsTable.tsx
new file mode 100644
index 000000000..604e58015
--- /dev/null
+++ b/frontend/src/app/[locale]/dev/feature-flags/FeatureFlagsTable.tsx
@@ -0,0 +1,61 @@
+"use client";
+import { useFeatureFlags } from "src/hooks/useFeatureFlags";
+
+import React from "react";
+import { Button, Table } from "@trussworks/react-uswds";
+
+/**
+ * View for managing feature flags
+ */
+export default function FeatureFlagsTable() {
+ const { featureFlagsManager, mounted, setFeatureFlag } = useFeatureFlags();
+
+ if (!mounted) {
+ return null;
+ }
+
+ return (
+
+
+
+ Status
+ Feature Flag
+ Actions
+
+
+
+ {Object.entries(featureFlagsManager.featureFlags).map(
+ ([featureName, enabled]) => (
+
+
+ {enabled ? "Enabled" : "Disabled"}
+
+ {featureName}
+
+ setFeatureFlag(featureName, true)}
+ type="button"
+ >
+ Enable
+
+ setFeatureFlag(featureName, false)}
+ type="button"
+ >
+ Disable
+
+
+
+ ),
+ )}
+
+
+ );
+}
diff --git a/frontend/src/app/[locale]/dev/feature-flags/page.tsx b/frontend/src/app/[locale]/dev/feature-flags/page.tsx
new file mode 100644
index 000000000..8a25a8328
--- /dev/null
+++ b/frontend/src/app/[locale]/dev/feature-flags/page.tsx
@@ -0,0 +1,30 @@
+import { Metadata } from "next";
+
+import Head from "next/head";
+import React from "react";
+import FeatureFlagsTable from "./FeatureFlagsTable";
+
+export function generateMetadata() {
+ const meta: Metadata = {
+ title: "Feature flag manager",
+ };
+
+ return meta;
+}
+
+/**
+ * View for managing feature flags
+ */
+export default function FeatureFlags() {
+ return (
+ <>
+
+ Manage Feature Flags
+
+
+
Manage Feature Flags
+
+
+ >
+ );
+}
diff --git a/frontend/src/app/[locale]/health/page.tsx b/frontend/src/app/[locale]/health/page.tsx
new file mode 100644
index 000000000..1c4e40ea2
--- /dev/null
+++ b/frontend/src/app/[locale]/health/page.tsx
@@ -0,0 +1,3 @@
+export default function Health() {
+ return <>healthy>;
+}
diff --git a/frontend/src/app/[locale]/newsletter/NewsletterForm.tsx b/frontend/src/app/[locale]/newsletter/NewsletterForm.tsx
new file mode 100644
index 000000000..9495a2674
--- /dev/null
+++ b/frontend/src/app/[locale]/newsletter/NewsletterForm.tsx
@@ -0,0 +1,217 @@
+"use client";
+import { NEWSLETTER_CONFIRMATION } from "src/constants/breadcrumbs";
+import { ExternalRoutes } from "src/constants/routes";
+
+import { useRouter } from "next/navigation";
+import { useState } from "react";
+import {
+ Alert,
+ Button,
+ ErrorMessage,
+ FormGroup,
+ Label,
+ TextInput,
+} from "@trussworks/react-uswds";
+
+import { Data } from "src/pages/api/subscribe";
+import { useTranslations } from "next-intl";
+
+export default function NewsletterForm() {
+ const t = useTranslations("Newsletter");
+
+ const router = useRouter();
+ const email = ExternalRoutes.EMAIL_SIMPLERGRANTSGOV;
+
+ const [formSubmitted, setFormSubmitted] = useState(false);
+
+ const [formData, setFormData] = useState({
+ name: "",
+ LastName: "",
+ email: "",
+ hp: "",
+ });
+
+ const [sendyError, setSendyError] = useState("");
+ const [erroredEmail, setErroredEmail] = useState("");
+
+ const validateField = (fieldName: string) => {
+ // returns the string "valid" or the i18n key for the error message
+ const emailRegex =
+ /^(\D)+(\w)*((\.(\w)+)?)+@(\D)+(\w)*((\.(\D)+(\w)*)+)?(\.)[a-z]{2,}$/g;
+ if (fieldName === "name" && formData.name === "")
+ return t("errors.missing_name");
+ if (fieldName === "email" && formData.email === "")
+ return t("errors.missing_email");
+ if (fieldName === "email" && !emailRegex.test(formData.email))
+ return t("errors.invalid_email");
+ return "valid";
+ };
+
+ const showError = (fieldName: string): boolean =>
+ formSubmitted && validateField(fieldName) !== "valid";
+
+ const handleInput = (e: React.ChangeEvent) => {
+ const fieldName = e.target.name;
+ const fieldValue = e.target.value;
+
+ setFormData((prevState) => ({
+ ...prevState,
+ [fieldName]: fieldValue,
+ }));
+ };
+
+ const submitForm = async () => {
+ const formURL = "api/subscribe";
+ if (validateField("email") !== "valid" || validateField("name") !== "valid")
+ return;
+
+ const res = await fetch(formURL, {
+ method: "POST",
+ body: JSON.stringify(formData),
+ headers: {
+ Accept: "application/json",
+ },
+ });
+
+ if (res.ok) {
+ const { message } = (await res.json()) as Data;
+ router.push(`${NEWSLETTER_CONFIRMATION.path}?sendy=${message as string}`);
+ return setSendyError("");
+ } else {
+ const { error } = (await res.json()) as Data;
+ console.error("client error", error);
+ setErroredEmail(formData.email);
+ return setSendyError(error || "");
+ }
+ };
+
+ const handleSubmit = (e: React.FormEvent) => {
+ e.preventDefault();
+ setFormSubmitted(true);
+ submitForm().catch((err) => {
+ console.error("catch block", err);
+ });
+ };
+
+ return (
+
+ );
+}
diff --git a/frontend/src/app/[locale]/newsletter/confirmation/page.tsx b/frontend/src/app/[locale]/newsletter/confirmation/page.tsx
new file mode 100644
index 000000000..e621b610a
--- /dev/null
+++ b/frontend/src/app/[locale]/newsletter/confirmation/page.tsx
@@ -0,0 +1,66 @@
+import { NEWSLETTER_CONFIRMATION_CRUMBS } from "src/constants/breadcrumbs";
+
+import Link from "next/link";
+import { Grid, GridContainer } from "@trussworks/react-uswds";
+
+import Breadcrumbs from "src/components/Breadcrumbs";
+import PageSEO from "src/components/PageSEO";
+import BetaAlert from "src/components/BetaAlert";
+import { useTranslations } from "next-intl";
+import { Metadata } from "next";
+import { getTranslations } from "next-intl/server";
+
+export async function generateMetadata() {
+ const t = await getTranslations({ locale: "en" });
+ const meta: Metadata = {
+ title: t("Newsletter.page_title"),
+ description: t("Index.meta_description"),
+ };
+
+ return meta;
+}
+
+export default function NewsletterConfirmation() {
+ const t = useTranslations("Newsletter_confirmation");
+
+ return (
+ <>
+
+
+
+
+
+
+ {t("title")}
+
+
+ {t("intro")}
+
+
+
+ {t("paragraph_1")}
+
+
+
+ {t("heading")}
+
+
+ {t.rich("paragraph_2", {
+ strong: (chunks) => {chunks} ,
+ "process-link": (chunks) => (
+ {chunks}
+ ),
+ "research-link": (chunks) => (
+ {chunks}
+ ),
+ })}
+
+
+
+
+
+ {t("disclaimer")}
+
+ >
+ );
+}
diff --git a/frontend/src/app/[locale]/newsletter/page.tsx b/frontend/src/app/[locale]/newsletter/page.tsx
new file mode 100644
index 000000000..080aaed5a
--- /dev/null
+++ b/frontend/src/app/[locale]/newsletter/page.tsx
@@ -0,0 +1,71 @@
+import { NEWSLETTER_CRUMBS } from "src/constants/breadcrumbs";
+
+import { Grid, GridContainer } from "@trussworks/react-uswds";
+import pick from "lodash/pick";
+import Breadcrumbs from "src/components/Breadcrumbs";
+import PageSEO from "src/components/PageSEO";
+import BetaAlert from "src/components/BetaAlert";
+import NewsletterForm from "src/app/[locale]/newsletter/NewsletterForm";
+import { Metadata } from "next";
+import { getTranslations } from "next-intl/server";
+import {
+ useTranslations,
+ useMessages,
+ NextIntlClientProvider,
+} from "next-intl";
+
+export async function generateMetadata() {
+ const t = await getTranslations({ locale: "en" });
+ const meta: Metadata = {
+ title: t("Newsletter.page_title"),
+ description: t("Index.meta_description"),
+ };
+
+ return meta;
+}
+
+export default function Newsletter() {
+ const t = useTranslations("Newsletter");
+ const messages = useMessages();
+
+ return (
+ <>
+
+
+
+
+
+
+ {t("title")}
+
+
+ {t("intro")}
+
+
+
+ {t("paragraph_1")}
+ {t.rich("list", {
+ ul: (chunks) => (
+
+ ),
+ li: (chunks) => {chunks} ,
+ })}
+
+
+
+
+
+
+
+
+
+ {t("disclaimer")}
+
+ >
+ );
+}
diff --git a/frontend/src/app/[locale]/newsletter/unsubscribe/page.tsx b/frontend/src/app/[locale]/newsletter/unsubscribe/page.tsx
new file mode 100644
index 000000000..9a095211a
--- /dev/null
+++ b/frontend/src/app/[locale]/newsletter/unsubscribe/page.tsx
@@ -0,0 +1,69 @@
+import { NEWSLETTER_UNSUBSCRIBE_CRUMBS } from "src/constants/breadcrumbs";
+
+import Link from "next/link";
+import { Grid, GridContainer } from "@trussworks/react-uswds";
+
+import Breadcrumbs from "src/components/Breadcrumbs";
+import PageSEO from "src/components/PageSEO";
+import BetaAlert from "src/components/BetaAlert";
+import { useTranslations } from "next-intl";
+import { Metadata } from "next";
+import { getTranslations } from "next-intl/server";
+
+export async function generateMetadata() {
+ const t = await getTranslations({ locale: "en" });
+ const meta: Metadata = {
+ title: t("Newsletter.page_title"),
+ description: t("Index.meta_description"),
+ };
+
+ return meta;
+}
+
+export default function NewsletterUnsubscribe() {
+ const t = useTranslations("Newsletter_unsubscribe");
+
+ return (
+ <>
+
+
+
+
+
+
+ {t("title")}
+
+
+ {t("intro")}
+
+
+
+ {t("paragraph_1")}
+
+ {t("button_resub")}
+
+
+
+
+ {t("heading")}
+
+
+ {t.rich("paragraph_2", {
+ strong: (chunks) => {chunks} ,
+ "process-link": (chunks) => (
+ {chunks}
+ ),
+ "research-link": (chunks) => (
+ {chunks}
+ ),
+ })}
+
+
+
+
+
+ {t("disclaimer")}
+
+ >
+ );
+}
diff --git a/frontend/src/app/[locale]/page.tsx b/frontend/src/app/[locale]/page.tsx
new file mode 100644
index 000000000..795c8d84d
--- /dev/null
+++ b/frontend/src/app/[locale]/page.tsx
@@ -0,0 +1,31 @@
+import BetaAlert from "src/components/BetaAlert";
+import PageSEO from "src/components/PageSEO";
+import Hero from "src/components/Hero";
+import IndexGoalContent from "src/components/content/IndexGoalContent";
+import ProcessAndResearchContent from "src/components/content/ProcessAndResearchContent";
+import { Metadata } from "next";
+import { useTranslations } from "next-intl";
+import { getTranslations } from "next-intl/server";
+
+export async function generateMetadata() {
+ const t = await getTranslations({ locale: "en" });
+ const meta: Metadata = {
+ title: t("Index.page_title"),
+ description: t("Index.meta_description"),
+ };
+ return meta;
+}
+
+export default function Home() {
+ const t = useTranslations("Index");
+
+ return (
+ <>
+
+
+
+
+
+ >
+ );
+}
diff --git a/frontend/src/app/[locale]/process/ProcessIntro.tsx b/frontend/src/app/[locale]/process/ProcessIntro.tsx
new file mode 100644
index 000000000..f3b481318
--- /dev/null
+++ b/frontend/src/app/[locale]/process/ProcessIntro.tsx
@@ -0,0 +1,51 @@
+import { Grid } from "@trussworks/react-uswds";
+import { useTranslations, useMessages } from "next-intl";
+import ContentLayout from "src/components/ContentLayout";
+
+const ProcessIntro = () => {
+ const t = useTranslations("Process");
+
+ const messages = useMessages() as unknown as IntlMessages;
+ const keys = Object.keys(messages.Process.intro.boxes);
+
+ return (
+
+
+
+
+ {t("intro.content")}
+
+
+
+
+
+ {keys.map((key) => {
+ const title = t(`intro.boxes.${key}.title`);
+ const content = t.rich(`intro.boxes.${key}.content`, {
+ italics: (chunks) => {chunks} ,
+ });
+ return (
+
+
+
{title}
+
+ {content}
+
+
+
+ );
+ })}
+
+
+ );
+};
+
+export default ProcessIntro;
diff --git a/frontend/src/app/[locale]/process/ProcessInvolved.tsx b/frontend/src/app/[locale]/process/ProcessInvolved.tsx
new file mode 100644
index 000000000..81294b3f8
--- /dev/null
+++ b/frontend/src/app/[locale]/process/ProcessInvolved.tsx
@@ -0,0 +1,67 @@
+import { ExternalRoutes } from "src/constants/routes";
+
+import { useTranslations } from "next-intl";
+import { Grid } from "@trussworks/react-uswds";
+
+import ContentLayout from "src/components/ContentLayout";
+
+const ProcessInvolved = () => {
+ const t = useTranslations("Process");
+
+ const email = ExternalRoutes.EMAIL_SIMPLERGRANTSGOV;
+ const para1 = t.rich("involved.paragraph_1", {
+ email: (chunks) => (
+
+ {chunks}
+
+ ),
+ strong: (chunks) => {chunks} ,
+ });
+ const para2 = t.rich("involved.paragraph_2", {
+ github: (chunks) => (
+
+ {chunks}
+
+ ),
+ wiki: (chunks) => (
+
+ {chunks}
+
+ ),
+ strong: (chunks) => {chunks} ,
+ });
+ return (
+
+
+
+
+ {t("involved.title_1")}
+
+
+ {para1}
+
+
+
+
+ {t("involved.title_2")}
+
+
+ {para2}
+
+
+
+
+ );
+};
+
+export default ProcessInvolved;
diff --git a/frontend/src/pages/content/ProcessMilestones.tsx b/frontend/src/app/[locale]/process/ProcessMilestones.tsx
similarity index 50%
rename from frontend/src/pages/content/ProcessMilestones.tsx
rename to frontend/src/app/[locale]/process/ProcessMilestones.tsx
index d99c82e17..f275dbd09 100644
--- a/frontend/src/pages/content/ProcessMilestones.tsx
+++ b/frontend/src/app/[locale]/process/ProcessMilestones.tsx
@@ -1,38 +1,35 @@
import { ExternalRoutes } from "src/constants/routes";
+import React from "react";
-import { Trans, useTranslation } from "next-i18next";
+import { useTranslations, useMessages } from "next-intl";
import Link from "next/link";
import {
Button,
Grid,
- Icon,
IconList,
IconListContent,
IconListIcon,
IconListItem,
IconListTitle,
} from "@trussworks/react-uswds";
+import { USWDSIcon } from "src/components/USWDSIcon";
import ContentLayout from "src/components/ContentLayout";
-type Boxes = {
- title: string;
- content: string;
-};
-
const ProcessMilestones = () => {
- const { t } = useTranslation("common", { keyPrefix: "Process" });
+ const t = useTranslations("Process");
- const iconList: Boxes[] = t("milestones.icon_list", { returnObjects: true });
+ const messages = useMessages() as unknown as IntlMessages;
+ const keys = Object.keys(messages.Process.milestones.icon_list);
const getIcon = (iconIndex: number) => {
switch (iconIndex) {
case 0:
- return ;
+ return ;
case 1:
- return ;
+ return ;
case 2:
- return ;
+ return ;
default:
return <>>;
}
@@ -47,50 +44,55 @@ const ProcessMilestones = () => {
bottomBorder="dark"
gridGap={6}
>
- {!Array.isArray(iconList)
- ? ""
- : iconList.map((box, index) => {
- return (
-
-
-
- {getIcon(index)}
-
-
- {box.title}
-
-
- ),
- chevron: (
-
- ),
- }}
+ {keys.map((key, index) => {
+ const title = t(`milestones.icon_list.${key}.title`);
+ const content = t.rich(`milestones.icon_list.${key}.content`, {
+ p: (chunks) => (
+
+ {chunks}
+
+ ),
+ italics: (chunks) => {chunks} ,
+ });
+
+ return (
+
+
+
+ {getIcon(index)}
+
+
+ {title}
+
+
+ {content}
+
+ {
+ // Don't show the chevron in the last row item.
+ index < keys.length - 1 ? (
+
-
-
-
-
- );
- })}
+ ) : (
+ ""
+ )
+ }
+
+
+
+
+ );
+ })}
{t("milestones.roadmap_1")}
-
{t("milestones.title_1")}
@@ -120,10 +122,9 @@ const ProcessMilestones = () => {
{t("milestones.cta_1")}
-
@@ -134,10 +135,9 @@ const ProcessMilestones = () => {
<>
{t("milestones.roadmap_2")}
-
{t("milestones.title_2")}
@@ -156,37 +156,14 @@ const ProcessMilestones = () => {
{t("milestones.sub_title_3")}
-
-
- ),
- }}
- />
-
-
- ,
- }}
- />
-
+
+
{t("milestones.cta_2")}
-
diff --git a/frontend/src/app/[locale]/process/page.tsx b/frontend/src/app/[locale]/process/page.tsx
new file mode 100644
index 000000000..788627afa
--- /dev/null
+++ b/frontend/src/app/[locale]/process/page.tsx
@@ -0,0 +1,38 @@
+import { PROCESS_CRUMBS } from "src/constants/breadcrumbs";
+
+import BetaAlert from "src/components/BetaAlert";
+
+import Breadcrumbs from "src/components/Breadcrumbs";
+import PageSEO from "src/components/PageSEO";
+import { Metadata } from "next";
+import ProcessIntro from "src/app/[locale]/process/ProcessIntro";
+import ProcessInvolved from "src/app/[locale]/process/ProcessInvolved";
+import ProcessMilestones from "src/app/[locale]/process/ProcessMilestones";
+import { useTranslations } from "next-intl";
+import { getTranslations } from "next-intl/server";
+
+export async function generateMetadata() {
+ const t = await getTranslations({ locale: "en" });
+ const meta: Metadata = {
+ title: t("Process.page_title"),
+ description: t("Process.meta_description"),
+ };
+ return meta;
+}
+
+export default function Process() {
+ const t = useTranslations("Process");
+
+ return (
+ <>
+
+
+
+
+
+
+ >
+ );
+}
diff --git a/frontend/src/pages/content/ResearchArchetypes.tsx b/frontend/src/app/[locale]/research/ResearchArchetypes.tsx
similarity index 91%
rename from frontend/src/pages/content/ResearchArchetypes.tsx
rename to frontend/src/app/[locale]/research/ResearchArchetypes.tsx
index 80eb6931b..adf597d80 100644
--- a/frontend/src/pages/content/ResearchArchetypes.tsx
+++ b/frontend/src/app/[locale]/research/ResearchArchetypes.tsx
@@ -1,15 +1,14 @@
-import { useTranslation } from "next-i18next";
import Image from "next/image";
import { Grid } from "@trussworks/react-uswds";
-
+import { useTranslations } from "next-intl";
import ContentLayout from "src/components/ContentLayout";
-import embarrassed from "../../../public/img/noun-embarrassed.svg";
-import goal from "../../../public/img/noun-goal.svg";
-import hiring from "../../../public/img/noun-hiring.svg";
-import leadership from "../../../public/img/noun-leadership.svg";
+import embarrassed from "public/img/noun-embarrassed.svg";
+import goal from "public/img/noun-goal.svg";
+import hiring from "public/img/noun-hiring.svg";
+import leadership from "public/img/noun-leadership.svg";
const ResearchArchetypes = () => {
- const { t } = useTranslation("common", { keyPrefix: "Research" });
+ const t = useTranslations("Research");
return (
{
+ const t = useTranslations("Research");
+
+ const email = ExternalRoutes.EMAIL_SIMPLERGRANTSGOV;
+
+ const messages = useMessages() as unknown as IntlMessages;
+ const keys = Object.keys(messages.Research.impact.boxes);
+
+ return (
+
+
+ {t("impact.paragraph_1")}
+
+ {t("impact.paragraph_2")}
+
+
+
+ {keys.map((key) => {
+ const title = t(`impact.boxes.${key}.title`);
+ const content = t(`impact.boxes.${key}.content`);
+ return (
+
+
+
{title}
+
+ {content}
+
+
+
+ );
+ })}
+
+
+
+ {t("impact.title_2")}
+
+
+ {t.rich("impact.paragraph_3", {
+ email: (chunks) => (
+
+ {chunks}
+
+ ),
+ strong: (chunks) => {chunks} ,
+ newsletter: (chunks) => {chunks} ,
+ arrowUpRightFromSquare: () => (
+
+ ),
+ })}
+
+
+
+ );
+};
+
+export default ResearchImpact;
diff --git a/frontend/src/pages/content/ResearchIntro.tsx b/frontend/src/app/[locale]/research/ResearchIntro.tsx
similarity index 81%
rename from frontend/src/pages/content/ResearchIntro.tsx
rename to frontend/src/app/[locale]/research/ResearchIntro.tsx
index e98168a91..3f5fd3a14 100644
--- a/frontend/src/pages/content/ResearchIntro.tsx
+++ b/frontend/src/app/[locale]/research/ResearchIntro.tsx
@@ -1,10 +1,10 @@
-import { useTranslation } from "next-i18next";
+import { useTranslations } from "next-intl";
import { Grid } from "@trussworks/react-uswds";
import ContentLayout from "src/components/ContentLayout";
const ResearchIntro = () => {
- const { t } = useTranslation("common", { keyPrefix: "Research" });
+ const t = useTranslations("Research");
return (
{
- const { t } = useTranslation("common", { keyPrefix: "Research" });
+ const t = useTranslations("Research");
return (
{
>
-
- ),
- }}
- />
+ {t.rich("methodology.paragraph_1", {
+ p: (chunks) => (
+
+ {chunks}
+
+ ),
+ })}
{t("methodology.title_2")}
-
- ),
- li: ,
- }}
- />
+ {t.rich("methodology.paragraph_2", {
+ ul: (chunks) => (
+
+ ),
+ li: (chunks) => {chunks} ,
+ })}
{t("methodology.title_3")}
{t("methodology.cta")}
-
diff --git a/frontend/src/pages/content/ResearchThemes.tsx b/frontend/src/app/[locale]/research/ResearchThemes.tsx
similarity index 93%
rename from frontend/src/pages/content/ResearchThemes.tsx
rename to frontend/src/app/[locale]/research/ResearchThemes.tsx
index be8a95103..ceaaf5a08 100644
--- a/frontend/src/pages/content/ResearchThemes.tsx
+++ b/frontend/src/app/[locale]/research/ResearchThemes.tsx
@@ -1,10 +1,10 @@
-import { useTranslation } from "next-i18next";
+import { useTranslations } from "next-intl";
import { Grid } from "@trussworks/react-uswds";
import ContentLayout from "src/components/ContentLayout";
const ResearchThemes = () => {
- const { t } = useTranslation("common", { keyPrefix: "Research" });
+ const t = useTranslations("Research");
return (
+
+
+
+
+
+
+
+
+
+
+ >
+ );
+}
diff --git a/frontend/src/app/search/SearchForm.tsx b/frontend/src/app/[locale]/search/SearchForm.tsx
similarity index 80%
rename from frontend/src/app/search/SearchForm.tsx
rename to frontend/src/app/[locale]/search/SearchForm.tsx
index 047cfd71c..1f5d60341 100644
--- a/frontend/src/app/search/SearchForm.tsx
+++ b/frontend/src/app/[locale]/search/SearchForm.tsx
@@ -2,20 +2,20 @@
import SearchPagination, {
PaginationPosition,
-} from "../../components/search/SearchPagination";
+} from "../../../components/search/SearchPagination";
import { AgencyNamyLookup } from "src/utils/search/generateAgencyNameLookup";
-import { QueryParamData } from "../../services/search/searchfetcher/SearchFetcher";
-import { SearchAPIResponse } from "../../types/search/searchResponseTypes";
-import SearchBar from "../../components/search/SearchBar";
+import { QueryParamData } from "../../../services/search/searchfetcher/SearchFetcher";
+import { SearchAPIResponse } from "../../../types/search/searchResponseTypes";
+import SearchBar from "../../../components/search/SearchBar";
import SearchFilterAgency from "src/components/search/SearchFilterAgency";
-import SearchFilterCategory from "../../components/search/SearchFilterCategory";
-import SearchFilterEligibility from "../../components/search/SearchFilterEligibility";
-import SearchFilterFundingInstrument from "../../components/search/SearchFilterFundingInstrument";
-import SearchOpportunityStatus from "../../components/search/SearchOpportunityStatus";
-import SearchResultsHeader from "../../components/search/SearchResultsHeader";
-import SearchResultsList from "../../components/search/SearchResultsList";
-import { useSearchFormState } from "../../hooks/useSearchFormState";
+import SearchFilterCategory from "../../../components/search/SearchFilterCategory";
+import SearchFilterEligibility from "../../../components/search/SearchFilterEligibility";
+import SearchFilterFundingInstrument from "../../../components/search/SearchFilterFundingInstrument";
+import SearchOpportunityStatus from "../../../components/search/SearchOpportunityStatus";
+import SearchResultsHeader from "../../../components/search/SearchResultsHeader";
+import SearchResultsList from "../../../components/search/SearchResultsList";
+import { useSearchFormState } from "../../../hooks/useSearchFormState";
interface SearchFormProps {
initialSearchResults: SearchAPIResponse;
diff --git a/frontend/src/app/search/actions.ts b/frontend/src/app/[locale]/search/actions.ts
similarity index 68%
rename from frontend/src/app/search/actions.ts
rename to frontend/src/app/[locale]/search/actions.ts
index cfe9b5076..d8a56149b 100644
--- a/frontend/src/app/search/actions.ts
+++ b/frontend/src/app/[locale]/search/actions.ts
@@ -1,9 +1,9 @@
// All exports in this file are server actions
"use server";
-import { FormDataService } from "../../services/search/FormDataService";
-import { SearchAPIResponse } from "../../types/search/searchResponseTypes";
-import { getSearchFetcher } from "../../services/search/searchfetcher/SearchFetcherUtil";
+import { FormDataService } from "../../../services/search/FormDataService";
+import { SearchAPIResponse } from "../../../types/search/searchResponseTypes";
+import { getSearchFetcher } from "../../../services/search/searchfetcher/SearchFetcherUtil";
// Gets MockSearchFetcher or APISearchFetcher based on environment variable
const searchFetcher = getSearchFetcher();
diff --git a/frontend/src/app/search/error.tsx b/frontend/src/app/[locale]/search/error.tsx
similarity index 98%
rename from frontend/src/app/search/error.tsx
rename to frontend/src/app/[locale]/search/error.tsx
index 3716f9ceb..ddfc71891 100644
--- a/frontend/src/app/search/error.tsx
+++ b/frontend/src/app/[locale]/search/error.tsx
@@ -8,7 +8,7 @@ import {
import PageSEO from "src/components/PageSEO";
import { QueryParamData } from "src/services/search/searchfetcher/SearchFetcher";
import SearchCallToAction from "src/components/search/SearchCallToAction";
-import { SearchForm } from "src/app/search/SearchForm";
+import { SearchForm } from "src/app/[locale]/search/SearchForm";
import { useEffect } from "react";
interface ErrorProps {
diff --git a/frontend/src/app/search/loading.tsx b/frontend/src/app/[locale]/search/loading.tsx
similarity index 88%
rename from frontend/src/app/search/loading.tsx
rename to frontend/src/app/[locale]/search/loading.tsx
index e9e7487c6..8b4feb238 100644
--- a/frontend/src/app/search/loading.tsx
+++ b/frontend/src/app/[locale]/search/loading.tsx
@@ -1,5 +1,5 @@
import React from "react";
-import Spinner from "../../components/Spinner";
+import Spinner from "../../../components/Spinner";
export default function Loading() {
// TODO (Issue #1937): Use translation utility for strings in this file
diff --git a/frontend/src/app/search/page.tsx b/frontend/src/app/[locale]/search/page.tsx
similarity index 71%
rename from frontend/src/app/search/page.tsx
rename to frontend/src/app/[locale]/search/page.tsx
index 319d16961..36cb75ef4 100644
--- a/frontend/src/app/search/page.tsx
+++ b/frontend/src/app/[locale]/search/page.tsx
@@ -1,18 +1,18 @@
import {
ServerSideRouteParams,
ServerSideSearchParams,
-} from "../../types/searchRequestURLTypes";
+} from "../../../types/searchRequestURLTypes";
-import BetaAlert from "../../components/AppBetaAlert";
+import BetaAlert from "src/components/BetaAlert";
import { Metadata } from "next";
import React from "react";
-import SearchCallToAction from "../../components/search/SearchCallToAction";
+import SearchCallToAction from "../../../components/search/SearchCallToAction";
import { SearchForm } from "./SearchForm";
-import { convertSearchParamsToProperTypes } from "../../utils/search/convertSearchParamsToProperTypes";
+import { convertSearchParamsToProperTypes } from "../../../utils/search/convertSearchParamsToProperTypes";
import { generateAgencyNameLookup } from "src/utils/search/generateAgencyNameLookup";
-import { getSearchFetcher } from "../../services/search/searchfetcher/SearchFetcherUtil";
+import { getSearchFetcher } from "../../../services/search/searchfetcher/SearchFetcherUtil";
import { getTranslations } from "next-intl/server";
-import withFeatureFlag from "../../hoc/search/withFeatureFlag";
+import withFeatureFlag from "../../../hoc/search/withFeatureFlag";
const searchFetcher = getSearchFetcher();
@@ -25,10 +25,11 @@ export async function generateMetadata() {
const t = await getTranslations({ locale: "en" });
const meta: Metadata = {
title: t("Search.title"),
+ description: t("Index.meta_description"),
};
-
return meta;
}
+
async function Search({ searchParams }: ServerPageProps) {
const convertedSearchParams = convertSearchParamsToProperTypes(searchParams);
const initialSearchResults = await searchFetcher.fetchOpportunities(
diff --git a/frontend/src/app/layout.tsx b/frontend/src/app/layout.tsx
index 5c52b5004..e45e82c42 100644
--- a/frontend/src/app/layout.tsx
+++ b/frontend/src/app/layout.tsx
@@ -1,8 +1,8 @@
import "src/styles/styles.scss";
import { GoogleAnalytics } from "@next/third-parties/google";
-import { PUBLIC_ENV } from "../constants/environments";
+import { PUBLIC_ENV } from "src/constants/environments";
-import Layout from "src/components/AppLayout";
+import Layout from "src/components/Layout";
import { unstable_setRequestLocale } from "next-intl/server";
/**
* Root layout component, wraps all pages.
diff --git a/frontend/src/app/not-found.tsx b/frontend/src/app/not-found.tsx
index 6615f073a..08416f07f 100644
--- a/frontend/src/app/not-found.tsx
+++ b/frontend/src/app/not-found.tsx
@@ -1,12 +1,23 @@
-import BetaAlert from "src/components/AppBetaAlert";
+import BetaAlert from "src/components/BetaAlert";
import { GridContainer } from "@trussworks/react-uswds";
import Link from "next/link";
import { useTranslations } from "next-intl";
-import { unstable_setRequestLocale } from "next-intl/server";
+import { getTranslations, unstable_setRequestLocale } from "next-intl/server";
+import { Metadata } from "next";
+
+export async function generateMetadata() {
+ const t = await getTranslations({ locale: "en" });
+ const meta: Metadata = {
+ title: t("ErrorPages.page_not_found.title"),
+ description: t("Index.meta_description"),
+ };
+ return meta;
+}
export default function NotFound() {
unstable_setRequestLocale("en");
const t = useTranslations("ErrorPages.page_not_found");
+
return (
<>
diff --git a/frontend/src/app/template.tsx b/frontend/src/app/template.tsx
index a79e15041..b7250859f 100644
--- a/frontend/src/app/template.tsx
+++ b/frontend/src/app/template.tsx
@@ -2,7 +2,7 @@
import { useEffect } from "react";
import { sendGAEvent } from "@next/third-parties/google";
-import { PUBLIC_ENV } from "../constants/environments";
+import { PUBLIC_ENV } from "src/constants/environments";
export default function Template({ children }: { children: React.ReactNode }) {
const isProd = process.env.NODE_ENV === "production";
diff --git a/frontend/src/components/AppBetaAlert.tsx b/frontend/src/components/AppBetaAlert.tsx
deleted file mode 100644
index 2cbf5f2fe..000000000
--- a/frontend/src/components/AppBetaAlert.tsx
+++ /dev/null
@@ -1,23 +0,0 @@
-import { useTranslations } from "next-intl";
-
-import FullWidthAlert from "./FullWidthAlert";
-
-const BetaAlert = () => {
- const t = useTranslations("Beta_alert");
- const heading = t.rich("alert_title", {
- LinkToGrants: (content) => {content} ,
- });
-
- return (
-
-
- {t("alert")}
-
-
- );
-};
-
-export default BetaAlert;
diff --git a/frontend/src/components/AppLayout.tsx b/frontend/src/components/AppLayout.tsx
deleted file mode 100644
index a539f90d5..000000000
--- a/frontend/src/components/AppLayout.tsx
+++ /dev/null
@@ -1,59 +0,0 @@
-import Footer from "./Footer";
-import GrantsIdentifier from "./GrantsIdentifier";
-import Header from "./Header";
-import { useTranslations } from "next-intl";
-
-type Props = {
- children: React.ReactNode;
- locale: string;
-};
-
-export default function Layout({ children, locale }: Props) {
- const t = useTranslations();
-
- const header_strings = {
- title: t("Header.title"),
- nav_menu_toggle: t("Header.nav_menu_toggle"),
- nav_link_home: t("Header.nav_link_home"),
- nav_link_search: "Search",
- nav_link_process: t("Header.nav_link_process"),
- nav_link_research: t("Header.nav_link_research"),
- nav_link_newsletter: t("Header.nav_link_newsletter"),
- };
- const footer_strings = {
- agency_name: t("Footer.agency_name"),
- agency_contact_center: t("Footer.agency_contact_center"),
- telephone: t("Footer.telephone"),
- return_to_top: t("Footer.return_to_top"),
- link_twitter: t("Footer.link_twitter"),
- link_youtube: t("Footer.link_youtube"),
- link_blog: t("Footer.link_blog"),
- link_newsletter: t("Footer.link_newsletter"),
- link_rss: t("Footer.link_rss"),
- link_github: t("Footer.link_github"),
- logo_alt: t("Footer.logo_alt"),
- };
-
- const identifier_strings = {
- link_about: t("Identifier.link_about"),
- link_accessibility: t("Identifier.link_accessibility"),
- link_foia: t("Identifier.link_foia"),
- link_fear: t("Identifier.link_fear"),
- link_ig: t("Identifier.link_ig"),
- link_performance: t("Identifier.link_performance"),
- link_privacy: t("Identifier.link_privacy"),
- logo_alt: t("Identifier.logo_alt"),
- };
- return (
- // Stick the footer to the bottom of the page
-
- );
-}
diff --git a/frontend/src/components/BetaAlert.tsx b/frontend/src/components/BetaAlert.tsx
index fe7acd079..2cbf5f2fe 100644
--- a/frontend/src/components/BetaAlert.tsx
+++ b/frontend/src/components/BetaAlert.tsx
@@ -1,51 +1,20 @@
-"use client";
+import { useTranslations } from "next-intl";
-import Link from "next/link";
-
-import { ExternalRoutes } from "src/constants/routes";
import FullWidthAlert from "./FullWidthAlert";
-// TODO: Remove for i18n update.
-type BetaStrings = {
- alert_title: string;
- alert: string;
-};
-
-type Props = {
- beta_strings: BetaStrings;
-};
-
-const BetaAlert = ({ beta_strings }: Props) => {
- // TODO: Remove during move to app router and next-intl upgrade
- const title_start = beta_strings.alert_title.substring(
- 0,
- beta_strings.alert_title.indexOf(""),
- );
- const title_end = beta_strings.alert_title.substring(
- beta_strings.alert_title.indexOf(" ") +
- "".length,
- );
- const link = (
- <>
- {title_start}
-
- www.grants.gov
-
- {title_end}
- >
- );
+const BetaAlert = () => {
+ const t = useTranslations("Beta_alert");
+ const heading = t.rich("alert_title", {
+ LinkToGrants: (content) => {content} ,
+ });
return (
-
- {beta_strings.alert}
+
+ {t("alert")}
);
diff --git a/frontend/src/components/Footer.tsx b/frontend/src/components/Footer.tsx
index 1c4f60598..bf8ca8761 100644
--- a/frontend/src/components/Footer.tsx
+++ b/frontend/src/components/Footer.tsx
@@ -1,86 +1,73 @@
-"use client";
-
import { ExternalRoutes } from "src/constants/routes";
-import { assetPath } from "src/utils/assetPath";
+import { useTranslations } from "next-intl";
+import { USWDSIcon } from "src/components/USWDSIcon";
+import GrantsLogo from "public/img/grants-gov-logo.png";
+
+import Image from "next/image";
-import { ComponentType } from "react";
import {
Address,
Grid,
GridContainer,
- Icon,
SocialLinks,
Footer as USWDSFooter,
} from "@trussworks/react-uswds";
-import { IconProps } from "@trussworks/react-uswds/lib/components/Icon/Icon";
// Recreate @trussworks/react-uswds SocialLink component to accept any Icon
// https://github.com/trussworks/react-uswds/blob/cf5b4555e25f0e52fc8af66afe29253922bed2a5/src/components/Footer/SocialLinks/SocialLinks.tsx#L33
type SocialLinkProps = {
href: string;
name: string;
- Tag: ComponentType;
+ icon: string;
};
-const SocialLink = ({ href, name, Tag }: SocialLinkProps) => (
+const SocialLink = ({ href, name, icon }: SocialLinkProps) => (
-
+
);
-// TODO: Remove during move to app router and next-intl upgrade
-type FooterStrings = {
- agency_name: string;
- agency_contact_center: string;
- telephone: string;
- return_to_top: string;
- link_twitter: string;
- link_youtube: string;
- link_blog: string;
- link_newsletter: string;
- link_rss: string;
- link_github: string;
- logo_alt: string;
-};
-
-type Props = {
- footer_strings: FooterStrings;
-};
+const Footer = () => {
+ const t = useTranslations("Footer");
-const Footer = ({ footer_strings }: Props) => {
const links = [
{
href: ExternalRoutes.GRANTS_TWITTER,
- name: footer_strings.link_twitter,
- Tag: Icon.Twitter,
+ name: t("link_twitter"),
+ icon: "twitter",
},
{
href: ExternalRoutes.GRANTS_YOUTUBE,
- name: footer_strings.link_youtube,
- Tag: Icon.Youtube,
+ name: t("link_youtube"),
+ icon: "youtube",
},
{
href: ExternalRoutes.GRANTS_BLOG,
- name: footer_strings.link_blog,
- Tag: Icon.LocalLibrary,
+ name: t("link_blog"),
+ icon: "local_library",
},
{
href: ExternalRoutes.GRANTS_NEWSLETTER,
- name: footer_strings.link_newsletter,
- Tag: Icon.Mail,
+ name: t("link_newsletter"),
+ icon: "mail",
},
{
href: ExternalRoutes.GRANTS_RSS,
- name: footer_strings.link_rss,
- Tag: Icon.RssFeed,
+ name: t("link_rss"),
+ icon: "rss_feed",
},
{
href: ExternalRoutes.GITHUB_REPO,
- name: footer_strings.link_github,
- Tag: Icon.Github,
+ name: t("link_github"),
+ icon: "github",
},
- ].map(({ href, name, Tag }) => (
-
+ ].map(({ href, name, icon }) => (
+
));
return (
@@ -89,17 +76,20 @@ const Footer = ({ footer_strings }: Props) => {
size="medium"
returnToTop={
- {footer_strings.return_to_top}
+ {t("return_to_top")}
}
primary={null}
secondary={
-
{
>
- {footer_strings.agency_contact_center}
+ {t("agency_contact_center")}
- {footer_strings.telephone}
+
+ {t("telephone")}
,
{ExternalRoutes.EMAIL_SUPPORT}
diff --git a/frontend/src/components/GrantsIdentifier.tsx b/frontend/src/components/GrantsIdentifier.tsx
index dc4fcebf0..8b4975188 100644
--- a/frontend/src/components/GrantsIdentifier.tsx
+++ b/frontend/src/components/GrantsIdentifier.tsx
@@ -1,8 +1,7 @@
-"use client";
-
import { ExternalRoutes } from "src/constants/routes";
-import { Trans, useTranslation } from "next-i18next";
+import { useTranslations } from "next-intl";
+
import Image from "next/image";
import {
Identifier,
@@ -16,28 +15,21 @@ import {
IdentifierMasthead,
} from "@trussworks/react-uswds";
-import logo from "../../public/img/logo-white-lg.webp";
+import logo from "public/img/logo-white-lg.webp";
-// TODO: Remove during move to app router and next-intl upgrade
-type IdentifierStrings = {
- link_about: string;
- link_accessibility: string;
- link_foia: string;
- link_fear: string;
- link_ig: string;
- link_performance: string;
- link_privacy: string;
- logo_alt: string;
-};
-
-type Props = {
- identifier_strings: IdentifierStrings;
-};
+const GrantsIdentifier = () => {
+ const t = useTranslations("Identifier");
-const GrantsIdentifier = ({ identifier_strings }: Props) => {
- const { t } = useTranslation("common", {
- keyPrefix: "Identifier",
- });
+ const identifier_strings = {
+ link_about: t("link_about"),
+ link_accessibility: t("link_accessibility"),
+ link_foia: t("link_foia"),
+ link_fear: t("link_fear"),
+ link_ig: t("link_ig"),
+ link_performance: t("link_performance"),
+ link_privacy: t("link_privacy"),
+ logo_alt: t("logo_alt"),
+ };
const logoImage = (
{
{logoImage}
- ,
- }}
- />
+ {t.rich("identity", {
+ hhsLink: (chunks) => {chunks} ,
+ })}
{IdentifierLinkList}
- ,
- }}
- />
+ {t.rich("gov_content", {
+ usaLink: (chunks) => {chunks} ,
+ })}
);
diff --git a/frontend/src/components/Header.tsx b/frontend/src/components/Header.tsx
index 166f844e5..6f26ed4e2 100644
--- a/frontend/src/components/Header.tsx
+++ b/frontend/src/components/Header.tsx
@@ -10,31 +10,21 @@ import {
import { useEffect, useRef, useState } from "react";
import { assetPath } from "src/utils/assetPath";
-import { useFeatureFlags } from "../hooks/useFeatureFlags";
+import { useFeatureFlags } from "src/hooks/useFeatureFlags";
+import { useTranslations } from "next-intl";
type PrimaryLinks = {
i18nKey: string;
href: string;
}[];
-// TODO: Remove during move to app router and next-intl upgrade
-type HeaderStrings = {
- nav_link_home: string;
- nav_link_search?: string;
- nav_link_process: string;
- nav_link_research: string;
- nav_link_newsletter: string;
- nav_menu_toggle: string;
- title: string;
-};
-
type Props = {
logoPath?: string;
- header_strings: HeaderStrings;
locale?: string;
};
-const Header = ({ header_strings, logoPath, locale }: Props) => {
+const Header = ({ logoPath, locale }: Props) => {
+ const t = useTranslations("Header");
const [isMobileNavExpanded, setIsMobileNavExpanded] = useState(false);
const handleMobileNavToggle = () => {
setIsMobileNavExpanded(!isMobileNavExpanded);
@@ -45,23 +35,23 @@ const Header = ({ header_strings, logoPath, locale }: Props) => {
useEffect(() => {
primaryLinksRef.current = [
- { i18nKey: "nav_link_home", href: "/" },
- { i18nKey: "nav_link_process", href: "/process" },
- { i18nKey: "nav_link_research", href: "/research" },
- { i18nKey: "nav_link_newsletter", href: "/newsletter" },
+ { i18nKey: t("nav_link_home"), href: "/" },
+ { i18nKey: t("nav_link_process"), href: "/process" },
+ { i18nKey: t("nav_link_research"), href: "/research" },
+ { i18nKey: t("nav_link_newsletter"), href: "/newsletter" },
];
const searchNavLink = {
- i18nKey: "nav_link_search",
+ i18nKey: t("nav_link_search"),
href: "/search?status=forecasted,posted",
};
if (featureFlagsManager.isFeatureEnabled("showSearchV0")) {
primaryLinksRef.current.splice(1, 0, searchNavLink);
}
- }, [featureFlagsManager]);
+ }, [featureFlagsManager, t]);
const navItems = primaryLinksRef.current.map((link) => (
- {header_strings[link.i18nKey as keyof HeaderStrings]}
+ {link.i18nKey}
));
const language = locale && locale.match("/^es/") ? "spanish" : "english";
@@ -86,14 +76,12 @@ const Header = ({ header_strings, logoPath, locale }: Props) => {
/>
)}
-
- {header_strings.title}
-
+ {t("title")}
{
- const { t } = useTranslation("common", {
- keyPrefix: "Hero",
- });
+ const t = useTranslations("Hero");
return (
@@ -23,9 +22,9 @@ const Hero = () => {
href={ExternalRoutes.GITHUB_REPO}
target="_blank"
>
-
{t("github_link")}
diff --git a/frontend/src/components/Layout.tsx b/frontend/src/components/Layout.tsx
index 7acb26f04..9cce89c04 100644
--- a/frontend/src/components/Layout.tsx
+++ b/frontend/src/components/Layout.tsx
@@ -1,50 +1,21 @@
import Footer from "./Footer";
import GrantsIdentifier from "./GrantsIdentifier";
import Header from "./Header";
-import { useTranslation } from "next-i18next";
+import {
+ useTranslations,
+ useMessages,
+ NextIntlClientProvider,
+} from "next-intl";
+import pick from "lodash/pick";
type Props = {
children: React.ReactNode;
+ locale: string;
};
-const Layout = ({ children }: Props) => {
- const { t } = useTranslation("common");
-
- // TODO: Remove during move to app router and next-intl upgrade
- const header_strings = {
- title: t("Header.title"),
- nav_menu_toggle: t("Header.nav_menu_toggle"),
- nav_link_home: t("Header.nav_link_home"),
- nav_link_search: t("Search"),
- nav_link_process: t("Header.nav_link_process"),
- nav_link_research: t("Header.nav_link_research"),
- nav_link_newsletter: t("Header.nav_link_newsletter"),
- };
-
- const footer_strings = {
- agency_name: t("Footer.agency_name"),
- agency_contact_center: t("Footer.agency_contact_center"),
- telephone: t("Footer.telephone"),
- return_to_top: t("Footer.return_to_top"),
- link_twitter: t("Footer.link_twitter"),
- link_youtube: t("Footer.link_youtube"),
- link_blog: t("Footer.link_blog"),
- link_newsletter: t("Footer.link_newsletter"),
- link_rss: t("Footer.link_rss"),
- link_github: t("Footer.link_github"),
- logo_alt: t("Footer.logo_alt"),
- };
-
- const identifier_strings = {
- link_about: t("Identifier.link_about"),
- link_accessibility: t("Identifier.link_accessibility"),
- link_foia: t("Identifier.link_foia"),
- link_fear: t("Identifier.link_fear"),
- link_ig: t("Identifier.link_ig"),
- link_performance: t("Identifier.link_performance"),
- link_privacy: t("Identifier.link_privacy"),
- logo_alt: t("Identifier.logo_alt"),
- };
+export default function Layout({ children, locale }: Props) {
+ const t = useTranslations();
+ const messages = useMessages();
return (
// Stick the footer to the bottom of the page
@@ -52,12 +23,15 @@ const Layout = ({ children }: Props) => {
{t("Layout.skip_to_main")}
-
+
+
+
{children}
-
-
+
+
);
-};
-
-export default Layout;
+}
diff --git a/frontend/src/components/USWDSIcon.tsx b/frontend/src/components/USWDSIcon.tsx
new file mode 100644
index 000000000..7414d8978
--- /dev/null
+++ b/frontend/src/components/USWDSIcon.tsx
@@ -0,0 +1,23 @@
+import SpriteSVG from "public/img/uswds-sprite.svg";
+
+interface IconProps {
+ name: string;
+ className: string;
+ height?: string;
+}
+
+// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
+const sprite_uri = SpriteSVG.src as string;
+
+export function USWDSIcon(props: IconProps) {
+ return (
+
+
+
+ );
+}
diff --git a/frontend/src/pages/content/FundingContent.tsx b/frontend/src/components/content/FundingContent.tsx
similarity index 93%
rename from frontend/src/pages/content/FundingContent.tsx
rename to frontend/src/components/content/FundingContent.tsx
index 60f0900e4..b72dc07be 100644
--- a/frontend/src/pages/content/FundingContent.tsx
+++ b/frontend/src/components/content/FundingContent.tsx
@@ -1,12 +1,12 @@
import { nofoPdfs } from "src/constants/nofoPdfs";
-import { useTranslation } from "next-i18next";
+import { useTranslations } from "next-intl";
import { Grid, GridContainer } from "@trussworks/react-uswds";
import NofoImageLink from "../../components/NofoImageLink";
const FundingContent = () => {
- const { t } = useTranslation("common", { keyPrefix: "Index" });
+ const t = useTranslations("Index");
return (
@@ -41,7 +41,7 @@ const FundingContent = () => {
image={pdf.image}
height={pdf.height}
width={pdf.width}
- alt={t(`${pdf.alt}`)}
+ alt={pdf.alt}
/>
))}
diff --git a/frontend/src/pages/content/IndexGoalContent.tsx b/frontend/src/components/content/IndexGoalContent.tsx
similarity index 80%
rename from frontend/src/pages/content/IndexGoalContent.tsx
rename to frontend/src/components/content/IndexGoalContent.tsx
index 83d3c4d69..a1e064e6a 100644
--- a/frontend/src/pages/content/IndexGoalContent.tsx
+++ b/frontend/src/components/content/IndexGoalContent.tsx
@@ -1,11 +1,12 @@
-import { useTranslation } from "next-i18next";
-import Link from "next/link";
-import { Button, Grid, Icon } from "@trussworks/react-uswds";
+import { useTranslations } from "next-intl";
+import Link from "next/link";
+import { Button, Grid } from "@trussworks/react-uswds";
+import { USWDSIcon } from "../USWDSIcon";
import ContentLayout from "src/components/ContentLayout";
const IndexGoalContent = () => {
- const { t } = useTranslation("common", { keyPrefix: "Index" });
+ const t = useTranslations("Index");
return (
{
{t("goal.cta")}
-
diff --git a/frontend/src/pages/content/ProcessAndResearchContent.tsx b/frontend/src/components/content/ProcessAndResearchContent.tsx
similarity index 77%
rename from frontend/src/pages/content/ProcessAndResearchContent.tsx
rename to frontend/src/components/content/ProcessAndResearchContent.tsx
index 0706f32c3..e07bab385 100644
--- a/frontend/src/pages/content/ProcessAndResearchContent.tsx
+++ b/frontend/src/components/content/ProcessAndResearchContent.tsx
@@ -1,11 +1,12 @@
-import { useTranslation } from "next-i18next";
+import { useTranslations } from "next-intl";
import Link from "next/link";
-import { Button, Grid, Icon } from "@trussworks/react-uswds";
+import { Button, Grid } from "@trussworks/react-uswds";
+import { USWDSIcon } from "src/components/USWDSIcon";
import ContentLayout from "src/components/ContentLayout";
const ProcessAndResearchContent = () => {
- const { t } = useTranslation("common", { keyPrefix: "Index" });
+ const t = useTranslations("Index");
return (
{
{t("process_and_research.cta_1")}
-
@@ -44,9 +45,9 @@ const ProcessAndResearchContent = () => {
{t("process_and_research.cta_2")}
-
diff --git a/frontend/src/components/search/SearchResultsList.tsx b/frontend/src/components/search/SearchResultsList.tsx
index eeddc716b..bca660db1 100644
--- a/frontend/src/components/search/SearchResultsList.tsx
+++ b/frontend/src/components/search/SearchResultsList.tsx
@@ -1,7 +1,7 @@
"use client";
import { AgencyNamyLookup } from "src/utils/search/generateAgencyNameLookup";
-import Loading from "../../app/search/loading";
+import Loading from "../../app/[locale]/search/loading";
import SearchErrorAlert from "src/components/search/error/SearchErrorAlert";
import { SearchResponseData } from "../../types/search/searchResponseTypes";
import SearchResultsListItem from "./SearchResultsListItem";
diff --git a/frontend/src/hooks/useSearchFormState.ts b/frontend/src/hooks/useSearchFormState.ts
index f3a53bef8..0526effd9 100644
--- a/frontend/src/hooks/useSearchFormState.ts
+++ b/frontend/src/hooks/useSearchFormState.ts
@@ -4,7 +4,7 @@ import { useRef, useState } from "react";
import { QueryParamData } from "../services/search/searchfetcher/SearchFetcher";
import { SearchAPIResponse } from "../types/search/searchResponseTypes";
-import { updateResults } from "../app/search/actions";
+import { updateResults } from "../app/[locale]/search/actions";
import { useFormState } from "react-dom";
import { useSearchParamUpdater } from "./useSearchParamUpdater";
diff --git a/frontend/src/i18n/messages/en/index.ts b/frontend/src/i18n/messages/en/index.ts
index 843d4455d..11a5f900a 100644
--- a/frontend/src/i18n/messages/en/index.ts
+++ b/frontend/src/i18n/messages/en/index.ts
@@ -229,12 +229,12 @@ export const messages = {
{
title: "Find",
content:
- "Improve how applicants discover funding opportunities that they’re qualified for and that meet their needs.
",
+ "Improve how applicants discover funding opportunities that they’re qualified for and that meet their needs.
",
},
{
title: "Advanced reporting",
content:
- "Improve stakeholders’ capacity to understand, analyze, and assess grants from application to acceptance.
Make non-confidential Grants.gov data open for public analysis.
",
+ "Improve stakeholders’ capacity to understand, analyze, and assess grants from application to acceptance.
Make non-confidential Grants.gov data open for public analysis.
",
},
{
title: "Apply",
@@ -291,9 +291,9 @@ export const messages = {
invalid_email:
"Enter an email address in the correct format, like name@example.com.",
already_subscribed:
- "{{email_address}} is already subscribed. If you’re not seeing our emails, check your spam folder and add no-reply@grants.gov to your contacts, address book, or safe senders list. If you continue to not receive our emails, contact simpler@grants.gov .",
+ " is already subscribed. If you’re not seeing our emails, check your spam folder and add no-reply@grants.gov to your contacts, address book, or safe senders list. If you continue to not receive our emails, contact simpler@grants.gov .",
sendy:
- "Sorry, an unexpected error in our system occured when trying to save your subscription. If this continues to happen, you may email simpler@grants.gov . Error: {{sendy_error}}",
+ "Sorry, an unexpected error in our system occured when trying to save your subscription. If this continues to happen, you may email simpler@grants.gov . Error: ",
},
},
Newsletter_confirmation: {
@@ -323,6 +323,7 @@ export const messages = {
"The Simpler.Grants.gov newsletter is powered by the Sendy data service. Personal information is not stored within Simpler.Grants.gov. ",
},
ErrorPages: {
+ page_title: "Page Not Found | Simpler.Grants.gov",
page_not_found: {
title: "Oops! Page Not Found",
message_content_1:
diff --git a/frontend/src/middleware.ts b/frontend/src/middleware.ts
index 33d8c733b..996176d04 100644
--- a/frontend/src/middleware.ts
+++ b/frontend/src/middleware.ts
@@ -19,7 +19,7 @@ export const config = {
* - _next/image (image optimization files)
* - images (static files in public/images/ directory)
*/
- "/((?!api|_next/static|_next/image|images|site.webmanifest).*)",
+ "/((?!api|_next/static|_next/image|public|img|uswds|images|robots.txt|site.webmanifest).*)",
/**
* Fix issue where the pattern above was causing middleware
* to not run on the homepage:
diff --git a/frontend/src/pages/404.tsx b/frontend/src/pages/404.tsx
deleted file mode 100644
index 3543f0e3d..000000000
--- a/frontend/src/pages/404.tsx
+++ /dev/null
@@ -1,39 +0,0 @@
-import type { GetStaticProps, NextPage } from "next";
-
-import { useTranslation } from "next-i18next";
-import { serverSideTranslations } from "next-i18next/serverSideTranslations";
-import Link from "next/link";
-import { GridContainer } from "@trussworks/react-uswds";
-
-import BetaAlert from "../components/BetaAlert";
-
-const PageNotFound: NextPage = () => {
- const { t } = useTranslation("common");
- // TODO: Remove during move to app router and next-intl upgrade
- const beta_strings = {
- alert_title: t("Beta_alert.alert_title"),
- alert: t("Beta_alert.alert"),
- };
- return (
- <>
-
-
- {t("page_not_found.title")}
-
- {t("ErrorPages.page_not_found.message_content_1")}
-
-
- {t("ErrorPages.page_not_found.visit_homepage_button")}
-
-
- >
- );
-};
-
-// Change this to GetServerSideProps if you're using server-side rendering
-export const getStaticProps: GetStaticProps = async ({ locale }) => {
- const translations = await serverSideTranslations(locale ?? "en");
- return { props: { ...translations } };
-};
-
-export default PageNotFound;
diff --git a/frontend/src/pages/_app.tsx b/frontend/src/pages/_app.tsx
deleted file mode 100644
index 971a5530f..000000000
--- a/frontend/src/pages/_app.tsx
+++ /dev/null
@@ -1,28 +0,0 @@
-import "../styles/styles.scss";
-
-import type { AppProps } from "next/app";
-import { GoogleAnalytics } from "@next/third-parties/google";
-import Head from "next/head";
-import Layout from "../components/Layout";
-import { PUBLIC_ENV } from "src/constants/environments";
-import { appWithTranslation } from "next-i18next";
-import { assetPath } from "src/utils/assetPath";
-
-function MyApp({ Component, pageProps }: AppProps) {
- return (
- <>
-
-
- {process.env.NEXT_PUBLIC_ENVIRONMENT !== "prod" && (
-
- )}
-
-
-
-
-
- >
- );
-}
-
-export default appWithTranslation(MyApp);
diff --git a/frontend/src/pages/api/hello.ts b/frontend/src/pages/api/hello.ts
deleted file mode 100644
index ea77e8f35..000000000
--- a/frontend/src/pages/api/hello.ts
+++ /dev/null
@@ -1,13 +0,0 @@
-// Next.js API route support: https://nextjs.org/docs/api-routes/introduction
-import type { NextApiRequest, NextApiResponse } from "next";
-
-type Data = {
- name: string;
-};
-
-export default function handler(
- req: NextApiRequest,
- res: NextApiResponse,
-) {
- res.status(200).json({ name: "John Doe" });
-}
diff --git a/frontend/src/pages/content/ProcessIntro.tsx b/frontend/src/pages/content/ProcessIntro.tsx
deleted file mode 100644
index af14025e8..000000000
--- a/frontend/src/pages/content/ProcessIntro.tsx
+++ /dev/null
@@ -1,58 +0,0 @@
-import { Trans, useTranslation } from "next-i18next";
-import { Grid } from "@trussworks/react-uswds";
-
-import ContentLayout from "src/components/ContentLayout";
-
-type IntroBoxes = {
- title: string;
- content: string;
-};
-
-const ProcessIntro = () => {
- const { t } = useTranslation("common", { keyPrefix: "Process" });
-
- const boxes: IntroBoxes[] = t("intro.boxes", { returnObjects: true });
-
- return (
-
-
-
-
- {t("intro.content")}
-
-
-
-
-
- {!Array.isArray(boxes)
- ? ""
- : boxes.map((box) => {
- return (
-
-
-
{box.title}
-
- }}
- />
-
-
-
- );
- })}
-
-
- );
-};
-
-export default ProcessIntro;
diff --git a/frontend/src/pages/content/ProcessInvolved.tsx b/frontend/src/pages/content/ProcessInvolved.tsx
deleted file mode 100644
index 662a4e3b2..000000000
--- a/frontend/src/pages/content/ProcessInvolved.tsx
+++ /dev/null
@@ -1,70 +0,0 @@
-import { ExternalRoutes } from "src/constants/routes";
-
-import { Trans, useTranslation } from "next-i18next";
-import { Grid } from "@trussworks/react-uswds";
-
-import ContentLayout from "src/components/ContentLayout";
-
-const ProcessInvolved = () => {
- const { t } = useTranslation("common", { keyPrefix: "Process" });
-
- const email = ExternalRoutes.EMAIL_SIMPLERGRANTSGOV;
-
- return (
-
-
-
-
- {t("involved.title_1")}
-
-
-
- ),
- }}
- />
-
-
-
-
- {t("involved.title_2")}
-
-
-
- ),
- wiki: (
-
- ),
- }}
- />
-
-
-
-
- );
-};
-
-export default ProcessInvolved;
diff --git a/frontend/src/pages/content/ResearchImpact.tsx b/frontend/src/pages/content/ResearchImpact.tsx
deleted file mode 100644
index f7278de0a..000000000
--- a/frontend/src/pages/content/ResearchImpact.tsx
+++ /dev/null
@@ -1,83 +0,0 @@
-import { ExternalRoutes } from "src/constants/routes";
-
-import { Trans, useTranslation } from "next-i18next";
-import Link from "next/link";
-import { Grid, Icon } from "@trussworks/react-uswds";
-
-import ContentLayout from "src/components/ContentLayout";
-
-type ImpactBoxes = {
- title: string;
- content: string;
-};
-
-const ResearchImpact = () => {
- const { t } = useTranslation("common", {
- keyPrefix: "Research",
- });
- const email = ExternalRoutes.EMAIL_SIMPLERGRANTSGOV;
-
- const boxes: ImpactBoxes[] = t("impact.boxes", { returnObjects: true });
-
- return (
-
-
- {t("impact.paragraph_1")}
-
- {t("impact.paragraph_2")}
-
-
-
- {!Array.isArray(boxes)
- ? ""
- : boxes.map((box) => {
- return (
-
-
-
{box.title}
-
- {box.content}
-
-
-
- );
- })}
-
-
-
- {t("impact.title_2")}
-
-
-
- ),
- newsletter: ,
- arrowUpRightFromSquare: (
-
- ),
- }}
- />
-
-
-
- );
-};
-
-export default ResearchImpact;
diff --git a/frontend/src/pages/content/WtGIContent.tsx b/frontend/src/pages/content/WtGIContent.tsx
deleted file mode 100644
index 54b4cf5a8..000000000
--- a/frontend/src/pages/content/WtGIContent.tsx
+++ /dev/null
@@ -1,90 +0,0 @@
-import { ExternalRoutes } from "src/constants/routes";
-
-import { Trans, useTranslation } from "next-i18next";
-import { Grid, GridContainer, Icon } from "@trussworks/react-uswds";
-
-const WtGIContent = () => {
- const email = ExternalRoutes.EMAIL_SIMPLERGRANTSGOV;
- const { t } = useTranslation("common", { keyPrefix: "Index" });
-
- return (
-
-
- {t("wtgi_title")}
-
-
-
- {t("wtgi_paragraph_1")}
-
-
-
-
- Join our open‑source community on{" "}
-
- GitHub
-
-
-
-
- ),
- li: ,
- small: ,
- repo: (
-
- ),
- goals: (
-
- ),
- roadmap: (
-
- ),
- contribute: (
-
- ),
- }}
- />
-
- ,
- }}
- />
-
-
-
-
- );
-};
-
-export default WtGIContent;
diff --git a/frontend/src/pages/dev/feature-flags.tsx b/frontend/src/pages/dev/feature-flags.tsx
deleted file mode 100644
index a24af1eb5..000000000
--- a/frontend/src/pages/dev/feature-flags.tsx
+++ /dev/null
@@ -1,87 +0,0 @@
-import { NextPage } from "next";
-import { useFeatureFlags } from "src/hooks/useFeatureFlags";
-
-import Head from "next/head";
-import React from "react";
-import { Button, Table } from "@trussworks/react-uswds";
-
-/**
- * Disable this page in production
- */
-export function getStaticProps() {
- if (process.env.NEXT_PUBLIC_ENVIRONMENT === "prod") {
- return {
- notFound: true,
- };
- }
-
- return {
- props: {},
- };
-}
-
-/**
- * View for managing feature flags
- */
-const FeatureFlags: NextPage = () => {
- const { featureFlagsManager, mounted, setFeatureFlag } = useFeatureFlags();
-
- if (!mounted) {
- return null;
- }
-
- return (
- <>
-
- Manage Feature Flags
-
-
-
Manage Feature Flags
-
-
-
- Status
- Feature Flag
- Actions
-
-
-
- {Object.entries(featureFlagsManager.featureFlags).map(
- ([featureName, enabled]) => (
-
-
- {enabled ? "Enabled" : "Disabled"}
-
- {featureName}
-
- setFeatureFlag(featureName, true)}
- type="button"
- >
- Enable
-
- setFeatureFlag(featureName, false)}
- type="button"
- >
- Disable
-
-
-
- ),
- )}
-
-
-
- >
- );
-};
-
-export default FeatureFlags;
diff --git a/frontend/src/pages/health.tsx b/frontend/src/pages/health.tsx
deleted file mode 100644
index efc1978b1..000000000
--- a/frontend/src/pages/health.tsx
+++ /dev/null
@@ -1,15 +0,0 @@
-import type { GetStaticProps, NextPage } from "next";
-
-import { serverSideTranslations } from "next-i18next/serverSideTranslations";
-import React from "react";
-
-const Health: NextPage = () => {
- return <>healthy>;
-};
-
-export const getStaticProps: GetStaticProps = async ({ locale }) => {
- const translations = await serverSideTranslations(locale ?? "en");
- return { props: { ...translations } };
-};
-
-export default Health;
diff --git a/frontend/src/pages/index.tsx b/frontend/src/pages/index.tsx
deleted file mode 100644
index a77846037..000000000
--- a/frontend/src/pages/index.tsx
+++ /dev/null
@@ -1,40 +0,0 @@
-import type { GetStaticProps, NextPage } from "next";
-
-import { useTranslation } from "next-i18next";
-import { serverSideTranslations } from "next-i18next/serverSideTranslations";
-
-import BetaAlert from "../components/BetaAlert";
-import PageSEO from "src/components/PageSEO";
-import Hero from "../components/Hero";
-import IndexGoalContent from "./content/IndexGoalContent";
-import ProcessAndResearchContent from "./content/ProcessAndResearchContent";
-
-const Home: NextPage = () => {
- const { t } = useTranslation("common");
- // TODO: Remove during move to app router and next-intl upgrade
- const beta_strings = {
- alert_title: t("Beta_alert.alert_title"),
- alert: t("Beta_alert.alert"),
- };
-
- return (
- <>
-
-
-
-
-
- >
- );
-};
-
-// Change this to GetServerSideProps if you're using server-side rendering
-export const getStaticProps: GetStaticProps = async ({ locale }) => {
- const translations = await serverSideTranslations(locale ?? "en");
- return { props: { ...translations } };
-};
-
-export default Home;
diff --git a/frontend/src/pages/newsletter/confirmation.tsx b/frontend/src/pages/newsletter/confirmation.tsx
deleted file mode 100644
index 3a9abc063..000000000
--- a/frontend/src/pages/newsletter/confirmation.tsx
+++ /dev/null
@@ -1,71 +0,0 @@
-import type { GetStaticProps, NextPage } from "next";
-import { NEWSLETTER_CONFIRMATION_CRUMBS } from "src/constants/breadcrumbs";
-
-import { Trans, useTranslation } from "next-i18next";
-import { serverSideTranslations } from "next-i18next/serverSideTranslations";
-import Link from "next/link";
-import { Grid, GridContainer } from "@trussworks/react-uswds";
-
-import Breadcrumbs from "src/components/Breadcrumbs";
-import PageSEO from "src/components/PageSEO";
-import BetaAlert from "../../components/BetaAlert";
-
-const NewsletterConfirmation: NextPage = () => {
- const { t } = useTranslation("common");
-
- // TODO: Remove during move to app router and next-intl upgrade
- const beta_strings = {
- alert_title: t("Beta_alert.alert_title"),
- alert: t("Beta_alert.alert"),
- };
-
- return (
- <>
-
-
-
-
-
-
- {t("Newsletter_confirmation.title")}
-
-
- {t("Newsletter_confirmation.intro")}
-
-
-
- {t("paragraph_1")}
-
-
-
- {t("Newsletter_confirmation.heading")}
-
-
- ,
- "research-link": ,
- }}
- />
-
-
-
-
-
-
- {t("Newsletter.disclaimer")}
-
-
- >
- );
-};
-
-// Change this to GetServerSideProps if you're using server-side rendering
-export const getStaticProps: GetStaticProps = async ({ locale }) => {
- const translations = await serverSideTranslations(locale ?? "en");
- return { props: { ...translations } };
-};
-
-export default NewsletterConfirmation;
diff --git a/frontend/src/pages/newsletter/index.tsx b/frontend/src/pages/newsletter/index.tsx
deleted file mode 100644
index c49e03f8c..000000000
--- a/frontend/src/pages/newsletter/index.tsx
+++ /dev/null
@@ -1,276 +0,0 @@
-import type { GetStaticProps, NextPage } from "next";
-import {
- NEWSLETTER_CONFIRMATION,
- NEWSLETTER_CRUMBS,
-} from "src/constants/breadcrumbs";
-import { ExternalRoutes } from "src/constants/routes";
-
-import { Trans, useTranslation } from "next-i18next";
-import { serverSideTranslations } from "next-i18next/serverSideTranslations";
-import { useRouter } from "next/router";
-import { useState } from "react";
-import {
- Alert,
- Button,
- ErrorMessage,
- FormGroup,
- Grid,
- GridContainer,
- Label,
- TextInput,
-} from "@trussworks/react-uswds";
-
-import Breadcrumbs from "src/components/Breadcrumbs";
-import PageSEO from "src/components/PageSEO";
-import BetaAlert from "../../components/BetaAlert";
-import { Data } from "../api/subscribe";
-
-const Newsletter: NextPage = () => {
- const { t } = useTranslation("common");
- // TODO: Remove during move to app router and next-intl upgrade
- const beta_strings = {
- alert_title: t("Beta_alert.alert_title"),
- alert: t("Beta_alert.alert"),
- };
- const router = useRouter();
- const email = ExternalRoutes.EMAIL_SIMPLERGRANTSGOV;
-
- const [formSubmitted, setFormSubmitted] = useState(false);
-
- const [formData, setFormData] = useState({
- name: "",
- LastName: "",
- email: "",
- hp: "",
- });
-
- const [sendyError, setSendyError] = useState("");
- const [erroredEmail, setErroredEmail] = useState("");
-
- const validateField = (fieldName: string) => {
- // returns the string "valid" or the i18n key for the error message
- const emailRegex =
- /^(\D)+(\w)*((\.(\w)+)?)+@(\D)+(\w)*((\.(\D)+(\w)*)+)?(\.)[a-z]{2,}$/g;
- if (fieldName === "name" && formData.name === "")
- return "Newsletter.errors.missing_name";
- if (fieldName === "email" && formData.email === "")
- return "Newsletter.errors.missing_email";
- if (fieldName === "email" && !emailRegex.test(formData.email))
- return "Newsletter.errors.invalid_email";
- return "valid";
- };
-
- const showError = (fieldName: string): boolean =>
- formSubmitted && validateField(fieldName) !== "valid";
-
- const handleInput = (e: React.ChangeEvent) => {
- const fieldName = e.target.name;
- const fieldValue = e.target.value;
-
- setFormData((prevState) => ({
- ...prevState,
- [fieldName]: fieldValue,
- }));
- };
-
- const submitForm = async () => {
- const formURL = "api/subscribe";
- if (validateField("email") !== "valid" || validateField("name") !== "valid")
- return;
-
- const res = await fetch(formURL, {
- method: "POST",
- body: JSON.stringify(formData),
- headers: {
- Accept: "application/json",
- },
- });
-
- if (res.ok) {
- const { message } = (await res.json()) as Data;
- await router.push({
- pathname: NEWSLETTER_CONFIRMATION.path,
- query: { sendy: message },
- });
- return setSendyError("");
- } else {
- const { error }: Data = (await res.json()) as Data;
- console.error("client error", error);
- setErroredEmail(formData.email);
- return setSendyError(error || "");
- }
- };
-
- const handleSubmit = (e: React.FormEvent) => {
- e.preventDefault();
- setFormSubmitted(true);
- submitForm().catch((err) => {
- console.error("catch block", err);
- });
- };
-
- return (
- <>
-
-
-
-
-
-
- {t("Newsletter.title")}
-
-
- {t("Newsletter.intro")}
-
-
-
- {t("Newsletter.paragraph_1")}
-
- ),
- li: ,
- }}
- />
-
-
-
-
-
-
-
- {t("disclaimer")}
-
- >
- );
-};
-
-// Change this to GetServerSideProps if you're using server-side rendering
-export const getStaticProps: GetStaticProps = async ({ locale }) => {
- const translations = await serverSideTranslations(locale ?? "en");
- return { props: { ...translations } };
-};
-
-export default Newsletter;
diff --git a/frontend/src/pages/newsletter/unsubscribe.tsx b/frontend/src/pages/newsletter/unsubscribe.tsx
deleted file mode 100644
index 8c25eca76..000000000
--- a/frontend/src/pages/newsletter/unsubscribe.tsx
+++ /dev/null
@@ -1,78 +0,0 @@
-import type { GetStaticProps, NextPage } from "next";
-import { NEWSLETTER_UNSUBSCRIBE_CRUMBS } from "src/constants/breadcrumbs";
-
-import { Trans, useTranslation } from "next-i18next";
-import { serverSideTranslations } from "next-i18next/serverSideTranslations";
-import Link from "next/link";
-import { Grid, GridContainer } from "@trussworks/react-uswds";
-
-import Breadcrumbs from "src/components/Breadcrumbs";
-import PageSEO from "src/components/PageSEO";
-import BetaAlert from "../../components/BetaAlert";
-
-const NewsletterUnsubscribe: NextPage = () => {
- const { t } = useTranslation("common");
- // TODO: Remove during move to app router and next-intl upgrade
- const beta_strings = {
- alert_title: t("Beta_alert.alert_title"),
- alert: t("Beta_alert.alert"),
- };
-
- return (
- <>
-
-
-
-
-
-
- {t("Newsletter_unsubscribe.title")}
-
-
- {t("Newsletter_unsubscribe.intro")}
-
-
-
-
- {t("Newsletter_unsubscribe.paragraph_1")}
-
-
- {t("Newsletter_unsubscribe.button_resub")}
-
-
-
-
- {t("Newsletter_unsubscribe.heading")}
-
-
- ,
- "research-link": ,
- }}
- />
-
-
-
-
-
-
- {t("Newsletter_unsubscribe.disclaimer")}
-
-
- >
- );
-};
-
-// Change this to GetServerSideProps if you're using server-side rendering
-export const getStaticProps: GetStaticProps = async ({ locale }) => {
- const translations = await serverSideTranslations(locale ?? "en");
- return { props: { ...translations } };
-};
-
-export default NewsletterUnsubscribe;
diff --git a/frontend/src/pages/process.tsx b/frontend/src/pages/process.tsx
deleted file mode 100644
index 6ebe98a6e..000000000
--- a/frontend/src/pages/process.tsx
+++ /dev/null
@@ -1,45 +0,0 @@
-import type { GetStaticProps, NextPage } from "next";
-import { PROCESS_CRUMBS } from "src/constants/breadcrumbs";
-
-import { useTranslation } from "next-i18next";
-import { serverSideTranslations } from "next-i18next/serverSideTranslations";
-
-import Breadcrumbs from "src/components/Breadcrumbs";
-import PageSEO from "src/components/PageSEO";
-import BetaAlert from "../components/BetaAlert";
-import ProcessContent from "./content/ProcessIntro";
-import ProcessInvolved from "./content/ProcessInvolved";
-import ProcessMilestones from "./content/ProcessMilestones";
-
-const Process: NextPage = () => {
- const { t } = useTranslation("common");
- // TODO: Remove during move to app router and next-intl upgrade
- const beta_strings = {
- alert_title: t("Beta_alert.alert_title"),
- alert: t("Beta_alert.alert"),
- };
-
- return (
- <>
-
-
-
-
-
-
- >
- );
-};
-
-// Change this to GetServerSideProps if you're using server-side rendering
-export const getStaticProps: GetStaticProps = async ({ locale }) => {
- const translations = await serverSideTranslations(locale ?? "en");
- return { props: { ...translations } };
-};
-
-export default Process;
diff --git a/frontend/src/pages/research.tsx b/frontend/src/pages/research.tsx
deleted file mode 100644
index 01d7c1de5..000000000
--- a/frontend/src/pages/research.tsx
+++ /dev/null
@@ -1,49 +0,0 @@
-import type { GetStaticProps, NextPage } from "next";
-import { RESEARCH_CRUMBS } from "src/constants/breadcrumbs";
-import ResearchIntro from "src/pages/content/ResearchIntro";
-
-import { useTranslation } from "next-i18next";
-import { serverSideTranslations } from "next-i18next/serverSideTranslations";
-
-import Breadcrumbs from "src/components/Breadcrumbs";
-import PageSEO from "src/components/PageSEO";
-import BetaAlert from "../components/BetaAlert";
-import ResearchArchetypes from "./content/ResearchArchetypes";
-import ResearchImpact from "./content/ResearchImpact";
-import ResearchMethodology from "./content/ResearchMethodology";
-import ResearchThemes from "./content/ResearchThemes";
-
-const Research: NextPage = () => {
- const { t } = useTranslation("common");
- // TODO: Remove during move to app router and next-intl upgrade
- const beta_strings = {
- alert_title: t("Beta_alert.alert_title"),
- alert: t("Beta_alert.alert"),
- };
-
- return (
- <>
-
-
-
-
-
-
-
-
-
-
- >
- );
-};
-
-// Change this to GetServerSideProps if you're using server-side rendering
-export const getStaticProps: GetStaticProps = async ({ locale }) => {
- const translations = await serverSideTranslations(locale ?? "en");
- return { props: { ...translations } };
-};
-
-export default Research;
diff --git a/frontend/stories/components/FundingContent.stories.tsx b/frontend/stories/components/FundingContent.stories.tsx
index 95465c0c1..7b00f3ad8 100644
--- a/frontend/stories/components/FundingContent.stories.tsx
+++ b/frontend/stories/components/FundingContent.stories.tsx
@@ -1,5 +1,5 @@
import { Meta } from "@storybook/react";
-import FundingContent from "src/pages/content/FundingContent";
+import FundingContent from "src/components/content/FundingContent";
const meta: Meta = {
title: "Components/Content/Funding Content",
diff --git a/frontend/stories/components/GoalContent.stories.tsx b/frontend/stories/components/GoalContent.stories.tsx
index 8d581a32b..0606184c5 100644
--- a/frontend/stories/components/GoalContent.stories.tsx
+++ b/frontend/stories/components/GoalContent.stories.tsx
@@ -1,5 +1,5 @@
import { Meta } from "@storybook/react";
-import GoalContent from "src/pages/content/IndexGoalContent";
+import GoalContent from "src/components/content/IndexGoalContent";
const meta: Meta = {
title: "Components/Content/Goal Content",
diff --git a/frontend/stories/components/ProcessContent.stories.tsx b/frontend/stories/components/ProcessContent.stories.tsx
index 736eea64b..4557b76c5 100644
--- a/frontend/stories/components/ProcessContent.stories.tsx
+++ b/frontend/stories/components/ProcessContent.stories.tsx
@@ -1,5 +1,5 @@
import { Meta } from "@storybook/react";
-import ProcessContent from "src/pages/content/ProcessIntro";
+import ProcessContent from "src/app/[locale]/process/ProcessIntro";
const meta: Meta = {
title: "Components/Content/Process Content",
diff --git a/frontend/stories/components/ReaserchImpact.stories.tsx b/frontend/stories/components/ReaserchImpact.stories.tsx
index 4d9fb9e4e..5ec6e523a 100644
--- a/frontend/stories/components/ReaserchImpact.stories.tsx
+++ b/frontend/stories/components/ReaserchImpact.stories.tsx
@@ -1,5 +1,5 @@
import { Meta } from "@storybook/react";
-import ResearchImpact from "src/pages/content/ResearchImpact";
+import ResearchImpact from "src/app/[locale]/research/ResearchImpact";
const meta: Meta = {
title: "Components/Content/Research Impact Content",
diff --git a/frontend/stories/components/ReaserchIntro.stories.tsx b/frontend/stories/components/ReaserchIntro.stories.tsx
index 1feaa669c..4510f6708 100644
--- a/frontend/stories/components/ReaserchIntro.stories.tsx
+++ b/frontend/stories/components/ReaserchIntro.stories.tsx
@@ -1,5 +1,5 @@
import { Meta } from "@storybook/react";
-import ResearchIntro from "src/pages/content/ResearchIntro";
+import ResearchIntro from "src/app/[locale]/research/ResearchIntro";
const meta: Meta = {
title: "Components/Content/Research Intro Content",
diff --git a/frontend/stories/components/ReaserchThemes.stories.tsx b/frontend/stories/components/ReaserchThemes.stories.tsx
index e6da8670d..1eb108e4a 100644
--- a/frontend/stories/components/ReaserchThemes.stories.tsx
+++ b/frontend/stories/components/ReaserchThemes.stories.tsx
@@ -1,5 +1,5 @@
import { Meta } from "@storybook/react";
-import ResearchThemes from "src/pages/content/ResearchThemes";
+import ResearchThemes from "src/app/[locale]/research/ResearchThemes";
const meta: Meta = {
title: "Components/Content/Research Themes Content",
diff --git a/frontend/stories/components/ResearchArchetypes.stories.tsx b/frontend/stories/components/ResearchArchetypes.stories.tsx
index 8786dc61d..834ad6183 100644
--- a/frontend/stories/components/ResearchArchetypes.stories.tsx
+++ b/frontend/stories/components/ResearchArchetypes.stories.tsx
@@ -1,5 +1,5 @@
import { Meta } from "@storybook/react";
-import ResearchArchetypes from "src/pages/content/ResearchArchetypes";
+import ResearchArchetypes from "src/app/[locale]/research/ResearchArchetypes";
const meta: Meta = {
title: "Components/Content/Research Archetypes Content",
diff --git a/frontend/stories/components/ResearchMethodology.stories.tsx b/frontend/stories/components/ResearchMethodology.stories.tsx
index 47f065d41..0a54bcdee 100644
--- a/frontend/stories/components/ResearchMethodology.stories.tsx
+++ b/frontend/stories/components/ResearchMethodology.stories.tsx
@@ -1,5 +1,5 @@
import { Meta } from "@storybook/react";
-import ResearchMethodology from "src/pages/content/ResearchMethodology";
+import ResearchMethodology from "src/app/[locale]/research/ResearchMethodology";
const meta: Meta = {
title: "Components/Content/Research Methodology Content",
diff --git a/frontend/stories/components/WtGIContent.stories.tsx b/frontend/stories/components/WtGIContent.stories.tsx
deleted file mode 100644
index 1c76a0849..000000000
--- a/frontend/stories/components/WtGIContent.stories.tsx
+++ /dev/null
@@ -1,17 +0,0 @@
-import { Meta } from "@storybook/react";
-import WtGIContent from "src/pages/content/WtGIContent";
-
-const meta: Meta = {
- title: "Components/Content/Ways to Get Involved Content",
- component: WtGIContent,
-};
-export default meta;
-
-export const Default = {
- parameters: {
- design: {
- type: "figma",
- url: "https://www.figma.com/file/lpKPdyTyLJB5JArxhGjJnE/beta.grants.gov?type=design&node-id=14-1125&mode=design&t=nSr4QJesyQb2OH30-4",
- },
- },
-};
diff --git a/frontend/stories/pages/404.stories.tsx b/frontend/stories/pages/404.stories.tsx
index b3f1fc877..ee03b30f5 100644
--- a/frontend/stories/pages/404.stories.tsx
+++ b/frontend/stories/pages/404.stories.tsx
@@ -1,5 +1,5 @@
import { Meta } from "@storybook/react";
-import PageNotFound from "src/pages/404";
+import PageNotFound from "src/app/not-found";
const meta: Meta = {
title: "Pages/404",
diff --git a/frontend/stories/pages/Index.stories.tsx b/frontend/stories/pages/Index.stories.tsx
index 669c8741e..4afb9c965 100644
--- a/frontend/stories/pages/Index.stories.tsx
+++ b/frontend/stories/pages/Index.stories.tsx
@@ -1,5 +1,5 @@
import { Meta } from "@storybook/react";
-import Index from "src/pages/index";
+import Index from "src/app/[locale]/page";
const meta: Meta = {
title: "Pages/Home",
diff --git a/frontend/stories/pages/process.stories.tsx b/frontend/stories/pages/process.stories.tsx
index 114658618..f3776d62e 100644
--- a/frontend/stories/pages/process.stories.tsx
+++ b/frontend/stories/pages/process.stories.tsx
@@ -1,5 +1,5 @@
import { Meta } from "@storybook/react";
-import Process from "src/pages/process";
+import Process from "src/app/[locale]/process/page";
const meta: Meta = {
title: "Pages/Process",
diff --git a/frontend/stories/pages/research.stories.tsx b/frontend/stories/pages/research.stories.tsx
index 0d511e6cb..00801f8d5 100644
--- a/frontend/stories/pages/research.stories.tsx
+++ b/frontend/stories/pages/research.stories.tsx
@@ -1,5 +1,5 @@
import { Meta } from "@storybook/react";
-import Research from "src/pages/research";
+import Research from "src/app/[locale]/research/page";
const meta: Meta = {
title: "Pages/Research",
diff --git a/frontend/stories/pages/search.stories.tsx b/frontend/stories/pages/search.stories.tsx
index e278ce84e..533c6f483 100644
--- a/frontend/stories/pages/search.stories.tsx
+++ b/frontend/stories/pages/search.stories.tsx
@@ -1,5 +1,5 @@
import { Meta } from "@storybook/react";
-import Search from "../../src/app/search/page";
+import Search from "../../src/app/[locale]/search/page";
const meta: Meta = {
title: "Pages/Search",
diff --git a/frontend/tests/components/AppLayout.test.tsx b/frontend/tests/components/AppLayout.test.tsx
deleted file mode 100644
index 76ee1a76b..000000000
--- a/frontend/tests/components/AppLayout.test.tsx
+++ /dev/null
@@ -1,29 +0,0 @@
-import { render, screen } from "tests/react-utils";
-import { axe } from "jest-axe";
-
-import AppLayout from "src/components/AppLayout";
-
-describe("AppLayout", () => {
- it("renders children in main section", () => {
- render(
-
- child
- ,
- );
-
- const header = screen.getByRole("heading", { name: /child/i, level: 1 });
-
- expect(header).toBeInTheDocument();
- });
-
- it("passes accessibility scan", async () => {
- const { container } = render(
-
- child
- ,
- );
- const results = await axe(container);
-
- expect(results).toHaveNoViolations();
- });
-});
diff --git a/frontend/tests/components/BetaAlert.test.tsx b/frontend/tests/components/BetaAlert.test.tsx
index 6f2f4635b..7227456f4 100644
--- a/frontend/tests/components/BetaAlert.test.tsx
+++ b/frontend/tests/components/BetaAlert.test.tsx
@@ -1,17 +1,10 @@
-import { render, screen } from "@testing-library/react";
+import { render, screen } from "tests/react-utils";
import BetaAlert from "src/components/BetaAlert";
-const beta_strings = {
- alert_title:
- "Attention! Go to www.grants.gov to search and apply for grants.",
- alert:
- "Simpler.Grants.gov is a work in progress. Thank you for your patience as we build this new website.",
-};
-
describe("BetaAlert", () => {
it("Renders without errors", () => {
- render( );
+ render( );
const hero = screen.getByTestId("beta-alert");
expect(hero).toBeInTheDocument();
});
diff --git a/frontend/tests/components/Footer.test.tsx b/frontend/tests/components/Footer.test.tsx
index fd2162133..d0c9d4885 100644
--- a/frontend/tests/components/Footer.test.tsx
+++ b/frontend/tests/components/Footer.test.tsx
@@ -1,31 +1,17 @@
-import { render, screen } from "@testing-library/react";
+import { render, screen } from "tests/react-utils";
import { ExternalRoutes } from "src/constants/routes";
import Footer from "src/components/Footer";
-const footer_strings = {
- agency_name: "Grants.gov",
- agency_contact_center: "Grants.gov Program Management Office",
- telephone: "1-877-696-6775",
- return_to_top: "Return to top",
- link_twitter: "Twitter",
- link_youtube: "YouTube",
- link_github: "Github",
- link_rss: "RSS",
- link_newsletter: "Newsletter",
- link_blog: "Blog",
- logo_alt: "Grants.gov logo",
-};
-
describe("Footer", () => {
it("Renders without errors", () => {
- render();
+ render();
const footer = screen.getByTestId("footer");
expect(footer).toBeInTheDocument();
});
it("Renders social links", () => {
- render();
+ render();
const twitter = screen.getByTitle("Twitter");
const youtube = screen.getByTitle("YouTube");
diff --git a/frontend/tests/components/FullWidthAlert.test.tsx b/frontend/tests/components/FullWidthAlert.test.tsx
index fa557ed5d..4be8633af 100644
--- a/frontend/tests/components/FullWidthAlert.test.tsx
+++ b/frontend/tests/components/FullWidthAlert.test.tsx
@@ -1,4 +1,4 @@
-import { render, screen } from "@testing-library/react";
+import { render, screen } from "tests/react-utils";
import FullWidthAlert from "src/components/FullWidthAlert";
diff --git a/frontend/tests/components/FundingContent.test.tsx b/frontend/tests/components/FundingContent.test.tsx
index 2f52a21d2..79c6db0c0 100644
--- a/frontend/tests/components/FundingContent.test.tsx
+++ b/frontend/tests/components/FundingContent.test.tsx
@@ -1,5 +1,5 @@
-import { render, screen } from "@testing-library/react";
-import FundingContent from "src/pages/content/FundingContent";
+import { render, screen } from "tests/react-utils";
+import FundingContent from "src/components/content/FundingContent";
describe("Funding Content", () => {
it("Renders without errors", () => {
diff --git a/frontend/tests/components/GoalContent.test.tsx b/frontend/tests/components/GoalContent.test.tsx
index 96127f5f6..20852f2fe 100644
--- a/frontend/tests/components/GoalContent.test.tsx
+++ b/frontend/tests/components/GoalContent.test.tsx
@@ -1,5 +1,5 @@
-import { render, screen } from "@testing-library/react";
-import GoalContent from "src/pages/content/IndexGoalContent";
+import { render, screen } from "tests/react-utils";
+import GoalContent from "src/components/content/IndexGoalContent";
describe("Goal Content", () => {
it("Renders without errors", () => {
diff --git a/frontend/tests/components/GrantsIdentifier.test.tsx b/frontend/tests/components/GrantsIdentifier.test.tsx
index fea534fe7..45aaaa17b 100644
--- a/frontend/tests/components/GrantsIdentifier.test.tsx
+++ b/frontend/tests/components/GrantsIdentifier.test.tsx
@@ -1,25 +1,10 @@
-import { render, screen } from "@testing-library/react";
+import { render, screen } from "tests/react-utils";
import GrantsIdentifier from "src/components/GrantsIdentifier";
-const identifier_strings = {
- identity:
- "An official website of the U.S. Department of Health and Human Services ",
- gov_content:
- "Looking for U.S. government information and services? Visit USA.gov ",
- link_about: "About HHS",
- link_accessibility: "Accessibility support",
- link_foia: "FOIA requests",
- link_fear: "EEO/No Fear Act",
- link_ig: "Office of the Inspector General",
- link_performance: "Performance reports",
- link_privacy: "Privacy Policy",
- logo_alt: "HHS logo",
-};
-
describe("Identifier section", () => {
it("Renders without errors", () => {
- render( );
+ render( );
const identifier = screen.getByTestId("identifier");
expect(identifier).toBeInTheDocument();
});
diff --git a/frontend/tests/components/Header.test.tsx b/frontend/tests/components/Header.test.tsx
index 0f5e3781f..2417a81d2 100644
--- a/frontend/tests/components/Header.test.tsx
+++ b/frontend/tests/components/Header.test.tsx
@@ -1,17 +1,8 @@
-import { render, screen } from "@testing-library/react";
+import { render, screen } from "tests/react-utils";
import userEvent from "@testing-library/user-event";
import Header from "src/components/Header";
-const header_strings = {
- nav_link_home: "Home",
- nav_link_process: "Process",
- nav_link_research: "Research",
- nav_link_newsletter: "Newsletter",
- nav_menu_toggle: "Menu",
- title: "Simpler.Grants.gov",
-};
-
const props = {
logoPath: "/img/logo.svg",
primaryLinks: [
@@ -24,7 +15,6 @@ const props = {
href: "/health",
},
],
- header_strings,
};
describe("Header", () => {
@@ -50,7 +40,7 @@ describe("Header", () => {
});
it("displays expandable government banner", async () => {
- render();
+ render();
const govBanner = screen.getByRole("button", { expanded: false });
diff --git a/frontend/tests/components/Hero.test.tsx b/frontend/tests/components/Hero.test.tsx
index d124e0fde..75da0ac86 100644
--- a/frontend/tests/components/Hero.test.tsx
+++ b/frontend/tests/components/Hero.test.tsx
@@ -1,4 +1,4 @@
-import { render, screen } from "@testing-library/react";
+import { render, screen } from "tests/react-utils";
import Hero from "src/components/Hero";
diff --git a/frontend/tests/components/Layout.test.tsx b/frontend/tests/components/Layout.test.tsx
index 85b61018c..e9d06997f 100644
--- a/frontend/tests/components/Layout.test.tsx
+++ b/frontend/tests/components/Layout.test.tsx
@@ -1,12 +1,12 @@
-import { render, screen } from "@testing-library/react";
+import { render, screen } from "tests/react-utils";
+import { axe } from "jest-axe";
import Layout from "src/components/Layout";
-import { axe } from "jest-axe";
-describe("Layout", () => {
+describe("AppLayout", () => {
it("renders children in main section", () => {
render(
-
+
child
,
);
@@ -18,7 +18,7 @@ describe("Layout", () => {
it("passes accessibility scan", async () => {
const { container } = render(
-
+
child
,
);
diff --git a/frontend/tests/components/ProcessAndResearchContent.test.tsx b/frontend/tests/components/ProcessAndResearchContent.test.tsx
index 3c51296b6..12b1293f6 100644
--- a/frontend/tests/components/ProcessAndResearchContent.test.tsx
+++ b/frontend/tests/components/ProcessAndResearchContent.test.tsx
@@ -1,5 +1,5 @@
-import { render, screen } from "@testing-library/react";
-import ProcessAndResearchContent from "src/pages/content/ProcessAndResearchContent";
+import { render, screen } from "tests/react-utils";
+import ProcessAndResearchContent from "src/components/content/ProcessAndResearchContent";
describe("Process Content", () => {
it("Renders without errors", () => {
diff --git a/frontend/tests/components/ProcessIntro.test.tsx b/frontend/tests/components/ProcessIntro.test.tsx
index 9febcf13d..d2853aac9 100644
--- a/frontend/tests/components/ProcessIntro.test.tsx
+++ b/frontend/tests/components/ProcessIntro.test.tsx
@@ -1,5 +1,5 @@
-import { render, screen } from "@testing-library/react";
-import ProcessIntro from "src/pages/content/ProcessIntro";
+import { render, screen } from "tests/react-utils";
+import ProcessIntro from "src/app/[locale]/process/ProcessIntro";
describe("Process Content", () => {
it("Renders without errors", () => {
diff --git a/frontend/tests/components/ProcessInvolved.test.tsx b/frontend/tests/components/ProcessInvolved.test.tsx
index 9ecd537db..14e6ca9c1 100644
--- a/frontend/tests/components/ProcessInvolved.test.tsx
+++ b/frontend/tests/components/ProcessInvolved.test.tsx
@@ -1,5 +1,5 @@
-import { render, screen } from "@testing-library/react";
-import ProcessInvolved from "src/pages/content/ProcessInvolved";
+import { render, screen } from "tests/react-utils";
+import ProcessInvolved from "src/app/[locale]/process/ProcessInvolved";
describe("Process Content", () => {
it("Renders without errors", () => {
diff --git a/frontend/tests/components/ProcessMilestones.test.tsx b/frontend/tests/components/ProcessMilestones.test.tsx
index 9fc4155f4..2b4c2214c 100644
--- a/frontend/tests/components/ProcessMilestones.test.tsx
+++ b/frontend/tests/components/ProcessMilestones.test.tsx
@@ -1,5 +1,5 @@
-import { render, screen } from "@testing-library/react";
-import ProcessMilestones from "src/pages/content/ProcessMilestones";
+import { render, screen } from "tests/react-utils";
+import ProcessMilestones from "src/app/[locale]/process/ProcessMilestones";
describe("Process Content", () => {
it("Renders without errors", () => {
diff --git a/frontend/tests/components/ResearchArchetypes.test.tsx b/frontend/tests/components/ResearchArchetypes.test.tsx
index 037fe8bbd..cfcb4bd7b 100644
--- a/frontend/tests/components/ResearchArchetypes.test.tsx
+++ b/frontend/tests/components/ResearchArchetypes.test.tsx
@@ -1,5 +1,5 @@
-import { render, screen } from "@testing-library/react";
-import ResearchArchetypes from "src/pages/content/ResearchArchetypes";
+import { render, screen } from "tests/react-utils";
+import ResearchArchetypes from "src/app/[locale]/research/ResearchArchetypes";
describe("Research Content", () => {
it("Renders without errors", () => {
diff --git a/frontend/tests/components/ResearchImpact.test.tsx b/frontend/tests/components/ResearchImpact.test.tsx
index 5ca497b15..ec88d2664 100644
--- a/frontend/tests/components/ResearchImpact.test.tsx
+++ b/frontend/tests/components/ResearchImpact.test.tsx
@@ -1,5 +1,5 @@
-import { render, screen } from "@testing-library/react";
-import ResearchImpact from "src/pages/content/ResearchImpact";
+import { render, screen } from "tests/react-utils";
+import ResearchImpact from "src/app/[locale]/research/ResearchImpact";
describe("Research Content", () => {
it("Renders without errors", () => {
diff --git a/frontend/tests/components/ResearchIntro.test.tsx b/frontend/tests/components/ResearchIntro.test.tsx
index 68c471022..f7d1f0f69 100644
--- a/frontend/tests/components/ResearchIntro.test.tsx
+++ b/frontend/tests/components/ResearchIntro.test.tsx
@@ -1,5 +1,5 @@
-import { render, screen } from "@testing-library/react";
-import ResearchIntro from "src/pages/content/ResearchIntro";
+import { render, screen } from "tests/react-utils";
+import ResearchIntro from "src/app/[locale]/research/ResearchIntro";
describe("Research Content", () => {
it("Renders without errors", () => {
diff --git a/frontend/tests/components/ResearchMethodology.test.tsx b/frontend/tests/components/ResearchMethodology.test.tsx
index 087873455..388376570 100644
--- a/frontend/tests/components/ResearchMethodology.test.tsx
+++ b/frontend/tests/components/ResearchMethodology.test.tsx
@@ -1,5 +1,5 @@
-import { render, screen } from "@testing-library/react";
-import ResearchMethodology from "src/pages/content/ResearchMethodology";
+import { render, screen } from "tests/react-utils";
+import ResearchMethodology from "src/app/[locale]/research/ResearchMethodology";
describe("Research Content", () => {
it("Renders without errors", () => {
diff --git a/frontend/tests/components/ResearchThemes.test.tsx b/frontend/tests/components/ResearchThemes.test.tsx
index dbd44bc94..6d7037dd2 100644
--- a/frontend/tests/components/ResearchThemes.test.tsx
+++ b/frontend/tests/components/ResearchThemes.test.tsx
@@ -1,5 +1,5 @@
-import { render, screen } from "@testing-library/react";
-import ResearchThemes from "src/pages/content/ResearchThemes";
+import { render, screen } from "tests/react-utils";
+import ResearchThemes from "src/app/[locale]/research/ResearchThemes";
describe("Research Content", () => {
it("Renders without errors", () => {
diff --git a/frontend/tests/components/USWDSIcon.test.tsx b/frontend/tests/components/USWDSIcon.test.tsx
new file mode 100644
index 000000000..dfb010693
--- /dev/null
+++ b/frontend/tests/components/USWDSIcon.test.tsx
@@ -0,0 +1,12 @@
+import { render, screen } from "tests/react-utils";
+
+import { USWDSIcon } from "src/components/USWDSIcon";
+
+describe("USWDSIcon", () => {
+ it("Renders without errors", () => {
+ render( );
+ const icon = screen.getByRole("img", { hidden: true });
+ expect(icon).toBeInTheDocument();
+ expect(icon).toHaveClass("usa-icon");
+ });
+});
diff --git a/frontend/tests/components/WtGIContent.test.tsx b/frontend/tests/components/WtGIContent.test.tsx
deleted file mode 100644
index c3600fc97..000000000
--- a/frontend/tests/components/WtGIContent.test.tsx
+++ /dev/null
@@ -1,10 +0,0 @@
-import { render, screen } from "@testing-library/react";
-import WtGIContent from "src/pages/content/WtGIContent";
-
-describe("Ways to get involved", () => {
- it("Renders without errors", () => {
- render( );
- const wtgi = screen.getByTestId("wtgi-content");
- expect(wtgi).toBeInTheDocument();
- });
-});
diff --git a/frontend/tests/e2e/404.spec.ts b/frontend/tests/e2e/404.spec.ts
new file mode 100644
index 000000000..5335c4b8e
--- /dev/null
+++ b/frontend/tests/e2e/404.spec.ts
@@ -0,0 +1,20 @@
+/* eslint-disable testing-library/prefer-screen-queries */
+import { test, expect } from "@playwright/test";
+
+test.beforeEach(async ({ page }) => {
+ await page.goto("/imnothere");
+});
+
+test.afterEach(async ({ context }) => {
+ await context.close();
+});
+
+test("has title", async ({ page }) => {
+ await expect(page).toHaveTitle("Oops! Page Not Found");
+});
+
+test("can view the home button", async ({ page }) => {
+ await expect(page.getByRole("link", { name: "Return Home" })).toHaveText(
+ "Return Home",
+ );
+});
diff --git a/frontend/tests/e2e/newsletter.spec.ts b/frontend/tests/e2e/newsletter.spec.ts
index 0cf4c7f3f..51adf9e6e 100644
--- a/frontend/tests/e2e/newsletter.spec.ts
+++ b/frontend/tests/e2e/newsletter.spec.ts
@@ -1,5 +1,5 @@
/* eslint-disable testing-library/prefer-screen-queries */
-import { test, expect } from "@playwright/test";
+import { expect, test } from "@playwright/test";
test.beforeEach(async ({ page }) => {
await page.goto("/newsletter");
diff --git a/frontend/tests/e2e/search/search.spec.ts b/frontend/tests/e2e/search/search.spec.ts
index 85904bc6a..e6c69f638 100644
--- a/frontend/tests/e2e/search/search.spec.ts
+++ b/frontend/tests/e2e/search/search.spec.ts
@@ -202,6 +202,8 @@ test.describe("Search page tests", () => {
test("last result becomes first result when flipping sort order", async ({
page,
}) => {
+ await selectSortBy(page, "opportunityTitleDesc");
+
await clickLastPaginationPage(page);
await waitForSearchResultsInitialLoad(page);
diff --git a/frontend/tests/errors.test.ts b/frontend/tests/errors.test.ts
index 76dca5809..56f677d20 100644
--- a/frontend/tests/errors.test.ts
+++ b/frontend/tests/errors.test.ts
@@ -1,5 +1,5 @@
import { BadRequestError } from "src/errors";
-import { ParsedError } from "src/app/search/error";
+import { ParsedError } from "src/app/[locale]/search/error";
import { QueryParamData } from "src/services/search/searchfetcher/SearchFetcher";
describe("BadRequestError", () => {
diff --git a/frontend/tests/jest-i18n.ts b/frontend/tests/jest-i18n.ts
deleted file mode 100644
index 8e786b417..000000000
--- a/frontend/tests/jest-i18n.ts
+++ /dev/null
@@ -1,53 +0,0 @@
-/**
- * @file Setup internationalization for tests so snapshots and queries reference the correct translations
- */
-import fs from "fs";
-import path from "path";
-
-// @ts-expect-error - Config file has to be .js
-import i18nConfig from "../next-i18next.config";
-import i18n, { InitOptions } from "i18next";
-import { initReactI18next } from "react-i18next";
-
-const locales = i18nConfig.i18n.locales;
-
-/**
- * Load all of the locales into a single object. A server isn't running for our tests,
- * so we can't load these static assets using HTTP requests like in Storybook.
- * https://www.i18next.com/how-to/add-or-load-translations
- */
-export const getResources = () => {
- const resources: InitOptions["resources"] = {};
-
- locales.forEach((locale: string) => {
- resources[locale] = {};
-
- const namespaces = fs
- .readdirSync(path.resolve(__dirname, `../public/locales/${locale}`))
- .map((file) => file.replace(/\.json$/, ""));
-
- namespaces.forEach((namespace) => {
- const namespacePath = `../public/locales/${locale}/${namespace}`;
- // eslint-disable-next-line
- resources[locale][namespace] = require(namespacePath);
- });
-
- return resources;
- });
-
- return resources;
-};
-
-i18n
- .use(initReactI18next)
- .init({
- ...i18nConfig,
- resources: getResources(),
- })
- .catch((err) => {
- throw err;
- });
-
-// Export i18n so tests can manually set the language with:
-// i18n.changeLanguage('es')
-export default i18n;
diff --git a/frontend/tests/pages/404.test.tsx b/frontend/tests/pages/404.test.tsx
deleted file mode 100644
index c1f99cf22..000000000
--- a/frontend/tests/pages/404.test.tsx
+++ /dev/null
@@ -1,27 +0,0 @@
-import { render, screen, waitFor } from "@testing-library/react";
-import { axe } from "jest-axe";
-import PageNotFound from "src/pages/404";
-
-describe("PageNotFound", () => {
- it("renders alert with grants.gov link", () => {
- render( );
-
- const alert = screen.queryByTestId("alert");
-
- expect(alert).toBeInTheDocument();
- });
-
- it("links back to the home page", () => {
- render( );
- const link = screen.getByRole("link", { name: /Return Home/i });
-
- expect(link).toBeInTheDocument();
- });
-
- it("passes accessibility scan", async () => {
- const { container } = render( );
- const results = await waitFor(() => axe(container));
-
- expect(results).toHaveNoViolations();
- });
-});
diff --git a/frontend/tests/pages/dev/feature-flags.test.tsx b/frontend/tests/pages/dev/feature-flags.test.tsx
index 541aa9e62..9b6a2774a 100644
--- a/frontend/tests/pages/dev/feature-flags.test.tsx
+++ b/frontend/tests/pages/dev/feature-flags.test.tsx
@@ -3,9 +3,9 @@
*/
import { fireEvent, render, screen } from "@testing-library/react";
-import FeatureFlags, { getStaticProps } from "src/pages/dev/feature-flags";
+import FeatureFlags from "src/app/[locale]/dev/feature-flags/page";
-import { mockDefaultFeatureFlags } from "../../utils/FeatureFlagTestUtils";
+import { mockDefaultFeatureFlags } from "tests/utils/FeatureFlagTestUtils";
describe("Feature flags page", () => {
const MOCK_DEFAULT_FEATURE_FLAGS = {
@@ -43,12 +43,4 @@ describe("Feature flags page", () => {
expect(statusElement).toHaveTextContent("Enabled");
});
});
-
- it("is disabled in production", () => {
- expect(getStaticProps().notFound).toBeUndefined();
- const oldEnv = { ...process.env };
- process.env.NEXT_PUBLIC_ENVIRONMENT = "prod";
- expect(getStaticProps().notFound).toBe(true);
- process.env = oldEnv; // Restore old environment
- });
});
diff --git a/frontend/tests/pages/index.test.tsx b/frontend/tests/pages/index.test.tsx
index 67e1280f6..6924cbbd0 100644
--- a/frontend/tests/pages/index.test.tsx
+++ b/frontend/tests/pages/index.test.tsx
@@ -1,6 +1,7 @@
-import { render, screen, waitFor } from "@testing-library/react";
+import { waitFor, screen, render } from "tests/react-utils";
+
import { axe } from "jest-axe";
-import Index from "src/pages/index";
+import Index from "src/app/[locale]/page";
describe("Index", () => {
it("renders alert with grants.gov link", () => {
diff --git a/frontend/tests/pages/newsletter/confirmation.test.tsx b/frontend/tests/pages/newsletter/confirmation.test.tsx
index 16c9fc1d0..7324e9c7c 100644
--- a/frontend/tests/pages/newsletter/confirmation.test.tsx
+++ b/frontend/tests/pages/newsletter/confirmation.test.tsx
@@ -1,6 +1,6 @@
-import { render, waitFor } from "@testing-library/react";
+import { render, waitFor } from "tests/react-utils";
import { axe } from "jest-axe";
-import NewsletterConfirmation from "src/pages/newsletter/confirmation";
+import NewsletterConfirmation from "src/app/[locale]/newsletter/confirmation/page";
describe("Newsletter", () => {
it("passes accessibility scan", async () => {
diff --git a/frontend/tests/pages/newsletter/index.test.tsx b/frontend/tests/pages/newsletter/index.test.tsx
index 3df1b12ab..9f430ef2b 100644
--- a/frontend/tests/pages/newsletter/index.test.tsx
+++ b/frontend/tests/pages/newsletter/index.test.tsx
@@ -1,13 +1,12 @@
-import { fireEvent, render, screen, waitFor } from "@testing-library/react";
+import { fireEvent, render, screen, waitFor } from "tests/react-utils";
+
import userEvent from "@testing-library/user-event";
import { axe } from "jest-axe";
-import Newsletter from "src/pages/newsletter";
+import Newsletter from "src/app/[locale]/newsletter/page";
-import { useRouter } from "next/router";
+import { useRouter } from "next/navigation";
-jest.mock("next/router", () => ({
- useRouter: jest.fn(),
-}));
+jest.mock("next/navigation");
describe("Newsletter", () => {
it("renders signup form with a submit button", () => {
@@ -44,10 +43,9 @@ describe("Newsletter", () => {
// Wait for the form submission
await waitFor(() => {
- expect(mockRouter.push).toHaveBeenCalledWith({
- pathname: "/newsletter/confirmation/",
- query: { sendy: "Success" },
- });
+ expect(mockRouter.push).toHaveBeenCalledWith(
+ "/newsletter/confirmation/?sendy=Success",
+ );
});
});
diff --git a/frontend/tests/pages/newsletter/unsubscribe.test.tsx b/frontend/tests/pages/newsletter/unsubscribe.test.tsx
index d9b0c06ac..b544f941f 100644
--- a/frontend/tests/pages/newsletter/unsubscribe.test.tsx
+++ b/frontend/tests/pages/newsletter/unsubscribe.test.tsx
@@ -1,6 +1,6 @@
-import { render, waitFor } from "@testing-library/react";
+import { render, waitFor } from "tests/react-utils";
import { axe } from "jest-axe";
-import NewsletterUnsubscribe from "src/pages/newsletter/unsubscribe";
+import NewsletterUnsubscribe from "src/app/[locale]/newsletter/unsubscribe/page";
describe("Newsletter", () => {
it("passes accessibility scan", async () => {
diff --git a/frontend/tests/pages/process.test.tsx b/frontend/tests/pages/process.test.tsx
index 50070a6dd..bd9d43929 100644
--- a/frontend/tests/pages/process.test.tsx
+++ b/frontend/tests/pages/process.test.tsx
@@ -1,6 +1,7 @@
-import { render, screen, waitFor } from "@testing-library/react";
+import { render, screen, waitFor } from "tests/react-utils";
+
import { axe } from "jest-axe";
-import Process from "src/pages/process";
+import Process from "src/app/[locale]/process/page";
describe("Process", () => {
it("renders alert with grants.gov link", () => {
diff --git a/frontend/tests/pages/research.test.tsx b/frontend/tests/pages/research.test.tsx
index 3b3035689..c4b55fed6 100644
--- a/frontend/tests/pages/research.test.tsx
+++ b/frontend/tests/pages/research.test.tsx
@@ -1,6 +1,7 @@
-import { render, screen, waitFor } from "@testing-library/react";
+import { render, screen, waitFor } from "tests/react-utils";
+
import { axe } from "jest-axe";
-import Research from "src/pages/research";
+import Research from "src/app/[locale]/research/page";
describe("Research", () => {
it("renders alert with grants.gov link", () => {
diff --git a/frontend/tests/playwright.config.ts b/frontend/tests/playwright.config.ts
index 9d7ddb4c0..37a0f238c 100644
--- a/frontend/tests/playwright.config.ts
+++ b/frontend/tests/playwright.config.ts
@@ -10,6 +10,7 @@ import { defineConfig, devices } from "@playwright/test";
* See https://playwright.dev/docs/test-configuration.
*/
export default defineConfig({
+ timeout: 20000,
testDir: "./e2e",
/* Run tests in files in parallel */
fullyParallel: true,
diff --git a/frontend/tsconfig.json b/frontend/tsconfig.json
index dc547387b..51f75fe3d 100644
--- a/frontend/tsconfig.json
+++ b/frontend/tsconfig.json
@@ -36,6 +36,7 @@
"**/*.ts",
"**/*.tsx",
"__mocks__/styleMock.js",
+ ".storybook/**/*",
".next/types/**/*.ts"
],
"exclude": ["node_modules"]
From 9b8cd175fb465c5bc738d19b326a3f2b1f91b475 Mon Sep 17 00:00:00 2001
From: Ryan Lewis <93001277+rylew1@users.noreply.github.com>
Date: Fri, 24 May 2024 10:26:48 -0700
Subject: [PATCH 12/21] [Issue #37]: e2e docs update (#49)
## Summary
Fixes #37
## Changes proposed
- add e2e docs prereq api command
---
frontend/README.md | 1 +
1 file changed, 1 insertion(+)
diff --git a/frontend/README.md b/frontend/README.md
index 2238207f7..742dcbd59 100644
--- a/frontend/README.md
+++ b/frontend/README.md
@@ -135,6 +135,7 @@ E2E test filenames end with `.spec.ts` and are found in the `tests/e2e` director
To run E2E tests via CLI:
+- `cd ../api && make init db-seed-local start` (prerequisite to start the API)
- `npx playwright install --with-deps` — Downloads playwright browsers required to run tests
- `npm run test:e2e` — Runs all E2E tests using the playwright config found at `tests/playwright.config.ts`
- `npm run test:e2e:ui` — Run specific or all E2E tests using Playwright's [UI mode](https://playwright.dev/docs/test-ui-mode), which is useful for debugging full traces of each test
From 3eb5fb5be7a8197f9413504214d326e55c9e4a7c Mon Sep 17 00:00:00 2001
From: Ryan Lewis <93001277+rylew1@users.noreply.github.com>
Date: Tue, 28 May 2024 08:47:31 -0700
Subject: [PATCH 13/21] [Issue #50]: change SortBy to USWDS component (#52)
## Summary
Fixes #50
## Changes proposed
- switch to using USWDS `Select` component
---
frontend/src/components/search/SearchSortBy.tsx | 13 ++++++++-----
1 file changed, 8 insertions(+), 5 deletions(-)
diff --git a/frontend/src/components/search/SearchSortBy.tsx b/frontend/src/components/search/SearchSortBy.tsx
index 5c5475534..5c4412aac 100644
--- a/frontend/src/components/search/SearchSortBy.tsx
+++ b/frontend/src/components/search/SearchSortBy.tsx
@@ -1,3 +1,4 @@
+import { Select } from "@trussworks/react-uswds";
import { useSearchParamUpdater } from "../../hooks/useSearchParamUpdater";
import { useState } from "react";
@@ -43,20 +44,22 @@ const SearchSortBy: React.FC = ({
return (
-
+ Sort By
+
+
+
{SORT_OPTIONS.map((option) => (
{option.label}
))}
-
+
);
};
From 40478952f3de46e246a6f7b7aa4750fb8b6f7e7b Mon Sep 17 00:00:00 2001
From: Ryan Lewis <93001277+rylew1@users.noreply.github.com>
Date: Fri, 31 May 2024 11:20:26 -0700
Subject: [PATCH 14/21] [Issue 56]: Date rounding bug (#57)
## Summary
Fixes #56
## Changes proposed
- Update the date creation to the parsed year/month/day so it creates
the `Date` object using the local time - this may prevent any type of
rounding
- Add some tests to ensure the right dates are showing up on search
---
frontend/src/utils/dateUtil.ts | 7 ++++-
.../search/SearchResultsListItem.test.tsx | 30 +++++++++++++++++++
2 files changed, 36 insertions(+), 1 deletion(-)
diff --git a/frontend/src/utils/dateUtil.ts b/frontend/src/utils/dateUtil.ts
index c3d3a40c8..9a45f6134 100644
--- a/frontend/src/utils/dateUtil.ts
+++ b/frontend/src/utils/dateUtil.ts
@@ -3,7 +3,12 @@ export function formatDate(dateStr: string | null) {
if (dateStr === "" || dateStr === null) {
return "";
}
- const date = new Date(dateStr);
+
+ const [year, month, day] = dateStr.split("-").map(Number);
+
+ // Create a new Date object using the local time
+ const date = new Date(year, month - 1, day);
+
const options: Intl.DateTimeFormatOptions = {
year: "numeric",
month: "long",
diff --git a/frontend/tests/components/search/SearchResultsListItem.test.tsx b/frontend/tests/components/search/SearchResultsListItem.test.tsx
index 0a7a255b1..f2ad88a88 100644
--- a/frontend/tests/components/search/SearchResultsListItem.test.tsx
+++ b/frontend/tests/components/search/SearchResultsListItem.test.tsx
@@ -34,4 +34,34 @@ describe("SearchResultsListItem", () => {
expect(screen.getByText("Test Opportunity")).toBeInTheDocument();
expect(screen.getByText("OPP-12345")).toBeInTheDocument();
});
+
+ getDateTestCases().forEach(({ api_date, ui_date }) => {
+ it(`renders formatted date ${ui_date} for API date ${api_date}`, () => {
+ const opportunityWithDate = {
+ ...mockOpportunity,
+ summary: {
+ ...mockOpportunity.summary,
+ post_date: api_date,
+ },
+ };
+
+ render( );
+ expect(screen.getByText(ui_date)).toBeInTheDocument();
+ });
+ });
});
+
+function getDateTestCases() {
+ return [
+ { api_date: "2024-05-01", ui_date: "May 1, 2024" },
+ { api_date: "2023-07-21", ui_date: "July 21, 2023" },
+ { api_date: "2022-11-30", ui_date: "November 30, 2022" },
+ { api_date: "2021-01-15", ui_date: "January 15, 2021" },
+ { api_date: "2020-06-17", ui_date: "June 17, 2020" },
+ { api_date: "2019-08-25", ui_date: "August 25, 2019" },
+ { api_date: "2018-12-05", ui_date: "December 5, 2018" },
+ { api_date: "2017-09-13", ui_date: "September 13, 2017" },
+ { api_date: "2016-04-07", ui_date: "April 7, 2016" },
+ { api_date: "2015-03-23", ui_date: "March 23, 2015" },
+ ];
+}
From 0f38c927423f04db2d5cc9628c9abb7e46a3a927 Mon Sep 17 00:00:00 2001
From: Michael Chouinard <46358556+chouinar@users.noreply.github.com>
Date: Mon, 3 Jun 2024 10:31:10 -0400
Subject: [PATCH 15/21] [Issue #58] Locally, preserve the auth token in the
OpenAPI across refreshes (#67)
## Summary
Fixes #58
### Time to review: __3 mins__
## Changes proposed
Set the `persistAuthorization` OpenAPI config locally to True
## Context for reviewers
For local development, we frequently need to go to
http://localhost:8080/docs - enter the auth token, and then repeat this
process every time we reopen this page or refresh. Having to either copy
paste or retype in the auth token is tedious. This flag makes it so it
gets preserved in your browsers local storage.
We are only enabling this for the local endpoint at the moment as there
are possibly security implications we would need to consider non-locally
(eg. what if someone is using a public computer).
---
api/local.env | 2 ++
api/src/app.py | 6 ++++++
api/src/app_config.py | 4 ++++
3 files changed, 12 insertions(+)
diff --git a/api/local.env b/api/local.env
index 4ca4c86b5..598e300d8 100644
--- a/api/local.env
+++ b/api/local.env
@@ -5,6 +5,8 @@
ENVIRONMENT=local
PORT=8080
+PERSIST_AUTHORIZATION_OPENAPI=TRUE
+
# Python path needs to be specified
# for pytest to find the implementation code
PYTHONPATH=/api/
diff --git a/api/src/app.py b/api/src/app.py
index e9604157b..b32322faa 100644
--- a/api/src/app.py
+++ b/api/src/app.py
@@ -16,6 +16,7 @@
from src.api.opportunities_v1 import opportunity_blueprint as opportunities_v1_blueprint
from src.api.response import restructure_error_response
from src.api.schemas import response_schema
+from src.app_config import AppConfig
from src.auth.api_key_auth import get_app_security_scheme
from src.data_migration.data_migration_blueprint import data_migration_blueprint
from src.search.backend.load_search_data_blueprint import load_search_data_blueprint
@@ -61,6 +62,8 @@ def register_db_client(app: APIFlask) -> None:
def configure_app(app: APIFlask) -> None:
+ app_config = AppConfig()
+
# Modify the response schema to instead use the format of our ApiResponse class
# which adds additional details to the object.
# https://apiflask.com/schema/#base-response-schema-customization
@@ -70,6 +73,9 @@ def configure_app(app: APIFlask) -> None:
app.config["SWAGGER_UI_CSS"] = "/static/swagger-ui.min.css"
app.config["SWAGGER_UI_BUNDLE_JS"] = "/static/swagger-ui-bundle.js"
app.config["SWAGGER_UI_STANDALONE_PRESET_JS"] = "/static/swagger-ui-standalone-preset.js"
+ app.config["SWAGGER_UI_CONFIG"] = {
+ "persistAuthorization": app_config.persist_authorization_openapi
+ }
# Removing because the server dropdown has accessibility issues.
app.config["SERVERS"] = "."
app.config["DOCS_FAVICON"] = "https://simpler.grants.gov/img/favicon.ico"
diff --git a/api/src/app_config.py b/api/src/app_config.py
index aa7809876..1d448066d 100644
--- a/api/src/app_config.py
+++ b/api/src/app_config.py
@@ -9,3 +9,7 @@ class AppConfig(PydanticBaseEnvConfig):
# See https://flask.palletsprojects.com/en/2.2.x/api/#flask.Flask.run
host: str = "127.0.0.1"
port: int = 8080
+
+ # For the OpenAPI docs, set whether the auth tokens are stored
+ # across refreshes of the page. Currently we only set this to true locally
+ persist_authorization_openapi: bool = False
From 9574e2904b6ddab446a082b683de71228b5d09ac Mon Sep 17 00:00:00 2001
From: Ryan Lewis <93001277+rylew1@users.noreply.github.com>
Date: Mon, 3 Jun 2024 14:00:07 -0700
Subject: [PATCH 16/21] [Issue #51]: debounce pagination (#53)
## Summary
Fixes #51
## Changes proposed
- Add 300ms debounce on pagination
---
.../components/search/SearchPagination.tsx | 14 +++++--
frontend/tests/e2e/search/search.spec.ts | 40 ++++++++++++++-----
frontend/tests/e2e/search/searchSpecUtil.ts | 5 +++
3 files changed, 46 insertions(+), 13 deletions(-)
diff --git a/frontend/src/components/search/SearchPagination.tsx b/frontend/src/components/search/SearchPagination.tsx
index b8f2964a4..7ac27d984 100644
--- a/frontend/src/components/search/SearchPagination.tsx
+++ b/frontend/src/components/search/SearchPagination.tsx
@@ -1,6 +1,7 @@
"use client";
import { Pagination } from "@trussworks/react-uswds";
+import { useDebouncedCallback } from "use-debounce";
import { useFormStatus } from "react-dom";
export enum PaginationPosition {
@@ -19,6 +20,7 @@ interface SearchPaginationProps {
}
const MAX_SLOTS = 7;
+const DEBOUNCE_TIME = 300;
export default function SearchPagination({
showHiddenInput,
@@ -31,6 +33,10 @@ export default function SearchPagination({
}: SearchPaginationProps) {
const { pending } = useFormStatus();
+ const debouncedHandlePageChange = useDebouncedCallback((newPage: number) => {
+ handlePageChange(newPage);
+ }, DEBOUNCE_TIME);
+
// If there's no results, don't show pagination
if (searchResultsLength < 1) {
return null;
@@ -59,9 +65,11 @@ export default function SearchPagination({
totalPages={totalPages}
currentPage={page}
maxSlots={MAX_SLOTS}
- onClickNext={() => handlePageChange(page + 1)}
- onClickPrevious={() => handlePageChange(page - 1)}
- onClickPageNumber={(event, page) => handlePageChange(page)}
+ onClickNext={() => debouncedHandlePageChange(page + 1)}
+ onClickPrevious={() => debouncedHandlePageChange(page - 1)}
+ onClickPageNumber={(event: React.MouseEvent, page: number) =>
+ debouncedHandlePageChange(page)
+ }
/>
>
);
diff --git a/frontend/tests/e2e/search/search.spec.ts b/frontend/tests/e2e/search/search.spec.ts
index e6c69f638..e73cd256c 100644
--- a/frontend/tests/e2e/search/search.spec.ts
+++ b/frontend/tests/e2e/search/search.spec.ts
@@ -1,3 +1,4 @@
+import { Page, expect, test } from "@playwright/test";
import {
clickAccordionWithTitle,
clickLastPaginationPage,
@@ -20,9 +21,18 @@ import {
toggleCheckboxes,
waitForSearchResultsInitialLoad,
} from "./searchSpecUtil";
-import { expect, test } from "@playwright/test";
-test("should navigate from index to search page", async ({ page }) => {
+import { BrowserContextOptions } from "playwright-core";
+
+interface PageProps {
+ page: Page;
+ browserName?: string;
+ contextOptions?: BrowserContextOptions;
+}
+
+test("should navigate from index to search page", async ({
+ page,
+}: PageProps) => {
// Start from the index page with feature flag set
await page.goto("/?_ff=showSearchV0:true");
@@ -48,7 +58,7 @@ test("should navigate from index to search page", async ({ page }) => {
});
test.describe("Search page tests", () => {
- test.beforeEach(async ({ page }) => {
+ test.beforeEach(async ({ page }: PageProps) => {
// Navigate to the search page with the feature flag set
await page.goto("/search?_ff=showSearchV0:true");
});
@@ -56,7 +66,7 @@ test.describe("Search page tests", () => {
test("should return 0 results when searching for obscure term", async ({
page,
browserName,
- }) => {
+ }: PageProps) => {
// TODO (Issue #2005): fix test for webkit
test.skip(
browserName === "webkit",
@@ -80,7 +90,10 @@ test.describe("Search page tests", () => {
);
});
- test("should show and hide loading state", async ({ page, browserName }) => {
+ test("should show and hide loading state", async ({
+ page,
+ browserName,
+ }: PageProps) => {
// TODO (Issue #2005): fix test for webkit
test.skip(
browserName === "webkit",
@@ -98,7 +111,10 @@ test.describe("Search page tests", () => {
await expect(loadingIndicator).toBeVisible();
await expect(loadingIndicator).toBeHidden();
});
- test("should refresh and retain filters in a new tab", async ({ page }) => {
+
+ test("should refresh and retain filters in a new tab", async ({
+ page,
+ }: PageProps) => {
// Set all inputs, then refresh the page. Those same inputs should be
// set from query params.
const searchTerm = "education";
@@ -175,11 +191,15 @@ test.describe("Search page tests", () => {
}
});
- test("resets page back to 1 when choosing a filter", async ({ page }) => {
+ test("resets page back to 1 when choosing a filter", async ({
+ page,
+ }: PageProps) => {
await clickPaginationPageNumber(page, 2);
// Verify that page 1 is highlighted
- let currentPageButton = page.locator(".usa-pagination__button.usa-current");
+ let currentPageButton = page
+ .locator(".usa-pagination__button.usa-current")
+ .first();
await expect(currentPageButton).toHaveAttribute("aria-label", "Page 2");
// Select the 'Closed' checkbox under 'Opportunity status'
@@ -201,7 +221,7 @@ test.describe("Search page tests", () => {
test("last result becomes first result when flipping sort order", async ({
page,
- }) => {
+ }: PageProps) => {
await selectSortBy(page, "opportunityTitleDesc");
await clickLastPaginationPage(page);
@@ -219,7 +239,7 @@ test.describe("Search page tests", () => {
test("number of results is the same with none or all opportunity status checked", async ({
page,
- }) => {
+ }: PageProps) => {
const initialNumberOfOpportunityResults =
await getNumberOfOpportunitySearchResults(page);
diff --git a/frontend/tests/e2e/search/searchSpecUtil.ts b/frontend/tests/e2e/search/searchSpecUtil.ts
index f54d32b15..63782e670 100644
--- a/frontend/tests/e2e/search/searchSpecUtil.ts
+++ b/frontend/tests/e2e/search/searchSpecUtil.ts
@@ -146,6 +146,9 @@ export async function clickPaginationPageNumber(
`button[data-testid="pagination-page-number"][aria-label="Page ${pageNumber}"]`,
);
await paginationButton.first().click();
+
+ // Delay for pagination debounce
+ await page.waitForTimeout(400);
}
export async function clickLastPaginationPage(page: Page) {
@@ -156,6 +159,8 @@ export async function clickLastPaginationPage(page: Page) {
if (count > 2) {
await paginationButtons.nth(count - 2).click();
}
+ // Delay for pagination debounce
+ await page.waitForTimeout(400);
}
export async function getFirstSearchResultTitle(page: Page) {
From f12d0dcb9a10d72d07e6b73a0062e5a52623b05b Mon Sep 17 00:00:00 2001
From: Ryan Lewis <93001277+rylew1@users.noreply.github.com>
Date: Tue, 4 Jun 2024 11:13:32 -0700
Subject: [PATCH 17/21] [Issue #64] update to Next 14.2.3 (#65)
## Summary
Fixes #64
## Changes proposed
- update to next 14.2.3 (https://nextjs.org/blog/next-14-2)
---
frontend/package-lock.json | 115 +++++++++++++++++++------------------
frontend/package.json | 2 +-
2 files changed, 60 insertions(+), 57 deletions(-)
diff --git a/frontend/package-lock.json b/frontend/package-lock.json
index c4253e22e..fb86c905b 100644
--- a/frontend/package-lock.json
+++ b/frontend/package-lock.json
@@ -15,7 +15,7 @@
"@uswds/uswds": "^3.6.0",
"js-cookie": "^3.0.5",
"lodash": "^4.17.21",
- "next": "^14.1.4",
+ "next": "^14.2.3",
"next-intl": "^3.2.1",
"react": "^18.2.0",
"react-dom": "^18.2.0",
@@ -4903,9 +4903,9 @@
}
},
"node_modules/@next/env": {
- "version": "14.1.4",
- "resolved": "https://registry.npmjs.org/@next/env/-/env-14.1.4.tgz",
- "integrity": "sha512-e7X7bbn3Z6DWnDi75UWn+REgAbLEqxI8Tq2pkFOFAMpWAWApz/YCUhtWMWn410h8Q2fYiYL7Yg5OlxMOCfFjJQ=="
+ "version": "14.2.3",
+ "resolved": "https://registry.npmjs.org/@next/env/-/env-14.2.3.tgz",
+ "integrity": "sha512-W7fd7IbkfmeeY2gXrzJYDx8D2lWKbVoTIj1o1ScPHNzvp30s1AuoEFSdr39bC5sjxJaxTtq3OTCZboNp0lNWHA=="
},
"node_modules/@next/eslint-plugin-next": {
"version": "13.5.6",
@@ -4937,9 +4937,9 @@
}
},
"node_modules/@next/swc-darwin-arm64": {
- "version": "14.1.4",
- "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.1.4.tgz",
- "integrity": "sha512-ubmUkbmW65nIAOmoxT1IROZdmmJMmdYvXIe8211send9ZYJu+SqxSnJM4TrPj9wmL6g9Atvj0S/2cFmMSS99jg==",
+ "version": "14.2.3",
+ "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.2.3.tgz",
+ "integrity": "sha512-3pEYo/RaGqPP0YzwnlmPN2puaF2WMLM3apt5jLW2fFdXD9+pqcoTzRk+iZsf8ta7+quAe4Q6Ms0nR0SFGFdS1A==",
"cpu": [
"arm64"
],
@@ -4952,9 +4952,9 @@
}
},
"node_modules/@next/swc-darwin-x64": {
- "version": "14.1.4",
- "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.1.4.tgz",
- "integrity": "sha512-b0Xo1ELj3u7IkZWAKcJPJEhBop117U78l70nfoQGo4xUSvv0PJSTaV4U9xQBLvZlnjsYkc8RwQN1HoH/oQmLlQ==",
+ "version": "14.2.3",
+ "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.2.3.tgz",
+ "integrity": "sha512-6adp7waE6P1TYFSXpY366xwsOnEXM+y1kgRpjSRVI2CBDOcbRjsJ67Z6EgKIqWIue52d2q/Mx8g9MszARj8IEA==",
"cpu": [
"x64"
],
@@ -4967,9 +4967,9 @@
}
},
"node_modules/@next/swc-linux-arm64-gnu": {
- "version": "14.1.4",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.1.4.tgz",
- "integrity": "sha512-457G0hcLrdYA/u1O2XkRMsDKId5VKe3uKPvrKVOyuARa6nXrdhJOOYU9hkKKyQTMru1B8qEP78IAhf/1XnVqKA==",
+ "version": "14.2.3",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.2.3.tgz",
+ "integrity": "sha512-cuzCE/1G0ZSnTAHJPUT1rPgQx1w5tzSX7POXSLaS7w2nIUJUD+e25QoXD/hMfxbsT9rslEXugWypJMILBj/QsA==",
"cpu": [
"arm64"
],
@@ -4982,9 +4982,9 @@
}
},
"node_modules/@next/swc-linux-arm64-musl": {
- "version": "14.1.4",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.1.4.tgz",
- "integrity": "sha512-l/kMG+z6MB+fKA9KdtyprkTQ1ihlJcBh66cf0HvqGP+rXBbOXX0dpJatjZbHeunvEHoBBS69GYQG5ry78JMy3g==",
+ "version": "14.2.3",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.2.3.tgz",
+ "integrity": "sha512-0D4/oMM2Y9Ta3nGuCcQN8jjJjmDPYpHX9OJzqk42NZGJocU2MqhBq5tWkJrUQOQY9N+In9xOdymzapM09GeiZw==",
"cpu": [
"arm64"
],
@@ -4997,9 +4997,9 @@
}
},
"node_modules/@next/swc-linux-x64-gnu": {
- "version": "14.1.4",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.1.4.tgz",
- "integrity": "sha512-BapIFZ3ZRnvQ1uWbmqEGJuPT9cgLwvKtxhK/L2t4QYO7l+/DxXuIGjvp1x8rvfa/x1FFSsipERZK70pewbtJtw==",
+ "version": "14.2.3",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.2.3.tgz",
+ "integrity": "sha512-ENPiNnBNDInBLyUU5ii8PMQh+4XLr4pG51tOp6aJ9xqFQ2iRI6IH0Ds2yJkAzNV1CfyagcyzPfROMViS2wOZ9w==",
"cpu": [
"x64"
],
@@ -5012,9 +5012,9 @@
}
},
"node_modules/@next/swc-linux-x64-musl": {
- "version": "14.1.4",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.1.4.tgz",
- "integrity": "sha512-mqVxTwk4XuBl49qn2A5UmzFImoL1iLm0KQQwtdRJRKl21ylQwwGCxJtIYo2rbfkZHoSKlh/YgztY0qH3wG1xIg==",
+ "version": "14.2.3",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.2.3.tgz",
+ "integrity": "sha512-BTAbq0LnCbF5MtoM7I/9UeUu/8ZBY0i8SFjUMCbPDOLv+un67e2JgyN4pmgfXBwy/I+RHu8q+k+MCkDN6P9ViQ==",
"cpu": [
"x64"
],
@@ -5027,9 +5027,9 @@
}
},
"node_modules/@next/swc-win32-arm64-msvc": {
- "version": "14.1.4",
- "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.1.4.tgz",
- "integrity": "sha512-xzxF4ErcumXjO2Pvg/wVGrtr9QQJLk3IyQX1ddAC/fi6/5jZCZ9xpuL9Tzc4KPWMFq8GGWFVDMshZOdHGdkvag==",
+ "version": "14.2.3",
+ "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.2.3.tgz",
+ "integrity": "sha512-AEHIw/dhAMLNFJFJIJIyOFDzrzI5bAjI9J26gbO5xhAKHYTZ9Or04BesFPXiAYXDNdrwTP2dQceYA4dL1geu8A==",
"cpu": [
"arm64"
],
@@ -5042,9 +5042,9 @@
}
},
"node_modules/@next/swc-win32-ia32-msvc": {
- "version": "14.1.4",
- "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.1.4.tgz",
- "integrity": "sha512-WZiz8OdbkpRw6/IU/lredZWKKZopUMhcI2F+XiMAcPja0uZYdMTZQRoQ0WZcvinn9xZAidimE7tN9W5v9Yyfyw==",
+ "version": "14.2.3",
+ "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.2.3.tgz",
+ "integrity": "sha512-vga40n1q6aYb0CLrM+eEmisfKCR45ixQYXuBXxOOmmoV8sYST9k7E3US32FsY+CkkF7NtzdcebiFT4CHuMSyZw==",
"cpu": [
"ia32"
],
@@ -5057,9 +5057,9 @@
}
},
"node_modules/@next/swc-win32-x64-msvc": {
- "version": "14.1.4",
- "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.1.4.tgz",
- "integrity": "sha512-4Rto21sPfw555sZ/XNLqfxDUNeLhNYGO2dlPqsnuCg8N8a2a9u1ltqBOPQ4vj1Gf7eJC0W2hHG2eYUHuiXgY2w==",
+ "version": "14.2.3",
+ "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.2.3.tgz",
+ "integrity": "sha512-Q1/zm43RWynxrO7lW4ehciQVj+5ePBhOK+/K2P7pLFX3JaJ/IZVC69SHidrmZSOkqz7ECIOhhy7XhAFG4JYyHA==",
"cpu": [
"x64"
],
@@ -5140,7 +5140,7 @@
"version": "1.44.0",
"resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.44.0.tgz",
"integrity": "sha512-rNX5lbNidamSUorBhB4XZ9SQTjAqfe5M+p37Z8ic0jPFBMo5iCtQz1kRWkEMg+rYOKSlVycpQmpqjSFq7LXOfg==",
- "dev": true,
+ "devOptional": true,
"dependencies": {
"playwright": "1.44.0"
},
@@ -8802,16 +8802,16 @@
}
},
"node_modules/@swc/counter": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.2.tgz",
- "integrity": "sha512-9F4ys4C74eSTEUNndnER3VJ15oru2NumfQxS8geE+f3eB5xvfxpWyqE5XlVnxb/R14uoXi6SLbBwwiDSkv+XEw==",
- "dev": true
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz",
+ "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ=="
},
"node_modules/@swc/helpers": {
- "version": "0.5.2",
- "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.2.tgz",
- "integrity": "sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw==",
+ "version": "0.5.5",
+ "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.5.tgz",
+ "integrity": "sha512-KGYxvIOXcceOAbEk4bi/dVLEK9z8sZ0uBB3Il5b1rhfClSpcX0yfRO0KmTkqR2cnQDymwLB+25ZyMzICg/cm/A==",
"dependencies": {
+ "@swc/counter": "^0.1.3",
"tslib": "^2.4.0"
}
},
@@ -19645,12 +19645,12 @@
"dev": true
},
"node_modules/next": {
- "version": "14.1.4",
- "resolved": "https://registry.npmjs.org/next/-/next-14.1.4.tgz",
- "integrity": "sha512-1WTaXeSrUwlz/XcnhGTY7+8eiaFvdet5z9u3V2jb+Ek1vFo0VhHKSAIJvDWfQpttWjnyw14kBeq28TPq7bTeEQ==",
+ "version": "14.2.3",
+ "resolved": "https://registry.npmjs.org/next/-/next-14.2.3.tgz",
+ "integrity": "sha512-dowFkFTR8v79NPJO4QsBUtxv0g9BrS/phluVpMAt2ku7H+cbcBJlopXjkWlwxrk/xGqMemr7JkGPGemPrLLX7A==",
"dependencies": {
- "@next/env": "14.1.4",
- "@swc/helpers": "0.5.2",
+ "@next/env": "14.2.3",
+ "@swc/helpers": "0.5.5",
"busboy": "1.6.0",
"caniuse-lite": "^1.0.30001579",
"graceful-fs": "^4.2.11",
@@ -19664,18 +19664,19 @@
"node": ">=18.17.0"
},
"optionalDependencies": {
- "@next/swc-darwin-arm64": "14.1.4",
- "@next/swc-darwin-x64": "14.1.4",
- "@next/swc-linux-arm64-gnu": "14.1.4",
- "@next/swc-linux-arm64-musl": "14.1.4",
- "@next/swc-linux-x64-gnu": "14.1.4",
- "@next/swc-linux-x64-musl": "14.1.4",
- "@next/swc-win32-arm64-msvc": "14.1.4",
- "@next/swc-win32-ia32-msvc": "14.1.4",
- "@next/swc-win32-x64-msvc": "14.1.4"
+ "@next/swc-darwin-arm64": "14.2.3",
+ "@next/swc-darwin-x64": "14.2.3",
+ "@next/swc-linux-arm64-gnu": "14.2.3",
+ "@next/swc-linux-arm64-musl": "14.2.3",
+ "@next/swc-linux-x64-gnu": "14.2.3",
+ "@next/swc-linux-x64-musl": "14.2.3",
+ "@next/swc-win32-arm64-msvc": "14.2.3",
+ "@next/swc-win32-ia32-msvc": "14.2.3",
+ "@next/swc-win32-x64-msvc": "14.2.3"
},
"peerDependencies": {
"@opentelemetry/api": "^1.1.0",
+ "@playwright/test": "^1.41.2",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"sass": "^1.3.0"
@@ -19684,6 +19685,9 @@
"@opentelemetry/api": {
"optional": true
},
+ "@playwright/test": {
+ "optional": true
+ },
"sass": {
"optional": true
}
@@ -20708,7 +20712,7 @@
"version": "1.44.0",
"resolved": "https://registry.npmjs.org/playwright/-/playwright-1.44.0.tgz",
"integrity": "sha512-F9b3GUCLQ3Nffrfb6dunPOkE5Mh68tR7zN32L4jCk4FjQamgesGay7/dAAe1WaMEGV04DkdJfcJzjoCKygUaRQ==",
- "dev": true,
+ "devOptional": true,
"dependencies": {
"playwright-core": "1.44.0"
},
@@ -20726,7 +20730,7 @@
"version": "1.44.0",
"resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.44.0.tgz",
"integrity": "sha512-ZTbkNpFfYcGWohvTTl+xewITm7EOuqIqex0c7dNZ+aXsbrLj0qI8XlGKfPpipjm0Wny/4Lt4CJsWJk1stVS5qQ==",
- "dev": true,
+ "devOptional": true,
"bin": {
"playwright-core": "cli.js"
},
@@ -20738,7 +20742,6 @@
"version": "2.3.2",
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
"integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
- "dev": true,
"hasInstallScript": true,
"optional": true,
"os": [
diff --git a/frontend/package.json b/frontend/package.json
index 114ae1cb9..6d1e365f4 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -30,7 +30,7 @@
"@uswds/uswds": "^3.6.0",
"js-cookie": "^3.0.5",
"lodash": "^4.17.21",
- "next": "^14.1.4",
+ "next": "^14.2.3",
"next-intl": "^3.2.1",
"react": "^18.2.0",
"react-dom": "^18.2.0",
From 2db4d352dce89e380ed743ac628e1bd190f031f5 Mon Sep 17 00:00:00 2001
From: Michael Chouinard <46358556+chouinar@users.noreply.github.com>
Date: Fri, 7 Jun 2024 10:20:47 -0400
Subject: [PATCH 18/21] [Issue #69] Remove the BASE_RESPONSE_SCHEMA (#70)
## Summary
Fixes #69
### Time to review: __5 mins__
## Changes proposed
Remove the `BASE_RESPONSE_SCHEMA` configuration.
Adjust the healthcheck endpoint to be consistent in defining the schema
/ responses with the other endpoints.
## Context for reviewers
APIFlask allows you to set a `BASE_RESPONSE_SCHEMA` - the idea is that
its the shared schema that every API endpoint will return, and they will
only differ in the `data` object within. This sounds great on paper as
it prevents you from needing to define most of the response schema for
many endpoints, but in practice, its clunky to use. If we want to modify
anything in the response schema outside of the `data` object, it will
affect every single endpoint. This means when we add something like the
pagination info to our search endpoint, a pagination object appears on
the healthcheck response. As we intend to make these docs something the
public will use, this is going to be confusing.
There is also a "bug" (unsure if it is as it was an intended change a
few months ago in APIFlask/apispec) that the error response objects end
up nested within themselves in the examples.
For example, currently the error response for the healthcheck endpoint
(which can literally only return a 5xx error) has an example response
of:
```json
{
"data": {
"data": "string",
"errors": [
{
"field": "string",
"message": "string",
"type": "string"
}
],
"message": "string",
"status_code": 0
},
"message": "string",
"pagination_info": {
"order_by": "id",
"page_offset": 1,
"page_size": 25,
"sort_direction": "ascending",
"total_pages": 2,
"total_records": 42
},
"status_code": 0,
"warnings": [
{
"field": "string",
"message": "string",
"type": "string"
}
]
}
```
When in reality, the error response it actually returns looks like:
```json
{
"data": {},
"errors": [],
"message": "Service Unavailable",
"status_code": 503
}
```
This set of changes works around all of these confusing issues and just
requires us to define specific response schemas for each endpoint with
some small set of details. I've kept some base schema classes to derive
from that we can use in most cases.
## Additional information
Before & After Examples in OpenAPI
Endpoint Before After Actual Response
(before change)
GET /health (200)
```json
{
"data": {
"message": "string"
},
"message": "string",
"pagination_info": {
"order_by": "id",
"page_offset": 1,
"page_size": 25,
"sort_direction": "ascending",
"total_pages": 2,
"total_records": 42
},
"status_code": 0,
"warnings": [
{
"field": "string",
"message": "string",
"type": "string"
}
]
}
```
```json
{
"data": null,
"message": "Success",
"status_code": 200
}
```
```json
{
"data": {},
"message": "Service healthy",
"pagination_info": null,
"status_code": 200,
"warnings": []
}
```
GET /health (503)
```json
{
"data": {
"data": "string",
"errors": [
{
"field": "string",
"message": "string",
"type": "string"
}
],
"message": "string",
"status_code": 0
},
"message": "string",
"pagination_info": {
"order_by": "id",
"page_offset": 1,
"page_size": 25,
"sort_direction": "ascending",
"total_pages": 2,
"total_records": 42
},
"status_code": 0,
"warnings": [
{
"field": "string",
"message": "string",
"type": "string"
}
]
}
```
```json
{
"data": {},
"errors": [],
"message": "Error",
"status_code": 0
}
```
```json
{
"data": {},
"message": "Service unavailable",
"pagination_info": null,
"status_code": 200,
"warnings": []
}
```
POST /v0.1/opportunities/search (200)
```json
{
"data": [
{.. Excluding for brevity }
],
"message": "string",
"pagination_info": {
"order_by": "id",
"page_offset": 1,
"page_size": 25,
"sort_direction": "ascending",
"total_pages": 2,
"total_records": 42
},
"status_code": 0,
"warnings": [
{
"field": "string",
"message": "string",
"type": "string"
}
]
}
```
```json
{
"data": [
{.. Excluding for brevity }
],
"message": "Success",
"pagination_info": {
"order_by": "id",
"page_offset": 1,
"page_size": 25,
"sort_direction": "ascending",
"total_pages": 2,
"total_records": 42
},
"status_code": 200
}
```
```json
{
"data": [
{}, {}, {} // excluded for brevity
],
"message": "Success",
"pagination_info": {
"order_by": "opportunity_id",
"page_offset": 1,
"page_size": 3,
"sort_direction": "ascending",
"total_pages": 1010,
"total_records": 3030
},
"status_code": 200,
"warnings": []
}
```
POST /v0.1/opportunities/search (401 or 422)
```json
{
"data": {
"data": "string",
"errors": [
{
"field": "string",
"message": "string",
"type": "string"
}
],
"message": "string",
"status_code": 0
},
"message": "string",
"pagination_info": {
"order_by": "id",
"page_offset": 1,
"page_size": 25,
"sort_direction": "ascending",
"total_pages": 2,
"total_records": 42
},
"status_code": 0,
"warnings": [
{
"field": "string",
"message": "string",
"type": "string"
}
]
}
```
```json
{
"data": {},
"errors": [],
"message": "Error",
"status_code": 0
}
```
```json
{
"data": {},
"errors": [],
"message": "The server could not verify that you are authorized to access the URL requested",
"status_code": 401
}
```
---------
Co-authored-by: nava-platform-bot
---
api/openapi.generated.yml | 656 +++++-------------
api/src/api/healthcheck.py | 28 +-
.../opportunities_v0/opportunity_routes.py | 4 +-
.../opportunities_v0/opportunity_schemas.py | 9 +
.../opportunities_v0_1/opportunity_routes.py | 4 +-
.../opportunities_v0_1/opportunity_schemas.py | 9 +
.../opportunities_v1/opportunity_routes.py | 4 +-
.../opportunities_v1/opportunity_schemas.py | 9 +
api/src/api/schemas/response_schema.py | 47 +-
api/src/app.py | 2 +-
api/tests/src/api/test_healthcheck.py | 6 +-
api/tests/src/api/test_route_error_format.py | 8 +-
documentation/api/api-details.md | 10 +-
13 files changed, 285 insertions(+), 511 deletions(-)
diff --git a/api/openapi.generated.yml b/api/openapi.generated.yml
index 7302ded44..b7fa2ffa0 100644
--- a/api/openapi.generated.yml
+++ b/api/openapi.generated.yml
@@ -34,55 +34,13 @@ paths:
content:
application/json:
schema:
- type: object
- properties:
- message:
- type: string
- description: The message to return
- data:
- $ref: '#/components/schemas/Healthcheck'
- status_code:
- type: integer
- description: The HTTP status code
- pagination_info:
- description: The pagination information for paginated endpoints
- type: &id001
- - object
- allOf:
- - $ref: '#/components/schemas/PaginationInfo'
- warnings:
- type: array
- items:
- type: &id002
- - object
- allOf:
- - $ref: '#/components/schemas/ValidationIssue'
+ $ref: '#/components/schemas/HealthcheckResponse'
description: Successful response
'503':
content:
application/json:
schema:
- type: object
- properties:
- message:
- type: string
- description: The message to return
- data:
- $ref: '#/components/schemas/ErrorResponse'
- status_code:
- type: integer
- description: The HTTP status code
- pagination_info:
- description: The pagination information for paginated endpoints
- type: *id001
- allOf:
- - $ref: '#/components/schemas/PaginationInfo'
- warnings:
- type: array
- items:
- type: *id002
- allOf:
- - $ref: '#/components/schemas/ValidationIssue'
+ $ref: '#/components/schemas/ErrorResponse'
description: Service Unavailable
tags:
- Health
@@ -101,83 +59,19 @@ paths:
content:
application/json:
schema:
- type: object
- properties:
- message:
- type: string
- description: The message to return
- data:
- type: array
- items:
- $ref: '#/components/schemas/OpportunityV0'
- status_code:
- type: integer
- description: The HTTP status code
- pagination_info:
- description: The pagination information for paginated endpoints
- type: &id003
- - object
- allOf:
- - $ref: '#/components/schemas/PaginationInfo'
- warnings:
- type: array
- items:
- type: &id004
- - object
- allOf:
- - $ref: '#/components/schemas/ValidationIssue'
+ $ref: '#/components/schemas/OpportunitySearchResponseV0'
description: Successful response
'422':
content:
application/json:
schema:
- type: object
- properties:
- message:
- type: string
- description: The message to return
- data:
- $ref: '#/components/schemas/ErrorResponse'
- status_code:
- type: integer
- description: The HTTP status code
- pagination_info:
- description: The pagination information for paginated endpoints
- type: *id003
- allOf:
- - $ref: '#/components/schemas/PaginationInfo'
- warnings:
- type: array
- items:
- type: *id004
- allOf:
- - $ref: '#/components/schemas/ValidationIssue'
+ $ref: '#/components/schemas/ErrorResponse'
description: Validation error
'401':
content:
application/json:
schema:
- type: object
- properties:
- message:
- type: string
- description: The message to return
- data:
- $ref: '#/components/schemas/ErrorResponse'
- status_code:
- type: integer
- description: The HTTP status code
- pagination_info:
- description: The pagination information for paginated endpoints
- type: *id003
- allOf:
- - $ref: '#/components/schemas/PaginationInfo'
- warnings:
- type: array
- items:
- type: *id004
- allOf:
- - $ref: '#/components/schemas/ValidationIssue'
+ $ref: '#/components/schemas/ErrorResponse'
description: Authentication error
tags:
- Opportunity v0
@@ -213,83 +107,19 @@ paths:
content:
application/json:
schema:
- type: object
- properties:
- message:
- type: string
- description: The message to return
- data:
- type: array
- items:
- $ref: '#/components/schemas/OpportunityV1'
- status_code:
- type: integer
- description: The HTTP status code
- pagination_info:
- description: The pagination information for paginated endpoints
- type: &id005
- - object
- allOf:
- - $ref: '#/components/schemas/PaginationInfo'
- warnings:
- type: array
- items:
- type: &id006
- - object
- allOf:
- - $ref: '#/components/schemas/ValidationIssue'
+ $ref: '#/components/schemas/OpportunitySearchResponseV1'
description: Successful response
'422':
content:
application/json:
schema:
- type: object
- properties:
- message:
- type: string
- description: The message to return
- data:
- $ref: '#/components/schemas/ErrorResponse'
- status_code:
- type: integer
- description: The HTTP status code
- pagination_info:
- description: The pagination information for paginated endpoints
- type: *id005
- allOf:
- - $ref: '#/components/schemas/PaginationInfo'
- warnings:
- type: array
- items:
- type: *id006
- allOf:
- - $ref: '#/components/schemas/ValidationIssue'
+ $ref: '#/components/schemas/ErrorResponse'
description: Validation error
'401':
content:
application/json:
schema:
- type: object
- properties:
- message:
- type: string
- description: The message to return
- data:
- $ref: '#/components/schemas/ErrorResponse'
- status_code:
- type: integer
- description: The HTTP status code
- pagination_info:
- description: The pagination information for paginated endpoints
- type: *id005
- allOf:
- - $ref: '#/components/schemas/PaginationInfo'
- warnings:
- type: array
- items:
- type: *id006
- allOf:
- - $ref: '#/components/schemas/ValidationIssue'
+ $ref: '#/components/schemas/ErrorResponse'
description: Authentication error
tags:
- Opportunity v1
@@ -325,83 +155,19 @@ paths:
content:
application/json:
schema:
- type: object
- properties:
- message:
- type: string
- description: The message to return
- data:
- type: array
- items:
- $ref: '#/components/schemas/OpportunityV01'
- status_code:
- type: integer
- description: The HTTP status code
- pagination_info:
- description: The pagination information for paginated endpoints
- type: &id007
- - object
- allOf:
- - $ref: '#/components/schemas/PaginationInfo'
- warnings:
- type: array
- items:
- type: &id008
- - object
- allOf:
- - $ref: '#/components/schemas/ValidationIssue'
+ $ref: '#/components/schemas/OpportunitySearchResponseV01'
description: Successful response
'422':
content:
application/json:
schema:
- type: object
- properties:
- message:
- type: string
- description: The message to return
- data:
- $ref: '#/components/schemas/ErrorResponse'
- status_code:
- type: integer
- description: The HTTP status code
- pagination_info:
- description: The pagination information for paginated endpoints
- type: *id007
- allOf:
- - $ref: '#/components/schemas/PaginationInfo'
- warnings:
- type: array
- items:
- type: *id008
- allOf:
- - $ref: '#/components/schemas/ValidationIssue'
+ $ref: '#/components/schemas/ErrorResponse'
description: Validation error
'401':
content:
application/json:
schema:
- type: object
- properties:
- message:
- type: string
- description: The message to return
- data:
- $ref: '#/components/schemas/ErrorResponse'
- status_code:
- type: integer
- description: The HTTP status code
- pagination_info:
- description: The pagination information for paginated endpoints
- type: *id007
- allOf:
- - $ref: '#/components/schemas/PaginationInfo'
- warnings:
- type: array
- items:
- type: *id008
- allOf:
- - $ref: '#/components/schemas/ValidationIssue'
+ $ref: '#/components/schemas/ErrorResponse'
description: Authentication error
tags:
- Opportunity v0.1
@@ -483,81 +249,19 @@ paths:
content:
application/json:
schema:
- type: object
- properties:
- message:
- type: string
- description: The message to return
- data:
- $ref: '#/components/schemas/OpportunityV0'
- status_code:
- type: integer
- description: The HTTP status code
- pagination_info:
- description: The pagination information for paginated endpoints
- type: &id009
- - object
- allOf:
- - $ref: '#/components/schemas/PaginationInfo'
- warnings:
- type: array
- items:
- type: &id010
- - object
- allOf:
- - $ref: '#/components/schemas/ValidationIssue'
+ $ref: '#/components/schemas/OpportunityGetResponseV0'
description: Successful response
'401':
content:
application/json:
schema:
- type: object
- properties:
- message:
- type: string
- description: The message to return
- data:
- $ref: '#/components/schemas/ErrorResponse'
- status_code:
- type: integer
- description: The HTTP status code
- pagination_info:
- description: The pagination information for paginated endpoints
- type: *id009
- allOf:
- - $ref: '#/components/schemas/PaginationInfo'
- warnings:
- type: array
- items:
- type: *id010
- allOf:
- - $ref: '#/components/schemas/ValidationIssue'
+ $ref: '#/components/schemas/ErrorResponse'
description: Authentication error
'404':
content:
application/json:
schema:
- type: object
- properties:
- message:
- type: string
- description: The message to return
- data:
- $ref: '#/components/schemas/ErrorResponse'
- status_code:
- type: integer
- description: The HTTP status code
- pagination_info:
- description: The pagination information for paginated endpoints
- type: *id009
- allOf:
- - $ref: '#/components/schemas/PaginationInfo'
- warnings:
- type: array
- items:
- type: *id010
- allOf:
- - $ref: '#/components/schemas/ValidationIssue'
+ $ref: '#/components/schemas/ErrorResponse'
description: Not found
tags:
- Opportunity v0
@@ -593,81 +297,19 @@ paths:
content:
application/json:
schema:
- type: object
- properties:
- message:
- type: string
- description: The message to return
- data:
- $ref: '#/components/schemas/OpportunityV1'
- status_code:
- type: integer
- description: The HTTP status code
- pagination_info:
- description: The pagination information for paginated endpoints
- type: &id011
- - object
- allOf:
- - $ref: '#/components/schemas/PaginationInfo'
- warnings:
- type: array
- items:
- type: &id012
- - object
- allOf:
- - $ref: '#/components/schemas/ValidationIssue'
+ $ref: '#/components/schemas/OpportunityGetResponseV1'
description: Successful response
'401':
content:
application/json:
schema:
- type: object
- properties:
- message:
- type: string
- description: The message to return
- data:
- $ref: '#/components/schemas/ErrorResponse'
- status_code:
- type: integer
- description: The HTTP status code
- pagination_info:
- description: The pagination information for paginated endpoints
- type: *id011
- allOf:
- - $ref: '#/components/schemas/PaginationInfo'
- warnings:
- type: array
- items:
- type: *id012
- allOf:
- - $ref: '#/components/schemas/ValidationIssue'
+ $ref: '#/components/schemas/ErrorResponse'
description: Authentication error
'404':
content:
application/json:
schema:
- type: object
- properties:
- message:
- type: string
- description: The message to return
- data:
- $ref: '#/components/schemas/ErrorResponse'
- status_code:
- type: integer
- description: The HTTP status code
- pagination_info:
- description: The pagination information for paginated endpoints
- type: *id011
- allOf:
- - $ref: '#/components/schemas/PaginationInfo'
- warnings:
- type: array
- items:
- type: *id012
- allOf:
- - $ref: '#/components/schemas/ValidationIssue'
+ $ref: '#/components/schemas/ErrorResponse'
description: Not found
tags:
- Opportunity v1
@@ -703,81 +345,19 @@ paths:
content:
application/json:
schema:
- type: object
- properties:
- message:
- type: string
- description: The message to return
- data:
- $ref: '#/components/schemas/OpportunityV01'
- status_code:
- type: integer
- description: The HTTP status code
- pagination_info:
- description: The pagination information for paginated endpoints
- type: &id013
- - object
- allOf:
- - $ref: '#/components/schemas/PaginationInfo'
- warnings:
- type: array
- items:
- type: &id014
- - object
- allOf:
- - $ref: '#/components/schemas/ValidationIssue'
+ $ref: '#/components/schemas/OpportunityGetResponseV01'
description: Successful response
'401':
content:
application/json:
schema:
- type: object
- properties:
- message:
- type: string
- description: The message to return
- data:
- $ref: '#/components/schemas/ErrorResponse'
- status_code:
- type: integer
- description: The HTTP status code
- pagination_info:
- description: The pagination information for paginated endpoints
- type: *id013
- allOf:
- - $ref: '#/components/schemas/PaginationInfo'
- warnings:
- type: array
- items:
- type: *id014
- allOf:
- - $ref: '#/components/schemas/ValidationIssue'
+ $ref: '#/components/schemas/ErrorResponse'
description: Authentication error
'404':
content:
application/json:
schema:
- type: object
- properties:
- message:
- type: string
- description: The message to return
- data:
- $ref: '#/components/schemas/ErrorResponse'
- status_code:
- type: integer
- description: The HTTP status code
- pagination_info:
- description: The pagination information for paginated endpoints
- type: *id013
- allOf:
- - $ref: '#/components/schemas/PaginationInfo'
- warnings:
- type: array
- items:
- type: *id014
- allOf:
- - $ref: '#/components/schemas/ValidationIssue'
+ $ref: '#/components/schemas/ErrorResponse'
description: Not found
tags:
- Opportunity v0.1
@@ -803,66 +383,51 @@ paths:
openapi: 3.1.0
components:
schemas:
- PaginationInfo:
+ HealthcheckResponse:
type: object
properties:
- page_offset:
- type: integer
- description: The page number that was fetched
- example: 1
- page_size:
- type: integer
- description: The size of the page fetched
- example: 25
- total_records:
- type: integer
- description: The total number of records fetchable
- example: 42
- total_pages:
- type: integer
- description: The total number of pages that can be fetched
- example: 2
- order_by:
+ message:
type: string
- description: The field that the records were sorted by
- example: id
- sort_direction:
- description: The direction the records are sorted
- enum:
- - ascending
- - descending
- type:
- - string
+ description: The message to return
+ example: Success
+ data:
+ example: null
+ status_code:
+ type: integer
+ description: The HTTP status code
+ example: 200
ValidationIssue:
type: object
properties:
type:
type: string
description: The type of error
+ example: invalid
message:
type: string
description: The message to return
+ example: Not a valid string.
field:
type: string
description: The field that failed
- Healthcheck:
- type: object
- properties:
- message:
- type: string
+ example: summary.summary_description
ErrorResponse:
type: object
properties:
+ data:
+ description: Additional data that might be useful in resolving an error
+ (see specific endpoints for details, this is used infrequently)
+ example: {}
message:
type: string
- description: The message to return
- data:
- description: The REST resource object
+ description: General description of the error
+ example: Error
status_code:
type: integer
- description: The HTTP status code
+ description: The HTTP status code of the error
errors:
type: array
+ example: []
items:
type:
- object
@@ -938,6 +503,36 @@ components:
required:
- paging
- sorting
+ PaginationInfo:
+ type: object
+ properties:
+ page_offset:
+ type: integer
+ description: The page number that was fetched
+ example: 1
+ page_size:
+ type: integer
+ description: The size of the page fetched
+ example: 25
+ total_records:
+ type: integer
+ description: The total number of records fetchable
+ example: 42
+ total_pages:
+ type: integer
+ description: The total number of pages that can be fetched
+ example: 2
+ order_by:
+ type: string
+ description: The field that the records were sorted by
+ example: id
+ sort_direction:
+ description: The direction the records are sorted
+ enum:
+ - ascending
+ - descending
+ type:
+ - string
OpportunityV0:
type: object
properties:
@@ -991,6 +586,27 @@ components:
type: string
format: date-time
readOnly: true
+ OpportunitySearchResponseV0:
+ type: object
+ properties:
+ pagination_info:
+ description: The pagination information for paginated endpoints
+ type: &id001
+ - object
+ allOf:
+ - $ref: '#/components/schemas/PaginationInfo'
+ message:
+ type: string
+ description: The message to return
+ example: Success
+ data:
+ type: array
+ items:
+ $ref: '#/components/schemas/OpportunityV0'
+ status_code:
+ type: integer
+ description: The HTTP status code
+ example: 200
FundingInstrumentFilterV1:
type: object
properties:
@@ -1440,6 +1056,26 @@ components:
type: string
format: date-time
readOnly: true
+ OpportunitySearchResponseV1:
+ type: object
+ properties:
+ pagination_info:
+ description: The pagination information for paginated endpoints
+ type: *id001
+ allOf:
+ - $ref: '#/components/schemas/PaginationInfo'
+ message:
+ type: string
+ description: The message to return
+ example: Success
+ data:
+ type: array
+ items:
+ $ref: '#/components/schemas/OpportunityV1'
+ status_code:
+ type: integer
+ description: The HTTP status code
+ example: 200
FundingInstrumentFilterV01:
type: object
properties:
@@ -1889,6 +1525,74 @@ components:
type: string
format: date-time
readOnly: true
+ OpportunitySearchResponseV01:
+ type: object
+ properties:
+ pagination_info:
+ description: The pagination information for paginated endpoints
+ type: *id001
+ allOf:
+ - $ref: '#/components/schemas/PaginationInfo'
+ message:
+ type: string
+ description: The message to return
+ example: Success
+ data:
+ type: array
+ items:
+ $ref: '#/components/schemas/OpportunityV01'
+ status_code:
+ type: integer
+ description: The HTTP status code
+ example: 200
+ OpportunityGetResponseV0:
+ type: object
+ properties:
+ message:
+ type: string
+ description: The message to return
+ example: Success
+ data:
+ type:
+ - object
+ allOf:
+ - $ref: '#/components/schemas/OpportunityV0'
+ status_code:
+ type: integer
+ description: The HTTP status code
+ example: 200
+ OpportunityGetResponseV1:
+ type: object
+ properties:
+ message:
+ type: string
+ description: The message to return
+ example: Success
+ data:
+ type:
+ - object
+ allOf:
+ - $ref: '#/components/schemas/OpportunityV1'
+ status_code:
+ type: integer
+ description: The HTTP status code
+ example: 200
+ OpportunityGetResponseV01:
+ type: object
+ properties:
+ message:
+ type: string
+ description: The message to return
+ example: Success
+ data:
+ type:
+ - object
+ allOf:
+ - $ref: '#/components/schemas/OpportunityV01'
+ status_code:
+ type: integer
+ description: The HTTP status code
+ example: 200
securitySchemes:
ApiKeyAuth:
type: apiKey
diff --git a/api/src/api/healthcheck.py b/api/src/api/healthcheck.py
index 22f944273..3740a5757 100644
--- a/api/src/api/healthcheck.py
+++ b/api/src/api/healthcheck.py
@@ -1,33 +1,39 @@
import logging
-from typing import Tuple
from apiflask import APIBlueprint
-from flask import current_app
from sqlalchemy import text
from werkzeug.exceptions import ServiceUnavailable
+import src.adapters.db as db
import src.adapters.db.flask_db as flask_db
from src.api import response
-from src.api.schemas.extension import Schema, fields
+from src.api.route_utils import raise_flask_error
+from src.api.schemas.extension import fields
+from src.api.schemas.response_schema import AbstractResponseSchema
logger = logging.getLogger(__name__)
-class HealthcheckSchema(Schema):
- message = fields.String()
+class HealthcheckResponseSchema(AbstractResponseSchema):
+ # We don't have any data to return with the healthcheck endpoint
+ data = fields.MixinField(metadata={"example": None})
healthcheck_blueprint = APIBlueprint("healthcheck", __name__, tag="Health")
@healthcheck_blueprint.get("/health")
-@healthcheck_blueprint.output(HealthcheckSchema)
+@healthcheck_blueprint.output(HealthcheckResponseSchema)
@healthcheck_blueprint.doc(responses=[200, ServiceUnavailable.code])
-def health() -> Tuple[response.ApiResponse, int]:
+@flask_db.with_db_session()
+def health(db_session: db.Session) -> response.ApiResponse:
try:
- with flask_db.get_db(current_app).get_connection() as conn:
- assert conn.scalar(text("SELECT 1 AS healthy")) == 1
- return response.ApiResponse(message="Service healthy"), 200
+ with db_session.begin():
+ if db_session.scalar(text("SELECT 1 AS healthy")) != 1:
+ raise Exception("Connection to Postgres DB failure")
+
except Exception:
logger.exception("Connection to DB failure")
- return response.ApiResponse(message="Service unavailable"), ServiceUnavailable.code
+ raise_flask_error(ServiceUnavailable.code, message="Service Unavailable")
+
+ return response.ApiResponse(message="Service healthy")
diff --git a/api/src/api/opportunities_v0/opportunity_routes.py b/api/src/api/opportunities_v0/opportunity_routes.py
index 07d46049d..675b77de8 100644
--- a/api/src/api/opportunities_v0/opportunity_routes.py
+++ b/api/src/api/opportunities_v0/opportunity_routes.py
@@ -34,7 +34,7 @@
arg_name="feature_flag_config",
)
# many=True allows us to return a list of opportunity objects
-@opportunity_blueprint.output(opportunity_schemas.OpportunityV0Schema(many=True))
+@opportunity_blueprint.output(opportunity_schemas.OpportunitySearchResponseV0Schema)
@opportunity_blueprint.auth_required(api_key_auth)
@opportunity_blueprint.doc(description=SHARED_ALPHA_DESCRIPTION)
@flask_db.with_db_session()
@@ -65,7 +65,7 @@ def opportunity_search(
@opportunity_blueprint.get("/opportunities/")
-@opportunity_blueprint.output(opportunity_schemas.OpportunityV0Schema)
+@opportunity_blueprint.output(opportunity_schemas.OpportunityGetResponseV0Schema)
@opportunity_blueprint.auth_required(api_key_auth)
@opportunity_blueprint.doc(description=SHARED_ALPHA_DESCRIPTION)
@flask_db.with_db_session()
diff --git a/api/src/api/opportunities_v0/opportunity_schemas.py b/api/src/api/opportunities_v0/opportunity_schemas.py
index 4a9aa6cbe..fd03e80dd 100644
--- a/api/src/api/opportunities_v0/opportunity_schemas.py
+++ b/api/src/api/opportunities_v0/opportunity_schemas.py
@@ -5,6 +5,7 @@
from src.api.feature_flags.feature_flag import FeatureFlag
from src.api.feature_flags.feature_flag_config import FeatureFlagConfig, get_feature_flag_config
from src.api.schemas.extension import Schema, fields
+from src.api.schemas.response_schema import AbstractResponseSchema, PaginationMixinSchema
from src.constants.lookup_constants import OpportunityCategoryLegacy
from src.pagination.pagination_schema import PaginationSchema, generate_sorting_schema
@@ -113,3 +114,11 @@ def post_load(self, data: dict, **kwargs: Any) -> FeatureFlagConfig:
feature_flag_config.enable_opportunity_log_msg = enable_opportunity_log_msg
return feature_flag_config
+
+
+class OpportunityGetResponseV0Schema(AbstractResponseSchema):
+ data = fields.Nested(OpportunityV0Schema())
+
+
+class OpportunitySearchResponseV0Schema(AbstractResponseSchema, PaginationMixinSchema):
+ data = fields.Nested(OpportunityV0Schema(many=True))
diff --git a/api/src/api/opportunities_v0_1/opportunity_routes.py b/api/src/api/opportunities_v0_1/opportunity_routes.py
index 6ae77d6d0..9006c9455 100644
--- a/api/src/api/opportunities_v0_1/opportunity_routes.py
+++ b/api/src/api/opportunities_v0_1/opportunity_routes.py
@@ -67,7 +67,7 @@
examples=examples,
)
# many=True allows us to return a list of opportunity objects
-@opportunity_blueprint.output(opportunity_schemas.OpportunityV01Schema(many=True))
+@opportunity_blueprint.output(opportunity_schemas.OpportunitySearchResponseV01Schema)
@opportunity_blueprint.auth_required(api_key_auth)
@opportunity_blueprint.doc(description=SHARED_ALPHA_DESCRIPTION)
@flask_db.with_db_session()
@@ -92,7 +92,7 @@ def opportunity_search(db_session: db.Session, search_params: dict) -> response.
@opportunity_blueprint.get("/opportunities/")
-@opportunity_blueprint.output(opportunity_schemas.OpportunityV01Schema)
+@opportunity_blueprint.output(opportunity_schemas.OpportunityGetResponseV01Schema)
@opportunity_blueprint.auth_required(api_key_auth)
@opportunity_blueprint.doc(description=SHARED_ALPHA_DESCRIPTION)
@flask_db.with_db_session()
diff --git a/api/src/api/opportunities_v0_1/opportunity_schemas.py b/api/src/api/opportunities_v0_1/opportunity_schemas.py
index a54384660..3e3c6c2fc 100644
--- a/api/src/api/opportunities_v0_1/opportunity_schemas.py
+++ b/api/src/api/opportunities_v0_1/opportunity_schemas.py
@@ -1,4 +1,5 @@
from src.api.schemas.extension import Schema, fields, validators
+from src.api.schemas.response_schema import AbstractResponseSchema, PaginationMixinSchema
from src.api.schemas.search_schema import StrSearchSchemaBuilder
from src.constants.lookup_constants import (
ApplicantType,
@@ -296,3 +297,11 @@ class OpportunitySearchRequestV01Schema(Schema):
),
required=True,
)
+
+
+class OpportunityGetResponseV01Schema(AbstractResponseSchema):
+ data = fields.Nested(OpportunityV01Schema())
+
+
+class OpportunitySearchResponseV01Schema(AbstractResponseSchema, PaginationMixinSchema):
+ data = fields.Nested(OpportunityV01Schema(many=True))
diff --git a/api/src/api/opportunities_v1/opportunity_routes.py b/api/src/api/opportunities_v1/opportunity_routes.py
index 0d94996b0..9f3e1b319 100644
--- a/api/src/api/opportunities_v1/opportunity_routes.py
+++ b/api/src/api/opportunities_v1/opportunity_routes.py
@@ -30,7 +30,7 @@
opportunity_schemas.OpportunitySearchRequestV1Schema, arg_name="search_params"
)
# many=True allows us to return a list of opportunity objects
-@opportunity_blueprint.output(opportunity_schemas.OpportunityV1Schema(many=True))
+@opportunity_blueprint.output(opportunity_schemas.OpportunitySearchResponseV1Schema)
@opportunity_blueprint.auth_required(api_key_auth)
@opportunity_blueprint.doc(description=SHARED_ALPHA_DESCRIPTION)
def opportunity_search(search_params: dict) -> response.ApiResponse:
@@ -53,7 +53,7 @@ def opportunity_search(search_params: dict) -> response.ApiResponse:
@opportunity_blueprint.get("/opportunities/")
-@opportunity_blueprint.output(opportunity_schemas.OpportunityV1Schema)
+@opportunity_blueprint.output(opportunity_schemas.OpportunityGetResponseV1Schema)
@opportunity_blueprint.auth_required(api_key_auth)
@opportunity_blueprint.doc(description=SHARED_ALPHA_DESCRIPTION)
@flask_db.with_db_session()
diff --git a/api/src/api/opportunities_v1/opportunity_schemas.py b/api/src/api/opportunities_v1/opportunity_schemas.py
index 5f72c7958..ebf47ebef 100644
--- a/api/src/api/opportunities_v1/opportunity_schemas.py
+++ b/api/src/api/opportunities_v1/opportunity_schemas.py
@@ -1,4 +1,5 @@
from src.api.schemas.extension import Schema, fields, validators
+from src.api.schemas.response_schema import AbstractResponseSchema, PaginationMixinSchema
from src.api.schemas.search_schema import StrSearchSchemaBuilder
from src.constants.lookup_constants import (
ApplicantType,
@@ -296,3 +297,11 @@ class OpportunitySearchRequestV1Schema(Schema):
),
required=True,
)
+
+
+class OpportunityGetResponseV1Schema(AbstractResponseSchema):
+ data = fields.Nested(OpportunityV1Schema())
+
+
+class OpportunitySearchResponseV1Schema(AbstractResponseSchema, PaginationMixinSchema):
+ data = fields.Nested(OpportunityV1Schema(many=True))
diff --git a/api/src/api/schemas/response_schema.py b/api/src/api/schemas/response_schema.py
index b6509699b..928ef19ab 100644
--- a/api/src/api/schemas/response_schema.py
+++ b/api/src/api/schemas/response_schema.py
@@ -3,25 +3,52 @@
class ValidationIssueSchema(Schema):
- type = fields.String(metadata={"description": "The type of error"})
- message = fields.String(metadata={"description": "The message to return"})
- field = fields.String(metadata={"description": "The field that failed"})
+ type = fields.String(metadata={"description": "The type of error", "example": "invalid"})
+ message = fields.String(
+ metadata={"description": "The message to return", "example": "Not a valid string."}
+ )
+ field = fields.String(
+ metadata={"description": "The field that failed", "example": "summary.summary_description"}
+ )
-class BaseResponseSchema(Schema):
- message = fields.String(metadata={"description": "The message to return"})
+class AbstractResponseSchema(Schema):
+ message = fields.String(metadata={"description": "The message to return", "example": "Success"})
data = fields.MixinField(metadata={"description": "The REST resource object"}, dump_default={})
- status_code = fields.Integer(metadata={"description": "The HTTP status code"}, dump_default=200)
+ status_code = fields.Integer(
+ metadata={"description": "The HTTP status code", "example": 200}, dump_default=200
+ )
-class ErrorResponseSchema(BaseResponseSchema):
- errors = fields.List(fields.Nested(ValidationIssueSchema()), dump_default=[])
+class WarningMixinSchema(Schema):
+ warnings = fields.List(
+ fields.Nested(ValidationIssueSchema()),
+ metadata={
+ "description": "A list of warnings - indicating something you may want to be aware of, but did not prevent handling of the request"
+ },
+ dump_default=[],
+ )
-class ResponseSchema(BaseResponseSchema):
+class PaginationMixinSchema(Schema):
pagination_info = fields.Nested(
PaginationInfoSchema(),
metadata={"description": "The pagination information for paginated endpoints"},
)
- warnings = fields.List(fields.Nested(ValidationIssueSchema()), dump_default=[])
+
+class ErrorResponseSchema(Schema):
+ data = fields.MixinField(
+ metadata={
+ "description": "Additional data that might be useful in resolving an error (see specific endpoints for details, this is used infrequently)",
+ "example": {},
+ },
+ dump_default={},
+ )
+ message = fields.String(
+ metadata={"description": "General description of the error", "example": "Error"}
+ )
+ status_code = fields.Integer(metadata={"description": "The HTTP status code of the error"})
+ errors = fields.List(
+ fields.Nested(ValidationIssueSchema()), metadata={"example": []}, dump_default=[]
+ )
diff --git a/api/src/app.py b/api/src/app.py
index b32322faa..98fea1607 100644
--- a/api/src/app.py
+++ b/api/src/app.py
@@ -67,7 +67,7 @@ def configure_app(app: APIFlask) -> None:
# Modify the response schema to instead use the format of our ApiResponse class
# which adds additional details to the object.
# https://apiflask.com/schema/#base-response-schema-customization
- app.config["BASE_RESPONSE_SCHEMA"] = response_schema.ResponseSchema
+ # app.config["BASE_RESPONSE_SCHEMA"] = response_schema.ResponseSchema
app.config["HTTP_ERROR_SCHEMA"] = response_schema.ErrorResponseSchema
app.config["VALIDATION_ERROR_SCHEMA"] = response_schema.ErrorResponseSchema
app.config["SWAGGER_UI_CSS"] = "/static/swagger-ui.min.css"
diff --git a/api/tests/src/api/test_healthcheck.py b/api/tests/src/api/test_healthcheck.py
index 1fe7fd533..70e699b99 100644
--- a/api/tests/src/api/test_healthcheck.py
+++ b/api/tests/src/api/test_healthcheck.py
@@ -4,6 +4,7 @@
def test_get_healthcheck_200(client):
response = client.get("/health")
assert response.status_code == 200
+ assert response.get_json()["message"] == "Service healthy"
def test_get_healthcheck_503_db_bad_state(client, monkeypatch):
@@ -11,8 +12,9 @@ def test_get_healthcheck_503_db_bad_state(client, monkeypatch):
def err_method(*args):
raise Exception("Fake Error")
- # Mock db.DB.get_session method to fail
- monkeypatch.setattr(db.DBClient, "get_connection", err_method)
+ # Mock db_session.Scalar to fail
+ monkeypatch.setattr(db.Session, "scalar", err_method)
response = client.get("/health")
assert response.status_code == 503
+ assert response.get_json()["message"] == "Service Unavailable"
diff --git a/api/tests/src/api/test_route_error_format.py b/api/tests/src/api/test_route_error_format.py
index 0b95f5529..faa025476 100644
--- a/api/tests/src/api/test_route_error_format.py
+++ b/api/tests/src/api/test_route_error_format.py
@@ -17,6 +17,7 @@
from src.api.response import ApiResponse, ValidationErrorDetail
from src.api.route_utils import raise_flask_error
from src.api.schemas.extension import Schema, fields
+from src.api.schemas.response_schema import AbstractResponseSchema, WarningMixinSchema
from src.auth.api_key_auth import api_key_auth
from src.util.dict_util import flatten_dict
from tests.src.schemas.schema_validation_utils import (
@@ -35,10 +36,14 @@ def header(api_auth_token):
return {"X-Auth": api_auth_token}
-class OutputSchema(Schema):
+class OutputData(Schema):
output_val = fields.String()
+class OutputSchema(AbstractResponseSchema, WarningMixinSchema):
+ data = fields.Nested(OutputData())
+
+
test_blueprint = APIBlueprint("test", __name__, tag="test")
@@ -111,7 +116,6 @@ def override(self):
assert resp.status_code == 500
resp_json = resp.get_json()
- assert resp_json["data"] == {}
assert resp_json["errors"] == []
assert resp_json["message"] == "Internal Server Error"
diff --git a/documentation/api/api-details.md b/documentation/api/api-details.md
index 14ee18ad2..d0cb4f62a 100644
--- a/documentation/api/api-details.md
+++ b/documentation/api/api-details.md
@@ -42,6 +42,7 @@ We would define the Marshmallow schema in-python like so:
```py
from enum import StrEnum
from src.api.schemas.extension import Schema, fields, validators
+from src.api.schemas.response_schema import AbstractResponseSchema
class Suffix(StrEnum):
SENIOR = "SR"
@@ -65,6 +66,10 @@ class NameSchema(Schema):
class ExampleSchema(Schema):
name = fields.Nested(NameSchema())
birth_date = fields.Date(metadata={"description": "Their birth date"})
+
+class ExampleResponseSchema(AbstractResponseSchema):
+ # Note that AbstractResponseSchema defines a message and status_code field as well
+ data = fields.Nested(ExampleSchema())
```
Anything specified in the metadata field is passed to the OpenAPI file that backs the swagger endpoint. The values
@@ -77,9 +82,8 @@ but it's recommended you try to populate the following:
You can specify validators that will be run when the request is being serialized by APIFlask
Defining a response works the exact same way however field validation does not occur on response, only formatting.
-The response schema only dictates the data portion of the response, the rest of the response is defined in
-[ResponseSchema](../../api/src/api/schemas/response_schema.py) which is connected to APIFlask via the `BASE_RESPONSE_SCHEMA` config.
-
+To keep our response schema following a consistent pattern, we have a few base schema classes like [AbstractResponseSchema](../../api/src/api/schemas/response_schema.py)
+that you can derive from for shared values like the message.
### Schema tips
From ddf0d757d4f054a9354a39baebe9b27f0afa23bb Mon Sep 17 00:00:00 2001
From: Alsia Plybeah
Date: Wed, 12 Jun 2024 10:37:48 -0400
Subject: [PATCH 19/21] [Task]: Finish adding Postgres Integration to Analytics
Library (#72)
## Summary
Fixes #45
### Time to review: __3 mins__
## Changes proposed
* update `config.py` database url
* add function in `cli.py`
* updated packages in `poetry.lock`
## Context for reviewers
N/A
## Additional information
Row created manually in the database alongside a row created via
`test_connection`
![Screen Shot 2024-06-11 at 1 49 53
PM](https://github.com/navapbc/simpler-grants-gov/assets/37313082/b83afad8-5fe1-404f-adf3-c94945740bbe)
---
analytics/config.py | 3 +
analytics/poetry.lock | 1159 +++++++++++---------
analytics/pyproject.toml | 1 +
analytics/settings.toml | 4 +
analytics/src/analytics/cli.py | 29 +-
analytics/src/analytics/datasets/base.py | 79 ++
analytics/src/analytics/integrations/db.py | 29 +
7 files changed, 804 insertions(+), 500 deletions(-)
create mode 100644 analytics/src/analytics/integrations/db.py
diff --git a/analytics/config.py b/analytics/config.py
index f7272dca1..60a7786b6 100644
--- a/analytics/config.py
+++ b/analytics/config.py
@@ -8,6 +8,7 @@
For more information visit: https://www.dynaconf.com/
"""
+
from dynaconf import Dynaconf, Validator, ValidationError
settings = Dynaconf(
@@ -16,6 +17,8 @@
# looks for config vars in the following files
# with vars in .secrets.toml overriding vars in settings.toml
settings_files=["settings.toml", ".secrets.toml"],
+ # merge the settings found in all files
+ merge_enabled= True,
# add validators for our required config vars
validators=[
Validator("SLACK_BOT_TOKEN", must_exist=True),
diff --git a/analytics/poetry.lock b/analytics/poetry.lock
index ca3fbe881..7e7881802 100644
--- a/analytics/poetry.lock
+++ b/analytics/poetry.lock
@@ -1,25 +1,25 @@
-# This file is automatically @generated by Poetry 1.8.2 and should not be changed by hand.
+# This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand.
[[package]]
name = "annotated-types"
-version = "0.6.0"
+version = "0.7.0"
description = "Reusable constraint types to use with typing.Annotated"
optional = false
python-versions = ">=3.8"
files = [
- {file = "annotated_types-0.6.0-py3-none-any.whl", hash = "sha256:0641064de18ba7a25dee8f96403ebc39113d0cb953a01429249d5c7564666a43"},
- {file = "annotated_types-0.6.0.tar.gz", hash = "sha256:563339e807e53ffd9c267e99fc6d9ea23eb8443c08f112651963e24e22f84a5d"},
+ {file = "annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53"},
+ {file = "annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89"},
]
[[package]]
name = "anyio"
-version = "4.3.0"
+version = "4.4.0"
description = "High level compatibility layer for multiple asynchronous event loop implementations"
optional = false
python-versions = ">=3.8"
files = [
- {file = "anyio-4.3.0-py3-none-any.whl", hash = "sha256:048e05d0f6caeed70d731f3db756d35dcc1f35747c8c403364a8332c630441b8"},
- {file = "anyio-4.3.0.tar.gz", hash = "sha256:f75253795a87df48568485fd18cdd2a3fa5c4f7c5be8e5e36637733fce06fed6"},
+ {file = "anyio-4.4.0-py3-none-any.whl", hash = "sha256:c1b2d8f46a8a812513012e1107cb0e68c17159a7a594208005a57dc776e1bdc7"},
+ {file = "anyio-4.4.0.tar.gz", hash = "sha256:5aadc6a1bbb7cdb0bede386cac5e2940f5e2ff3aa20277e991cf028e0585ce94"},
]
[package.dependencies]
@@ -120,13 +120,13 @@ test = ["dateparser (==1.*)", "pre-commit", "pytest", "pytest-cov", "pytest-mock
[[package]]
name = "astroid"
-version = "3.1.0"
+version = "3.2.2"
description = "An abstract syntax tree for Python with inference support."
optional = false
python-versions = ">=3.8.0"
files = [
- {file = "astroid-3.1.0-py3-none-any.whl", hash = "sha256:951798f922990137ac090c53af473db7ab4e70c770e6d7fae0cec59f74411819"},
- {file = "astroid-3.1.0.tar.gz", hash = "sha256:ac248253bfa4bd924a0de213707e7ebeeb3138abeb48d798784ead1e56d419d4"},
+ {file = "astroid-3.2.2-py3-none-any.whl", hash = "sha256:e8a0083b4bb28fcffb6207a3bfc9e5d0a68be951dd7e336d5dcf639c682388c0"},
+ {file = "astroid-3.2.2.tar.gz", hash = "sha256:8ead48e31b92b2e217b6c9733a21afafe479d52d6e164dd25fb1a770c7c3cf94"},
]
[[package]]
@@ -179,13 +179,13 @@ tests-no-zope = ["attrs[tests-mypy]", "cloudpickle", "hypothesis", "pympler", "p
[[package]]
name = "babel"
-version = "2.14.0"
+version = "2.15.0"
description = "Internationalization utilities"
optional = false
-python-versions = ">=3.7"
+python-versions = ">=3.8"
files = [
- {file = "Babel-2.14.0-py3-none-any.whl", hash = "sha256:efb1a25b7118e67ce3a259bed20545c29cb68be8ad2c784c83689981b7a57287"},
- {file = "Babel-2.14.0.tar.gz", hash = "sha256:6919867db036398ba21eb5c7a0f6b28ab8cbc3ae7a73a44ebe34ae74a4e7d363"},
+ {file = "Babel-2.15.0-py3-none-any.whl", hash = "sha256:08706bdad8d0a3413266ab61bd6c34d0c28d6e1e7badf40a2cebe67644e2e1fb"},
+ {file = "babel-2.15.0.tar.gz", hash = "sha256:8daf0e265d05768bc6c7a314cf1321e9a123afc328cc635c18622a2f30a04413"},
]
[package.extras]
@@ -276,13 +276,13 @@ css = ["tinycss2 (>=1.1.0,<1.3)"]
[[package]]
name = "certifi"
-version = "2024.2.2"
+version = "2024.6.2"
description = "Python package for providing Mozilla's CA Bundle."
optional = false
python-versions = ">=3.6"
files = [
- {file = "certifi-2024.2.2-py3-none-any.whl", hash = "sha256:dc383c07b76109f368f6106eee2b593b04a011ea4d55f652c6ca24a754d1cdd1"},
- {file = "certifi-2024.2.2.tar.gz", hash = "sha256:0569859f95fc761b18b45ef421b1290a0f65f147e92a1e5eb3e635f9a5e4e66f"},
+ {file = "certifi-2024.6.2-py3-none-any.whl", hash = "sha256:ddc6c8ce995e6987e7faf5e3f1b02b302836a0e5d98ece18392cb1a36c72ad56"},
+ {file = "certifi-2024.6.2.tar.gz", hash = "sha256:3cd43f1c6fa7dedc5899d69d3ad0398fd018ad1a17fba83ddaf78aa46c747516"},
]
[[package]]
@@ -492,63 +492,63 @@ test = ["pytest"]
[[package]]
name = "coverage"
-version = "7.5.0"
+version = "7.5.3"
description = "Code coverage measurement for Python"
optional = false
python-versions = ">=3.8"
files = [
- {file = "coverage-7.5.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:432949a32c3e3f820af808db1833d6d1631664d53dd3ce487aa25d574e18ad1c"},
- {file = "coverage-7.5.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2bd7065249703cbeb6d4ce679c734bef0ee69baa7bff9724361ada04a15b7e3b"},
- {file = "coverage-7.5.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bbfe6389c5522b99768a93d89aca52ef92310a96b99782973b9d11e80511f932"},
- {file = "coverage-7.5.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:39793731182c4be939b4be0cdecde074b833f6171313cf53481f869937129ed3"},
- {file = "coverage-7.5.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:85a5dbe1ba1bf38d6c63b6d2c42132d45cbee6d9f0c51b52c59aa4afba057517"},
- {file = "coverage-7.5.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:357754dcdfd811462a725e7501a9b4556388e8ecf66e79df6f4b988fa3d0b39a"},
- {file = "coverage-7.5.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:a81eb64feded34f40c8986869a2f764f0fe2db58c0530d3a4afbcde50f314880"},
- {file = "coverage-7.5.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:51431d0abbed3a868e967f8257c5faf283d41ec882f58413cf295a389bb22e58"},
- {file = "coverage-7.5.0-cp310-cp310-win32.whl", hash = "sha256:f609ebcb0242d84b7adeee2b06c11a2ddaec5464d21888b2c8255f5fd6a98ae4"},
- {file = "coverage-7.5.0-cp310-cp310-win_amd64.whl", hash = "sha256:6782cd6216fab5a83216cc39f13ebe30adfac2fa72688c5a4d8d180cd52e8f6a"},
- {file = "coverage-7.5.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e768d870801f68c74c2b669fc909839660180c366501d4cc4b87efd6b0eee375"},
- {file = "coverage-7.5.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:84921b10aeb2dd453247fd10de22907984eaf80901b578a5cf0bb1e279a587cb"},
- {file = "coverage-7.5.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:710c62b6e35a9a766b99b15cdc56d5aeda0914edae8bb467e9c355f75d14ee95"},
- {file = "coverage-7.5.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c379cdd3efc0658e652a14112d51a7668f6bfca7445c5a10dee7eabecabba19d"},
- {file = "coverage-7.5.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fea9d3ca80bcf17edb2c08a4704259dadac196fe5e9274067e7a20511fad1743"},
- {file = "coverage-7.5.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:41327143c5b1d715f5f98a397608f90ab9ebba606ae4e6f3389c2145410c52b1"},
- {file = "coverage-7.5.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:565b2e82d0968c977e0b0f7cbf25fd06d78d4856289abc79694c8edcce6eb2de"},
- {file = "coverage-7.5.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cf3539007202ebfe03923128fedfdd245db5860a36810136ad95a564a2fdffff"},
- {file = "coverage-7.5.0-cp311-cp311-win32.whl", hash = "sha256:bf0b4b8d9caa8d64df838e0f8dcf68fb570c5733b726d1494b87f3da85db3a2d"},
- {file = "coverage-7.5.0-cp311-cp311-win_amd64.whl", hash = "sha256:9c6384cc90e37cfb60435bbbe0488444e54b98700f727f16f64d8bfda0b84656"},
- {file = "coverage-7.5.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:fed7a72d54bd52f4aeb6c6e951f363903bd7d70bc1cad64dd1f087980d309ab9"},
- {file = "coverage-7.5.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:cbe6581fcff7c8e262eb574244f81f5faaea539e712a058e6707a9d272fe5b64"},
- {file = "coverage-7.5.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad97ec0da94b378e593ef532b980c15e377df9b9608c7c6da3506953182398af"},
- {file = "coverage-7.5.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bd4bacd62aa2f1a1627352fe68885d6ee694bdaebb16038b6e680f2924a9b2cc"},
- {file = "coverage-7.5.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:adf032b6c105881f9d77fa17d9eebe0ad1f9bfb2ad25777811f97c5362aa07f2"},
- {file = "coverage-7.5.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:4ba01d9ba112b55bfa4b24808ec431197bb34f09f66f7cb4fd0258ff9d3711b1"},
- {file = "coverage-7.5.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:f0bfe42523893c188e9616d853c47685e1c575fe25f737adf473d0405dcfa7eb"},
- {file = "coverage-7.5.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a9a7ef30a1b02547c1b23fa9a5564f03c9982fc71eb2ecb7f98c96d7a0db5cf2"},
- {file = "coverage-7.5.0-cp312-cp312-win32.whl", hash = "sha256:3c2b77f295edb9fcdb6a250f83e6481c679335ca7e6e4a955e4290350f2d22a4"},
- {file = "coverage-7.5.0-cp312-cp312-win_amd64.whl", hash = "sha256:427e1e627b0963ac02d7c8730ca6d935df10280d230508c0ba059505e9233475"},
- {file = "coverage-7.5.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9dd88fce54abbdbf4c42fb1fea0e498973d07816f24c0e27a1ecaf91883ce69e"},
- {file = "coverage-7.5.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a898c11dca8f8c97b467138004a30133974aacd572818c383596f8d5b2eb04a9"},
- {file = "coverage-7.5.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:07dfdd492d645eea1bd70fb1d6febdcf47db178b0d99161d8e4eed18e7f62fe7"},
- {file = "coverage-7.5.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d3d117890b6eee85887b1eed41eefe2e598ad6e40523d9f94c4c4b213258e4a4"},
- {file = "coverage-7.5.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6afd2e84e7da40fe23ca588379f815fb6dbbb1b757c883935ed11647205111cb"},
- {file = "coverage-7.5.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:a9960dd1891b2ddf13a7fe45339cd59ecee3abb6b8326d8b932d0c5da208104f"},
- {file = "coverage-7.5.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:ced268e82af993d7801a9db2dbc1d2322e786c5dc76295d8e89473d46c6b84d4"},
- {file = "coverage-7.5.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:e7c211f25777746d468d76f11719e64acb40eed410d81c26cefac641975beb88"},
- {file = "coverage-7.5.0-cp38-cp38-win32.whl", hash = "sha256:262fffc1f6c1a26125d5d573e1ec379285a3723363f3bd9c83923c9593a2ac25"},
- {file = "coverage-7.5.0-cp38-cp38-win_amd64.whl", hash = "sha256:eed462b4541c540d63ab57b3fc69e7d8c84d5957668854ee4e408b50e92ce26a"},
- {file = "coverage-7.5.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d0194d654e360b3e6cc9b774e83235bae6b9b2cac3be09040880bb0e8a88f4a1"},
- {file = "coverage-7.5.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:33c020d3322662e74bc507fb11488773a96894aa82a622c35a5a28673c0c26f5"},
- {file = "coverage-7.5.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0cbdf2cae14a06827bec50bd58e49249452d211d9caddd8bd80e35b53cb04631"},
- {file = "coverage-7.5.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3235d7c781232e525b0761730e052388a01548bd7f67d0067a253887c6e8df46"},
- {file = "coverage-7.5.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db2de4e546f0ec4b2787d625e0b16b78e99c3e21bc1722b4977c0dddf11ca84e"},
- {file = "coverage-7.5.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4d0e206259b73af35c4ec1319fd04003776e11e859936658cb6ceffdeba0f5be"},
- {file = "coverage-7.5.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:2055c4fb9a6ff624253d432aa471a37202cd8f458c033d6d989be4499aed037b"},
- {file = "coverage-7.5.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:075299460948cd12722a970c7eae43d25d37989da682997687b34ae6b87c0ef0"},
- {file = "coverage-7.5.0-cp39-cp39-win32.whl", hash = "sha256:280132aada3bc2f0fac939a5771db4fbb84f245cb35b94fae4994d4c1f80dae7"},
- {file = "coverage-7.5.0-cp39-cp39-win_amd64.whl", hash = "sha256:c58536f6892559e030e6924896a44098bc1290663ea12532c78cef71d0df8493"},
- {file = "coverage-7.5.0-pp38.pp39.pp310-none-any.whl", hash = "sha256:2b57780b51084d5223eee7b59f0d4911c31c16ee5aa12737c7a02455829ff067"},
- {file = "coverage-7.5.0.tar.gz", hash = "sha256:cf62d17310f34084c59c01e027259076479128d11e4661bb6c9acb38c5e19bb8"},
+ {file = "coverage-7.5.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a6519d917abb15e12380406d721e37613e2a67d166f9fb7e5a8ce0375744cd45"},
+ {file = "coverage-7.5.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:aea7da970f1feccf48be7335f8b2ca64baf9b589d79e05b9397a06696ce1a1ec"},
+ {file = "coverage-7.5.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:923b7b1c717bd0f0f92d862d1ff51d9b2b55dbbd133e05680204465f454bb286"},
+ {file = "coverage-7.5.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:62bda40da1e68898186f274f832ef3e759ce929da9a9fd9fcf265956de269dbc"},
+ {file = "coverage-7.5.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d8b7339180d00de83e930358223c617cc343dd08e1aa5ec7b06c3a121aec4e1d"},
+ {file = "coverage-7.5.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:25a5caf742c6195e08002d3b6c2dd6947e50efc5fc2c2205f61ecb47592d2d83"},
+ {file = "coverage-7.5.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:05ac5f60faa0c704c0f7e6a5cbfd6f02101ed05e0aee4d2822637a9e672c998d"},
+ {file = "coverage-7.5.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:239a4e75e09c2b12ea478d28815acf83334d32e722e7433471fbf641c606344c"},
+ {file = "coverage-7.5.3-cp310-cp310-win32.whl", hash = "sha256:a5812840d1d00eafae6585aba38021f90a705a25b8216ec7f66aebe5b619fb84"},
+ {file = "coverage-7.5.3-cp310-cp310-win_amd64.whl", hash = "sha256:33ca90a0eb29225f195e30684ba4a6db05dbef03c2ccd50b9077714c48153cac"},
+ {file = "coverage-7.5.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f81bc26d609bf0fbc622c7122ba6307993c83c795d2d6f6f6fd8c000a770d974"},
+ {file = "coverage-7.5.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7cec2af81f9e7569280822be68bd57e51b86d42e59ea30d10ebdbb22d2cb7232"},
+ {file = "coverage-7.5.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:55f689f846661e3f26efa535071775d0483388a1ccfab899df72924805e9e7cd"},
+ {file = "coverage-7.5.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:50084d3516aa263791198913a17354bd1dc627d3c1639209640b9cac3fef5807"},
+ {file = "coverage-7.5.3-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:341dd8f61c26337c37988345ca5c8ccabeff33093a26953a1ac72e7d0103c4fb"},
+ {file = "coverage-7.5.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ab0b028165eea880af12f66086694768f2c3139b2c31ad5e032c8edbafca6ffc"},
+ {file = "coverage-7.5.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:5bc5a8c87714b0c67cfeb4c7caa82b2d71e8864d1a46aa990b5588fa953673b8"},
+ {file = "coverage-7.5.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:38a3b98dae8a7c9057bd91fbf3415c05e700a5114c5f1b5b0ea5f8f429ba6614"},
+ {file = "coverage-7.5.3-cp311-cp311-win32.whl", hash = "sha256:fcf7d1d6f5da887ca04302db8e0e0cf56ce9a5e05f202720e49b3e8157ddb9a9"},
+ {file = "coverage-7.5.3-cp311-cp311-win_amd64.whl", hash = "sha256:8c836309931839cca658a78a888dab9676b5c988d0dd34ca247f5f3e679f4e7a"},
+ {file = "coverage-7.5.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:296a7d9bbc598e8744c00f7a6cecf1da9b30ae9ad51c566291ff1314e6cbbed8"},
+ {file = "coverage-7.5.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:34d6d21d8795a97b14d503dcaf74226ae51eb1f2bd41015d3ef332a24d0a17b3"},
+ {file = "coverage-7.5.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e317953bb4c074c06c798a11dbdd2cf9979dbcaa8ccc0fa4701d80042d4ebf1"},
+ {file = "coverage-7.5.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:705f3d7c2b098c40f5b81790a5fedb274113373d4d1a69e65f8b68b0cc26f6db"},
+ {file = "coverage-7.5.3-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1196e13c45e327d6cd0b6e471530a1882f1017eb83c6229fc613cd1a11b53cd"},
+ {file = "coverage-7.5.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:015eddc5ccd5364dcb902eaecf9515636806fa1e0d5bef5769d06d0f31b54523"},
+ {file = "coverage-7.5.3-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:fd27d8b49e574e50caa65196d908f80e4dff64d7e592d0c59788b45aad7e8b35"},
+ {file = "coverage-7.5.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:33fc65740267222fc02975c061eb7167185fef4cc8f2770267ee8bf7d6a42f84"},
+ {file = "coverage-7.5.3-cp312-cp312-win32.whl", hash = "sha256:7b2a19e13dfb5c8e145c7a6ea959485ee8e2204699903c88c7d25283584bfc08"},
+ {file = "coverage-7.5.3-cp312-cp312-win_amd64.whl", hash = "sha256:0bbddc54bbacfc09b3edaec644d4ac90c08ee8ed4844b0f86227dcda2d428fcb"},
+ {file = "coverage-7.5.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f78300789a708ac1f17e134593f577407d52d0417305435b134805c4fb135adb"},
+ {file = "coverage-7.5.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b368e1aee1b9b75757942d44d7598dcd22a9dbb126affcbba82d15917f0cc155"},
+ {file = "coverage-7.5.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f836c174c3a7f639bded48ec913f348c4761cbf49de4a20a956d3431a7c9cb24"},
+ {file = "coverage-7.5.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:244f509f126dc71369393ce5fea17c0592c40ee44e607b6d855e9c4ac57aac98"},
+ {file = "coverage-7.5.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c4c2872b3c91f9baa836147ca33650dc5c172e9273c808c3c3199c75490e709d"},
+ {file = "coverage-7.5.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:dd4b3355b01273a56b20c219e74e7549e14370b31a4ffe42706a8cda91f19f6d"},
+ {file = "coverage-7.5.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:f542287b1489c7a860d43a7d8883e27ca62ab84ca53c965d11dac1d3a1fab7ce"},
+ {file = "coverage-7.5.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:75e3f4e86804023e991096b29e147e635f5e2568f77883a1e6eed74512659ab0"},
+ {file = "coverage-7.5.3-cp38-cp38-win32.whl", hash = "sha256:c59d2ad092dc0551d9f79d9d44d005c945ba95832a6798f98f9216ede3d5f485"},
+ {file = "coverage-7.5.3-cp38-cp38-win_amd64.whl", hash = "sha256:fa21a04112c59ad54f69d80e376f7f9d0f5f9123ab87ecd18fbb9ec3a2beed56"},
+ {file = "coverage-7.5.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f5102a92855d518b0996eb197772f5ac2a527c0ec617124ad5242a3af5e25f85"},
+ {file = "coverage-7.5.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d1da0a2e3b37b745a2b2a678a4c796462cf753aebf94edcc87dcc6b8641eae31"},
+ {file = "coverage-7.5.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8383a6c8cefba1b7cecc0149415046b6fc38836295bc4c84e820872eb5478b3d"},
+ {file = "coverage-7.5.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9aad68c3f2566dfae84bf46295a79e79d904e1c21ccfc66de88cd446f8686341"},
+ {file = "coverage-7.5.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2e079c9ec772fedbade9d7ebc36202a1d9ef7291bc9b3a024ca395c4d52853d7"},
+ {file = "coverage-7.5.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:bde997cac85fcac227b27d4fb2c7608a2c5f6558469b0eb704c5726ae49e1c52"},
+ {file = "coverage-7.5.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:990fb20b32990b2ce2c5f974c3e738c9358b2735bc05075d50a6f36721b8f303"},
+ {file = "coverage-7.5.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:3d5a67f0da401e105753d474369ab034c7bae51a4c31c77d94030d59e41df5bd"},
+ {file = "coverage-7.5.3-cp39-cp39-win32.whl", hash = "sha256:e08c470c2eb01977d221fd87495b44867a56d4d594f43739a8028f8646a51e0d"},
+ {file = "coverage-7.5.3-cp39-cp39-win_amd64.whl", hash = "sha256:1d2a830ade66d3563bb61d1e3c77c8def97b30ed91e166c67d0632c018f380f0"},
+ {file = "coverage-7.5.3-pp38.pp39.pp310-none-any.whl", hash = "sha256:3538d8fb1ee9bdd2e2692b3b18c22bb1c19ffbefd06880f5ac496e42d7bb3884"},
+ {file = "coverage-7.5.3.tar.gz", hash = "sha256:04aefca5190d1dc7a53a4c1a5a7f8568811306d7a8ee231c42fb69215571944f"},
]
[package.extras]
@@ -700,6 +700,77 @@ files = [
{file = "fqdn-1.5.1.tar.gz", hash = "sha256:105ed3677e767fb5ca086a0c1f4bb66ebc3c100be518f0e0d755d9eae164d89f"},
]
+[[package]]
+name = "greenlet"
+version = "3.0.3"
+description = "Lightweight in-process concurrent programming"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "greenlet-3.0.3-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:9da2bd29ed9e4f15955dd1595ad7bc9320308a3b766ef7f837e23ad4b4aac31a"},
+ {file = "greenlet-3.0.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d353cadd6083fdb056bb46ed07e4340b0869c305c8ca54ef9da3421acbdf6881"},
+ {file = "greenlet-3.0.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dca1e2f3ca00b84a396bc1bce13dd21f680f035314d2379c4160c98153b2059b"},
+ {file = "greenlet-3.0.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3ed7fb269f15dc662787f4119ec300ad0702fa1b19d2135a37c2c4de6fadfd4a"},
+ {file = "greenlet-3.0.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd4f49ae60e10adbc94b45c0b5e6a179acc1736cf7a90160b404076ee283cf83"},
+ {file = "greenlet-3.0.3-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:73a411ef564e0e097dbe7e866bb2dda0f027e072b04da387282b02c308807405"},
+ {file = "greenlet-3.0.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:7f362975f2d179f9e26928c5b517524e89dd48530a0202570d55ad6ca5d8a56f"},
+ {file = "greenlet-3.0.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:649dde7de1a5eceb258f9cb00bdf50e978c9db1b996964cd80703614c86495eb"},
+ {file = "greenlet-3.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:68834da854554926fbedd38c76e60c4a2e3198c6fbed520b106a8986445caaf9"},
+ {file = "greenlet-3.0.3-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:b1b5667cced97081bf57b8fa1d6bfca67814b0afd38208d52538316e9422fc61"},
+ {file = "greenlet-3.0.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:52f59dd9c96ad2fc0d5724107444f76eb20aaccb675bf825df6435acb7703559"},
+ {file = "greenlet-3.0.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:afaff6cf5200befd5cec055b07d1c0a5a06c040fe5ad148abcd11ba6ab9b114e"},
+ {file = "greenlet-3.0.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fe754d231288e1e64323cfad462fcee8f0288654c10bdf4f603a39ed923bef33"},
+ {file = "greenlet-3.0.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2797aa5aedac23af156bbb5a6aa2cd3427ada2972c828244eb7d1b9255846379"},
+ {file = "greenlet-3.0.3-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b7f009caad047246ed379e1c4dbcb8b020f0a390667ea74d2387be2998f58a22"},
+ {file = "greenlet-3.0.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:c5e1536de2aad7bf62e27baf79225d0d64360d4168cf2e6becb91baf1ed074f3"},
+ {file = "greenlet-3.0.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:894393ce10ceac937e56ec00bb71c4c2f8209ad516e96033e4b3b1de270e200d"},
+ {file = "greenlet-3.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:1ea188d4f49089fc6fb283845ab18a2518d279c7cd9da1065d7a84e991748728"},
+ {file = "greenlet-3.0.3-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:70fb482fdf2c707765ab5f0b6655e9cfcf3780d8d87355a063547b41177599be"},
+ {file = "greenlet-3.0.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d4d1ac74f5c0c0524e4a24335350edad7e5f03b9532da7ea4d3c54d527784f2e"},
+ {file = "greenlet-3.0.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:149e94a2dd82d19838fe4b2259f1b6b9957d5ba1b25640d2380bea9c5df37676"},
+ {file = "greenlet-3.0.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:15d79dd26056573940fcb8c7413d84118086f2ec1a8acdfa854631084393efcc"},
+ {file = "greenlet-3.0.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:881b7db1ebff4ba09aaaeae6aa491daeb226c8150fc20e836ad00041bcb11230"},
+ {file = "greenlet-3.0.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fcd2469d6a2cf298f198f0487e0a5b1a47a42ca0fa4dfd1b6862c999f018ebbf"},
+ {file = "greenlet-3.0.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:1f672519db1796ca0d8753f9e78ec02355e862d0998193038c7073045899f305"},
+ {file = "greenlet-3.0.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:2516a9957eed41dd8f1ec0c604f1cdc86758b587d964668b5b196a9db5bfcde6"},
+ {file = "greenlet-3.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:bba5387a6975598857d86de9eac14210a49d554a77eb8261cc68b7d082f78ce2"},
+ {file = "greenlet-3.0.3-cp37-cp37m-macosx_11_0_universal2.whl", hash = "sha256:5b51e85cb5ceda94e79d019ed36b35386e8c37d22f07d6a751cb659b180d5274"},
+ {file = "greenlet-3.0.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:daf3cb43b7cf2ba96d614252ce1684c1bccee6b2183a01328c98d36fcd7d5cb0"},
+ {file = "greenlet-3.0.3-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:99bf650dc5d69546e076f413a87481ee1d2d09aaaaaca058c9251b6d8c14783f"},
+ {file = "greenlet-3.0.3-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2dd6e660effd852586b6a8478a1d244b8dc90ab5b1321751d2ea15deb49ed414"},
+ {file = "greenlet-3.0.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e3391d1e16e2a5a1507d83e4a8b100f4ee626e8eca43cf2cadb543de69827c4c"},
+ {file = "greenlet-3.0.3-cp37-cp37m-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e1f145462f1fa6e4a4ae3c0f782e580ce44d57c8f2c7aae1b6fa88c0b2efdb41"},
+ {file = "greenlet-3.0.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:1a7191e42732df52cb5f39d3527217e7ab73cae2cb3694d241e18f53d84ea9a7"},
+ {file = "greenlet-3.0.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:0448abc479fab28b00cb472d278828b3ccca164531daab4e970a0458786055d6"},
+ {file = "greenlet-3.0.3-cp37-cp37m-win32.whl", hash = "sha256:b542be2440edc2d48547b5923c408cbe0fc94afb9f18741faa6ae970dbcb9b6d"},
+ {file = "greenlet-3.0.3-cp37-cp37m-win_amd64.whl", hash = "sha256:01bc7ea167cf943b4c802068e178bbf70ae2e8c080467070d01bfa02f337ee67"},
+ {file = "greenlet-3.0.3-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:1996cb9306c8595335bb157d133daf5cf9f693ef413e7673cb07e3e5871379ca"},
+ {file = "greenlet-3.0.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ddc0f794e6ad661e321caa8d2f0a55ce01213c74722587256fb6566049a8b04"},
+ {file = "greenlet-3.0.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c9db1c18f0eaad2f804728c67d6c610778456e3e1cc4ab4bbd5eeb8e6053c6fc"},
+ {file = "greenlet-3.0.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7170375bcc99f1a2fbd9c306f5be8764eaf3ac6b5cb968862cad4c7057756506"},
+ {file = "greenlet-3.0.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6b66c9c1e7ccabad3a7d037b2bcb740122a7b17a53734b7d72a344ce39882a1b"},
+ {file = "greenlet-3.0.3-cp38-cp38-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:098d86f528c855ead3479afe84b49242e174ed262456c342d70fc7f972bc13c4"},
+ {file = "greenlet-3.0.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:81bb9c6d52e8321f09c3d165b2a78c680506d9af285bfccbad9fb7ad5a5da3e5"},
+ {file = "greenlet-3.0.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:fd096eb7ffef17c456cfa587523c5f92321ae02427ff955bebe9e3c63bc9f0da"},
+ {file = "greenlet-3.0.3-cp38-cp38-win32.whl", hash = "sha256:d46677c85c5ba00a9cb6f7a00b2bfa6f812192d2c9f7d9c4f6a55b60216712f3"},
+ {file = "greenlet-3.0.3-cp38-cp38-win_amd64.whl", hash = "sha256:419b386f84949bf0e7c73e6032e3457b82a787c1ab4a0e43732898a761cc9dbf"},
+ {file = "greenlet-3.0.3-cp39-cp39-macosx_11_0_universal2.whl", hash = "sha256:da70d4d51c8b306bb7a031d5cff6cc25ad253affe89b70352af5f1cb68e74b53"},
+ {file = "greenlet-3.0.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:086152f8fbc5955df88382e8a75984e2bb1c892ad2e3c80a2508954e52295257"},
+ {file = "greenlet-3.0.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d73a9fe764d77f87f8ec26a0c85144d6a951a6c438dfe50487df5595c6373eac"},
+ {file = "greenlet-3.0.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b7dcbe92cc99f08c8dd11f930de4d99ef756c3591a5377d1d9cd7dd5e896da71"},
+ {file = "greenlet-3.0.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1551a8195c0d4a68fac7a4325efac0d541b48def35feb49d803674ac32582f61"},
+ {file = "greenlet-3.0.3-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:64d7675ad83578e3fc149b617a444fab8efdafc9385471f868eb5ff83e446b8b"},
+ {file = "greenlet-3.0.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b37eef18ea55f2ffd8f00ff8fe7c8d3818abd3e25fb73fae2ca3b672e333a7a6"},
+ {file = "greenlet-3.0.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:77457465d89b8263bca14759d7c1684df840b6811b2499838cc5b040a8b5b113"},
+ {file = "greenlet-3.0.3-cp39-cp39-win32.whl", hash = "sha256:57e8974f23e47dac22b83436bdcf23080ade568ce77df33159e019d161ce1d1e"},
+ {file = "greenlet-3.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:c5ee858cfe08f34712f548c3c363e807e7186f03ad7a5039ebadb29e8c6be067"},
+ {file = "greenlet-3.0.3.tar.gz", hash = "sha256:43374442353259554ce33599da8b692d5aa96f8976d567d4badf263371fbe491"},
+]
+
+[package.extras]
+docs = ["Sphinx", "furo"]
+test = ["objgraph", "psutil"]
+
[[package]]
name = "h11"
version = "0.14.0"
@@ -813,13 +884,13 @@ test = ["flaky", "ipyparallel", "pre-commit", "pytest (>=7.0)", "pytest-asyncio
[[package]]
name = "ipython"
-version = "8.23.0"
+version = "8.25.0"
description = "IPython: Productive Interactive Computing"
optional = false
python-versions = ">=3.10"
files = [
- {file = "ipython-8.23.0-py3-none-any.whl", hash = "sha256:07232af52a5ba146dc3372c7bf52a0f890a23edf38d77caef8d53f9cdc2584c1"},
- {file = "ipython-8.23.0.tar.gz", hash = "sha256:7468edaf4f6de3e1b912e57f66c241e6fd3c7099f2ec2136e239e142e800274d"},
+ {file = "ipython-8.25.0-py3-none-any.whl", hash = "sha256:53eee7ad44df903a06655871cbab66d156a051fd86f3ec6750470ac9604ac1ab"},
+ {file = "ipython-8.25.0.tar.gz", hash = "sha256:c6ed726a140b6e725b911528f80439c534fac915246af3efc39440a6b0f9d716"},
]
[package.dependencies]
@@ -832,12 +903,12 @@ prompt-toolkit = ">=3.0.41,<3.1.0"
pygments = ">=2.4.0"
stack-data = "*"
traitlets = ">=5.13.0"
-typing-extensions = {version = "*", markers = "python_version < \"3.12\""}
+typing-extensions = {version = ">=4.6", markers = "python_version < \"3.12\""}
[package.extras]
all = ["ipython[black,doc,kernel,matplotlib,nbconvert,nbformat,notebook,parallel,qtconsole]", "ipython[test,test-extra]"]
black = ["black"]
-doc = ["docrepr", "exceptiongroup", "ipykernel", "ipython[test]", "matplotlib", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "sphinxcontrib-jquery", "stack-data", "typing-extensions"]
+doc = ["docrepr", "exceptiongroup", "intersphinx-registry", "ipykernel", "ipython[test]", "matplotlib", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "sphinxcontrib-jquery", "tomli", "typing-extensions"]
kernel = ["ipykernel"]
matplotlib = ["matplotlib"]
nbconvert = ["nbconvert"]
@@ -845,7 +916,7 @@ nbformat = ["nbformat"]
notebook = ["ipywidgets", "notebook"]
parallel = ["ipyparallel"]
qtconsole = ["qtconsole"]
-test = ["pickleshare", "pytest (<8)", "pytest-asyncio (<0.22)", "testpath"]
+test = ["pickleshare", "pytest", "pytest-asyncio (<0.22)", "testpath"]
test-extra = ["curio", "ipython[test]", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.23)", "pandas", "trio"]
[[package]]
@@ -897,13 +968,13 @@ testing = ["Django", "attrs", "colorama", "docopt", "pytest (<7.0.0)"]
[[package]]
name = "jinja2"
-version = "3.1.3"
+version = "3.1.4"
description = "A very fast and expressive template engine."
optional = false
python-versions = ">=3.7"
files = [
- {file = "Jinja2-3.1.3-py3-none-any.whl", hash = "sha256:7d6d50dd97d52cbc355597bd845fabfbac3f551e1f99619e39a35ce8c370b5fa"},
- {file = "Jinja2-3.1.3.tar.gz", hash = "sha256:ac8bd6544d4bb2c9792bf3a159e80bba8fda7f07e81bc3aed565432d5925ba90"},
+ {file = "jinja2-3.1.4-py3-none-any.whl", hash = "sha256:bc5dd2abb727a5319567b7a813e6a2e7318c39f4f487cfe6c89c6f9c7d25197d"},
+ {file = "jinja2-3.1.4.tar.gz", hash = "sha256:4a3aee7acbbe7303aede8e9648d13b8bf88a429282aa6122a993f0ac800cb369"},
]
[package.dependencies]
@@ -925,24 +996,24 @@ files = [
[[package]]
name = "jsonpointer"
-version = "2.4"
+version = "3.0.0"
description = "Identify specific nodes in a JSON document (RFC 6901)"
optional = false
-python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, !=3.6.*"
+python-versions = ">=3.7"
files = [
- {file = "jsonpointer-2.4-py2.py3-none-any.whl", hash = "sha256:15d51bba20eea3165644553647711d150376234112651b4f1811022aecad7d7a"},
- {file = "jsonpointer-2.4.tar.gz", hash = "sha256:585cee82b70211fa9e6043b7bb89db6e1aa49524340dde8ad6b63206ea689d88"},
+ {file = "jsonpointer-3.0.0-py2.py3-none-any.whl", hash = "sha256:13e088adc14fca8b6aa8177c044e12701e6ad4b28ff10e65f2267a90109c9942"},
+ {file = "jsonpointer-3.0.0.tar.gz", hash = "sha256:2b2d729f2091522d61c3b31f82e11870f60b68f43fbc705cb76bf4b832af59ef"},
]
[[package]]
name = "jsonschema"
-version = "4.21.1"
+version = "4.22.0"
description = "An implementation of JSON Schema validation for Python"
optional = false
python-versions = ">=3.8"
files = [
- {file = "jsonschema-4.21.1-py3-none-any.whl", hash = "sha256:7996507afae316306f9e2290407761157c6f78002dcf7419acb99822143d1c6f"},
- {file = "jsonschema-4.21.1.tar.gz", hash = "sha256:85727c00279f5fa6bedbe6238d2aa6403bedd8b4864ab11207d07df3cc1b2ee5"},
+ {file = "jsonschema-4.22.0-py3-none-any.whl", hash = "sha256:ff4cfd6b1367a40e7bc6411caec72effadd3db0bbe5017de188f2d6108335802"},
+ {file = "jsonschema-4.22.0.tar.gz", hash = "sha256:5b22d434a45935119af990552c862e5d6d564e8f6601206b305a61fdf661a2b7"},
]
[package.dependencies]
@@ -979,13 +1050,13 @@ referencing = ">=0.31.0"
[[package]]
name = "jupyter-client"
-version = "8.6.1"
+version = "8.6.2"
description = "Jupyter protocol implementation and client libraries"
optional = false
python-versions = ">=3.8"
files = [
- {file = "jupyter_client-8.6.1-py3-none-any.whl", hash = "sha256:3b7bd22f058434e3b9a7ea4b1500ed47de2713872288c0d511d19926f99b459f"},
- {file = "jupyter_client-8.6.1.tar.gz", hash = "sha256:e842515e2bab8e19186d89fdfea7abd15e39dd581f94e399f00e2af5a1652d3f"},
+ {file = "jupyter_client-8.6.2-py3-none-any.whl", hash = "sha256:50cbc5c66fd1b8f65ecb66bc490ab73217993632809b6e505687de18e9dea39f"},
+ {file = "jupyter_client-8.6.2.tar.gz", hash = "sha256:2bda14d55ee5ba58552a8c53ae43d215ad9868853489213f37da060ced54d8df"},
]
[package.dependencies]
@@ -997,7 +1068,7 @@ traitlets = ">=5.3"
[package.extras]
docs = ["ipykernel", "myst-parser", "pydata-sphinx-theme", "sphinx (>=4)", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling"]
-test = ["coverage", "ipykernel (>=6.14)", "mypy", "paramiko", "pre-commit", "pytest", "pytest-cov", "pytest-jupyter[client] (>=0.4.1)", "pytest-timeout"]
+test = ["coverage", "ipykernel (>=6.14)", "mypy", "paramiko", "pre-commit", "pytest (<8.2.0)", "pytest-cov", "pytest-jupyter[client] (>=0.4.1)", "pytest-timeout"]
[[package]]
name = "jupyter-core"
@@ -1060,13 +1131,13 @@ jupyter-server = ">=1.1.2"
[[package]]
name = "jupyter-server"
-version = "2.14.0"
+version = "2.14.1"
description = "The backend—i.e. core services, APIs, and REST endpoints—to Jupyter web applications."
optional = false
python-versions = ">=3.8"
files = [
- {file = "jupyter_server-2.14.0-py3-none-any.whl", hash = "sha256:fb6be52c713e80e004fac34b35a0990d6d36ba06fd0a2b2ed82b899143a64210"},
- {file = "jupyter_server-2.14.0.tar.gz", hash = "sha256:659154cea512083434fd7c93b7fe0897af7a2fd0b9dd4749282b42eaac4ae677"},
+ {file = "jupyter_server-2.14.1-py3-none-any.whl", hash = "sha256:16f7177c3a4ea8fe37784e2d31271981a812f0b2874af17339031dc3510cc2a5"},
+ {file = "jupyter_server-2.14.1.tar.gz", hash = "sha256:12558d158ec7a0653bf96cc272bc7ad79e0127d503b982ed144399346694f726"},
]
[package.dependencies]
@@ -1091,7 +1162,7 @@ traitlets = ">=5.6.0"
websocket-client = ">=1.7"
[package.extras]
-docs = ["ipykernel", "jinja2", "jupyter-client", "jupyter-server", "myst-parser", "nbformat", "prometheus-client", "pydata-sphinx-theme", "send2trash", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-openapi (>=0.8.0)", "sphinxcontrib-spelling", "sphinxemoji", "tornado", "typing-extensions"]
+docs = ["ipykernel", "jinja2", "jupyter-client", "myst-parser", "nbformat", "prometheus-client", "pydata-sphinx-theme", "send2trash", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-openapi (>=0.8.0)", "sphinxcontrib-spelling", "sphinxemoji", "tornado", "typing-extensions"]
test = ["flaky", "ipykernel", "pre-commit", "pytest (>=7.0,<9)", "pytest-console-scripts", "pytest-jupyter[server] (>=0.7)", "pytest-timeout", "requests"]
[[package]]
@@ -1115,13 +1186,13 @@ test = ["jupyter-server (>=2.0.0)", "pytest (>=7.0)", "pytest-jupyter[server] (>
[[package]]
name = "jupyterlab"
-version = "4.1.6"
+version = "4.2.2"
description = "JupyterLab computational environment"
optional = false
python-versions = ">=3.8"
files = [
- {file = "jupyterlab-4.1.6-py3-none-any.whl", hash = "sha256:cf3e862bc10dbf4331e4eb37438634f813c238cfc62c71c640b3b3b2caa089a8"},
- {file = "jupyterlab-4.1.6.tar.gz", hash = "sha256:7935f36ba26eb615183a4f5c2bbca5791b5108ce2a00b5505f8cfd100d53648e"},
+ {file = "jupyterlab-4.2.2-py3-none-any.whl", hash = "sha256:59ee9b839f43308c3dfd55d72d1f1a299ed42a7f91f2d1afe9c12a783f9e525f"},
+ {file = "jupyterlab-4.2.2.tar.gz", hash = "sha256:a534b6a25719a92a40d514fb133a9fe8f0d9981b0bbce5d8a5fcaa33344a3038"},
]
[package.dependencies]
@@ -1132,18 +1203,19 @@ jinja2 = ">=3.0.3"
jupyter-core = "*"
jupyter-lsp = ">=2.0.0"
jupyter-server = ">=2.4.0,<3"
-jupyterlab-server = ">=2.19.0,<3"
+jupyterlab-server = ">=2.27.1,<3"
notebook-shim = ">=0.2"
packaging = "*"
+setuptools = ">=40.1.0"
tornado = ">=6.2.0"
traitlets = "*"
[package.extras]
-dev = ["build", "bump2version", "coverage", "hatch", "pre-commit", "pytest-cov", "ruff (==0.2.0)"]
+dev = ["build", "bump2version", "coverage", "hatch", "pre-commit", "pytest-cov", "ruff (==0.3.5)"]
docs = ["jsx-lexer", "myst-parser", "pydata-sphinx-theme (>=0.13.0)", "pytest", "pytest-check-links", "pytest-jupyter", "sphinx (>=1.8,<7.3.0)", "sphinx-copybutton"]
-docs-screenshots = ["altair (==5.2.0)", "ipython (==8.16.1)", "ipywidgets (==8.1.1)", "jupyterlab-geojson (==3.4.0)", "jupyterlab-language-pack-zh-cn (==4.0.post6)", "matplotlib (==3.8.2)", "nbconvert (>=7.0.0)", "pandas (==2.2.0)", "scipy (==1.12.0)", "vega-datasets (==0.9.0)"]
+docs-screenshots = ["altair (==5.3.0)", "ipython (==8.16.1)", "ipywidgets (==8.1.2)", "jupyterlab-geojson (==3.4.0)", "jupyterlab-language-pack-zh-cn (==4.1.post2)", "matplotlib (==3.8.3)", "nbconvert (>=7.0.0)", "pandas (==2.2.1)", "scipy (==1.12.0)", "vega-datasets (==0.9.0)"]
test = ["coverage", "pytest (>=7.0)", "pytest-check-links (>=0.7)", "pytest-console-scripts", "pytest-cov", "pytest-jupyter (>=0.5.3)", "pytest-timeout", "pytest-tornasync", "requests", "requests-cache", "virtualenv"]
-upgrade-extension = ["copier (>=8.0,<9.0)", "jinja2-time (<0.3)", "pydantic (<2.0)", "pyyaml-include (<2.0)", "tomli-w (<2.0)"]
+upgrade-extension = ["copier (>=8,<10)", "jinja2-time (<0.3)", "pydantic (<2.0)", "pyyaml-include (<2.0)", "tomli-w (<2.0)"]
[[package]]
name = "jupyterlab-pygments"
@@ -1158,13 +1230,13 @@ files = [
[[package]]
name = "jupyterlab-server"
-version = "2.27.1"
+version = "2.27.2"
description = "A set of server components for JupyterLab and JupyterLab like applications."
optional = false
python-versions = ">=3.8"
files = [
- {file = "jupyterlab_server-2.27.1-py3-none-any.whl", hash = "sha256:f5e26156e5258b24d532c84e7c74cc212e203bff93eb856f81c24c16daeecc75"},
- {file = "jupyterlab_server-2.27.1.tar.gz", hash = "sha256:097b5ac709b676c7284ac9c5e373f11930a561f52cd5a86e4fc7e5a9c8a8631d"},
+ {file = "jupyterlab_server-2.27.2-py3-none-any.whl", hash = "sha256:54aa2d64fd86383b5438d9f0c032f043c4d8c0264b8af9f60bd061157466ea43"},
+ {file = "jupyterlab_server-2.27.2.tar.gz", hash = "sha256:15cbb349dc45e954e09bacf81b9f9bcb10815ff660fb2034ecd7417db3a7ea27"},
]
[package.dependencies]
@@ -1291,13 +1363,13 @@ files = [
[[package]]
name = "marshmallow"
-version = "3.21.1"
+version = "3.21.3"
description = "A lightweight library for converting complex datatypes to and from native Python datatypes."
optional = false
python-versions = ">=3.8"
files = [
- {file = "marshmallow-3.21.1-py3-none-any.whl", hash = "sha256:f085493f79efb0644f270a9bf2892843142d80d7174bbbd2f3713f2a589dc633"},
- {file = "marshmallow-3.21.1.tar.gz", hash = "sha256:4e65e9e0d80fc9e609574b9983cf32579f305c718afb30d7233ab818571768c3"},
+ {file = "marshmallow-3.21.3-py3-none-any.whl", hash = "sha256:86ce7fb914aa865001a4b2092c4c2872d13bc347f3d42673272cabfdbad386f1"},
+ {file = "marshmallow-3.21.3.tar.gz", hash = "sha256:4f57c5e050a54d66361e826f94fba213eb10b67b2fdb02c3e0343ce207ba1662"},
]
[package.dependencies]
@@ -1305,7 +1377,7 @@ packaging = ">=17.0"
[package.extras]
dev = ["marshmallow[tests]", "pre-commit (>=3.5,<4.0)", "tox"]
-docs = ["alabaster (==0.7.16)", "autodocsumm (==0.2.12)", "sphinx (==7.2.6)", "sphinx-issues (==4.0.0)", "sphinx-version-warning (==1.1.2)"]
+docs = ["alabaster (==0.7.16)", "autodocsumm (==0.2.12)", "sphinx (==7.3.7)", "sphinx-issues (==4.1.0)", "sphinx-version-warning (==1.1.2)"]
tests = ["pytest", "pytz", "simplejson"]
[[package]]
@@ -1357,38 +1429,38 @@ files = [
[[package]]
name = "mypy"
-version = "1.9.0"
+version = "1.10.0"
description = "Optional static typing for Python"
optional = false
python-versions = ">=3.8"
files = [
- {file = "mypy-1.9.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f8a67616990062232ee4c3952f41c779afac41405806042a8126fe96e098419f"},
- {file = "mypy-1.9.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d357423fa57a489e8c47b7c85dfb96698caba13d66e086b412298a1a0ea3b0ed"},
- {file = "mypy-1.9.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:49c87c15aed320de9b438ae7b00c1ac91cd393c1b854c2ce538e2a72d55df150"},
- {file = "mypy-1.9.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:48533cdd345c3c2e5ef48ba3b0d3880b257b423e7995dada04248725c6f77374"},
- {file = "mypy-1.9.0-cp310-cp310-win_amd64.whl", hash = "sha256:4d3dbd346cfec7cb98e6cbb6e0f3c23618af826316188d587d1c1bc34f0ede03"},
- {file = "mypy-1.9.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:653265f9a2784db65bfca694d1edd23093ce49740b2244cde583aeb134c008f3"},
- {file = "mypy-1.9.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3a3c007ff3ee90f69cf0a15cbcdf0995749569b86b6d2f327af01fd1b8aee9dc"},
- {file = "mypy-1.9.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2418488264eb41f69cc64a69a745fad4a8f86649af4b1041a4c64ee61fc61129"},
- {file = "mypy-1.9.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:68edad3dc7d70f2f17ae4c6c1b9471a56138ca22722487eebacfd1eb5321d612"},
- {file = "mypy-1.9.0-cp311-cp311-win_amd64.whl", hash = "sha256:85ca5fcc24f0b4aeedc1d02f93707bccc04733f21d41c88334c5482219b1ccb3"},
- {file = "mypy-1.9.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:aceb1db093b04db5cd390821464504111b8ec3e351eb85afd1433490163d60cd"},
- {file = "mypy-1.9.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0235391f1c6f6ce487b23b9dbd1327b4ec33bb93934aa986efe8a9563d9349e6"},
- {file = "mypy-1.9.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d4d5ddc13421ba3e2e082a6c2d74c2ddb3979c39b582dacd53dd5d9431237185"},
- {file = "mypy-1.9.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:190da1ee69b427d7efa8aa0d5e5ccd67a4fb04038c380237a0d96829cb157913"},
- {file = "mypy-1.9.0-cp312-cp312-win_amd64.whl", hash = "sha256:fe28657de3bfec596bbeef01cb219833ad9d38dd5393fc649f4b366840baefe6"},
- {file = "mypy-1.9.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:e54396d70be04b34f31d2edf3362c1edd023246c82f1730bbf8768c28db5361b"},
- {file = "mypy-1.9.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:5e6061f44f2313b94f920e91b204ec600982961e07a17e0f6cd83371cb23f5c2"},
- {file = "mypy-1.9.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:81a10926e5473c5fc3da8abb04119a1f5811a236dc3a38d92015cb1e6ba4cb9e"},
- {file = "mypy-1.9.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b685154e22e4e9199fc95f298661deea28aaede5ae16ccc8cbb1045e716b3e04"},
- {file = "mypy-1.9.0-cp38-cp38-win_amd64.whl", hash = "sha256:5d741d3fc7c4da608764073089e5f58ef6352bedc223ff58f2f038c2c4698a89"},
- {file = "mypy-1.9.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:587ce887f75dd9700252a3abbc9c97bbe165a4a630597845c61279cf32dfbf02"},
- {file = "mypy-1.9.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f88566144752999351725ac623471661c9d1cd8caa0134ff98cceeea181789f4"},
- {file = "mypy-1.9.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:61758fabd58ce4b0720ae1e2fea5cfd4431591d6d590b197775329264f86311d"},
- {file = "mypy-1.9.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:e49499be624dead83927e70c756970a0bc8240e9f769389cdf5714b0784ca6bf"},
- {file = "mypy-1.9.0-cp39-cp39-win_amd64.whl", hash = "sha256:571741dc4194b4f82d344b15e8837e8c5fcc462d66d076748142327626a1b6e9"},
- {file = "mypy-1.9.0-py3-none-any.whl", hash = "sha256:a260627a570559181a9ea5de61ac6297aa5af202f06fd7ab093ce74e7181e43e"},
- {file = "mypy-1.9.0.tar.gz", hash = "sha256:3cc5da0127e6a478cddd906068496a97a7618a21ce9b54bde5bf7e539c7af974"},
+ {file = "mypy-1.10.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:da1cbf08fb3b851ab3b9523a884c232774008267b1f83371ace57f412fe308c2"},
+ {file = "mypy-1.10.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:12b6bfc1b1a66095ab413160a6e520e1dc076a28f3e22f7fb25ba3b000b4ef99"},
+ {file = "mypy-1.10.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9e36fb078cce9904c7989b9693e41cb9711e0600139ce3970c6ef814b6ebc2b2"},
+ {file = "mypy-1.10.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2b0695d605ddcd3eb2f736cd8b4e388288c21e7de85001e9f85df9187f2b50f9"},
+ {file = "mypy-1.10.0-cp310-cp310-win_amd64.whl", hash = "sha256:cd777b780312ddb135bceb9bc8722a73ec95e042f911cc279e2ec3c667076051"},
+ {file = "mypy-1.10.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3be66771aa5c97602f382230165b856c231d1277c511c9a8dd058be4784472e1"},
+ {file = "mypy-1.10.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8b2cbaca148d0754a54d44121b5825ae71868c7592a53b7292eeb0f3fdae95ee"},
+ {file = "mypy-1.10.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ec404a7cbe9fc0e92cb0e67f55ce0c025014e26d33e54d9e506a0f2d07fe5de"},
+ {file = "mypy-1.10.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e22e1527dc3d4aa94311d246b59e47f6455b8729f4968765ac1eacf9a4760bc7"},
+ {file = "mypy-1.10.0-cp311-cp311-win_amd64.whl", hash = "sha256:a87dbfa85971e8d59c9cc1fcf534efe664d8949e4c0b6b44e8ca548e746a8d53"},
+ {file = "mypy-1.10.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:a781f6ad4bab20eef8b65174a57e5203f4be627b46291f4589879bf4e257b97b"},
+ {file = "mypy-1.10.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b808e12113505b97d9023b0b5e0c0705a90571c6feefc6f215c1df9381256e30"},
+ {file = "mypy-1.10.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f55583b12156c399dce2df7d16f8a5095291354f1e839c252ec6c0611e86e2e"},
+ {file = "mypy-1.10.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4cf18f9d0efa1b16478c4c129eabec36148032575391095f73cae2e722fcf9d5"},
+ {file = "mypy-1.10.0-cp312-cp312-win_amd64.whl", hash = "sha256:bc6ac273b23c6b82da3bb25f4136c4fd42665f17f2cd850771cb600bdd2ebeda"},
+ {file = "mypy-1.10.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9fd50226364cd2737351c79807775136b0abe084433b55b2e29181a4c3c878c0"},
+ {file = "mypy-1.10.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f90cff89eea89273727d8783fef5d4a934be2fdca11b47def50cf5d311aff727"},
+ {file = "mypy-1.10.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fcfc70599efde5c67862a07a1aaf50e55bce629ace26bb19dc17cece5dd31ca4"},
+ {file = "mypy-1.10.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:075cbf81f3e134eadaf247de187bd604748171d6b79736fa9b6c9685b4083061"},
+ {file = "mypy-1.10.0-cp38-cp38-win_amd64.whl", hash = "sha256:3f298531bca95ff615b6e9f2fc0333aae27fa48052903a0ac90215021cdcfa4f"},
+ {file = "mypy-1.10.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:fa7ef5244615a2523b56c034becde4e9e3f9b034854c93639adb667ec9ec2976"},
+ {file = "mypy-1.10.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3236a4c8f535a0631f85f5fcdffba71c7feeef76a6002fcba7c1a8e57c8be1ec"},
+ {file = "mypy-1.10.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4a2b5cdbb5dd35aa08ea9114436e0d79aceb2f38e32c21684dcf8e24e1e92821"},
+ {file = "mypy-1.10.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:92f93b21c0fe73dc00abf91022234c79d793318b8a96faac147cd579c1671746"},
+ {file = "mypy-1.10.0-cp39-cp39-win_amd64.whl", hash = "sha256:28d0e038361b45f099cc086d9dd99c15ff14d0188f44ac883010e172ce86c38a"},
+ {file = "mypy-1.10.0-py3-none-any.whl", hash = "sha256:f8c083976eb530019175aabadb60921e73b4f45736760826aa1689dda8208aee"},
+ {file = "mypy-1.10.0.tar.gz", hash = "sha256:3d087fcbec056c4ee34974da493a826ce316947485cef3901f511848e687c131"},
]
[package.dependencies]
@@ -1436,13 +1508,13 @@ test = ["flaky", "ipykernel (>=6.19.3)", "ipython", "ipywidgets", "nbconvert (>=
[[package]]
name = "nbconvert"
-version = "7.16.3"
+version = "7.16.4"
description = "Converting Jupyter Notebooks (.ipynb files) to other formats. Output formats include asciidoc, html, latex, markdown, pdf, py, rst, script. nbconvert can be used both as a Python library (`import nbconvert`) or as a command line tool (invoked as `jupyter nbconvert ...`)."
optional = false
python-versions = ">=3.8"
files = [
- {file = "nbconvert-7.16.3-py3-none-any.whl", hash = "sha256:ddeff14beeeedf3dd0bc506623e41e4507e551736de59df69a91f86700292b3b"},
- {file = "nbconvert-7.16.3.tar.gz", hash = "sha256:a6733b78ce3d47c3f85e504998495b07e6ea9cf9bf6ec1c98dda63ec6ad19142"},
+ {file = "nbconvert-7.16.4-py3-none-any.whl", hash = "sha256:05873c620fe520b6322bf8a5ad562692343fe3452abda5765c7a34b7d1aa3eb3"},
+ {file = "nbconvert-7.16.4.tar.gz", hash = "sha256:86ca91ba266b0a448dc96fa6c5b9d98affabde2867b363258703536807f9f7f4"},
]
[package.dependencies]
@@ -1463,9 +1535,9 @@ tinycss2 = "*"
traitlets = ">=5.1"
[package.extras]
-all = ["nbconvert[docs,qtpdf,serve,test,webpdf]"]
+all = ["flaky", "ipykernel", "ipython", "ipywidgets (>=7.5)", "myst-parser", "nbsphinx (>=0.2.12)", "playwright", "pydata-sphinx-theme", "pyqtwebengine (>=5.15)", "pytest (>=7)", "sphinx (==5.0.2)", "sphinxcontrib-spelling", "tornado (>=6.1)"]
docs = ["ipykernel", "ipython", "myst-parser", "nbsphinx (>=0.2.12)", "pydata-sphinx-theme", "sphinx (==5.0.2)", "sphinxcontrib-spelling"]
-qtpdf = ["nbconvert[qtpng]"]
+qtpdf = ["pyqtwebengine (>=5.15)"]
qtpng = ["pyqtwebengine (>=5.15)"]
serve = ["tornado (>=6.1)"]
test = ["flaky", "ipykernel", "ipywidgets (>=7.5)", "pytest (>=7)"]
@@ -1505,26 +1577,26 @@ files = [
[[package]]
name = "notebook"
-version = "7.1.3"
+version = "7.2.1"
description = "Jupyter Notebook - A web-based notebook environment for interactive computing"
optional = false
python-versions = ">=3.8"
files = [
- {file = "notebook-7.1.3-py3-none-any.whl", hash = "sha256:919b911e59f41f6e3857ce93c9d93535ba66bb090059712770e5968c07e1004d"},
- {file = "notebook-7.1.3.tar.gz", hash = "sha256:41fcebff44cf7bb9377180808bcbae066629b55d8c7722f1ebbe75ca44f9cfc1"},
+ {file = "notebook-7.2.1-py3-none-any.whl", hash = "sha256:f45489a3995746f2195a137e0773e2130960b51c9ac3ce257dbc2705aab3a6ca"},
+ {file = "notebook-7.2.1.tar.gz", hash = "sha256:4287b6da59740b32173d01d641f763d292f49c30e7a51b89c46ba8473126341e"},
]
[package.dependencies]
jupyter-server = ">=2.4.0,<3"
-jupyterlab = ">=4.1.1,<4.2"
-jupyterlab-server = ">=2.22.1,<3"
+jupyterlab = ">=4.2.0,<4.3"
+jupyterlab-server = ">=2.27.1,<3"
notebook-shim = ">=0.2,<0.3"
tornado = ">=6.2.0"
[package.extras]
dev = ["hatch", "pre-commit"]
docs = ["myst-parser", "nbsphinx", "pydata-sphinx-theme", "sphinx (>=1.3.6)", "sphinxcontrib-github-alt", "sphinxcontrib-spelling"]
-test = ["importlib-resources (>=5.0)", "ipykernel", "jupyter-server[test] (>=2.4.0,<3)", "jupyterlab-server[test] (>=2.22.1,<3)", "nbval", "pytest (>=7.0)", "pytest-console-scripts", "pytest-timeout", "pytest-tornasync", "requests"]
+test = ["importlib-resources (>=5.0)", "ipykernel", "jupyter-server[test] (>=2.4.0,<3)", "jupyterlab-server[test] (>=2.27.1,<3)", "nbval", "pytest (>=7.0)", "pytest-console-scripts", "pytest-timeout", "pytest-tornasync", "requests"]
[[package]]
name = "notebook-shim"
@@ -1601,13 +1673,13 @@ files = [
[[package]]
name = "packaging"
-version = "24.0"
+version = "24.1"
description = "Core utilities for Python packages"
optional = false
-python-versions = ">=3.7"
+python-versions = ">=3.8"
files = [
- {file = "packaging-24.0-py3-none-any.whl", hash = "sha256:2ddfb553fdf02fb784c234c7ba6ccc288296ceabec964ad2eae3777778130bc5"},
- {file = "packaging-24.0.tar.gz", hash = "sha256:eb82c5e3e56209074766e6885bb04b8c38a0c015d0a30036ebe7ece34c9989e9"},
+ {file = "packaging-24.1-py3-none-any.whl", hash = "sha256:5b8f2217dbdbd2f7f384c41c628544e6d52f2d0f53c6d0c3ea61aa5d1d7ff124"},
+ {file = "packaging-24.1.tar.gz", hash = "sha256:026ed72c8ed3fcce5bf8950572258698927fd1dbda10a5e981cdf0ac37f4f002"},
]
[[package]]
@@ -1650,8 +1722,8 @@ files = [
[package.dependencies]
numpy = [
- {version = ">=1.23.2", markers = "python_version == \"3.11\""},
{version = ">=1.26.0", markers = "python_version >= \"3.12\""},
+ {version = ">=1.23.2", markers = "python_version == \"3.11\""},
]
python-dateutil = ">=2.8.2"
pytz = ">=2020.1"
@@ -1684,17 +1756,20 @@ xml = ["lxml (>=4.9.2)"]
[[package]]
name = "pandas-stubs"
-version = "2.2.1.240316"
+version = "2.2.2.240603"
description = "Type annotations for pandas"
optional = false
python-versions = ">=3.9"
files = [
- {file = "pandas_stubs-2.2.1.240316-py3-none-any.whl", hash = "sha256:0126a26451a37cb893ea62357ca87ba3d181bd999ec8ba2ca5602e20207d6682"},
- {file = "pandas_stubs-2.2.1.240316.tar.gz", hash = "sha256:236a4f812fb6b1922e9607ff09e427f6d8540c421c9e5a40e3e4ddf7adac7f05"},
+ {file = "pandas_stubs-2.2.2.240603-py3-none-any.whl", hash = "sha256:e08ce7f602a4da2bff5a67475ba881c39f2a4d4f7fccc1cba57c6f35a379c6c0"},
+ {file = "pandas_stubs-2.2.2.240603.tar.gz", hash = "sha256:2dcc86e8fa6ea41535a4561c1f08b3942ba5267b464eff2e99caeee66f9e4cd1"},
]
[package.dependencies]
-numpy = {version = ">=1.26.0", markers = "python_version < \"3.13\""}
+numpy = [
+ {version = ">=1.26.0", markers = "python_version >= \"3.12\" and python_version < \"3.13\""},
+ {version = ">=1.23.5", markers = "python_version >= \"3.9\" and python_version < \"3.12\""},
+]
types-pytz = ">=2022.1.1"
[[package]]
@@ -1750,13 +1825,13 @@ ptyprocess = ">=0.5"
[[package]]
name = "platformdirs"
-version = "4.2.1"
+version = "4.2.2"
description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`."
optional = false
python-versions = ">=3.8"
files = [
- {file = "platformdirs-4.2.1-py3-none-any.whl", hash = "sha256:17d5a1161b3fd67b390023cb2d3b026bbd40abde6fdb052dfbd3a29c3ba22ee1"},
- {file = "platformdirs-4.2.1.tar.gz", hash = "sha256:031cd18d4ec63ec53e82dceaac0417d218a6863f7745dfcc9efe7793b7039bdf"},
+ {file = "platformdirs-4.2.2-py3-none-any.whl", hash = "sha256:2d7a1657e36a80ea911db832a8a6ece5ee53d8de21edd5cc5879af6530b1bfee"},
+ {file = "platformdirs-4.2.2.tar.gz", hash = "sha256:38b7b51f512eed9e84a22788b4bce1de17c0adb134d6becb09836e37d8654cd3"},
]
[package.extras]
@@ -1766,13 +1841,13 @@ type = ["mypy (>=1.8)"]
[[package]]
name = "plotly"
-version = "5.21.0"
+version = "5.22.0"
description = "An open-source, interactive data visualization library for Python"
optional = false
python-versions = ">=3.8"
files = [
- {file = "plotly-5.21.0-py3-none-any.whl", hash = "sha256:a33f41fd5922e45b2b253f795b200d14452eb625790bb72d0a72cf1328a6abbf"},
- {file = "plotly-5.21.0.tar.gz", hash = "sha256:69243f8c165d4be26c0df1c6f0b7b258e2dfeefe032763404ad7e7fb7d7c2073"},
+ {file = "plotly-5.22.0-py3-none-any.whl", hash = "sha256:68fc1901f098daeb233cc3dd44ec9dc31fb3ca4f4e53189344199c43496ed006"},
+ {file = "plotly-5.22.0.tar.gz", hash = "sha256:859fdadbd86b5770ae2466e542b761b247d1c6b49daed765b95bb8c7063e7469"},
]
[package.dependencies]
@@ -1810,13 +1885,13 @@ twisted = ["twisted"]
[[package]]
name = "prompt-toolkit"
-version = "3.0.43"
+version = "3.0.47"
description = "Library for building powerful interactive command lines in Python"
optional = false
python-versions = ">=3.7.0"
files = [
- {file = "prompt_toolkit-3.0.43-py3-none-any.whl", hash = "sha256:a11a29cb3bf0a28a387fe5122cdb649816a957cd9261dcedf8c9f1fef33eacf6"},
- {file = "prompt_toolkit-3.0.43.tar.gz", hash = "sha256:3527b7af26106cbc65a040bcc84839a3566ec1b051bb0bfe953631e704b0ff7d"},
+ {file = "prompt_toolkit-3.0.47-py3-none-any.whl", hash = "sha256:0d7bfa67001d5e39d02c224b663abc33687405033a8c422d0d675a5a13361d10"},
+ {file = "prompt_toolkit-3.0.47.tar.gz", hash = "sha256:1e1b29cb58080b1e69f207c893a1a7bf16d127a5c30c9d17a25a5d77792e5360"},
]
[package.dependencies]
@@ -1888,18 +1963,18 @@ files = [
[[package]]
name = "pydantic"
-version = "2.7.1"
+version = "2.7.3"
description = "Data validation using Python type hints"
optional = false
python-versions = ">=3.8"
files = [
- {file = "pydantic-2.7.1-py3-none-any.whl", hash = "sha256:e029badca45266732a9a79898a15ae2e8b14840b1eabbb25844be28f0b33f3d5"},
- {file = "pydantic-2.7.1.tar.gz", hash = "sha256:e9dbb5eada8abe4d9ae5f46b9939aead650cd2b68f249bb3a8139dbe125803cc"},
+ {file = "pydantic-2.7.3-py3-none-any.whl", hash = "sha256:ea91b002777bf643bb20dd717c028ec43216b24a6001a280f83877fd2655d0b4"},
+ {file = "pydantic-2.7.3.tar.gz", hash = "sha256:c46c76a40bb1296728d7a8b99aa73dd70a48c3510111ff290034f860c99c419e"},
]
[package.dependencies]
annotated-types = ">=0.4.0"
-pydantic-core = "2.18.2"
+pydantic-core = "2.18.4"
typing-extensions = ">=4.6.1"
[package.extras]
@@ -1907,90 +1982,90 @@ email = ["email-validator (>=2.0.0)"]
[[package]]
name = "pydantic-core"
-version = "2.18.2"
+version = "2.18.4"
description = "Core functionality for Pydantic validation and serialization"
optional = false
python-versions = ">=3.8"
files = [
- {file = "pydantic_core-2.18.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:9e08e867b306f525802df7cd16c44ff5ebbe747ff0ca6cf3fde7f36c05a59a81"},
- {file = "pydantic_core-2.18.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f0a21cbaa69900cbe1a2e7cad2aa74ac3cf21b10c3efb0fa0b80305274c0e8a2"},
- {file = "pydantic_core-2.18.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0680b1f1f11fda801397de52c36ce38ef1c1dc841a0927a94f226dea29c3ae3d"},
- {file = "pydantic_core-2.18.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:95b9d5e72481d3780ba3442eac863eae92ae43a5f3adb5b4d0a1de89d42bb250"},
- {file = "pydantic_core-2.18.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c4fcf5cd9c4b655ad666ca332b9a081112cd7a58a8b5a6ca7a3104bc950f2038"},
- {file = "pydantic_core-2.18.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b5155ff768083cb1d62f3e143b49a8a3432e6789a3abee8acd005c3c7af1c74"},
- {file = "pydantic_core-2.18.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:553ef617b6836fc7e4df130bb851e32fe357ce36336d897fd6646d6058d980af"},
- {file = "pydantic_core-2.18.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b89ed9eb7d616ef5714e5590e6cf7f23b02d0d539767d33561e3675d6f9e3857"},
- {file = "pydantic_core-2.18.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:75f7e9488238e920ab6204399ded280dc4c307d034f3924cd7f90a38b1829563"},
- {file = "pydantic_core-2.18.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:ef26c9e94a8c04a1b2924149a9cb081836913818e55681722d7f29af88fe7b38"},
- {file = "pydantic_core-2.18.2-cp310-none-win32.whl", hash = "sha256:182245ff6b0039e82b6bb585ed55a64d7c81c560715d1bad0cbad6dfa07b4027"},
- {file = "pydantic_core-2.18.2-cp310-none-win_amd64.whl", hash = "sha256:e23ec367a948b6d812301afc1b13f8094ab7b2c280af66ef450efc357d2ae543"},
- {file = "pydantic_core-2.18.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:219da3f096d50a157f33645a1cf31c0ad1fe829a92181dd1311022f986e5fbe3"},
- {file = "pydantic_core-2.18.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:cc1cfd88a64e012b74e94cd00bbe0f9c6df57049c97f02bb07d39e9c852e19a4"},
- {file = "pydantic_core-2.18.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:05b7133a6e6aeb8df37d6f413f7705a37ab4031597f64ab56384c94d98fa0e90"},
- {file = "pydantic_core-2.18.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:224c421235f6102e8737032483f43c1a8cfb1d2f45740c44166219599358c2cd"},
- {file = "pydantic_core-2.18.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b14d82cdb934e99dda6d9d60dc84a24379820176cc4a0d123f88df319ae9c150"},
- {file = "pydantic_core-2.18.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2728b01246a3bba6de144f9e3115b532ee44bd6cf39795194fb75491824a1413"},
- {file = "pydantic_core-2.18.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:470b94480bb5ee929f5acba6995251ada5e059a5ef3e0dfc63cca287283ebfa6"},
- {file = "pydantic_core-2.18.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:997abc4df705d1295a42f95b4eec4950a37ad8ae46d913caeee117b6b198811c"},
- {file = "pydantic_core-2.18.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:75250dbc5290e3f1a0f4618db35e51a165186f9034eff158f3d490b3fed9f8a0"},
- {file = "pydantic_core-2.18.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:4456f2dca97c425231d7315737d45239b2b51a50dc2b6f0c2bb181fce6207664"},
- {file = "pydantic_core-2.18.2-cp311-none-win32.whl", hash = "sha256:269322dcc3d8bdb69f054681edff86276b2ff972447863cf34c8b860f5188e2e"},
- {file = "pydantic_core-2.18.2-cp311-none-win_amd64.whl", hash = "sha256:800d60565aec896f25bc3cfa56d2277d52d5182af08162f7954f938c06dc4ee3"},
- {file = "pydantic_core-2.18.2-cp311-none-win_arm64.whl", hash = "sha256:1404c69d6a676245199767ba4f633cce5f4ad4181f9d0ccb0577e1f66cf4c46d"},
- {file = "pydantic_core-2.18.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:fb2bd7be70c0fe4dfd32c951bc813d9fe6ebcbfdd15a07527796c8204bd36242"},
- {file = "pydantic_core-2.18.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6132dd3bd52838acddca05a72aafb6eab6536aa145e923bb50f45e78b7251043"},
- {file = "pydantic_core-2.18.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7d904828195733c183d20a54230c0df0eb46ec746ea1a666730787353e87182"},
- {file = "pydantic_core-2.18.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c9bd70772c720142be1020eac55f8143a34ec9f82d75a8e7a07852023e46617f"},
- {file = "pydantic_core-2.18.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2b8ed04b3582771764538f7ee7001b02e1170223cf9b75dff0bc698fadb00cf3"},
- {file = "pydantic_core-2.18.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e6dac87ddb34aaec85f873d737e9d06a3555a1cc1a8e0c44b7f8d5daeb89d86f"},
- {file = "pydantic_core-2.18.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ca4ae5a27ad7a4ee5170aebce1574b375de390bc01284f87b18d43a3984df72"},
- {file = "pydantic_core-2.18.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:886eec03591b7cf058467a70a87733b35f44707bd86cf64a615584fd72488b7c"},
- {file = "pydantic_core-2.18.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:ca7b0c1f1c983e064caa85f3792dd2fe3526b3505378874afa84baf662e12241"},
- {file = "pydantic_core-2.18.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4b4356d3538c3649337df4074e81b85f0616b79731fe22dd11b99499b2ebbdf3"},
- {file = "pydantic_core-2.18.2-cp312-none-win32.whl", hash = "sha256:8b172601454f2d7701121bbec3425dd71efcb787a027edf49724c9cefc14c038"},
- {file = "pydantic_core-2.18.2-cp312-none-win_amd64.whl", hash = "sha256:b1bd7e47b1558ea872bd16c8502c414f9e90dcf12f1395129d7bb42a09a95438"},
- {file = "pydantic_core-2.18.2-cp312-none-win_arm64.whl", hash = "sha256:98758d627ff397e752bc339272c14c98199c613f922d4a384ddc07526c86a2ec"},
- {file = "pydantic_core-2.18.2-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:9fdad8e35f278b2c3eb77cbdc5c0a49dada440657bf738d6905ce106dc1de439"},
- {file = "pydantic_core-2.18.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:1d90c3265ae107f91a4f279f4d6f6f1d4907ac76c6868b27dc7fb33688cfb347"},
- {file = "pydantic_core-2.18.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:390193c770399861d8df9670fb0d1874f330c79caaca4642332df7c682bf6b91"},
- {file = "pydantic_core-2.18.2-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:82d5d4d78e4448683cb467897fe24e2b74bb7b973a541ea1dcfec1d3cbce39fb"},
- {file = "pydantic_core-2.18.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4774f3184d2ef3e14e8693194f661dea5a4d6ca4e3dc8e39786d33a94865cefd"},
- {file = "pydantic_core-2.18.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d4d938ec0adf5167cb335acb25a4ee69a8107e4984f8fbd2e897021d9e4ca21b"},
- {file = "pydantic_core-2.18.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e0e8b1be28239fc64a88a8189d1df7fad8be8c1ae47fcc33e43d4be15f99cc70"},
- {file = "pydantic_core-2.18.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:868649da93e5a3d5eacc2b5b3b9235c98ccdbfd443832f31e075f54419e1b96b"},
- {file = "pydantic_core-2.18.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:78363590ef93d5d226ba21a90a03ea89a20738ee5b7da83d771d283fd8a56761"},
- {file = "pydantic_core-2.18.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:852e966fbd035a6468fc0a3496589b45e2208ec7ca95c26470a54daed82a0788"},
- {file = "pydantic_core-2.18.2-cp38-none-win32.whl", hash = "sha256:6a46e22a707e7ad4484ac9ee9f290f9d501df45954184e23fc29408dfad61350"},
- {file = "pydantic_core-2.18.2-cp38-none-win_amd64.whl", hash = "sha256:d91cb5ea8b11607cc757675051f61b3d93f15eca3cefb3e6c704a5d6e8440f4e"},
- {file = "pydantic_core-2.18.2-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:ae0a8a797a5e56c053610fa7be147993fe50960fa43609ff2a9552b0e07013e8"},
- {file = "pydantic_core-2.18.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:042473b6280246b1dbf530559246f6842b56119c2926d1e52b631bdc46075f2a"},
- {file = "pydantic_core-2.18.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a388a77e629b9ec814c1b1e6b3b595fe521d2cdc625fcca26fbc2d44c816804"},
- {file = "pydantic_core-2.18.2-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e25add29b8f3b233ae90ccef2d902d0ae0432eb0d45370fe315d1a5cf231004b"},
- {file = "pydantic_core-2.18.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f459a5ce8434614dfd39bbebf1041952ae01da6bed9855008cb33b875cb024c0"},
- {file = "pydantic_core-2.18.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eff2de745698eb46eeb51193a9f41d67d834d50e424aef27df2fcdee1b153845"},
- {file = "pydantic_core-2.18.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a8309f67285bdfe65c372ea3722b7a5642680f3dba538566340a9d36e920b5f0"},
- {file = "pydantic_core-2.18.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f93a8a2e3938ff656a7c1bc57193b1319960ac015b6e87d76c76bf14fe0244b4"},
- {file = "pydantic_core-2.18.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:22057013c8c1e272eb8d0eebc796701167d8377441ec894a8fed1af64a0bf399"},
- {file = "pydantic_core-2.18.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:cfeecd1ac6cc1fb2692c3d5110781c965aabd4ec5d32799773ca7b1456ac636b"},
- {file = "pydantic_core-2.18.2-cp39-none-win32.whl", hash = "sha256:0d69b4c2f6bb3e130dba60d34c0845ba31b69babdd3f78f7c0c8fae5021a253e"},
- {file = "pydantic_core-2.18.2-cp39-none-win_amd64.whl", hash = "sha256:d9319e499827271b09b4e411905b24a426b8fb69464dfa1696258f53a3334641"},
- {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:a1874c6dd4113308bd0eb568418e6114b252afe44319ead2b4081e9b9521fe75"},
- {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:ccdd111c03bfd3666bd2472b674c6899550e09e9f298954cfc896ab92b5b0e6d"},
- {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e18609ceaa6eed63753037fc06ebb16041d17d28199ae5aba0052c51449650a9"},
- {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e5c584d357c4e2baf0ff7baf44f4994be121e16a2c88918a5817331fc7599d7"},
- {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:43f0f463cf89ace478de71a318b1b4f05ebc456a9b9300d027b4b57c1a2064fb"},
- {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:e1b395e58b10b73b07b7cf740d728dd4ff9365ac46c18751bf8b3d8cca8f625a"},
- {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:0098300eebb1c837271d3d1a2cd2911e7c11b396eac9661655ee524a7f10587b"},
- {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:36789b70d613fbac0a25bb07ab3d9dba4d2e38af609c020cf4d888d165ee0bf3"},
- {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:3f9a801e7c8f1ef8718da265bba008fa121243dfe37c1cea17840b0944dfd72c"},
- {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:3a6515ebc6e69d85502b4951d89131ca4e036078ea35533bb76327f8424531ce"},
- {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:20aca1e2298c56ececfd8ed159ae4dde2df0781988c97ef77d5c16ff4bd5b400"},
- {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:223ee893d77a310a0391dca6df00f70bbc2f36a71a895cecd9a0e762dc37b349"},
- {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2334ce8c673ee93a1d6a65bd90327588387ba073c17e61bf19b4fd97d688d63c"},
- {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:cbca948f2d14b09d20268cda7b0367723d79063f26c4ffc523af9042cad95592"},
- {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:b3ef08e20ec49e02d5c6717a91bb5af9b20f1805583cb0adfe9ba2c6b505b5ae"},
- {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:c6fdc8627910eed0c01aed6a390a252fe3ea6d472ee70fdde56273f198938374"},
- {file = "pydantic_core-2.18.2.tar.gz", hash = "sha256:2e29d20810dfc3043ee13ac7d9e25105799817683348823f305ab3f349b9386e"},
+ {file = "pydantic_core-2.18.4-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:f76d0ad001edd426b92233d45c746fd08f467d56100fd8f30e9ace4b005266e4"},
+ {file = "pydantic_core-2.18.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:59ff3e89f4eaf14050c8022011862df275b552caef8082e37b542b066ce1ff26"},
+ {file = "pydantic_core-2.18.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a55b5b16c839df1070bc113c1f7f94a0af4433fcfa1b41799ce7606e5c79ce0a"},
+ {file = "pydantic_core-2.18.4-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4d0dcc59664fcb8974b356fe0a18a672d6d7cf9f54746c05f43275fc48636851"},
+ {file = "pydantic_core-2.18.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8951eee36c57cd128f779e641e21eb40bc5073eb28b2d23f33eb0ef14ffb3f5d"},
+ {file = "pydantic_core-2.18.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4701b19f7e3a06ea655513f7938de6f108123bf7c86bbebb1196eb9bd35cf724"},
+ {file = "pydantic_core-2.18.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e00a3f196329e08e43d99b79b286d60ce46bed10f2280d25a1718399457e06be"},
+ {file = "pydantic_core-2.18.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:97736815b9cc893b2b7f663628e63f436018b75f44854c8027040e05230eeddb"},
+ {file = "pydantic_core-2.18.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:6891a2ae0e8692679c07728819b6e2b822fb30ca7445f67bbf6509b25a96332c"},
+ {file = "pydantic_core-2.18.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:bc4ff9805858bd54d1a20efff925ccd89c9d2e7cf4986144b30802bf78091c3e"},
+ {file = "pydantic_core-2.18.4-cp310-none-win32.whl", hash = "sha256:1b4de2e51bbcb61fdebd0ab86ef28062704f62c82bbf4addc4e37fa4b00b7cbc"},
+ {file = "pydantic_core-2.18.4-cp310-none-win_amd64.whl", hash = "sha256:6a750aec7bf431517a9fd78cb93c97b9b0c496090fee84a47a0d23668976b4b0"},
+ {file = "pydantic_core-2.18.4-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:942ba11e7dfb66dc70f9ae66b33452f51ac7bb90676da39a7345e99ffb55402d"},
+ {file = "pydantic_core-2.18.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b2ebef0e0b4454320274f5e83a41844c63438fdc874ea40a8b5b4ecb7693f1c4"},
+ {file = "pydantic_core-2.18.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a642295cd0c8df1b86fc3dced1d067874c353a188dc8e0f744626d49e9aa51c4"},
+ {file = "pydantic_core-2.18.4-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5f09baa656c904807e832cf9cce799c6460c450c4ad80803517032da0cd062e2"},
+ {file = "pydantic_core-2.18.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:98906207f29bc2c459ff64fa007afd10a8c8ac080f7e4d5beff4c97086a3dabd"},
+ {file = "pydantic_core-2.18.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:19894b95aacfa98e7cb093cd7881a0c76f55731efad31073db4521e2b6ff5b7d"},
+ {file = "pydantic_core-2.18.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0fbbdc827fe5e42e4d196c746b890b3d72876bdbf160b0eafe9f0334525119c8"},
+ {file = "pydantic_core-2.18.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f85d05aa0918283cf29a30b547b4df2fbb56b45b135f9e35b6807cb28bc47951"},
+ {file = "pydantic_core-2.18.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e85637bc8fe81ddb73fda9e56bab24560bdddfa98aa64f87aaa4e4b6730c23d2"},
+ {file = "pydantic_core-2.18.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:2f5966897e5461f818e136b8451d0551a2e77259eb0f73a837027b47dc95dab9"},
+ {file = "pydantic_core-2.18.4-cp311-none-win32.whl", hash = "sha256:44c7486a4228413c317952e9d89598bcdfb06399735e49e0f8df643e1ccd0558"},
+ {file = "pydantic_core-2.18.4-cp311-none-win_amd64.whl", hash = "sha256:8a7164fe2005d03c64fd3b85649891cd4953a8de53107940bf272500ba8a788b"},
+ {file = "pydantic_core-2.18.4-cp311-none-win_arm64.whl", hash = "sha256:4e99bc050fe65c450344421017f98298a97cefc18c53bb2f7b3531eb39bc7805"},
+ {file = "pydantic_core-2.18.4-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:6f5c4d41b2771c730ea1c34e458e781b18cc668d194958e0112455fff4e402b2"},
+ {file = "pydantic_core-2.18.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2fdf2156aa3d017fddf8aea5adfba9f777db1d6022d392b682d2a8329e087cef"},
+ {file = "pydantic_core-2.18.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4748321b5078216070b151d5271ef3e7cc905ab170bbfd27d5c83ee3ec436695"},
+ {file = "pydantic_core-2.18.4-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:847a35c4d58721c5dc3dba599878ebbdfd96784f3fb8bb2c356e123bdcd73f34"},
+ {file = "pydantic_core-2.18.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3c40d4eaad41f78e3bbda31b89edc46a3f3dc6e171bf0ecf097ff7a0ffff7cb1"},
+ {file = "pydantic_core-2.18.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:21a5e440dbe315ab9825fcd459b8814bb92b27c974cbc23c3e8baa2b76890077"},
+ {file = "pydantic_core-2.18.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:01dd777215e2aa86dfd664daed5957704b769e726626393438f9c87690ce78c3"},
+ {file = "pydantic_core-2.18.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4b06beb3b3f1479d32befd1f3079cc47b34fa2da62457cdf6c963393340b56e9"},
+ {file = "pydantic_core-2.18.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:564d7922e4b13a16b98772441879fcdcbe82ff50daa622d681dd682175ea918c"},
+ {file = "pydantic_core-2.18.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:0eb2a4f660fcd8e2b1c90ad566db2b98d7f3f4717c64fe0a83e0adb39766d5b8"},
+ {file = "pydantic_core-2.18.4-cp312-none-win32.whl", hash = "sha256:8b8bab4c97248095ae0c4455b5a1cd1cdd96e4e4769306ab19dda135ea4cdb07"},
+ {file = "pydantic_core-2.18.4-cp312-none-win_amd64.whl", hash = "sha256:14601cdb733d741b8958224030e2bfe21a4a881fb3dd6fbb21f071cabd48fa0a"},
+ {file = "pydantic_core-2.18.4-cp312-none-win_arm64.whl", hash = "sha256:c1322d7dd74713dcc157a2b7898a564ab091ca6c58302d5c7b4c07296e3fd00f"},
+ {file = "pydantic_core-2.18.4-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:823be1deb01793da05ecb0484d6c9e20baebb39bd42b5d72636ae9cf8350dbd2"},
+ {file = "pydantic_core-2.18.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ebef0dd9bf9b812bf75bda96743f2a6c5734a02092ae7f721c048d156d5fabae"},
+ {file = "pydantic_core-2.18.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ae1d6df168efb88d7d522664693607b80b4080be6750c913eefb77e34c12c71a"},
+ {file = "pydantic_core-2.18.4-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f9899c94762343f2cc2fc64c13e7cae4c3cc65cdfc87dd810a31654c9b7358cc"},
+ {file = "pydantic_core-2.18.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:99457f184ad90235cfe8461c4d70ab7dd2680e28821c29eca00252ba90308c78"},
+ {file = "pydantic_core-2.18.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:18f469a3d2a2fdafe99296a87e8a4c37748b5080a26b806a707f25a902c040a8"},
+ {file = "pydantic_core-2.18.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b7cdf28938ac6b8b49ae5e92f2735056a7ba99c9b110a474473fd71185c1af5d"},
+ {file = "pydantic_core-2.18.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:938cb21650855054dc54dfd9120a851c974f95450f00683399006aa6e8abb057"},
+ {file = "pydantic_core-2.18.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:44cd83ab6a51da80fb5adbd9560e26018e2ac7826f9626bc06ca3dc074cd198b"},
+ {file = "pydantic_core-2.18.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:972658f4a72d02b8abfa2581d92d59f59897d2e9f7e708fdabe922f9087773af"},
+ {file = "pydantic_core-2.18.4-cp38-none-win32.whl", hash = "sha256:1d886dc848e60cb7666f771e406acae54ab279b9f1e4143babc9c2258213daa2"},
+ {file = "pydantic_core-2.18.4-cp38-none-win_amd64.whl", hash = "sha256:bb4462bd43c2460774914b8525f79b00f8f407c945d50881568f294c1d9b4443"},
+ {file = "pydantic_core-2.18.4-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:44a688331d4a4e2129140a8118479443bd6f1905231138971372fcde37e43528"},
+ {file = "pydantic_core-2.18.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a2fdd81edd64342c85ac7cf2753ccae0b79bf2dfa063785503cb85a7d3593223"},
+ {file = "pydantic_core-2.18.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:86110d7e1907ab36691f80b33eb2da87d780f4739ae773e5fc83fb272f88825f"},
+ {file = "pydantic_core-2.18.4-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:46387e38bd641b3ee5ce247563b60c5ca098da9c56c75c157a05eaa0933ed154"},
+ {file = "pydantic_core-2.18.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:123c3cec203e3f5ac7b000bd82235f1a3eced8665b63d18be751f115588fea30"},
+ {file = "pydantic_core-2.18.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dc1803ac5c32ec324c5261c7209e8f8ce88e83254c4e1aebdc8b0a39f9ddb443"},
+ {file = "pydantic_core-2.18.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:53db086f9f6ab2b4061958d9c276d1dbe3690e8dd727d6abf2321d6cce37fa94"},
+ {file = "pydantic_core-2.18.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:abc267fa9837245cc28ea6929f19fa335f3dc330a35d2e45509b6566dc18be23"},
+ {file = "pydantic_core-2.18.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:a0d829524aaefdebccb869eed855e2d04c21d2d7479b6cada7ace5448416597b"},
+ {file = "pydantic_core-2.18.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:509daade3b8649f80d4e5ff21aa5673e4ebe58590b25fe42fac5f0f52c6f034a"},
+ {file = "pydantic_core-2.18.4-cp39-none-win32.whl", hash = "sha256:ca26a1e73c48cfc54c4a76ff78df3727b9d9f4ccc8dbee4ae3f73306a591676d"},
+ {file = "pydantic_core-2.18.4-cp39-none-win_amd64.whl", hash = "sha256:c67598100338d5d985db1b3d21f3619ef392e185e71b8d52bceacc4a7771ea7e"},
+ {file = "pydantic_core-2.18.4-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:574d92eac874f7f4db0ca653514d823a0d22e2354359d0759e3f6a406db5d55d"},
+ {file = "pydantic_core-2.18.4-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:1f4d26ceb5eb9eed4af91bebeae4b06c3fb28966ca3a8fb765208cf6b51102ab"},
+ {file = "pydantic_core-2.18.4-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77450e6d20016ec41f43ca4a6c63e9fdde03f0ae3fe90e7c27bdbeaece8b1ed4"},
+ {file = "pydantic_core-2.18.4-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d323a01da91851a4f17bf592faf46149c9169d68430b3146dcba2bb5e5719abc"},
+ {file = "pydantic_core-2.18.4-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:43d447dd2ae072a0065389092a231283f62d960030ecd27565672bd40746c507"},
+ {file = "pydantic_core-2.18.4-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:578e24f761f3b425834f297b9935e1ce2e30f51400964ce4801002435a1b41ef"},
+ {file = "pydantic_core-2.18.4-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:81b5efb2f126454586d0f40c4d834010979cb80785173d1586df845a632e4e6d"},
+ {file = "pydantic_core-2.18.4-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:ab86ce7c8f9bea87b9d12c7f0af71102acbf5ecbc66c17796cff45dae54ef9a5"},
+ {file = "pydantic_core-2.18.4-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:90afc12421df2b1b4dcc975f814e21bc1754640d502a2fbcc6d41e77af5ec312"},
+ {file = "pydantic_core-2.18.4-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:51991a89639a912c17bef4b45c87bd83593aee0437d8102556af4885811d59f5"},
+ {file = "pydantic_core-2.18.4-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:293afe532740370aba8c060882f7d26cfd00c94cae32fd2e212a3a6e3b7bc15e"},
+ {file = "pydantic_core-2.18.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b48ece5bde2e768197a2d0f6e925f9d7e3e826f0ad2271120f8144a9db18d5c8"},
+ {file = "pydantic_core-2.18.4-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:eae237477a873ab46e8dd748e515c72c0c804fb380fbe6c85533c7de51f23a8f"},
+ {file = "pydantic_core-2.18.4-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:834b5230b5dfc0c1ec37b2fda433b271cbbc0e507560b5d1588e2cc1148cf1ce"},
+ {file = "pydantic_core-2.18.4-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:e858ac0a25074ba4bce653f9b5d0a85b7456eaddadc0ce82d3878c22489fa4ee"},
+ {file = "pydantic_core-2.18.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:2fd41f6eff4c20778d717af1cc50eca52f5afe7805ee530a4fbd0bae284f16e9"},
+ {file = "pydantic_core-2.18.4.tar.gz", hash = "sha256:ec3beeada09ff865c344ff3bc2f427f5e6c26401cc6113d77e372c3fdac73864"},
]
[package.dependencies]
@@ -1998,36 +2073,35 @@ typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0"
[[package]]
name = "pygments"
-version = "2.17.2"
+version = "2.18.0"
description = "Pygments is a syntax highlighting package written in Python."
optional = false
-python-versions = ">=3.7"
+python-versions = ">=3.8"
files = [
- {file = "pygments-2.17.2-py3-none-any.whl", hash = "sha256:b27c2826c47d0f3219f29554824c30c5e8945175d888647acd804ddd04af846c"},
- {file = "pygments-2.17.2.tar.gz", hash = "sha256:da46cec9fd2de5be3a8a784f434e4c4ab670b4ff54d605c4c2717e9d49c4c367"},
+ {file = "pygments-2.18.0-py3-none-any.whl", hash = "sha256:b8e6aca0523f3ab76fee51799c488e38782ac06eafcf95e7ba832985c8e7b13a"},
+ {file = "pygments-2.18.0.tar.gz", hash = "sha256:786ff802f32e91311bff3889f6e9a86e81505fe99f2735bb6d60ae0c5004f199"},
]
[package.extras]
-plugins = ["importlib-metadata"]
windows-terminal = ["colorama (>=0.4.6)"]
[[package]]
name = "pylint"
-version = "3.1.0"
+version = "3.2.3"
description = "python code static checker"
optional = false
python-versions = ">=3.8.0"
files = [
- {file = "pylint-3.1.0-py3-none-any.whl", hash = "sha256:507a5b60953874766d8a366e8e8c7af63e058b26345cfcb5f91f89d987fd6b74"},
- {file = "pylint-3.1.0.tar.gz", hash = "sha256:6a69beb4a6f63debebaab0a3477ecd0f559aa726af4954fc948c51f7a2549e23"},
+ {file = "pylint-3.2.3-py3-none-any.whl", hash = "sha256:b3d7d2708a3e04b4679e02d99e72329a8b7ee8afb8d04110682278781f889fa8"},
+ {file = "pylint-3.2.3.tar.gz", hash = "sha256:02f6c562b215582386068d52a30f520d84fdbcf2a95fc7e855b816060d048b60"},
]
[package.dependencies]
-astroid = ">=3.1.0,<=3.2.0-dev0"
+astroid = ">=3.2.2,<=3.3.0-dev0"
colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""}
dill = [
- {version = ">=0.3.6", markers = "python_version >= \"3.11\" and python_version < \"3.12\""},
{version = ">=0.3.7", markers = "python_version >= \"3.12\""},
+ {version = ">=0.3.6", markers = "python_version >= \"3.11\" and python_version < \"3.12\""},
]
isort = ">=4.2.5,<5.13.0 || >5.13.0,<6"
mccabe = ">=0.6,<0.8"
@@ -2212,99 +2286,99 @@ files = [
[[package]]
name = "pyzmq"
-version = "26.0.2"
+version = "26.0.3"
description = "Python bindings for 0MQ"
optional = false
python-versions = ">=3.7"
files = [
- {file = "pyzmq-26.0.2-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:1a60a03b01e8c9c58932ec0cca15b1712d911c2800eb82d4281bc1ae5b6dad50"},
- {file = "pyzmq-26.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:949067079e14ea1973bd740255e0840118c163d4bce8837f539d749f145cf5c3"},
- {file = "pyzmq-26.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:37e7edfa6cf96d036a403775c96afa25058d1bb940a79786a9a2fc94a783abe3"},
- {file = "pyzmq-26.0.2-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:903cc7a84a7d4326b43755c368780800e035aa3d711deae84a533fdffa8755b0"},
- {file = "pyzmq-26.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6cb2e41af165e5f327d06fbdd79a42a4e930267fade4e9f92d17f3ccce03f3a7"},
- {file = "pyzmq-26.0.2-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:55353b8189adcfc4c125fc4ce59d477744118e9c0ec379dd0999c5fa120ac4f5"},
- {file = "pyzmq-26.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:f961423ff6236a752ced80057a20e623044df95924ed1009f844cde8b3a595f9"},
- {file = "pyzmq-26.0.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:ba77fe84fe4f5f3dc0ef681a6d366685c8ffe1c8439c1d7530997b05ac06a04b"},
- {file = "pyzmq-26.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:52589f0a745ef61b9c75c872cf91f8c1f7c0668eb3dd99d7abd639d8c0fb9ca7"},
- {file = "pyzmq-26.0.2-cp310-cp310-win32.whl", hash = "sha256:b7b6d2a46c7afe2ad03ec8faf9967090c8ceae85c4d8934d17d7cae6f9062b64"},
- {file = "pyzmq-26.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:86531e20de249d9204cc6d8b13d5a30537748c78820215161d8a3b9ea58ca111"},
- {file = "pyzmq-26.0.2-cp310-cp310-win_arm64.whl", hash = "sha256:f26a05029ecd2bd306b941ff8cb80f7620b7901421052bc429d238305b1cbf2f"},
- {file = "pyzmq-26.0.2-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:70770e296a9cb03d955540c99360aab861cbb3cba29516abbd106a15dbd91268"},
- {file = "pyzmq-26.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2740fd7161b39e178554ebf21aa5667a1c9ef0cd2cb74298fd4ef017dae7aec4"},
- {file = "pyzmq-26.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f5e3706c32dea077faa42b1c92d825b7f86c866f72532d342e0be5e64d14d858"},
- {file = "pyzmq-26.0.2-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0fa1416876194927f7723d6b7171b95e1115602967fc6bfccbc0d2d51d8ebae1"},
- {file = "pyzmq-26.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4ef9a79a48794099c57dc2df00340b5d47c5caa1792f9ddb8c7a26b1280bd575"},
- {file = "pyzmq-26.0.2-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:1c60fcdfa3229aeee4291c5d60faed3a813b18bdadb86299c4bf49e8e51e8605"},
- {file = "pyzmq-26.0.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e943c39c206b04df2eb5d71305761d7c3ca75fd49452115ea92db1b5b98dbdef"},
- {file = "pyzmq-26.0.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:8da0ed8a598693731c76659880a668f4748b59158f26ed283a93f7f04d47447e"},
- {file = "pyzmq-26.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:7bf51970b11d67096bede97cdbad0f4333f7664f4708b9b2acb352bf4faa3140"},
- {file = "pyzmq-26.0.2-cp311-cp311-win32.whl", hash = "sha256:6f8e6bd5d066be605faa9fe5ec10aa1a46ad9f18fc8646f2b9aaefc8fb575742"},
- {file = "pyzmq-26.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:6d03da3a0ae691b361edcb39530075461202f699ce05adbb15055a0e1c9bcaa4"},
- {file = "pyzmq-26.0.2-cp311-cp311-win_arm64.whl", hash = "sha256:f84e33321b68ff00b60e9dbd1a483e31ab6022c577c8de525b8e771bd274ce68"},
- {file = "pyzmq-26.0.2-cp312-cp312-macosx_10_15_universal2.whl", hash = "sha256:44c33ebd1c62a01db7fbc24e18bdda569d6639217d13d5929e986a2b0f69070d"},
- {file = "pyzmq-26.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:ac04f904b4fce4afea9cdccbb78e24d468cb610a839d5a698853e14e2a3f9ecf"},
- {file = "pyzmq-26.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f2133de5ba9adc5f481884ccb699eac9ce789708292945c05746880f95b241c0"},
- {file = "pyzmq-26.0.2-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7753c67c570d7fc80c2dc59b90ca1196f1224e0e2e29a548980c95fe0fe27fc1"},
- {file = "pyzmq-26.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d4e51632e6b12e65e8d9d7612446ecda2eda637a868afa7bce16270194650dd"},
- {file = "pyzmq-26.0.2-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:d6c38806f6ecd0acf3104b8d7e76a206bcf56dadd6ce03720d2fa9d9157d5718"},
- {file = "pyzmq-26.0.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:48f496bbe14686b51cec15406323ae6942851e14022efd7fc0e2ecd092c5982c"},
- {file = "pyzmq-26.0.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:e84a3161149c75bb7a7dc8646384186c34033e286a67fec1ad1bdedea165e7f4"},
- {file = "pyzmq-26.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:dabf796c67aa9f5a4fcc956d47f0d48b5c1ed288d628cf53aa1cf08e88654343"},
- {file = "pyzmq-26.0.2-cp312-cp312-win32.whl", hash = "sha256:3eee4c676af1b109f708d80ef0cf57ecb8aaa5900d1edaf90406aea7e0e20e37"},
- {file = "pyzmq-26.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:26721fec65846b3e4450dad050d67d31b017f97e67f7e0647b5f98aa47f828cf"},
- {file = "pyzmq-26.0.2-cp312-cp312-win_arm64.whl", hash = "sha256:653955c6c233e90de128a1b8e882abc7216f41f44218056bd519969c8c413a15"},
- {file = "pyzmq-26.0.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:becd8d8fb068fbb5a52096efd83a2d8e54354383f691781f53a4c26aee944542"},
- {file = "pyzmq-26.0.2-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:7a15e5465e7083c12517209c9dd24722b25e9b63c49a563922922fc03554eb35"},
- {file = "pyzmq-26.0.2-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:e8158ac8616941f874841f9fa0f6d2f1466178c2ff91ea08353fdc19de0d40c2"},
- {file = "pyzmq-26.0.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ea2c6a53e28c7066ea7db86fcc0b71d78d01b818bb11d4a4341ec35059885295"},
- {file = "pyzmq-26.0.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:bdbc7dab0b0e9c62c97b732899c4242e3282ba803bad668e03650b59b165466e"},
- {file = "pyzmq-26.0.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:e74b6d5ef57bb65bf1b4a37453d8d86d88550dde3fb0f23b1f1a24e60c70af5b"},
- {file = "pyzmq-26.0.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ed4c6ee624ecbc77b18aeeb07bf0700d26571ab95b8f723f0d02e056b5bce438"},
- {file = "pyzmq-26.0.2-cp37-cp37m-win32.whl", hash = "sha256:8a98b3cb0484b83c19d8fb5524c8a469cd9f10e743f5904ac285d92678ee761f"},
- {file = "pyzmq-26.0.2-cp37-cp37m-win_amd64.whl", hash = "sha256:aa5f95d71b6eca9cec28aa0a2f8310ea53dea313b63db74932879ff860c1fb8d"},
- {file = "pyzmq-26.0.2-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:5ff56c76ce77b9805378a7a73032c17cbdb1a5b84faa1df03c5d3e306e5616df"},
- {file = "pyzmq-26.0.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:bab697fc1574fee4b81da955678708567c43c813c84c91074e452bda5346c921"},
- {file = "pyzmq-26.0.2-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0c0fed8aa9ba0488ee1cbdaa304deea92d52fab43d373297002cfcc69c0a20c5"},
- {file = "pyzmq-26.0.2-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:606b922699fcec472ed814dda4dc3ff7c748254e0b26762a0ba21a726eb1c107"},
- {file = "pyzmq-26.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45f0fd82bad4d199fa993fbf0ac586a7ac5879addbe436a35a389df7e0eb4c91"},
- {file = "pyzmq-26.0.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:166c5e41045939a52c01e6f374e493d9a6a45dfe677360d3e7026e38c42e8906"},
- {file = "pyzmq-26.0.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:d566e859e8b8d5bca08467c093061774924b3d78a5ba290e82735b2569edc84b"},
- {file = "pyzmq-26.0.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:264ee0e72b72ca59279dc320deab5ae0fac0d97881aed1875ce4bde2e56ffde0"},
- {file = "pyzmq-26.0.2-cp38-cp38-win32.whl", hash = "sha256:3152bbd3a4744cbdd83dfb210ed701838b8b0c9065cef14671d6d91df12197d0"},
- {file = "pyzmq-26.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:bf77601d75ca692c179154b7e5943c286a4aaffec02c491afe05e60493ce95f2"},
- {file = "pyzmq-26.0.2-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:c770a7545b3deca2db185b59175e710a820dd4ed43619f4c02e90b0e227c6252"},
- {file = "pyzmq-26.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d47175f0a380bfd051726bc5c0054036ae4a5d8caf922c62c8a172ccd95c1a2a"},
- {file = "pyzmq-26.0.2-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:9bce298c1ce077837e110367c321285dc4246b531cde1abfc27e4a5bbe2bed4d"},
- {file = "pyzmq-26.0.2-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:c40b09b7e184d6e3e1be1c8af2cc320c0f9f610d8a5df3dd866e6e6e4e32b235"},
- {file = "pyzmq-26.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d420d856bf728713874cefb911398efe69e1577835851dd297a308a78c14c249"},
- {file = "pyzmq-26.0.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d792d3cab987058451e55c70c5926e93e2ceb68ca5a2334863bb903eb860c9cb"},
- {file = "pyzmq-26.0.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:83ec17729cf6d3464dab98a11e98294fcd50e6b17eaabd3d841515c23f6dbd3a"},
- {file = "pyzmq-26.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:47c17d5ebfa88ae90f08960c97b49917098665b8cd8be31f2c24e177bcf37a0f"},
- {file = "pyzmq-26.0.2-cp39-cp39-win32.whl", hash = "sha256:d509685d1cd1d018705a811c5f9d5bc237790936ead6d06f6558b77e16cc7235"},
- {file = "pyzmq-26.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:c7cc8cc009e8f6989a6d86c96f87dae5f5fb07d6c96916cdc7719d546152c7db"},
- {file = "pyzmq-26.0.2-cp39-cp39-win_arm64.whl", hash = "sha256:3ada31cb879cd7532f4a85b501f4255c747d4813ab76b35c49ed510ce4865b45"},
- {file = "pyzmq-26.0.2-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:0a6ceaddc830dd3ca86cb8451cf373d1f05215368e11834538c2902ed5205139"},
- {file = "pyzmq-26.0.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6a967681463aa7a99eb9a62bb18229b653b45c10ff0947b31cc0837a83dfb86f"},
- {file = "pyzmq-26.0.2-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6472a73bc115bc40a2076609a90894775abe6faf19a78375675a2f889a613071"},
- {file = "pyzmq-26.0.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d6aea92bcccfe5e5524d3c70a6f16ffdae548390ddad26f4207d55c55a40593"},
- {file = "pyzmq-26.0.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:e025f6351e49d48a5aa2f5a09293aa769b0ee7369c25bed551647234b7fa0c75"},
- {file = "pyzmq-26.0.2-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:40bd7ebe4dbb37d27f0c56e2a844f360239343a99be422085e13e97da13f73f9"},
- {file = "pyzmq-26.0.2-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:1dd40d586ad6f53764104df6e01810fe1b4e88fd353774629a5e6fe253813f79"},
- {file = "pyzmq-26.0.2-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f2aca15e9ad8c8657b5b3d7ae3d1724dc8c1c1059c06b4b674c3aa36305f4930"},
- {file = "pyzmq-26.0.2-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:450ec234736732eb0ebeffdb95a352450d4592f12c3e087e2a9183386d22c8bf"},
- {file = "pyzmq-26.0.2-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:f43be2bebbd09360a2f23af83b243dc25ffe7b583ea8c722e6df03e03a55f02f"},
- {file = "pyzmq-26.0.2-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:867f55e54aff254940bcec5eec068e7c0ac1e6bf360ab91479394a8bf356b0e6"},
- {file = "pyzmq-26.0.2-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:b4dbc033c5ad46f8c429bf238c25a889b8c1d86bfe23a74e1031a991cb3f0000"},
- {file = "pyzmq-26.0.2-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6e8dd2961462e337e21092ec2da0c69d814dcb1b6e892955a37444a425e9cfb8"},
- {file = "pyzmq-26.0.2-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:35391e72df6c14a09b697c7b94384947c1dd326aca883ff98ff137acdf586c33"},
- {file = "pyzmq-26.0.2-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:1c3d3c92fa54eda94ab369ca5b8d35059987c326ba5e55326eb068862f64b1fc"},
- {file = "pyzmq-26.0.2-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:e7aa61a9cc4f0523373e31fc9255bf4567185a099f85ca3598e64de484da3ab2"},
- {file = "pyzmq-26.0.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ee53a8191271f144cc20b12c19daa9f1546adc84a2f33839e3338039b55c373c"},
- {file = "pyzmq-26.0.2-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ac60a980f07fa988983f7bfe6404ef3f1e4303f5288a01713bc1266df6d18783"},
- {file = "pyzmq-26.0.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:88896b1b4817d7b2fe1ec7205c4bbe07bf5d92fb249bf2d226ddea8761996068"},
- {file = "pyzmq-26.0.2-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:18dfffe23751edee917764ffa133d5d3fef28dfd1cf3adebef8c90bc854c74c4"},
- {file = "pyzmq-26.0.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:6926dd14cfe6967d3322640b6d5c3c3039db71716a5e43cca6e3b474e73e0b36"},
- {file = "pyzmq-26.0.2.tar.gz", hash = "sha256:f0f9bb370449158359bb72a3e12c658327670c0ffe6fbcd1af083152b64f9df0"},
+ {file = "pyzmq-26.0.3-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:44dd6fc3034f1eaa72ece33588867df9e006a7303725a12d64c3dff92330f625"},
+ {file = "pyzmq-26.0.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:acb704195a71ac5ea5ecf2811c9ee19ecdc62b91878528302dd0be1b9451cc90"},
+ {file = "pyzmq-26.0.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5dbb9c997932473a27afa93954bb77a9f9b786b4ccf718d903f35da3232317de"},
+ {file = "pyzmq-26.0.3-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6bcb34f869d431799c3ee7d516554797f7760cb2198ecaa89c3f176f72d062be"},
+ {file = "pyzmq-26.0.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:38ece17ec5f20d7d9b442e5174ae9f020365d01ba7c112205a4d59cf19dc38ee"},
+ {file = "pyzmq-26.0.3-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:ba6e5e6588e49139a0979d03a7deb9c734bde647b9a8808f26acf9c547cab1bf"},
+ {file = "pyzmq-26.0.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:3bf8b000a4e2967e6dfdd8656cd0757d18c7e5ce3d16339e550bd462f4857e59"},
+ {file = "pyzmq-26.0.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:2136f64fbb86451dbbf70223635a468272dd20075f988a102bf8a3f194a411dc"},
+ {file = "pyzmq-26.0.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:e8918973fbd34e7814f59143c5f600ecd38b8038161239fd1a3d33d5817a38b8"},
+ {file = "pyzmq-26.0.3-cp310-cp310-win32.whl", hash = "sha256:0aaf982e68a7ac284377d051c742610220fd06d330dcd4c4dbb4cdd77c22a537"},
+ {file = "pyzmq-26.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:f1a9b7d00fdf60b4039f4455afd031fe85ee8305b019334b72dcf73c567edc47"},
+ {file = "pyzmq-26.0.3-cp310-cp310-win_arm64.whl", hash = "sha256:80b12f25d805a919d53efc0a5ad7c0c0326f13b4eae981a5d7b7cc343318ebb7"},
+ {file = "pyzmq-26.0.3-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:a72a84570f84c374b4c287183debc776dc319d3e8ce6b6a0041ce2e400de3f32"},
+ {file = "pyzmq-26.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7ca684ee649b55fd8f378127ac8462fb6c85f251c2fb027eb3c887e8ee347bcd"},
+ {file = "pyzmq-26.0.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e222562dc0f38571c8b1ffdae9d7adb866363134299264a1958d077800b193b7"},
+ {file = "pyzmq-26.0.3-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f17cde1db0754c35a91ac00b22b25c11da6eec5746431d6e5092f0cd31a3fea9"},
+ {file = "pyzmq-26.0.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b7c0c0b3244bb2275abe255d4a30c050d541c6cb18b870975553f1fb6f37527"},
+ {file = "pyzmq-26.0.3-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:ac97a21de3712afe6a6c071abfad40a6224fd14fa6ff0ff8d0c6e6cd4e2f807a"},
+ {file = "pyzmq-26.0.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:88b88282e55fa39dd556d7fc04160bcf39dea015f78e0cecec8ff4f06c1fc2b5"},
+ {file = "pyzmq-26.0.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:72b67f966b57dbd18dcc7efbc1c7fc9f5f983e572db1877081f075004614fcdd"},
+ {file = "pyzmq-26.0.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f4b6cecbbf3b7380f3b61de3a7b93cb721125dc125c854c14ddc91225ba52f83"},
+ {file = "pyzmq-26.0.3-cp311-cp311-win32.whl", hash = "sha256:eed56b6a39216d31ff8cd2f1d048b5bf1700e4b32a01b14379c3b6dde9ce3aa3"},
+ {file = "pyzmq-26.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:3191d312c73e3cfd0f0afdf51df8405aafeb0bad71e7ed8f68b24b63c4f36500"},
+ {file = "pyzmq-26.0.3-cp311-cp311-win_arm64.whl", hash = "sha256:b6907da3017ef55139cf0e417c5123a84c7332520e73a6902ff1f79046cd3b94"},
+ {file = "pyzmq-26.0.3-cp312-cp312-macosx_10_15_universal2.whl", hash = "sha256:068ca17214038ae986d68f4a7021f97e187ed278ab6dccb79f837d765a54d753"},
+ {file = "pyzmq-26.0.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:7821d44fe07335bea256b9f1f41474a642ca55fa671dfd9f00af8d68a920c2d4"},
+ {file = "pyzmq-26.0.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eeb438a26d87c123bb318e5f2b3d86a36060b01f22fbdffd8cf247d52f7c9a2b"},
+ {file = "pyzmq-26.0.3-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:69ea9d6d9baa25a4dc9cef5e2b77b8537827b122214f210dd925132e34ae9b12"},
+ {file = "pyzmq-26.0.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7daa3e1369355766dea11f1d8ef829905c3b9da886ea3152788dc25ee6079e02"},
+ {file = "pyzmq-26.0.3-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:6ca7a9a06b52d0e38ccf6bca1aeff7be178917893f3883f37b75589d42c4ac20"},
+ {file = "pyzmq-26.0.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:1b7d0e124948daa4d9686d421ef5087c0516bc6179fdcf8828b8444f8e461a77"},
+ {file = "pyzmq-26.0.3-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:e746524418b70f38550f2190eeee834db8850088c834d4c8406fbb9bc1ae10b2"},
+ {file = "pyzmq-26.0.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:6b3146f9ae6af82c47a5282ac8803523d381b3b21caeae0327ed2f7ecb718798"},
+ {file = "pyzmq-26.0.3-cp312-cp312-win32.whl", hash = "sha256:2b291d1230845871c00c8462c50565a9cd6026fe1228e77ca934470bb7d70ea0"},
+ {file = "pyzmq-26.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:926838a535c2c1ea21c903f909a9a54e675c2126728c21381a94ddf37c3cbddf"},
+ {file = "pyzmq-26.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:5bf6c237f8c681dfb91b17f8435b2735951f0d1fad10cc5dfd96db110243370b"},
+ {file = "pyzmq-26.0.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0c0991f5a96a8e620f7691e61178cd8f457b49e17b7d9cfa2067e2a0a89fc1d5"},
+ {file = "pyzmq-26.0.3-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:dbf012d8fcb9f2cf0643b65df3b355fdd74fc0035d70bb5c845e9e30a3a4654b"},
+ {file = "pyzmq-26.0.3-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:01fbfbeb8249a68d257f601deb50c70c929dc2dfe683b754659569e502fbd3aa"},
+ {file = "pyzmq-26.0.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c8eb19abe87029c18f226d42b8a2c9efdd139d08f8bf6e085dd9075446db450"},
+ {file = "pyzmq-26.0.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:5344b896e79800af86ad643408ca9aa303a017f6ebff8cee5a3163c1e9aec987"},
+ {file = "pyzmq-26.0.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:204e0f176fd1d067671157d049466869b3ae1fc51e354708b0dc41cf94e23a3a"},
+ {file = "pyzmq-26.0.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:a42db008d58530efa3b881eeee4991146de0b790e095f7ae43ba5cc612decbc5"},
+ {file = "pyzmq-26.0.3-cp37-cp37m-win32.whl", hash = "sha256:8d7a498671ca87e32b54cb47c82a92b40130a26c5197d392720a1bce1b3c77cf"},
+ {file = "pyzmq-26.0.3-cp37-cp37m-win_amd64.whl", hash = "sha256:3b4032a96410bdc760061b14ed6a33613ffb7f702181ba999df5d16fb96ba16a"},
+ {file = "pyzmq-26.0.3-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:2cc4e280098c1b192c42a849de8de2c8e0f3a84086a76ec5b07bfee29bda7d18"},
+ {file = "pyzmq-26.0.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:5bde86a2ed3ce587fa2b207424ce15b9a83a9fa14422dcc1c5356a13aed3df9d"},
+ {file = "pyzmq-26.0.3-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:34106f68e20e6ff253c9f596ea50397dbd8699828d55e8fa18bd4323d8d966e6"},
+ {file = "pyzmq-26.0.3-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ebbbd0e728af5db9b04e56389e2299a57ea8b9dd15c9759153ee2455b32be6ad"},
+ {file = "pyzmq-26.0.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f6b1d1c631e5940cac5a0b22c5379c86e8df6a4ec277c7a856b714021ab6cfad"},
+ {file = "pyzmq-26.0.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:e891ce81edd463b3b4c3b885c5603c00141151dd9c6936d98a680c8c72fe5c67"},
+ {file = "pyzmq-26.0.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:9b273ecfbc590a1b98f014ae41e5cf723932f3b53ba9367cfb676f838038b32c"},
+ {file = "pyzmq-26.0.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b32bff85fb02a75ea0b68f21e2412255b5731f3f389ed9aecc13a6752f58ac97"},
+ {file = "pyzmq-26.0.3-cp38-cp38-win32.whl", hash = "sha256:f6c21c00478a7bea93caaaef9e7629145d4153b15a8653e8bb4609d4bc70dbfc"},
+ {file = "pyzmq-26.0.3-cp38-cp38-win_amd64.whl", hash = "sha256:3401613148d93ef0fd9aabdbddb212de3db7a4475367f49f590c837355343972"},
+ {file = "pyzmq-26.0.3-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:2ed8357f4c6e0daa4f3baf31832df8a33334e0fe5b020a61bc8b345a3db7a606"},
+ {file = "pyzmq-26.0.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c1c8f2a2ca45292084c75bb6d3a25545cff0ed931ed228d3a1810ae3758f975f"},
+ {file = "pyzmq-26.0.3-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:b63731993cdddcc8e087c64e9cf003f909262b359110070183d7f3025d1c56b5"},
+ {file = "pyzmq-26.0.3-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:b3cd31f859b662ac5d7f4226ec7d8bd60384fa037fc02aee6ff0b53ba29a3ba8"},
+ {file = "pyzmq-26.0.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:115f8359402fa527cf47708d6f8a0f8234f0e9ca0cab7c18c9c189c194dbf620"},
+ {file = "pyzmq-26.0.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:715bdf952b9533ba13dfcf1f431a8f49e63cecc31d91d007bc1deb914f47d0e4"},
+ {file = "pyzmq-26.0.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:e1258c639e00bf5e8a522fec6c3eaa3e30cf1c23a2f21a586be7e04d50c9acab"},
+ {file = "pyzmq-26.0.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:15c59e780be8f30a60816a9adab900c12a58d79c1ac742b4a8df044ab2a6d920"},
+ {file = "pyzmq-26.0.3-cp39-cp39-win32.whl", hash = "sha256:d0cdde3c78d8ab5b46595054e5def32a755fc028685add5ddc7403e9f6de9879"},
+ {file = "pyzmq-26.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:ce828058d482ef860746bf532822842e0ff484e27f540ef5c813d516dd8896d2"},
+ {file = "pyzmq-26.0.3-cp39-cp39-win_arm64.whl", hash = "sha256:788f15721c64109cf720791714dc14afd0f449d63f3a5487724f024345067381"},
+ {file = "pyzmq-26.0.3-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:2c18645ef6294d99b256806e34653e86236eb266278c8ec8112622b61db255de"},
+ {file = "pyzmq-26.0.3-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7e6bc96ebe49604df3ec2c6389cc3876cabe475e6bfc84ced1bf4e630662cb35"},
+ {file = "pyzmq-26.0.3-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:971e8990c5cc4ddcff26e149398fc7b0f6a042306e82500f5e8db3b10ce69f84"},
+ {file = "pyzmq-26.0.3-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d8416c23161abd94cc7da80c734ad7c9f5dbebdadfdaa77dad78244457448223"},
+ {file = "pyzmq-26.0.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:082a2988364b60bb5de809373098361cf1dbb239623e39e46cb18bc035ed9c0c"},
+ {file = "pyzmq-26.0.3-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:d57dfbf9737763b3a60d26e6800e02e04284926329aee8fb01049635e957fe81"},
+ {file = "pyzmq-26.0.3-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:77a85dca4c2430ac04dc2a2185c2deb3858a34fe7f403d0a946fa56970cf60a1"},
+ {file = "pyzmq-26.0.3-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4c82a6d952a1d555bf4be42b6532927d2a5686dd3c3e280e5f63225ab47ac1f5"},
+ {file = "pyzmq-26.0.3-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4496b1282c70c442809fc1b151977c3d967bfb33e4e17cedbf226d97de18f709"},
+ {file = "pyzmq-26.0.3-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:e4946d6bdb7ba972dfda282f9127e5756d4f299028b1566d1245fa0d438847e6"},
+ {file = "pyzmq-26.0.3-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:03c0ae165e700364b266876d712acb1ac02693acd920afa67da2ebb91a0b3c09"},
+ {file = "pyzmq-26.0.3-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:3e3070e680f79887d60feeda051a58d0ac36622e1759f305a41059eff62c6da7"},
+ {file = "pyzmq-26.0.3-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6ca08b840fe95d1c2bd9ab92dac5685f949fc6f9ae820ec16193e5ddf603c3b2"},
+ {file = "pyzmq-26.0.3-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e76654e9dbfb835b3518f9938e565c7806976c07b37c33526b574cc1a1050480"},
+ {file = "pyzmq-26.0.3-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:871587bdadd1075b112e697173e946a07d722459d20716ceb3d1bd6c64bd08ce"},
+ {file = "pyzmq-26.0.3-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:d0a2d1bd63a4ad79483049b26514e70fa618ce6115220da9efdff63688808b17"},
+ {file = "pyzmq-26.0.3-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0270b49b6847f0d106d64b5086e9ad5dc8a902413b5dbbb15d12b60f9c1747a4"},
+ {file = "pyzmq-26.0.3-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:703c60b9910488d3d0954ca585c34f541e506a091a41930e663a098d3b794c67"},
+ {file = "pyzmq-26.0.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:74423631b6be371edfbf7eabb02ab995c2563fee60a80a30829176842e71722a"},
+ {file = "pyzmq-26.0.3-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:4adfbb5451196842a88fda3612e2c0414134874bffb1c2ce83ab4242ec9e027d"},
+ {file = "pyzmq-26.0.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:3516119f4f9b8671083a70b6afaa0a070f5683e431ab3dc26e9215620d7ca1ad"},
+ {file = "pyzmq-26.0.3.tar.gz", hash = "sha256:dba7d9f2e047dfa2bca3b01f4f84aa5246725203d6284e3790f2ca15fba6b40a"},
]
[package.dependencies]
@@ -2312,13 +2386,13 @@ cffi = {version = "*", markers = "implementation_name == \"pypy\""}
[[package]]
name = "referencing"
-version = "0.34.0"
+version = "0.35.1"
description = "JSON Referencing + Python"
optional = false
python-versions = ">=3.8"
files = [
- {file = "referencing-0.34.0-py3-none-any.whl", hash = "sha256:d53ae300ceddd3169f1ffa9caf2cb7b769e92657e4fafb23d34b93679116dfd4"},
- {file = "referencing-0.34.0.tar.gz", hash = "sha256:5773bd84ef41799a5a8ca72dc34590c041eb01bf9aa02632b4a973fb0181a844"},
+ {file = "referencing-0.35.1-py3-none-any.whl", hash = "sha256:eda6d3234d62814d1c64e305c1331c9a3a6132da475ab6382eaa997b21ee75de"},
+ {file = "referencing-0.35.1.tar.gz", hash = "sha256:25b42124a6c8b632a425174f24087783efb348a6f1e0008e63cd4466fedf703c"},
]
[package.dependencies]
@@ -2327,13 +2401,13 @@ rpds-py = ">=0.7.0"
[[package]]
name = "requests"
-version = "2.31.0"
+version = "2.32.3"
description = "Python HTTP for Humans."
optional = false
-python-versions = ">=3.7"
+python-versions = ">=3.8"
files = [
- {file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"},
- {file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"},
+ {file = "requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6"},
+ {file = "requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760"},
]
[package.dependencies]
@@ -2391,110 +2465,110 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"]
[[package]]
name = "rpds-py"
-version = "0.18.0"
+version = "0.18.1"
description = "Python bindings to Rust's persistent data structures (rpds)"
optional = false
python-versions = ">=3.8"
files = [
- {file = "rpds_py-0.18.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:5b4e7d8d6c9b2e8ee2d55c90b59c707ca59bc30058269b3db7b1f8df5763557e"},
- {file = "rpds_py-0.18.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c463ed05f9dfb9baebef68048aed8dcdc94411e4bf3d33a39ba97e271624f8f7"},
- {file = "rpds_py-0.18.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:01e36a39af54a30f28b73096dd39b6802eddd04c90dbe161c1b8dbe22353189f"},
- {file = "rpds_py-0.18.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d62dec4976954a23d7f91f2f4530852b0c7608116c257833922a896101336c51"},
- {file = "rpds_py-0.18.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dd18772815d5f008fa03d2b9a681ae38d5ae9f0e599f7dda233c439fcaa00d40"},
- {file = "rpds_py-0.18.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:923d39efa3cfb7279a0327e337a7958bff00cc447fd07a25cddb0a1cc9a6d2da"},
- {file = "rpds_py-0.18.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:39514da80f971362f9267c600b6d459bfbbc549cffc2cef8e47474fddc9b45b1"},
- {file = "rpds_py-0.18.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a34d557a42aa28bd5c48a023c570219ba2593bcbbb8dc1b98d8cf5d529ab1434"},
- {file = "rpds_py-0.18.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:93df1de2f7f7239dc9cc5a4a12408ee1598725036bd2dedadc14d94525192fc3"},
- {file = "rpds_py-0.18.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:34b18ba135c687f4dac449aa5157d36e2cbb7c03cbea4ddbd88604e076aa836e"},
- {file = "rpds_py-0.18.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:c0b5dcf9193625afd8ecc92312d6ed78781c46ecbf39af9ad4681fc9f464af88"},
- {file = "rpds_py-0.18.0-cp310-none-win32.whl", hash = "sha256:c4325ff0442a12113a6379af66978c3fe562f846763287ef66bdc1d57925d337"},
- {file = "rpds_py-0.18.0-cp310-none-win_amd64.whl", hash = "sha256:7223a2a5fe0d217e60a60cdae28d6949140dde9c3bcc714063c5b463065e3d66"},
- {file = "rpds_py-0.18.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:3a96e0c6a41dcdba3a0a581bbf6c44bb863f27c541547fb4b9711fd8cf0ffad4"},
- {file = "rpds_py-0.18.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:30f43887bbae0d49113cbaab729a112251a940e9b274536613097ab8b4899cf6"},
- {file = "rpds_py-0.18.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fcb25daa9219b4cf3a0ab24b0eb9a5cc8949ed4dc72acb8fa16b7e1681aa3c58"},
- {file = "rpds_py-0.18.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d68c93e381010662ab873fea609bf6c0f428b6d0bb00f2c6939782e0818d37bf"},
- {file = "rpds_py-0.18.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b34b7aa8b261c1dbf7720b5d6f01f38243e9b9daf7e6b8bc1fd4657000062f2c"},
- {file = "rpds_py-0.18.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2e6d75ab12b0bbab7215e5d40f1e5b738aa539598db27ef83b2ec46747df90e1"},
- {file = "rpds_py-0.18.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b8612cd233543a3781bc659c731b9d607de65890085098986dfd573fc2befe5"},
- {file = "rpds_py-0.18.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:aec493917dd45e3c69d00a8874e7cbed844efd935595ef78a0f25f14312e33c6"},
- {file = "rpds_py-0.18.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:661d25cbffaf8cc42e971dd570d87cb29a665f49f4abe1f9e76be9a5182c4688"},
- {file = "rpds_py-0.18.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:1df3659d26f539ac74fb3b0c481cdf9d725386e3552c6fa2974f4d33d78e544b"},
- {file = "rpds_py-0.18.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a1ce3ba137ed54f83e56fb983a5859a27d43a40188ba798993812fed73c70836"},
- {file = "rpds_py-0.18.0-cp311-none-win32.whl", hash = "sha256:69e64831e22a6b377772e7fb337533c365085b31619005802a79242fee620bc1"},
- {file = "rpds_py-0.18.0-cp311-none-win_amd64.whl", hash = "sha256:998e33ad22dc7ec7e030b3df701c43630b5bc0d8fbc2267653577e3fec279afa"},
- {file = "rpds_py-0.18.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:7f2facbd386dd60cbbf1a794181e6aa0bd429bd78bfdf775436020172e2a23f0"},
- {file = "rpds_py-0.18.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1d9a5be316c15ffb2b3c405c4ff14448c36b4435be062a7f578ccd8b01f0c4d8"},
- {file = "rpds_py-0.18.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cd5bf1af8efe569654bbef5a3e0a56eca45f87cfcffab31dd8dde70da5982475"},
- {file = "rpds_py-0.18.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5417558f6887e9b6b65b4527232553c139b57ec42c64570569b155262ac0754f"},
- {file = "rpds_py-0.18.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:56a737287efecafc16f6d067c2ea0117abadcd078d58721f967952db329a3e5c"},
- {file = "rpds_py-0.18.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8f03bccbd8586e9dd37219bce4d4e0d3ab492e6b3b533e973fa08a112cb2ffc9"},
- {file = "rpds_py-0.18.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4457a94da0d5c53dc4b3e4de1158bdab077db23c53232f37a3cb7afdb053a4e3"},
- {file = "rpds_py-0.18.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0ab39c1ba9023914297dd88ec3b3b3c3f33671baeb6acf82ad7ce883f6e8e157"},
- {file = "rpds_py-0.18.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:9d54553c1136b50fd12cc17e5b11ad07374c316df307e4cfd6441bea5fb68496"},
- {file = "rpds_py-0.18.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:0af039631b6de0397ab2ba16eaf2872e9f8fca391b44d3d8cac317860a700a3f"},
- {file = "rpds_py-0.18.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:84ffab12db93b5f6bad84c712c92060a2d321b35c3c9960b43d08d0f639d60d7"},
- {file = "rpds_py-0.18.0-cp312-none-win32.whl", hash = "sha256:685537e07897f173abcf67258bee3c05c374fa6fff89d4c7e42fb391b0605e98"},
- {file = "rpds_py-0.18.0-cp312-none-win_amd64.whl", hash = "sha256:e003b002ec72c8d5a3e3da2989c7d6065b47d9eaa70cd8808b5384fbb970f4ec"},
- {file = "rpds_py-0.18.0-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:08f9ad53c3f31dfb4baa00da22f1e862900f45908383c062c27628754af2e88e"},
- {file = "rpds_py-0.18.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:c0013fe6b46aa496a6749c77e00a3eb07952832ad6166bd481c74bda0dcb6d58"},
- {file = "rpds_py-0.18.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e32a92116d4f2a80b629778280103d2a510a5b3f6314ceccd6e38006b5e92dcb"},
- {file = "rpds_py-0.18.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e541ec6f2ec456934fd279a3120f856cd0aedd209fc3852eca563f81738f6861"},
- {file = "rpds_py-0.18.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bed88b9a458e354014d662d47e7a5baafd7ff81c780fd91584a10d6ec842cb73"},
- {file = "rpds_py-0.18.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2644e47de560eb7bd55c20fc59f6daa04682655c58d08185a9b95c1970fa1e07"},
- {file = "rpds_py-0.18.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8e8916ae4c720529e18afa0b879473049e95949bf97042e938530e072fde061d"},
- {file = "rpds_py-0.18.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:465a3eb5659338cf2a9243e50ad9b2296fa15061736d6e26240e713522b6235c"},
- {file = "rpds_py-0.18.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:ea7d4a99f3b38c37eac212dbd6ec42b7a5ec51e2c74b5d3223e43c811609e65f"},
- {file = "rpds_py-0.18.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:67071a6171e92b6da534b8ae326505f7c18022c6f19072a81dcf40db2638767c"},
- {file = "rpds_py-0.18.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:41ef53e7c58aa4ef281da975f62c258950f54b76ec8e45941e93a3d1d8580594"},
- {file = "rpds_py-0.18.0-cp38-none-win32.whl", hash = "sha256:fdea4952db2793c4ad0bdccd27c1d8fdd1423a92f04598bc39425bcc2b8ee46e"},
- {file = "rpds_py-0.18.0-cp38-none-win_amd64.whl", hash = "sha256:7cd863afe7336c62ec78d7d1349a2f34c007a3cc6c2369d667c65aeec412a5b1"},
- {file = "rpds_py-0.18.0-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:5307def11a35f5ae4581a0b658b0af8178c65c530e94893345bebf41cc139d33"},
- {file = "rpds_py-0.18.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:77f195baa60a54ef9d2de16fbbfd3ff8b04edc0c0140a761b56c267ac11aa467"},
- {file = "rpds_py-0.18.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:39f5441553f1c2aed4de4377178ad8ff8f9d733723d6c66d983d75341de265ab"},
- {file = "rpds_py-0.18.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9a00312dea9310d4cb7dbd7787e722d2e86a95c2db92fbd7d0155f97127bcb40"},
- {file = "rpds_py-0.18.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8f2fc11e8fe034ee3c34d316d0ad8808f45bc3b9ce5857ff29d513f3ff2923a1"},
- {file = "rpds_py-0.18.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:586f8204935b9ec884500498ccc91aa869fc652c40c093bd9e1471fbcc25c022"},
- {file = "rpds_py-0.18.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ddc2f4dfd396c7bfa18e6ce371cba60e4cf9d2e5cdb71376aa2da264605b60b9"},
- {file = "rpds_py-0.18.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5ddcba87675b6d509139d1b521e0c8250e967e63b5909a7e8f8944d0f90ff36f"},
- {file = "rpds_py-0.18.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:7bd339195d84439cbe5771546fe8a4e8a7a045417d8f9de9a368c434e42a721e"},
- {file = "rpds_py-0.18.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:d7c36232a90d4755b720fbd76739d8891732b18cf240a9c645d75f00639a9024"},
- {file = "rpds_py-0.18.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:6b0817e34942b2ca527b0e9298373e7cc75f429e8da2055607f4931fded23e20"},
- {file = "rpds_py-0.18.0-cp39-none-win32.whl", hash = "sha256:99f70b740dc04d09e6b2699b675874367885217a2e9f782bdf5395632ac663b7"},
- {file = "rpds_py-0.18.0-cp39-none-win_amd64.whl", hash = "sha256:6ef687afab047554a2d366e112dd187b62d261d49eb79b77e386f94644363294"},
- {file = "rpds_py-0.18.0-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:ad36cfb355e24f1bd37cac88c112cd7730873f20fb0bdaf8ba59eedf8216079f"},
- {file = "rpds_py-0.18.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:36b3ee798c58ace201289024b52788161e1ea133e4ac93fba7d49da5fec0ef9e"},
- {file = "rpds_py-0.18.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f8a2f084546cc59ea99fda8e070be2fd140c3092dc11524a71aa8f0f3d5a55ca"},
- {file = "rpds_py-0.18.0-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e4461d0f003a0aa9be2bdd1b798a041f177189c1a0f7619fe8c95ad08d9a45d7"},
- {file = "rpds_py-0.18.0-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8db715ebe3bb7d86d77ac1826f7d67ec11a70dbd2376b7cc214199360517b641"},
- {file = "rpds_py-0.18.0-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:793968759cd0d96cac1e367afd70c235867831983f876a53389ad869b043c948"},
- {file = "rpds_py-0.18.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:66e6a3af5a75363d2c9a48b07cb27c4ea542938b1a2e93b15a503cdfa8490795"},
- {file = "rpds_py-0.18.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6ef0befbb5d79cf32d0266f5cff01545602344eda89480e1dd88aca964260b18"},
- {file = "rpds_py-0.18.0-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:1d4acf42190d449d5e89654d5c1ed3a4f17925eec71f05e2a41414689cda02d1"},
- {file = "rpds_py-0.18.0-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:a5f446dd5055667aabaee78487f2b5ab72e244f9bc0b2ffebfeec79051679984"},
- {file = "rpds_py-0.18.0-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:9dbbeb27f4e70bfd9eec1be5477517365afe05a9b2c441a0b21929ee61048124"},
- {file = "rpds_py-0.18.0-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:22806714311a69fd0af9b35b7be97c18a0fc2826e6827dbb3a8c94eac6cf7eeb"},
- {file = "rpds_py-0.18.0-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:b34ae4636dfc4e76a438ab826a0d1eed2589ca7d9a1b2d5bb546978ac6485461"},
- {file = "rpds_py-0.18.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c8370641f1a7f0e0669ddccca22f1da893cef7628396431eb445d46d893e5cd"},
- {file = "rpds_py-0.18.0-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c8362467a0fdeccd47935f22c256bec5e6abe543bf0d66e3d3d57a8fb5731863"},
- {file = "rpds_py-0.18.0-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:11a8c85ef4a07a7638180bf04fe189d12757c696eb41f310d2426895356dcf05"},
- {file = "rpds_py-0.18.0-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b316144e85316da2723f9d8dc75bada12fa58489a527091fa1d5a612643d1a0e"},
- {file = "rpds_py-0.18.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cf1ea2e34868f6fbf070e1af291c8180480310173de0b0c43fc38a02929fc0e3"},
- {file = "rpds_py-0.18.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e546e768d08ad55b20b11dbb78a745151acbd938f8f00d0cfbabe8b0199b9880"},
- {file = "rpds_py-0.18.0-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:4901165d170a5fde6f589acb90a6b33629ad1ec976d4529e769c6f3d885e3e80"},
- {file = "rpds_py-0.18.0-pp38-pypy38_pp73-musllinux_1_2_i686.whl", hash = "sha256:618a3d6cae6ef8ec88bb76dd80b83cfe415ad4f1d942ca2a903bf6b6ff97a2da"},
- {file = "rpds_py-0.18.0-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:ed4eb745efbff0a8e9587d22a84be94a5eb7d2d99c02dacf7bd0911713ed14dd"},
- {file = "rpds_py-0.18.0-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:6c81e5f372cd0dc5dc4809553d34f832f60a46034a5f187756d9b90586c2c307"},
- {file = "rpds_py-0.18.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:43fbac5f22e25bee1d482c97474f930a353542855f05c1161fd804c9dc74a09d"},
- {file = "rpds_py-0.18.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6d7faa6f14017c0b1e69f5e2c357b998731ea75a442ab3841c0dbbbfe902d2c4"},
- {file = "rpds_py-0.18.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:08231ac30a842bd04daabc4d71fddd7e6d26189406d5a69535638e4dcb88fe76"},
- {file = "rpds_py-0.18.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:044a3e61a7c2dafacae99d1e722cc2d4c05280790ec5a05031b3876809d89a5c"},
- {file = "rpds_py-0.18.0-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3f26b5bd1079acdb0c7a5645e350fe54d16b17bfc5e71f371c449383d3342e17"},
- {file = "rpds_py-0.18.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:482103aed1dfe2f3b71a58eff35ba105289b8d862551ea576bd15479aba01f66"},
- {file = "rpds_py-0.18.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1374f4129f9bcca53a1bba0bb86bf78325a0374577cf7e9e4cd046b1e6f20e24"},
- {file = "rpds_py-0.18.0-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:635dc434ff724b178cb192c70016cc0ad25a275228f749ee0daf0eddbc8183b1"},
- {file = "rpds_py-0.18.0-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:bc362ee4e314870a70f4ae88772d72d877246537d9f8cb8f7eacf10884862432"},
- {file = "rpds_py-0.18.0-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:4832d7d380477521a8c1644bbab6588dfedea5e30a7d967b5fb75977c45fd77f"},
- {file = "rpds_py-0.18.0.tar.gz", hash = "sha256:42821446ee7a76f5d9f71f9e33a4fb2ffd724bb3e7f93386150b61a43115788d"},
+ {file = "rpds_py-0.18.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:d31dea506d718693b6b2cffc0648a8929bdc51c70a311b2770f09611caa10d53"},
+ {file = "rpds_py-0.18.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:732672fbc449bab754e0b15356c077cc31566df874964d4801ab14f71951ea80"},
+ {file = "rpds_py-0.18.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4a98a1f0552b5f227a3d6422dbd61bc6f30db170939bd87ed14f3c339aa6c7c9"},
+ {file = "rpds_py-0.18.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7f1944ce16401aad1e3f7d312247b3d5de7981f634dc9dfe90da72b87d37887d"},
+ {file = "rpds_py-0.18.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:38e14fb4e370885c4ecd734f093a2225ee52dc384b86fa55fe3f74638b2cfb09"},
+ {file = "rpds_py-0.18.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:08d74b184f9ab6289b87b19fe6a6d1a97fbfea84b8a3e745e87a5de3029bf944"},
+ {file = "rpds_py-0.18.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d70129cef4a8d979caa37e7fe957202e7eee8ea02c5e16455bc9808a59c6b2f0"},
+ {file = "rpds_py-0.18.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ce0bb20e3a11bd04461324a6a798af34d503f8d6f1aa3d2aa8901ceaf039176d"},
+ {file = "rpds_py-0.18.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:81c5196a790032e0fc2464c0b4ab95f8610f96f1f2fa3d4deacce6a79852da60"},
+ {file = "rpds_py-0.18.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:f3027be483868c99b4985fda802a57a67fdf30c5d9a50338d9db646d590198da"},
+ {file = "rpds_py-0.18.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:d44607f98caa2961bab4fa3c4309724b185b464cdc3ba6f3d7340bac3ec97cc1"},
+ {file = "rpds_py-0.18.1-cp310-none-win32.whl", hash = "sha256:c273e795e7a0f1fddd46e1e3cb8be15634c29ae8ff31c196debb620e1edb9333"},
+ {file = "rpds_py-0.18.1-cp310-none-win_amd64.whl", hash = "sha256:8352f48d511de5f973e4f2f9412736d7dea76c69faa6d36bcf885b50c758ab9a"},
+ {file = "rpds_py-0.18.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:6b5ff7e1d63a8281654b5e2896d7f08799378e594f09cf3674e832ecaf396ce8"},
+ {file = "rpds_py-0.18.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8927638a4d4137a289e41d0fd631551e89fa346d6dbcfc31ad627557d03ceb6d"},
+ {file = "rpds_py-0.18.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:154bf5c93d79558b44e5b50cc354aa0459e518e83677791e6adb0b039b7aa6a7"},
+ {file = "rpds_py-0.18.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:07f2139741e5deb2c5154a7b9629bc5aa48c766b643c1a6750d16f865a82c5fc"},
+ {file = "rpds_py-0.18.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8c7672e9fba7425f79019db9945b16e308ed8bc89348c23d955c8c0540da0a07"},
+ {file = "rpds_py-0.18.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:489bdfe1abd0406eba6b3bb4fdc87c7fa40f1031de073d0cfb744634cc8fa261"},
+ {file = "rpds_py-0.18.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3c20f05e8e3d4fc76875fc9cb8cf24b90a63f5a1b4c5b9273f0e8225e169b100"},
+ {file = "rpds_py-0.18.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:967342e045564cef76dfcf1edb700b1e20838d83b1aa02ab313e6a497cf923b8"},
+ {file = "rpds_py-0.18.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:2cc7c1a47f3a63282ab0f422d90ddac4aa3034e39fc66a559ab93041e6505da7"},
+ {file = "rpds_py-0.18.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:f7afbfee1157e0f9376c00bb232e80a60e59ed716e3211a80cb8506550671e6e"},
+ {file = "rpds_py-0.18.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9e6934d70dc50f9f8ea47081ceafdec09245fd9f6032669c3b45705dea096b88"},
+ {file = "rpds_py-0.18.1-cp311-none-win32.whl", hash = "sha256:c69882964516dc143083d3795cb508e806b09fc3800fd0d4cddc1df6c36e76bb"},
+ {file = "rpds_py-0.18.1-cp311-none-win_amd64.whl", hash = "sha256:70a838f7754483bcdc830444952fd89645569e7452e3226de4a613a4c1793fb2"},
+ {file = "rpds_py-0.18.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:3dd3cd86e1db5aadd334e011eba4e29d37a104b403e8ca24dcd6703c68ca55b3"},
+ {file = "rpds_py-0.18.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:05f3d615099bd9b13ecf2fc9cf2d839ad3f20239c678f461c753e93755d629ee"},
+ {file = "rpds_py-0.18.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:35b2b771b13eee8729a5049c976197ff58a27a3829c018a04341bcf1ae409b2b"},
+ {file = "rpds_py-0.18.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ee17cd26b97d537af8f33635ef38be873073d516fd425e80559f4585a7b90c43"},
+ {file = "rpds_py-0.18.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b646bf655b135ccf4522ed43d6902af37d3f5dbcf0da66c769a2b3938b9d8184"},
+ {file = "rpds_py-0.18.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:19ba472b9606c36716062c023afa2484d1e4220548751bda14f725a7de17b4f6"},
+ {file = "rpds_py-0.18.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e30ac5e329098903262dc5bdd7e2086e0256aa762cc8b744f9e7bf2a427d3f8"},
+ {file = "rpds_py-0.18.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d58ad6317d188c43750cb76e9deacf6051d0f884d87dc6518e0280438648a9ac"},
+ {file = "rpds_py-0.18.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e1735502458621921cee039c47318cb90b51d532c2766593be6207eec53e5c4c"},
+ {file = "rpds_py-0.18.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:f5bab211605d91db0e2995a17b5c6ee5edec1270e46223e513eaa20da20076ac"},
+ {file = "rpds_py-0.18.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2fc24a329a717f9e2448f8cd1f960f9dac4e45b6224d60734edeb67499bab03a"},
+ {file = "rpds_py-0.18.1-cp312-none-win32.whl", hash = "sha256:1805d5901779662d599d0e2e4159d8a82c0b05faa86ef9222bf974572286b2b6"},
+ {file = "rpds_py-0.18.1-cp312-none-win_amd64.whl", hash = "sha256:720edcb916df872d80f80a1cc5ea9058300b97721efda8651efcd938a9c70a72"},
+ {file = "rpds_py-0.18.1-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:c827576e2fa017a081346dce87d532a5310241648eb3700af9a571a6e9fc7e74"},
+ {file = "rpds_py-0.18.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:aa3679e751408d75a0b4d8d26d6647b6d9326f5e35c00a7ccd82b78ef64f65f8"},
+ {file = "rpds_py-0.18.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0abeee75434e2ee2d142d650d1e54ac1f8b01e6e6abdde8ffd6eeac6e9c38e20"},
+ {file = "rpds_py-0.18.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ed402d6153c5d519a0faf1bb69898e97fb31613b49da27a84a13935ea9164dfc"},
+ {file = "rpds_py-0.18.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:338dee44b0cef8b70fd2ef54b4e09bb1b97fc6c3a58fea5db6cc083fd9fc2724"},
+ {file = "rpds_py-0.18.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7750569d9526199c5b97e5a9f8d96a13300950d910cf04a861d96f4273d5b104"},
+ {file = "rpds_py-0.18.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:607345bd5912aacc0c5a63d45a1f73fef29e697884f7e861094e443187c02be5"},
+ {file = "rpds_py-0.18.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:207c82978115baa1fd8d706d720b4a4d2b0913df1c78c85ba73fe6c5804505f0"},
+ {file = "rpds_py-0.18.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:6d1e42d2735d437e7e80bab4d78eb2e459af48c0a46e686ea35f690b93db792d"},
+ {file = "rpds_py-0.18.1-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:5463c47c08630007dc0fe99fb480ea4f34a89712410592380425a9b4e1611d8e"},
+ {file = "rpds_py-0.18.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:06d218939e1bf2ca50e6b0ec700ffe755e5216a8230ab3e87c059ebb4ea06afc"},
+ {file = "rpds_py-0.18.1-cp38-none-win32.whl", hash = "sha256:312fe69b4fe1ffbe76520a7676b1e5ac06ddf7826d764cc10265c3b53f96dbe9"},
+ {file = "rpds_py-0.18.1-cp38-none-win_amd64.whl", hash = "sha256:9437ca26784120a279f3137ee080b0e717012c42921eb07861b412340f85bae2"},
+ {file = "rpds_py-0.18.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:19e515b78c3fc1039dd7da0a33c28c3154458f947f4dc198d3c72db2b6b5dc93"},
+ {file = "rpds_py-0.18.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a7b28c5b066bca9a4eb4e2f2663012debe680f097979d880657f00e1c30875a0"},
+ {file = "rpds_py-0.18.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:673fdbbf668dd958eff750e500495ef3f611e2ecc209464f661bc82e9838991e"},
+ {file = "rpds_py-0.18.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d960de62227635d2e61068f42a6cb6aae91a7fe00fca0e3aeed17667c8a34611"},
+ {file = "rpds_py-0.18.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:352a88dc7892f1da66b6027af06a2e7e5d53fe05924cc2cfc56495b586a10b72"},
+ {file = "rpds_py-0.18.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4e0ee01ad8260184db21468a6e1c37afa0529acc12c3a697ee498d3c2c4dcaf3"},
+ {file = "rpds_py-0.18.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4c39ad2f512b4041343ea3c7894339e4ca7839ac38ca83d68a832fc8b3748ab"},
+ {file = "rpds_py-0.18.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:aaa71ee43a703c321906813bb252f69524f02aa05bf4eec85f0c41d5d62d0f4c"},
+ {file = "rpds_py-0.18.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:6cd8098517c64a85e790657e7b1e509b9fe07487fd358e19431cb120f7d96338"},
+ {file = "rpds_py-0.18.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:4adec039b8e2928983f885c53b7cc4cda8965b62b6596501a0308d2703f8af1b"},
+ {file = "rpds_py-0.18.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:32b7daaa3e9389db3695964ce8e566e3413b0c43e3394c05e4b243a4cd7bef26"},
+ {file = "rpds_py-0.18.1-cp39-none-win32.whl", hash = "sha256:2625f03b105328729f9450c8badda34d5243231eef6535f80064d57035738360"},
+ {file = "rpds_py-0.18.1-cp39-none-win_amd64.whl", hash = "sha256:bf18932d0003c8c4d51a39f244231986ab23ee057d235a12b2684ea26a353590"},
+ {file = "rpds_py-0.18.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:cbfbea39ba64f5e53ae2915de36f130588bba71245b418060ec3330ebf85678e"},
+ {file = "rpds_py-0.18.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:a3d456ff2a6a4d2adcdf3c1c960a36f4fd2fec6e3b4902a42a384d17cf4e7a65"},
+ {file = "rpds_py-0.18.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7700936ef9d006b7ef605dc53aa364da2de5a3aa65516a1f3ce73bf82ecfc7ae"},
+ {file = "rpds_py-0.18.1-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:51584acc5916212e1bf45edd17f3a6b05fe0cbb40482d25e619f824dccb679de"},
+ {file = "rpds_py-0.18.1-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:942695a206a58d2575033ff1e42b12b2aece98d6003c6bc739fbf33d1773b12f"},
+ {file = "rpds_py-0.18.1-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b906b5f58892813e5ba5c6056d6a5ad08f358ba49f046d910ad992196ea61397"},
+ {file = "rpds_py-0.18.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6f8e3fecca256fefc91bb6765a693d96692459d7d4c644660a9fff32e517843"},
+ {file = "rpds_py-0.18.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7732770412bab81c5a9f6d20aeb60ae943a9b36dcd990d876a773526468e7163"},
+ {file = "rpds_py-0.18.1-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:bd1105b50ede37461c1d51b9698c4f4be6e13e69a908ab7751e3807985fc0346"},
+ {file = "rpds_py-0.18.1-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:618916f5535784960f3ecf8111581f4ad31d347c3de66d02e728de460a46303c"},
+ {file = "rpds_py-0.18.1-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:17c6d2155e2423f7e79e3bb18151c686d40db42d8645e7977442170c360194d4"},
+ {file = "rpds_py-0.18.1-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:6c4c4c3f878df21faf5fac86eda32671c27889e13570645a9eea0a1abdd50922"},
+ {file = "rpds_py-0.18.1-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:fab6ce90574645a0d6c58890e9bcaac8d94dff54fb51c69e5522a7358b80ab64"},
+ {file = "rpds_py-0.18.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:531796fb842b53f2695e94dc338929e9f9dbf473b64710c28af5a160b2a8927d"},
+ {file = "rpds_py-0.18.1-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:740884bc62a5e2bbb31e584f5d23b32320fd75d79f916f15a788d527a5e83644"},
+ {file = "rpds_py-0.18.1-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:998125738de0158f088aef3cb264a34251908dd2e5d9966774fdab7402edfab7"},
+ {file = "rpds_py-0.18.1-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e2be6e9dd4111d5b31ba3b74d17da54a8319d8168890fbaea4b9e5c3de630ae5"},
+ {file = "rpds_py-0.18.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d0cee71bc618cd93716f3c1bf56653740d2d13ddbd47673efa8bf41435a60daa"},
+ {file = "rpds_py-0.18.1-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2c3caec4ec5cd1d18e5dd6ae5194d24ed12785212a90b37f5f7f06b8bedd7139"},
+ {file = "rpds_py-0.18.1-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:27bba383e8c5231cd559affe169ca0b96ec78d39909ffd817f28b166d7ddd4d8"},
+ {file = "rpds_py-0.18.1-pp38-pypy38_pp73-musllinux_1_2_i686.whl", hash = "sha256:a888e8bdb45916234b99da2d859566f1e8a1d2275a801bb8e4a9644e3c7e7909"},
+ {file = "rpds_py-0.18.1-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:6031b25fb1b06327b43d841f33842b383beba399884f8228a6bb3df3088485ff"},
+ {file = "rpds_py-0.18.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:48c2faaa8adfacefcbfdb5f2e2e7bdad081e5ace8d182e5f4ade971f128e6bb3"},
+ {file = "rpds_py-0.18.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:d85164315bd68c0806768dc6bb0429c6f95c354f87485ee3593c4f6b14def2bd"},
+ {file = "rpds_py-0.18.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6afd80f6c79893cfc0574956f78a0add8c76e3696f2d6a15bca2c66c415cf2d4"},
+ {file = "rpds_py-0.18.1-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fa242ac1ff583e4ec7771141606aafc92b361cd90a05c30d93e343a0c2d82a89"},
+ {file = "rpds_py-0.18.1-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d21be4770ff4e08698e1e8e0bce06edb6ea0626e7c8f560bc08222880aca6a6f"},
+ {file = "rpds_py-0.18.1-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5c45a639e93a0c5d4b788b2613bd637468edd62f8f95ebc6fcc303d58ab3f0a8"},
+ {file = "rpds_py-0.18.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:910e71711d1055b2768181efa0a17537b2622afeb0424116619817007f8a2b10"},
+ {file = "rpds_py-0.18.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b9bb1f182a97880f6078283b3505a707057c42bf55d8fca604f70dedfdc0772a"},
+ {file = "rpds_py-0.18.1-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:1d54f74f40b1f7aaa595a02ff42ef38ca654b1469bef7d52867da474243cc633"},
+ {file = "rpds_py-0.18.1-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:8d2e182c9ee01135e11e9676e9a62dfad791a7a467738f06726872374a83db49"},
+ {file = "rpds_py-0.18.1-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:636a15acc588f70fda1661234761f9ed9ad79ebed3f2125d44be0862708b666e"},
+ {file = "rpds_py-0.18.1.tar.gz", hash = "sha256:dc48b479d540770c811fbd1eb9ba2bb66951863e448efec2e2c102625328e92f"},
]
[[package]]
@@ -2644,19 +2718,18 @@ win32 = ["pywin32"]
[[package]]
name = "setuptools"
-version = "69.5.1"
+version = "70.0.0"
description = "Easily download, build, install, upgrade, and uninstall Python packages"
optional = false
python-versions = ">=3.8"
files = [
- {file = "setuptools-69.5.1-py3-none-any.whl", hash = "sha256:c636ac361bc47580504644275c9ad802c50415c7522212252c033bd15f301f32"},
- {file = "setuptools-69.5.1.tar.gz", hash = "sha256:6c1fccdac05a97e598fb0ae3bbed5904ccb317337a51139dcd51453611bbb987"},
+ {file = "setuptools-70.0.0-py3-none-any.whl", hash = "sha256:54faa7f2e8d2d11bcd2c07bed282eef1046b5c080d1c32add737d7b5817b1ad4"},
+ {file = "setuptools-70.0.0.tar.gz", hash = "sha256:f211a66637b8fa059bb28183da127d4e86396c991a942b028c6650d4319c3fd0"},
]
[package.extras]
-docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"]
-testing = ["build[virtualenv]", "filelock (>=3.4.0)", "importlib-metadata", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "mypy (==1.9)", "packaging (>=23.2)", "pip (>=19.1)", "pytest (>=6,!=8.1.1)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-home (>=0.5)", "pytest-mypy", "pytest-perf", "pytest-ruff (>=0.2.1)", "pytest-timeout", "pytest-xdist (>=3)", "tomli", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"]
-testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.2)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"]
+docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "pyproject-hooks (!=1.1)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"]
+testing = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "importlib-metadata", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "mypy (==1.9)", "packaging (>=23.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.1)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-home (>=0.5)", "pytest-mypy", "pytest-perf", "pytest-ruff (>=0.2.1)", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"]
[[package]]
name = "shellingham"
@@ -2682,17 +2755,17 @@ files = [
[[package]]
name = "slack-sdk"
-version = "3.27.1"
+version = "3.28.0"
description = "The Slack API Platform SDK for Python"
optional = false
python-versions = ">=3.6"
files = [
- {file = "slack_sdk-3.27.1-py2.py3-none-any.whl", hash = "sha256:c108e509160cf1324c5c8b1f47ca52fb5e287021b8caf9f4ec78ad737ab7b1d9"},
- {file = "slack_sdk-3.27.1.tar.gz", hash = "sha256:85d86b34d807c26c8bb33c1569ec0985876f06ae4a2692afba765b7a5490d28c"},
+ {file = "slack_sdk-3.28.0-py2.py3-none-any.whl", hash = "sha256:1a47700ae20566575ce494d1d1b6f594b011d06aad28e3b8e28c052cad1d6c4c"},
+ {file = "slack_sdk-3.28.0.tar.gz", hash = "sha256:e6ece5cb70850492637e002e3b0d26d307939f4a33203b88cb274f7475c9a144"},
]
[package.extras]
-optional = ["SQLAlchemy (>=1.4,<3)", "aiodns (>1.0)", "aiohttp (>=3.7.3,<4)", "boto3 (<=2)", "websocket-client (>=1,<2)", "websockets (>=10,<11)", "websockets (>=9.1,<10)"]
+optional = ["SQLAlchemy (>=1.4,<3)", "aiodns (>1.0)", "aiohttp (>=3.7.3,<4)", "boto3 (<=2)", "websocket-client (>=1,<2)", "websockets (>=9.1,<13)"]
[[package]]
name = "sniffio"
@@ -2716,6 +2789,93 @@ files = [
{file = "soupsieve-2.5.tar.gz", hash = "sha256:5663d5a7b3bfaeee0bc4372e7fc48f9cff4940b3eec54a6451cc5299f1097690"},
]
+[[package]]
+name = "sqlalchemy"
+version = "2.0.30"
+description = "Database Abstraction Library"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "SQLAlchemy-2.0.30-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:3b48154678e76445c7ded1896715ce05319f74b1e73cf82d4f8b59b46e9c0ddc"},
+ {file = "SQLAlchemy-2.0.30-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2753743c2afd061bb95a61a51bbb6a1a11ac1c44292fad898f10c9839a7f75b2"},
+ {file = "SQLAlchemy-2.0.30-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a7bfc726d167f425d4c16269a9a10fe8630ff6d14b683d588044dcef2d0f6be7"},
+ {file = "SQLAlchemy-2.0.30-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c4f61ada6979223013d9ab83a3ed003ded6959eae37d0d685db2c147e9143797"},
+ {file = "SQLAlchemy-2.0.30-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:3a365eda439b7a00732638f11072907c1bc8e351c7665e7e5da91b169af794af"},
+ {file = "SQLAlchemy-2.0.30-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:bba002a9447b291548e8d66fd8c96a6a7ed4f2def0bb155f4f0a1309fd2735d5"},
+ {file = "SQLAlchemy-2.0.30-cp310-cp310-win32.whl", hash = "sha256:0138c5c16be3600923fa2169532205d18891b28afa817cb49b50e08f62198bb8"},
+ {file = "SQLAlchemy-2.0.30-cp310-cp310-win_amd64.whl", hash = "sha256:99650e9f4cf3ad0d409fed3eec4f071fadd032e9a5edc7270cd646a26446feeb"},
+ {file = "SQLAlchemy-2.0.30-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:955991a09f0992c68a499791a753523f50f71a6885531568404fa0f231832aa0"},
+ {file = "SQLAlchemy-2.0.30-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f69e4c756ee2686767eb80f94c0125c8b0a0b87ede03eacc5c8ae3b54b99dc46"},
+ {file = "SQLAlchemy-2.0.30-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69c9db1ce00e59e8dd09d7bae852a9add716efdc070a3e2068377e6ff0d6fdaa"},
+ {file = "SQLAlchemy-2.0.30-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a1429a4b0f709f19ff3b0cf13675b2b9bfa8a7e79990003207a011c0db880a13"},
+ {file = "SQLAlchemy-2.0.30-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:efedba7e13aa9a6c8407c48facfdfa108a5a4128e35f4c68f20c3407e4376aa9"},
+ {file = "SQLAlchemy-2.0.30-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:16863e2b132b761891d6c49f0a0f70030e0bcac4fd208117f6b7e053e68668d0"},
+ {file = "SQLAlchemy-2.0.30-cp311-cp311-win32.whl", hash = "sha256:2ecabd9ccaa6e914e3dbb2aa46b76dede7eadc8cbf1b8083c94d936bcd5ffb49"},
+ {file = "SQLAlchemy-2.0.30-cp311-cp311-win_amd64.whl", hash = "sha256:0b3f4c438e37d22b83e640f825ef0f37b95db9aa2d68203f2c9549375d0b2260"},
+ {file = "SQLAlchemy-2.0.30-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5a79d65395ac5e6b0c2890935bad892eabb911c4aa8e8015067ddb37eea3d56c"},
+ {file = "SQLAlchemy-2.0.30-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9a5baf9267b752390252889f0c802ea13b52dfee5e369527da229189b8bd592e"},
+ {file = "SQLAlchemy-2.0.30-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3cb5a646930c5123f8461f6468901573f334c2c63c795b9af350063a736d0134"},
+ {file = "SQLAlchemy-2.0.30-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:296230899df0b77dec4eb799bcea6fbe39a43707ce7bb166519c97b583cfcab3"},
+ {file = "SQLAlchemy-2.0.30-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:c62d401223f468eb4da32627bffc0c78ed516b03bb8a34a58be54d618b74d472"},
+ {file = "SQLAlchemy-2.0.30-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:3b69e934f0f2b677ec111b4d83f92dc1a3210a779f69bf905273192cf4ed433e"},
+ {file = "SQLAlchemy-2.0.30-cp312-cp312-win32.whl", hash = "sha256:77d2edb1f54aff37e3318f611637171e8ec71472f1fdc7348b41dcb226f93d90"},
+ {file = "SQLAlchemy-2.0.30-cp312-cp312-win_amd64.whl", hash = "sha256:b6c7ec2b1f4969fc19b65b7059ed00497e25f54069407a8701091beb69e591a5"},
+ {file = "SQLAlchemy-2.0.30-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5a8e3b0a7e09e94be7510d1661339d6b52daf202ed2f5b1f9f48ea34ee6f2d57"},
+ {file = "SQLAlchemy-2.0.30-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b60203c63e8f984df92035610c5fb76d941254cf5d19751faab7d33b21e5ddc0"},
+ {file = "SQLAlchemy-2.0.30-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f1dc3eabd8c0232ee8387fbe03e0a62220a6f089e278b1f0aaf5e2d6210741ad"},
+ {file = "SQLAlchemy-2.0.30-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:40ad017c672c00b9b663fcfcd5f0864a0a97828e2ee7ab0c140dc84058d194cf"},
+ {file = "SQLAlchemy-2.0.30-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:e42203d8d20dc704604862977b1470a122e4892791fe3ed165f041e4bf447a1b"},
+ {file = "SQLAlchemy-2.0.30-cp37-cp37m-win32.whl", hash = "sha256:2a4f4da89c74435f2bc61878cd08f3646b699e7d2eba97144030d1be44e27584"},
+ {file = "SQLAlchemy-2.0.30-cp37-cp37m-win_amd64.whl", hash = "sha256:b6bf767d14b77f6a18b6982cbbf29d71bede087edae495d11ab358280f304d8e"},
+ {file = "SQLAlchemy-2.0.30-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:bc0c53579650a891f9b83fa3cecd4e00218e071d0ba00c4890f5be0c34887ed3"},
+ {file = "SQLAlchemy-2.0.30-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:311710f9a2ee235f1403537b10c7687214bb1f2b9ebb52702c5aa4a77f0b3af7"},
+ {file = "SQLAlchemy-2.0.30-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:408f8b0e2c04677e9c93f40eef3ab22f550fecb3011b187f66a096395ff3d9fd"},
+ {file = "SQLAlchemy-2.0.30-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:37a4b4fb0dd4d2669070fb05b8b8824afd0af57587393015baee1cf9890242d9"},
+ {file = "SQLAlchemy-2.0.30-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:a943d297126c9230719c27fcbbeab57ecd5d15b0bd6bfd26e91bfcfe64220621"},
+ {file = "SQLAlchemy-2.0.30-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:0a089e218654e740a41388893e090d2e2c22c29028c9d1353feb38638820bbeb"},
+ {file = "SQLAlchemy-2.0.30-cp38-cp38-win32.whl", hash = "sha256:fa561138a64f949f3e889eb9ab8c58e1504ab351d6cf55259dc4c248eaa19da6"},
+ {file = "SQLAlchemy-2.0.30-cp38-cp38-win_amd64.whl", hash = "sha256:7d74336c65705b986d12a7e337ba27ab2b9d819993851b140efdf029248e818e"},
+ {file = "SQLAlchemy-2.0.30-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ae8c62fe2480dd61c532ccafdbce9b29dacc126fe8be0d9a927ca3e699b9491a"},
+ {file = "SQLAlchemy-2.0.30-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2383146973a15435e4717f94c7509982770e3e54974c71f76500a0136f22810b"},
+ {file = "SQLAlchemy-2.0.30-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8409de825f2c3b62ab15788635ccaec0c881c3f12a8af2b12ae4910a0a9aeef6"},
+ {file = "SQLAlchemy-2.0.30-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0094c5dc698a5f78d3d1539853e8ecec02516b62b8223c970c86d44e7a80f6c7"},
+ {file = "SQLAlchemy-2.0.30-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:edc16a50f5e1b7a06a2dcc1f2205b0b961074c123ed17ebda726f376a5ab0953"},
+ {file = "SQLAlchemy-2.0.30-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:f7703c2010355dd28f53deb644a05fc30f796bd8598b43f0ba678878780b6e4c"},
+ {file = "SQLAlchemy-2.0.30-cp39-cp39-win32.whl", hash = "sha256:1f9a727312ff6ad5248a4367358e2cf7e625e98b1028b1d7ab7b806b7d757513"},
+ {file = "SQLAlchemy-2.0.30-cp39-cp39-win_amd64.whl", hash = "sha256:a0ef36b28534f2a5771191be6edb44cc2673c7b2edf6deac6562400288664221"},
+ {file = "SQLAlchemy-2.0.30-py3-none-any.whl", hash = "sha256:7108d569d3990c71e26a42f60474b4c02c8586c4681af5fd67e51a044fdea86a"},
+ {file = "SQLAlchemy-2.0.30.tar.gz", hash = "sha256:2b1708916730f4830bc69d6f49d37f7698b5bd7530aca7f04f785f8849e95255"},
+]
+
+[package.dependencies]
+greenlet = {version = "!=0.4.17", markers = "platform_machine == \"aarch64\" or platform_machine == \"ppc64le\" or platform_machine == \"x86_64\" or platform_machine == \"amd64\" or platform_machine == \"AMD64\" or platform_machine == \"win32\" or platform_machine == \"WIN32\""}
+typing-extensions = ">=4.6.0"
+
+[package.extras]
+aiomysql = ["aiomysql (>=0.2.0)", "greenlet (!=0.4.17)"]
+aioodbc = ["aioodbc", "greenlet (!=0.4.17)"]
+aiosqlite = ["aiosqlite", "greenlet (!=0.4.17)", "typing_extensions (!=3.10.0.1)"]
+asyncio = ["greenlet (!=0.4.17)"]
+asyncmy = ["asyncmy (>=0.2.3,!=0.2.4,!=0.2.6)", "greenlet (!=0.4.17)"]
+mariadb-connector = ["mariadb (>=1.0.1,!=1.1.2,!=1.1.5)"]
+mssql = ["pyodbc"]
+mssql-pymssql = ["pymssql"]
+mssql-pyodbc = ["pyodbc"]
+mypy = ["mypy (>=0.910)"]
+mysql = ["mysqlclient (>=1.4.0)"]
+mysql-connector = ["mysql-connector-python"]
+oracle = ["cx_oracle (>=8)"]
+oracle-oracledb = ["oracledb (>=1.0.1)"]
+postgresql = ["psycopg2 (>=2.7)"]
+postgresql-asyncpg = ["asyncpg", "greenlet (!=0.4.17)"]
+postgresql-pg8000 = ["pg8000 (>=1.29.1)"]
+postgresql-psycopg = ["psycopg (>=3.0.7)"]
+postgresql-psycopg2binary = ["psycopg2-binary"]
+postgresql-psycopg2cffi = ["psycopg2cffi"]
+postgresql-psycopgbinary = ["psycopg[binary] (>=3.0.7)"]
+pymysql = ["pymysql"]
+sqlcipher = ["sqlcipher3_binary"]
+
[[package]]
name = "stack-data"
version = "0.6.3"
@@ -2737,17 +2897,18 @@ tests = ["cython", "littleutils", "pygments", "pytest", "typeguard"]
[[package]]
name = "tenacity"
-version = "8.2.3"
+version = "8.3.0"
description = "Retry code until it succeeds"
optional = false
-python-versions = ">=3.7"
+python-versions = ">=3.8"
files = [
- {file = "tenacity-8.2.3-py3-none-any.whl", hash = "sha256:ce510e327a630c9e1beaf17d42e6ffacc88185044ad85cf74c0a8887c6a0f88c"},
- {file = "tenacity-8.2.3.tar.gz", hash = "sha256:5398ef0d78e63f40007c1fb4c0bff96e1911394d2fa8d194f77619c05ff6cc8a"},
+ {file = "tenacity-8.3.0-py3-none-any.whl", hash = "sha256:3649f6443dbc0d9b01b9d8020a9c4ec7a1ff5f6f3c6c8a036ef371f573fe9185"},
+ {file = "tenacity-8.3.0.tar.gz", hash = "sha256:953d4e6ad24357bceffbc9707bc74349aca9d245f68eb65419cf0c249a1949a2"},
]
[package.extras]
-doc = ["reno", "sphinx", "tornado (>=4.5)"]
+doc = ["reno", "sphinx"]
+test = ["pytest", "tornado (>=4.5)", "typeguard"]
[[package]]
name = "terminado"
@@ -2790,33 +2951,33 @@ test = ["pytest", "ruff"]
[[package]]
name = "tomlkit"
-version = "0.12.4"
+version = "0.12.5"
description = "Style preserving TOML library"
optional = false
python-versions = ">=3.7"
files = [
- {file = "tomlkit-0.12.4-py3-none-any.whl", hash = "sha256:5cd82d48a3dd89dee1f9d64420aa20ae65cfbd00668d6f094d7578a78efbb77b"},
- {file = "tomlkit-0.12.4.tar.gz", hash = "sha256:7ca1cfc12232806517a8515047ba66a19369e71edf2439d0f5824f91032b6cc3"},
+ {file = "tomlkit-0.12.5-py3-none-any.whl", hash = "sha256:af914f5a9c59ed9d0762c7b64d3b5d5df007448eb9cd2edc8a46b1eafead172f"},
+ {file = "tomlkit-0.12.5.tar.gz", hash = "sha256:eef34fba39834d4d6b73c9ba7f3e4d1c417a4e56f89a7e96e090dd0d24b8fb3c"},
]
[[package]]
name = "tornado"
-version = "6.4"
+version = "6.4.1"
description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed."
optional = false
-python-versions = ">= 3.8"
+python-versions = ">=3.8"
files = [
- {file = "tornado-6.4-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:02ccefc7d8211e5a7f9e8bc3f9e5b0ad6262ba2fbb683a6443ecc804e5224ce0"},
- {file = "tornado-6.4-cp38-abi3-macosx_10_9_x86_64.whl", hash = "sha256:27787de946a9cffd63ce5814c33f734c627a87072ec7eed71f7fc4417bb16263"},
- {file = "tornado-6.4-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f7894c581ecdcf91666a0912f18ce5e757213999e183ebfc2c3fdbf4d5bd764e"},
- {file = "tornado-6.4-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e43bc2e5370a6a8e413e1e1cd0c91bedc5bd62a74a532371042a18ef19e10579"},
- {file = "tornado-6.4-cp38-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f0251554cdd50b4b44362f73ad5ba7126fc5b2c2895cc62b14a1c2d7ea32f212"},
- {file = "tornado-6.4-cp38-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:fd03192e287fbd0899dd8f81c6fb9cbbc69194d2074b38f384cb6fa72b80e9c2"},
- {file = "tornado-6.4-cp38-abi3-musllinux_1_1_i686.whl", hash = "sha256:88b84956273fbd73420e6d4b8d5ccbe913c65d31351b4c004ae362eba06e1f78"},
- {file = "tornado-6.4-cp38-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:71ddfc23a0e03ef2df1c1397d859868d158c8276a0603b96cf86892bff58149f"},
- {file = "tornado-6.4-cp38-abi3-win32.whl", hash = "sha256:6f8a6c77900f5ae93d8b4ae1196472d0ccc2775cc1dfdc9e7727889145c45052"},
- {file = "tornado-6.4-cp38-abi3-win_amd64.whl", hash = "sha256:10aeaa8006333433da48dec9fe417877f8bcc21f48dda8d661ae79da357b2a63"},
- {file = "tornado-6.4.tar.gz", hash = "sha256:72291fa6e6bc84e626589f1c29d90a5a6d593ef5ae68052ee2ef000dfd273dee"},
+ {file = "tornado-6.4.1-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:163b0aafc8e23d8cdc3c9dfb24c5368af84a81e3364745ccb4427669bf84aec8"},
+ {file = "tornado-6.4.1-cp38-abi3-macosx_10_9_x86_64.whl", hash = "sha256:6d5ce3437e18a2b66fbadb183c1d3364fb03f2be71299e7d10dbeeb69f4b2a14"},
+ {file = "tornado-6.4.1-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e2e20b9113cd7293f164dc46fffb13535266e713cdb87bd2d15ddb336e96cfc4"},
+ {file = "tornado-6.4.1-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8ae50a504a740365267b2a8d1a90c9fbc86b780a39170feca9bcc1787ff80842"},
+ {file = "tornado-6.4.1-cp38-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:613bf4ddf5c7a95509218b149b555621497a6cc0d46ac341b30bd9ec19eac7f3"},
+ {file = "tornado-6.4.1-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:25486eb223babe3eed4b8aecbac33b37e3dd6d776bc730ca14e1bf93888b979f"},
+ {file = "tornado-6.4.1-cp38-abi3-musllinux_1_2_i686.whl", hash = "sha256:454db8a7ecfcf2ff6042dde58404164d969b6f5d58b926da15e6b23817950fc4"},
+ {file = "tornado-6.4.1-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:a02a08cc7a9314b006f653ce40483b9b3c12cda222d6a46d4ac63bb6c9057698"},
+ {file = "tornado-6.4.1-cp38-abi3-win32.whl", hash = "sha256:d9a566c40b89757c9aa8e6f032bcdb8ca8795d7c1a9762910c722b1635c9de4d"},
+ {file = "tornado-6.4.1-cp38-abi3-win_amd64.whl", hash = "sha256:b24b8982ed444378d7f21d563f4180a2de31ced9d8d84443907a0a64da2072e7"},
+ {file = "tornado-6.4.1.tar.gz", hash = "sha256:92d3ab53183d8c50f8204a51e6f91d18a15d5ef261e84d452800d4ff6fc504e9"},
]
[[package]]
@@ -2882,13 +3043,13 @@ files = [
[[package]]
name = "typing-extensions"
-version = "4.11.0"
+version = "4.12.2"
description = "Backported and Experimental Type Hints for Python 3.8+"
optional = false
python-versions = ">=3.8"
files = [
- {file = "typing_extensions-4.11.0-py3-none-any.whl", hash = "sha256:c1f94d72897edaf4ce775bb7558d5b79d8126906a14ea5ed1635921406c0387a"},
- {file = "typing_extensions-4.11.0.tar.gz", hash = "sha256:83f085bd5ca59c80295fc2a82ab5dac679cbe02b9f33f7d83af68e241bea51b0"},
+ {file = "typing_extensions-4.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d"},
+ {file = "typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8"},
]
[[package]]
@@ -2946,18 +3107,18 @@ files = [
[[package]]
name = "webcolors"
-version = "1.13"
+version = "24.6.0"
description = "A library for working with the color formats defined by HTML and CSS."
optional = false
-python-versions = ">=3.7"
+python-versions = ">=3.8"
files = [
- {file = "webcolors-1.13-py3-none-any.whl", hash = "sha256:29bc7e8752c0a1bd4a1f03c14d6e6a72e93d82193738fa860cbff59d0fcc11bf"},
- {file = "webcolors-1.13.tar.gz", hash = "sha256:c225b674c83fa923be93d235330ce0300373d02885cef23238813b0d5668304a"},
+ {file = "webcolors-24.6.0-py3-none-any.whl", hash = "sha256:8cf5bc7e28defd1d48b9e83d5fc30741328305a8195c29a8e668fa45586568a1"},
+ {file = "webcolors-24.6.0.tar.gz", hash = "sha256:1d160d1de46b3e81e58d0a280d0c78b467dc80f47294b91b1ad8029d2cedb55b"},
]
[package.extras]
docs = ["furo", "sphinx", "sphinx-copybutton", "sphinx-inline-tabs", "sphinx-notfound-page", "sphinxext-opengraph"]
-tests = ["pytest", "pytest-cov"]
+tests = ["coverage[toml]"]
[[package]]
name = "webencodings"
@@ -2972,21 +3133,21 @@ files = [
[[package]]
name = "websocket-client"
-version = "1.7.0"
+version = "1.8.0"
description = "WebSocket client for Python with low level API options"
optional = false
python-versions = ">=3.8"
files = [
- {file = "websocket-client-1.7.0.tar.gz", hash = "sha256:10e511ea3a8c744631d3bd77e61eb17ed09304c413ad42cf6ddfa4c7787e8fe6"},
- {file = "websocket_client-1.7.0-py3-none-any.whl", hash = "sha256:f4c3d22fec12a2461427a29957ff07d35098ee2d976d3ba244e688b8b4057588"},
+ {file = "websocket_client-1.8.0-py3-none-any.whl", hash = "sha256:17b44cc997f5c498e809b22cdf2d9c7a9e71c02c8cc2b6c56e7c2d1239bfa526"},
+ {file = "websocket_client-1.8.0.tar.gz", hash = "sha256:3239df9f44da632f96012472805d40a23281a991027ce11d2f45a6f24ac4c3da"},
]
[package.extras]
-docs = ["Sphinx (>=6.0)", "sphinx-rtd-theme (>=1.1.0)"]
+docs = ["Sphinx (>=6.0)", "myst-parser (>=2.0.0)", "sphinx-rtd-theme (>=1.1.0)"]
optional = ["python-socks", "wsaccel"]
test = ["websockets"]
[metadata]
lock-version = "2.0"
python-versions = "^3.11"
-content-hash = "31d2c52956b62abfffe6ca35cb90fd7f71aa8ddbe81cf1117db1414aeae9eaf4"
+content-hash = "f7d115d7c9e403d9501ce979f30334c74bb1527f3bc95b70583c03f7bcf9cfdd"
diff --git a/analytics/pyproject.toml b/analytics/pyproject.toml
index 1715b6859..bf9fdc026 100644
--- a/analytics/pyproject.toml
+++ b/analytics/pyproject.toml
@@ -20,6 +20,7 @@ pydantic = "^2.0.3"
python = "^3.11"
slack-sdk = "^3.23.0"
typer = { extras = ["all"], version = "^0.9.0" }
+sqlalchemy = "^2.0.30"
[tool.poetry.group.dev.dependencies]
black = "^23.7.0"
diff --git a/analytics/settings.toml b/analytics/settings.toml
index e69de29bb..b292763e9 100644
--- a/analytics/settings.toml
+++ b/analytics/settings.toml
@@ -0,0 +1,4 @@
+POSTGRES_NAME = "app"
+POSTGRES_HOST = "0.0.0.0"
+POSTGRES_USER = "app"
+POSTGRES_PORT = 5432
\ No newline at end of file
diff --git a/analytics/src/analytics/cli.py b/analytics/src/analytics/cli.py
index a62bef53b..07eb3c3f0 100644
--- a/analytics/src/analytics/cli.py
+++ b/analytics/src/analytics/cli.py
@@ -1,19 +1,23 @@
# pylint: disable=C0415
"""Expose a series of CLI entrypoints for the analytics package."""
+import logging
from pathlib import Path
from typing import Annotated, Optional
import typer
from slack_sdk import WebClient
+from sqlalchemy import text
from analytics.datasets.deliverable_tasks import DeliverableTasks
from analytics.datasets.sprint_board import SprintBoard
-from analytics.integrations import github, slack
+from analytics.integrations import db, github, slack
from analytics.metrics.base import BaseMetric, Unit
from analytics.metrics.burndown import SprintBurndown
from analytics.metrics.burnup import SprintBurnup
from analytics.metrics.percent_complete import DeliverablePercentComplete
+logger = logging.getLogger(__name__)
+
# fmt: off
# Instantiate typer options with help text for the commands below
SPRINT_FILE_ARG = typer.Option(help="Path to file with exported sprint data")
@@ -122,6 +126,29 @@ def calculate_sprint_burnup(
)
+@export_app.command(name="test_connection")
+def test_connection() -> None:
+ """Test function that ensures the DB connection works."""
+ engine = db.get_db()
+ # connection method from sqlalchemy
+ connection = engine.connect()
+
+ # Test INSERT INTO action
+ result = connection.execute(
+ text(
+ "INSERT INTO audit_log (topic,timestamp, end_timestamp, user_id, details)"
+ "VALUES('test','2024-06-11 10:41:15','2024-06-11 10:54:15',87654,'test from command');",
+ ),
+ )
+ # Test SELECT action
+ result = connection.execute(text("SELECT * FROM audit_log WHERE user_id=87654;"))
+ for row in result:
+ print(row)
+ # commits the transaction to the db
+ connection.commit()
+ result.close()
+
+
@metrics_app.command(name="deliverable_percent_complete")
def calculate_deliverable_percent_complete(
sprint_file: Annotated[str, SPRINT_FILE_ARG],
diff --git a/analytics/src/analytics/datasets/base.py b/analytics/src/analytics/datasets/base.py
index deb730d9d..bd9bf7d6b 100644
--- a/analytics/src/analytics/datasets/base.py
+++ b/analytics/src/analytics/datasets/base.py
@@ -1,8 +1,11 @@
+# ruff: noqa: E501
+# pylint: disable=C0301
"""Base class for all datasets which provides an interface for metrics."""
from pathlib import Path
from typing import Self
import pandas as pd
+from sqlalchemy import Engine
class BaseDataset:
@@ -22,6 +25,82 @@ def from_dict(cls, data: list[dict]) -> Self:
"""Load the dataset from a list of python dictionaries representing records."""
return cls(df=pd.DataFrame(data))
+ def to_sql(
+ self,
+ output_table: str,
+ engine: Engine,
+ *,
+ replace_table: bool = True,
+ ) -> None:
+ """
+ Write the contents of a pandas DataFrame to a SQL table.
+
+ This function takes a pandas DataFrame (`self.df`), an output table name (`output_table`),
+ and a SQLAlchemy Engine object (`engine`) as required arguments. It optionally accepts
+ a `replace_table` argument (default: True) that determines how existing data in the
+ target table is handled.
+
+ **Parameters:**
+
+ * self (required): The instance of the class containing the DataFrame (`self.df`)
+ to be written to the database.
+ * output_table (str, required): The name of the table in the database where the
+ data will be inserted.
+ * engine (sqlalchemy.engine.Engine, required): A SQLAlchemy Engine object representing
+ the connection to the database.
+ * replace_table (bool, default=True):
+ * If True (default), the function will completely replace the contents of the
+ existing table with the data from the DataFrame. (if_exists="replace")
+ * If False, the data from the DataFrame will be appended to the existing table.
+ (if_exists="append")
+
+ **Returns:**
+
+ * None
+
+ **Raises:**
+
+ * Potential exceptions raised by the underlying pandas.to_sql function, such as
+ database connection errors or errors related to data type mismatches.
+ """
+ if replace_table:
+ self.df.to_sql(output_table, engine, if_exists="replace", index=False)
+ else:
+ self.df.to_sql(output_table, engine, if_exists="append", index=False)
+
+ @classmethod
+ def from_sql(
+ cls,
+ source_table: str,
+ engine: Engine,
+ ) -> Self:
+ """
+ Read data from a SQL table into a pandas DataFrame and creates an instance of the current class.
+
+ This function takes a source table name (`source_table`) and a SQLAlchemy Engine object (`engine`) as required arguments.
+ It utilizes pandas.read_sql to retrieve the data from the database and then creates a new instance of the current class (`cls`) initialized with the resulting DataFrame (`df`).
+
+ **Parameters:**
+
+ * cls (class, required): The class that will be instantiated with the data from the
+ SQL table. This allows for creating objects of the same type as the function is called on.
+ * source_table (str, required): The name of the table in the database from which the
+ data will be read.
+ * engine (sqlalchemy.engine.Engine, required): A SQLAlchemy Engine object representing
+ the connection to the database.
+
+ **Returns:**
+
+ * Self: A new instance of the current class (`cls`) initialized with the DataFrame
+ containing the data from the SQL table.
+
+ **Raises:**
+
+ * Potential exceptions raised by the underlying pandas.read_sql function, such as
+ database connection errors or errors related to data type mismatches.
+ """
+ return cls(df=pd.read_sql(source_table, engine))
+
def to_csv(
self,
output_file: Path,
diff --git a/analytics/src/analytics/integrations/db.py b/analytics/src/analytics/integrations/db.py
new file mode 100644
index 000000000..6f6ef1155
--- /dev/null
+++ b/analytics/src/analytics/integrations/db.py
@@ -0,0 +1,29 @@
+# pylint: disable=invalid-name, line-too-long
+"""Get a connection to the database using a SQLAlchemy engine object."""
+
+from sqlalchemy import Engine, create_engine
+
+from config import settings
+
+
+# The variables used in the connection url are set in settings.toml and
+# .secrets.toml. These can be overridden with the custom prefix defined in config.py: "ANALYTICS".
+# e.g. `export ANALYTICS_POSTGRES_USER=new_usr`.
+# Docs: https://www.dynaconf.com/envvars/
+def get_db() -> Engine:
+ """
+ Get a connection to the database using a SQLAlchemy engine object.
+
+ This function retrieves the database connection URL from the configuration
+ and creates a SQLAlchemy engine object.
+
+ Yields
+ ------
+ sqlalchemy.engine.Engine
+ A SQLAlchemy engine object representing the connection to the database.
+ """
+ return create_engine(
+ f"postgresql+psycopg://{settings.postgres_user}:{settings.postgres_password}@{settings.postgres_host}:{settings.postgres_port}",
+ pool_pre_ping=True,
+ hide_parameters=True,
+ )
From a774ada987236de2e209934f61f89df160e5d289 Mon Sep 17 00:00:00 2001
From: Ryan Lewis <93001277+rylew1@users.noreply.github.com>
Date: Wed, 12 Jun 2024 12:09:01 -0700
Subject: [PATCH 20/21] [Issue #40]: Setup pa11y-ci (#41)
## Summary
Fixes #40
### Time to review: 5 min
## Changes proposed
- Add `pa11y-ci` to run PR checks
- Tests for each of the pages we have so far
---
.github/workflows/ci-frontend-a11y.yml | 62 +
frontend/.gitignore | 4 +
frontend/.pa11yci.json | 100 +
frontend/bin/wait-for-frontend.sh | 31 +
frontend/package-lock.json | 8062 +++++++++++----------
frontend/package.json | 2 +
frontend/src/app/[locale]/search/page.tsx | 7 +-
7 files changed, 4248 insertions(+), 4020 deletions(-)
create mode 100644 .github/workflows/ci-frontend-a11y.yml
create mode 100644 frontend/.pa11yci.json
create mode 100755 frontend/bin/wait-for-frontend.sh
diff --git a/.github/workflows/ci-frontend-a11y.yml b/.github/workflows/ci-frontend-a11y.yml
new file mode 100644
index 000000000..7bfe2d058
--- /dev/null
+++ b/.github/workflows/ci-frontend-a11y.yml
@@ -0,0 +1,62 @@
+name: pa11y tests
+
+on:
+ pull_request:
+ paths:
+ - frontend/**
+ - .github/workflows/ci-frontend-a11y.yml
+
+jobs:
+ build:
+ name: Pa11y-ci tests
+ runs-on: ubuntu-latest
+ defaults:
+ run:
+ working-directory: ./frontend
+
+ env:
+ NODE_VERSION: 20
+ LOCKFILE_PATH: ./frontend/package-lock.json
+ PACKAGE_MANAGER: npm
+
+ steps:
+ - name: Checkout source
+ uses: actions/checkout@v4
+
+ - name: Set up Node.js
+ uses: actions/setup-node@v4
+ with:
+ node-version: ${{ env.NODE_VERSION }}
+ cache-dependency-path: ${{ env.LOCKFILE_PATH }}
+ cache: ${{ env.PACKAGE_MANAGER }}
+
+ - name: Install dependencies
+ run: npm ci
+
+ - name: Create screenshots directory
+ run: mkdir -p screenshots-output
+
+ - name: Build project
+ run: npm run build
+
+ - name: Start server and log output
+ run: npm run start &
+
+ - name: Wait for frontend to be ready
+ run: |
+ # Ensure the server wait script is executable
+ chmod +x ./bin/wait-for-frontend.sh
+ ./bin/wait-for-frontend.sh
+
+ - name: Run pa11y-ci
+ run: |
+ set -e # Ensure the script fails if any command fails
+ npm run test:pa11y
+ echo "pa11y-ci tests finished."
+
+ - name: Upload screenshots to artifacts
+ if: always()
+ uses: actions/upload-artifact@v3
+ with:
+ name: screenshots
+ path: ./frontend/screenshots-output
diff --git a/frontend/.gitignore b/frontend/.gitignore
index f38f90c87..5d8d182bb 100644
--- a/frontend/.gitignore
+++ b/frontend/.gitignore
@@ -51,3 +51,7 @@ npm-debug.log*
/playwright-report/
/blob-report/
/playwright/.cache/
+
+# pa11y
+screenshots-output/*
+pa11y_output.txt
diff --git a/frontend/.pa11yci.json b/frontend/.pa11yci.json
new file mode 100644
index 000000000..24a1e1769
--- /dev/null
+++ b/frontend/.pa11yci.json
@@ -0,0 +1,100 @@
+{
+ "defaults": {
+ "timeout": 240000,
+ "runners": ["axe"],
+ "ignore": ["color-contrast"],
+ "concurrency": 1,
+ "chromeLaunchConfig": {
+ "ignoreHTTPSErrors": true,
+ "args": ["--disable-dev-shm-usage", "--no-sandbox"]
+ }
+ },
+ "urls": [
+ {
+ "url": "http://localhost:3000",
+ "viewport": { "width": 320, "height": 480 },
+ "actions": [
+ "wait for element #main-content to be visible",
+ "screen capture screenshots-output/mobile-main-view.png",
+ "click element .usa-navbar button",
+ "screen capture screenshots-output/mobile-expand-menu.png"
+ ]
+ },
+ {
+ "url": "http://localhost:3000",
+ "actions": [
+ "wait for element #main-content to be visible",
+ "screen capture screenshots-output/desktop-main-view-home.png"
+ ]
+ },
+ {
+ "url": "http://localhost:3000/search?status=forecasted,posted",
+ "viewport": { "width": 320, "height": 480 },
+ "actions": [
+ "wait for element #main-content to be visible",
+ "screen capture screenshots-output/mobile-main-view-search.png",
+ "click element .usa-navbar button",
+ "screen capture screenshots-output/mobile-expand-menu-search.png"
+ ]
+ },
+ {
+ "url": "http://localhost:3000/search?status=forecasted,posted",
+ "viewport": { "width": 320, "height": 480 },
+ "actions": [
+ "wait for element #main-content to be visible",
+ "screen capture screenshots-output/desktop-main-view-search.png"
+ ]
+ },
+ {
+ "url": "http://localhost:3000/process",
+ "viewport": { "width": 320, "height": 480 },
+ "actions": [
+ "wait for element #main-content to be visible",
+ "screen capture screenshots-output/mobile-main-view-process.png",
+ "click element .usa-navbar button",
+ "screen capture screenshots-output/mobile-expand-menu-process.png"
+ ]
+ },
+ {
+ "url": "http://localhost:3000/process",
+ "actions": [
+ "wait for element #main-content to be visible",
+ "screen capture screenshots-output/desktop-main-view-process.png"
+ ]
+ },
+ {
+ "url": "http://localhost:3000/research",
+ "viewport": { "width": 320, "height": 480 },
+ "actions": [
+ "wait for element #main-content to be visible",
+ "screen capture screenshots-output/mobile-main-view-research.png",
+ "click element .usa-navbar button",
+ "screen capture screenshots-output/mobile-expand-menu-research.png"
+ ]
+ },
+ {
+ "url": "http://localhost:3000/research",
+ "actions": [
+ "wait for element #main-content to be visible",
+ "screen capture screenshots-output/desktop-main-view-research.png"
+ ]
+ },
+ {
+ "url": "http://localhost:3000/newsletter",
+ "viewport": { "width": 320, "height": 480 },
+ "actions": [
+ "wait for element #main-content to be visible",
+ "screen capture screenshots-output/mobile-main-view-newsletter.png",
+ "click element .usa-navbar button",
+ "screen capture screenshots-output/mobile-expand-menu-newsletter.png"
+ ]
+ },
+ {
+ "url": "http://localhost:3000/newsletter",
+ "actions": [
+ "wait for element #main-content to be visible",
+ "screen capture screenshots-output/desktop-main-view-newsletter.png"
+ ]
+ }
+ ]
+}
diff --git a/frontend/bin/wait-for-frontend.sh b/frontend/bin/wait-for-frontend.sh
new file mode 100755
index 000000000..7cfac66fa
--- /dev/null
+++ b/frontend/bin/wait-for-frontend.sh
@@ -0,0 +1,31 @@
+# wait-for-frontend.sh
+
+#!/bin/bash
+set -e
+
+# Color formatting for readability
+GREEN='\033[0;32m'
+RED='\033[0;31m'
+NO_COLOR='\033[0m'
+
+MAX_WAIT_TIME=800 # seconds, adjust as necessary
+WAIT_TIME=0
+
+
+echo "Waiting for server to become ready..."
+
+# Use curl to check the server health endpoint
+until curl --output /dev/null --silent --head --fail http://localhost:3000;
+do
+ printf '.'
+ sleep 5
+
+ WAIT_TIME=$(($WAIT_TIME + 5))
+ if [ $WAIT_TIME -gt $MAX_WAIT_TIME ]
+ then
+ echo -e "${RED}ERROR: Server did not become ready within ${MAX_WAIT_TIME} seconds.${NO_COLOR}"
+ exit 1
+ fi
+done
+
+echo -e "${GREEN}Server is ready after ~${WAIT_TIME} seconds.${NO_COLOR}"
diff --git a/frontend/package-lock.json b/frontend/package-lock.json
index fb86c905b..96d0652b1 100644
--- a/frontend/package-lock.json
+++ b/frontend/package-lock.json
@@ -55,6 +55,7 @@
"jest-axe": "^7.0.0",
"jest-cli": "^29.5.0",
"jest-environment-jsdom": "^29.5.0",
+ "pa11y-ci": "^3.1.0",
"postcss": "^8.4.31",
"postcss-loader": "^7.1.0",
"postcss-preset-env": "^8.0.1",
@@ -70,15 +71,6 @@
"node": ">=20.0.0"
}
},
- "node_modules/@aashutoshrathi/word-wrap": {
- "version": "1.2.6",
- "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz",
- "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/@adobe/css-tools": {
"version": "4.3.3",
"resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.3.3.tgz",
@@ -86,13 +78,13 @@
"dev": true
},
"node_modules/@ampproject/remapping": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz",
- "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==",
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz",
+ "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==",
"dev": true,
"dependencies": {
- "@jridgewell/gen-mapping": "^0.3.0",
- "@jridgewell/trace-mapping": "^0.3.9"
+ "@jridgewell/gen-mapping": "^0.3.5",
+ "@jridgewell/trace-mapping": "^0.3.24"
},
"engines": {
"node": ">=6.0.0"
@@ -111,43 +103,43 @@
}
},
"node_modules/@babel/code-frame": {
- "version": "7.23.5",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz",
- "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.6.tgz",
+ "integrity": "sha512-ZJhac6FkEd1yhG2AHOmfcXG4ceoLltoCVJjN5XsWN9BifBQr+cHJbWi0h68HZuSORq+3WtJ2z0hwF2NG1b5kcA==",
"dev": true,
"dependencies": {
- "@babel/highlight": "^7.23.4",
- "chalk": "^2.4.2"
+ "@babel/highlight": "^7.24.6",
+ "picocolors": "^1.0.0"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/compat-data": {
- "version": "7.23.5",
- "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.5.tgz",
- "integrity": "sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.6.tgz",
+ "integrity": "sha512-aC2DGhBq5eEdyXWqrDInSqQjO0k8xtPRf5YylULqx8MCd6jBtzqfta/3ETMRpuKIc5hyswfO80ObyA1MvkCcUQ==",
"dev": true,
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/core": {
- "version": "7.24.0",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.0.tgz",
- "integrity": "sha512-fQfkg0Gjkza3nf0c7/w6Xf34BW4YvzNfACRLmmb7XRLa6XHdR+K9AlJlxneFfWYf6uhOzuzZVTjF/8KfndZANw==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.6.tgz",
+ "integrity": "sha512-qAHSfAdVyFmIvl0VHELib8xar7ONuSHrE2hLnsaWkYNTI68dmi1x8GYDhJjMI/e7XWal9QBlZkwbOnkcw7Z8gQ==",
"dev": true,
"dependencies": {
"@ampproject/remapping": "^2.2.0",
- "@babel/code-frame": "^7.23.5",
- "@babel/generator": "^7.23.6",
- "@babel/helper-compilation-targets": "^7.23.6",
- "@babel/helper-module-transforms": "^7.23.3",
- "@babel/helpers": "^7.24.0",
- "@babel/parser": "^7.24.0",
- "@babel/template": "^7.24.0",
- "@babel/traverse": "^7.24.0",
- "@babel/types": "^7.24.0",
+ "@babel/code-frame": "^7.24.6",
+ "@babel/generator": "^7.24.6",
+ "@babel/helper-compilation-targets": "^7.24.6",
+ "@babel/helper-module-transforms": "^7.24.6",
+ "@babel/helpers": "^7.24.6",
+ "@babel/parser": "^7.24.6",
+ "@babel/template": "^7.24.6",
+ "@babel/traverse": "^7.24.6",
+ "@babel/types": "^7.24.6",
"convert-source-map": "^2.0.0",
"debug": "^4.1.0",
"gensync": "^1.0.0-beta.2",
@@ -172,14 +164,14 @@
}
},
"node_modules/@babel/generator": {
- "version": "7.23.6",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz",
- "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.6.tgz",
+ "integrity": "sha512-S7m4eNa6YAPJRHmKsLHIDJhNAGNKoWNiWefz1MBbpnt8g9lvMDl1hir4P9bo/57bQEmuwEhnRU/AMWsD0G/Fbg==",
"dev": true,
"dependencies": {
- "@babel/types": "^7.23.6",
- "@jridgewell/gen-mapping": "^0.3.2",
- "@jridgewell/trace-mapping": "^0.3.17",
+ "@babel/types": "^7.24.6",
+ "@jridgewell/gen-mapping": "^0.3.5",
+ "@jridgewell/trace-mapping": "^0.3.25",
"jsesc": "^2.5.1"
},
"engines": {
@@ -187,37 +179,37 @@
}
},
"node_modules/@babel/helper-annotate-as-pure": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz",
- "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.6.tgz",
+ "integrity": "sha512-DitEzDfOMnd13kZnDqns1ccmftwJTS9DMkyn9pYTxulS7bZxUxpMly3Nf23QQ6NwA4UB8lAqjbqWtyvElEMAkg==",
"dev": true,
"dependencies": {
- "@babel/types": "^7.22.5"
+ "@babel/types": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-builder-binary-assignment-operator-visitor": {
- "version": "7.22.15",
- "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz",
- "integrity": "sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.24.6.tgz",
+ "integrity": "sha512-+wnfqc5uHiMYtvRX7qu80Toef8BXeh4HHR1SPeonGb1SKPniNEd4a/nlaJJMv/OIEYvIVavvo0yR7u10Gqz0Iw==",
"dev": true,
"dependencies": {
- "@babel/types": "^7.22.15"
+ "@babel/types": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-compilation-targets": {
- "version": "7.23.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz",
- "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.24.6.tgz",
+ "integrity": "sha512-VZQ57UsDGlX/5fFA7GkVPplZhHsVc+vuErWgdOiysI9Ksnw0Pbbd6pnPiR/mmJyKHgyIW0c7KT32gmhiF+cirg==",
"dev": true,
"dependencies": {
- "@babel/compat-data": "^7.23.5",
- "@babel/helper-validator-option": "^7.23.5",
+ "@babel/compat-data": "^7.24.6",
+ "@babel/helper-validator-option": "^7.24.6",
"browserslist": "^4.22.2",
"lru-cache": "^5.1.1",
"semver": "^6.3.1"
@@ -236,19 +228,19 @@
}
},
"node_modules/@babel/helper-create-class-features-plugin": {
- "version": "7.23.10",
- "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.23.10.tgz",
- "integrity": "sha512-2XpP2XhkXzgxecPNEEK8Vz8Asj9aRxt08oKOqtiZoqV2UGZ5T+EkyP9sXQ9nwMxBIG34a7jmasVqoMop7VdPUw==",
- "dev": true,
- "dependencies": {
- "@babel/helper-annotate-as-pure": "^7.22.5",
- "@babel/helper-environment-visitor": "^7.22.20",
- "@babel/helper-function-name": "^7.23.0",
- "@babel/helper-member-expression-to-functions": "^7.23.0",
- "@babel/helper-optimise-call-expression": "^7.22.5",
- "@babel/helper-replace-supers": "^7.22.20",
- "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5",
- "@babel/helper-split-export-declaration": "^7.22.6",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.6.tgz",
+ "integrity": "sha512-djsosdPJVZE6Vsw3kk7IPRWethP94WHGOhQTc67SNXE0ZzMhHgALw8iGmYS0TD1bbMM0VDROy43od7/hN6WYcA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-annotate-as-pure": "^7.24.6",
+ "@babel/helper-environment-visitor": "^7.24.6",
+ "@babel/helper-function-name": "^7.24.6",
+ "@babel/helper-member-expression-to-functions": "^7.24.6",
+ "@babel/helper-optimise-call-expression": "^7.24.6",
+ "@babel/helper-replace-supers": "^7.24.6",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.24.6",
+ "@babel/helper-split-export-declaration": "^7.24.6",
"semver": "^6.3.1"
},
"engines": {
@@ -268,12 +260,12 @@
}
},
"node_modules/@babel/helper-create-regexp-features-plugin": {
- "version": "7.22.15",
- "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz",
- "integrity": "sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.24.6.tgz",
+ "integrity": "sha512-C875lFBIWWwyv6MHZUG9HmRrlTDgOsLWZfYR0nW69gaKJNe0/Mpxx5r0EID2ZdHQkdUmQo2t0uNckTL08/1BgA==",
"dev": true,
"dependencies": {
- "@babel/helper-annotate-as-pure": "^7.22.5",
+ "@babel/helper-annotate-as-pure": "^7.24.6",
"regexpu-core": "^5.3.1",
"semver": "^6.3.1"
},
@@ -294,9 +286,9 @@
}
},
"node_modules/@babel/helper-define-polyfill-provider": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.5.0.tgz",
- "integrity": "sha512-NovQquuQLAQ5HuyjCz7WQP9MjRj7dx++yspwiyUiGl9ZyadHRSql1HZh5ogRd8W8w6YM6EQ/NTB8rgjLt5W65Q==",
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz",
+ "integrity": "sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==",
"dev": true,
"dependencies": {
"@babel/helper-compilation-targets": "^7.22.6",
@@ -310,74 +302,74 @@
}
},
"node_modules/@babel/helper-environment-visitor": {
- "version": "7.22.20",
- "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz",
- "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.6.tgz",
+ "integrity": "sha512-Y50Cg3k0LKLMjxdPjIl40SdJgMB85iXn27Vk/qbHZCFx/o5XO3PSnpi675h1KEmmDb6OFArfd5SCQEQ5Q4H88g==",
"dev": true,
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-function-name": {
- "version": "7.23.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz",
- "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.24.6.tgz",
+ "integrity": "sha512-xpeLqeeRkbxhnYimfr2PC+iA0Q7ljX/d1eZ9/inYbmfG2jpl8Lu3DyXvpOAnrS5kxkfOWJjioIMQsaMBXFI05w==",
"dev": true,
"dependencies": {
- "@babel/template": "^7.22.15",
- "@babel/types": "^7.23.0"
+ "@babel/template": "^7.24.6",
+ "@babel/types": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-hoist-variables": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz",
- "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.6.tgz",
+ "integrity": "sha512-SF/EMrC3OD7dSta1bLJIlrsVxwtd0UpjRJqLno6125epQMJ/kyFmpTT4pbvPbdQHzCHg+biQ7Syo8lnDtbR+uA==",
"dev": true,
"dependencies": {
- "@babel/types": "^7.22.5"
+ "@babel/types": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-member-expression-to-functions": {
- "version": "7.23.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz",
- "integrity": "sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.6.tgz",
+ "integrity": "sha512-OTsCufZTxDUsv2/eDXanw/mUZHWOxSbEmC3pP8cgjcy5rgeVPWWMStnv274DV60JtHxTk0adT0QrCzC4M9NWGg==",
"dev": true,
"dependencies": {
- "@babel/types": "^7.23.0"
+ "@babel/types": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-module-imports": {
- "version": "7.22.15",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz",
- "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.6.tgz",
+ "integrity": "sha512-a26dmxFJBF62rRO9mmpgrfTLsAuyHk4e1hKTUkD/fcMfynt8gvEKwQPQDVxWhca8dHoDck+55DFt42zV0QMw5g==",
"dev": true,
"dependencies": {
- "@babel/types": "^7.22.15"
+ "@babel/types": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-module-transforms": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz",
- "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.6.tgz",
+ "integrity": "sha512-Y/YMPm83mV2HJTbX1Qh2sjgjqcacvOlhbzdCCsSlblOKjSYmQqEbO6rUniWQyRo9ncyfjT8hnUjlG06RXDEmcA==",
"dev": true,
"dependencies": {
- "@babel/helper-environment-visitor": "^7.22.20",
- "@babel/helper-module-imports": "^7.22.15",
- "@babel/helper-simple-access": "^7.22.5",
- "@babel/helper-split-export-declaration": "^7.22.6",
- "@babel/helper-validator-identifier": "^7.22.20"
+ "@babel/helper-environment-visitor": "^7.24.6",
+ "@babel/helper-module-imports": "^7.24.6",
+ "@babel/helper-simple-access": "^7.24.6",
+ "@babel/helper-split-export-declaration": "^7.24.6",
+ "@babel/helper-validator-identifier": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
@@ -387,35 +379,35 @@
}
},
"node_modules/@babel/helper-optimise-call-expression": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz",
- "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.24.6.tgz",
+ "integrity": "sha512-3SFDJRbx7KuPRl8XDUr8O7GAEB8iGyWPjLKJh/ywP/Iy9WOmEfMrsWbaZpvBu2HSYn4KQygIsz0O7m8y10ncMA==",
"dev": true,
"dependencies": {
- "@babel/types": "^7.22.5"
+ "@babel/types": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-plugin-utils": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz",
- "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.6.tgz",
+ "integrity": "sha512-MZG/JcWfxybKwsA9N9PmtF2lOSFSEMVCpIRrbxccZFLJPrJciJdG/UhSh5W96GEteJI2ARqm5UAHxISwRDLSNg==",
"dev": true,
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-remap-async-to-generator": {
- "version": "7.22.20",
- "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz",
- "integrity": "sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.24.6.tgz",
+ "integrity": "sha512-1Qursq9ArRZPAMOZf/nuzVW8HgJLkTB9y9LfP4lW2MVp4e9WkLJDovfKBxoDcCk6VuzIxyqWHyBoaCtSRP10yg==",
"dev": true,
"dependencies": {
- "@babel/helper-annotate-as-pure": "^7.22.5",
- "@babel/helper-environment-visitor": "^7.22.20",
- "@babel/helper-wrap-function": "^7.22.20"
+ "@babel/helper-annotate-as-pure": "^7.24.6",
+ "@babel/helper-environment-visitor": "^7.24.6",
+ "@babel/helper-wrap-function": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
@@ -425,14 +417,14 @@
}
},
"node_modules/@babel/helper-replace-supers": {
- "version": "7.22.20",
- "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz",
- "integrity": "sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.24.6.tgz",
+ "integrity": "sha512-mRhfPwDqDpba8o1F8ESxsEkJMQkUF8ZIWrAc0FtWhxnjfextxMWxr22RtFizxxSYLjVHDeMgVsRq8BBZR2ikJQ==",
"dev": true,
"dependencies": {
- "@babel/helper-environment-visitor": "^7.22.20",
- "@babel/helper-member-expression-to-functions": "^7.22.15",
- "@babel/helper-optimise-call-expression": "^7.22.5"
+ "@babel/helper-environment-visitor": "^7.24.6",
+ "@babel/helper-member-expression-to-functions": "^7.24.6",
+ "@babel/helper-optimise-call-expression": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
@@ -442,114 +434,114 @@
}
},
"node_modules/@babel/helper-simple-access": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz",
- "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.6.tgz",
+ "integrity": "sha512-nZzcMMD4ZhmB35MOOzQuiGO5RzL6tJbsT37Zx8M5L/i9KSrukGXWTjLe1knIbb/RmxoJE9GON9soq0c0VEMM5g==",
"dev": true,
"dependencies": {
- "@babel/types": "^7.22.5"
+ "@babel/types": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-skip-transparent-expression-wrappers": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz",
- "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.24.6.tgz",
+ "integrity": "sha512-jhbbkK3IUKc4T43WadP96a27oYti9gEf1LdyGSP2rHGH77kwLwfhO7TgwnWvxxQVmke0ImmCSS47vcuxEMGD3Q==",
"dev": true,
"dependencies": {
- "@babel/types": "^7.22.5"
+ "@babel/types": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-split-export-declaration": {
- "version": "7.22.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz",
- "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.6.tgz",
+ "integrity": "sha512-CvLSkwXGWnYlF9+J3iZUvwgAxKiYzK3BWuo+mLzD/MDGOZDj7Gq8+hqaOkMxmJwmlv0iu86uH5fdADd9Hxkymw==",
"dev": true,
"dependencies": {
- "@babel/types": "^7.22.5"
+ "@babel/types": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-string-parser": {
- "version": "7.23.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz",
- "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.6.tgz",
+ "integrity": "sha512-WdJjwMEkmBicq5T9fm/cHND3+UlFa2Yj8ALLgmoSQAJZysYbBjw+azChSGPN4DSPLXOcooGRvDwZWMcF/mLO2Q==",
"dev": true,
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-validator-identifier": {
- "version": "7.22.20",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz",
- "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.6.tgz",
+ "integrity": "sha512-4yA7s865JHaqUdRbnaxarZREuPTHrjpDT+pXoAZ1yhyo6uFnIEpS8VMu16siFOHDpZNKYv5BObhsB//ycbICyw==",
"dev": true,
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-validator-option": {
- "version": "7.23.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz",
- "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.6.tgz",
+ "integrity": "sha512-Jktc8KkF3zIkePb48QO+IapbXlSapOW9S+ogZZkcO6bABgYAxtZcjZ/O005111YLf+j4M84uEgwYoidDkXbCkQ==",
"dev": true,
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-wrap-function": {
- "version": "7.22.20",
- "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz",
- "integrity": "sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.24.6.tgz",
+ "integrity": "sha512-f1JLrlw/jbiNfxvdrfBgio/gRBk3yTAEJWirpAkiJG2Hb22E7cEYKHWo0dFPTv/niPovzIdPdEDetrv6tC6gPQ==",
"dev": true,
"dependencies": {
- "@babel/helper-function-name": "^7.22.5",
- "@babel/template": "^7.22.15",
- "@babel/types": "^7.22.19"
+ "@babel/helper-function-name": "^7.24.6",
+ "@babel/template": "^7.24.6",
+ "@babel/types": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helpers": {
- "version": "7.24.0",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.0.tgz",
- "integrity": "sha512-ulDZdc0Aj5uLc5nETsa7EPx2L7rM0YJM8r7ck7U73AXi7qOV44IHHRAYZHY6iU1rr3C5N4NtTmMRUJP6kwCWeA==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.6.tgz",
+ "integrity": "sha512-V2PI+NqnyFu1i0GyTd/O/cTpxzQCYioSkUIRmgo7gFEHKKCg5w46+r/A6WeUR1+P3TeQ49dspGPNd/E3n9AnnA==",
"dev": true,
"dependencies": {
- "@babel/template": "^7.24.0",
- "@babel/traverse": "^7.24.0",
- "@babel/types": "^7.24.0"
+ "@babel/template": "^7.24.6",
+ "@babel/types": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/highlight": {
- "version": "7.23.4",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz",
- "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.6.tgz",
+ "integrity": "sha512-2YnuOp4HAk2BsBrJJvYCbItHx0zWscI1C3zgWkz+wDyD9I7GIVrfnLyrR4Y1VR+7p+chAEcrgRQYZAGIKMV7vQ==",
"dev": true,
"dependencies": {
- "@babel/helper-validator-identifier": "^7.22.20",
+ "@babel/helper-validator-identifier": "^7.24.6",
"chalk": "^2.4.2",
- "js-tokens": "^4.0.0"
+ "js-tokens": "^4.0.0",
+ "picocolors": "^1.0.0"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/parser": {
- "version": "7.24.0",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.0.tgz",
- "integrity": "sha512-QuP/FxEAzMSjXygs8v4N9dvdXzEHN4W1oF3PxuWAtPo08UdM17u89RDMgjLn/mlc56iM0HlLmVkO/wgR+rDgHg==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.6.tgz",
+ "integrity": "sha512-eNZXdfU35nJC2h24RznROuOpO94h6x8sg9ju0tT9biNtLZ2vuP8SduLqqV+/8+cebSLV9SJEAN5Z3zQbJG/M+Q==",
"dev": true,
"bin": {
"parser": "bin/babel-parser.js"
@@ -558,13 +550,29 @@
"node": ">=6.0.0"
}
},
+ "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": {
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.24.6.tgz",
+ "integrity": "sha512-bYndrJ6Ph6Ar+GaB5VAc0JPoP80bQCm4qon6JEzXfRl5QZyQ8Ur1K6k7htxWmPA5z+k7JQvaMUrtXlqclWYzKw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-environment-visitor": "^7.24.6",
+ "@babel/helper-plugin-utils": "^7.24.6"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
"node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.23.3.tgz",
- "integrity": "sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.24.6.tgz",
+ "integrity": "sha512-iVuhb6poq5ikqRq2XWU6OQ+R5o9wF+r/or9CeUyovgptz0UlnK4/seOQ1Istu/XybYjAhQv1FRSSfHHufIku5Q==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5"
+ "@babel/helper-plugin-utils": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
@@ -574,14 +582,14 @@
}
},
"node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.23.3.tgz",
- "integrity": "sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.6.tgz",
+ "integrity": "sha512-c8TER5xMDYzzFcGqOEp9l4hvB7dcbhcGjcLVwxWfe4P5DOafdwjsBJZKsmv+o3aXh7NhopvayQIovHrh2zSRUQ==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5",
- "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5",
- "@babel/plugin-transform-optional-chaining": "^7.23.3"
+ "@babel/helper-plugin-utils": "^7.24.6",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.24.6",
+ "@babel/plugin-transform-optional-chaining": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
@@ -591,13 +599,13 @@
}
},
"node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": {
- "version": "7.23.7",
- "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.23.7.tgz",
- "integrity": "sha512-LlRT7HgaifEpQA1ZgLVOIJZZFVPWN5iReq/7/JixwBtwcoeVGDBD53ZV28rrsLYOZs1Y/EHhA8N/Z6aazHR8cw==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.24.6.tgz",
+ "integrity": "sha512-z8zEjYmwBUHN/pCF3NuWBhHQjJCrd33qAi8MgANfMrAvn72k2cImT8VjK9LJFu4ysOLJqhfkYYb3MvwANRUNZQ==",
"dev": true,
"dependencies": {
- "@babel/helper-environment-visitor": "^7.22.20",
- "@babel/helper-plugin-utils": "^7.22.5"
+ "@babel/helper-environment-visitor": "^7.24.6",
+ "@babel/helper-plugin-utils": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
@@ -694,12 +702,12 @@
}
},
"node_modules/@babel/plugin-syntax-flow": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.23.3.tgz",
- "integrity": "sha512-YZiAIpkJAwQXBJLIQbRFayR5c+gJ35Vcz3bg954k7cd73zqjvhacJuL9RbrzPz8qPmZdgqP6EUKwy0PCNhaaPA==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.24.6.tgz",
+ "integrity": "sha512-gNkksSdV8RbsCoHF9sjVYrHfYACMl/8U32UfUhJ9+84/ASXw8dlx+eHyyF0m6ncQJ9IBSxfuCkB36GJqYdXTOA==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5"
+ "@babel/helper-plugin-utils": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
@@ -709,12 +717,12 @@
}
},
"node_modules/@babel/plugin-syntax-import-assertions": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.23.3.tgz",
- "integrity": "sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.6.tgz",
+ "integrity": "sha512-BE6o2BogJKJImTmGpkmOic4V0hlRRxVtzqxiSPa8TIFxyhi4EFjHm08nq1M4STK4RytuLMgnSz0/wfflvGFNOg==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5"
+ "@babel/helper-plugin-utils": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
@@ -724,12 +732,12 @@
}
},
"node_modules/@babel/plugin-syntax-import-attributes": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.23.3.tgz",
- "integrity": "sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.6.tgz",
+ "integrity": "sha512-D+CfsVZousPXIdudSII7RGy52+dYRtbyKAZcvtQKq/NpsivyMVduepzcLqG5pMBugtMdedxdC8Ramdpcne9ZWQ==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5"
+ "@babel/helper-plugin-utils": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
@@ -763,12 +771,12 @@
}
},
"node_modules/@babel/plugin-syntax-jsx": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz",
- "integrity": "sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.6.tgz",
+ "integrity": "sha512-lWfvAIFNWMlCsU0DRUun2GpFwZdGTukLaHJqRh1JRb80NdAP5Sb1HDHB5X9P9OtgZHQl089UzQkpYlBq2VTPRw==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5"
+ "@babel/helper-plugin-utils": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
@@ -880,12 +888,12 @@
}
},
"node_modules/@babel/plugin-syntax-typescript": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz",
- "integrity": "sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.6.tgz",
+ "integrity": "sha512-TzCtxGgVTEJWWwcYwQhCIQ6WaKlo80/B+Onsk4RRCcYqpYGFcG9etPW94VToGte5AAcxRrhjPUFvUS3Y2qKi4A==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5"
+ "@babel/helper-plugin-utils": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
@@ -911,12 +919,12 @@
}
},
"node_modules/@babel/plugin-transform-arrow-functions": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.23.3.tgz",
- "integrity": "sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.6.tgz",
+ "integrity": "sha512-jSSSDt4ZidNMggcLx8SaKsbGNEfIl0PHx/4mFEulorE7bpYLbN0d3pDW3eJ7Y5Z3yPhy3L3NaPCYyTUY7TuugQ==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5"
+ "@babel/helper-plugin-utils": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
@@ -926,14 +934,14 @@
}
},
"node_modules/@babel/plugin-transform-async-generator-functions": {
- "version": "7.23.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.9.tgz",
- "integrity": "sha512-8Q3veQEDGe14dTYuwagbRtwxQDnytyg1JFu4/HwEMETeofocrB0U0ejBJIXoeG/t2oXZ8kzCyI0ZZfbT80VFNQ==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.24.6.tgz",
+ "integrity": "sha512-VEP2o4iR2DqQU6KPgizTW2mnMx6BG5b5O9iQdrW9HesLkv8GIA8x2daXBQxw1MrsIkFQGA/iJ204CKoQ8UcnAA==",
"dev": true,
"dependencies": {
- "@babel/helper-environment-visitor": "^7.22.20",
- "@babel/helper-plugin-utils": "^7.22.5",
- "@babel/helper-remap-async-to-generator": "^7.22.20",
+ "@babel/helper-environment-visitor": "^7.24.6",
+ "@babel/helper-plugin-utils": "^7.24.6",
+ "@babel/helper-remap-async-to-generator": "^7.24.6",
"@babel/plugin-syntax-async-generators": "^7.8.4"
},
"engines": {
@@ -944,14 +952,14 @@
}
},
"node_modules/@babel/plugin-transform-async-to-generator": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.23.3.tgz",
- "integrity": "sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.6.tgz",
+ "integrity": "sha512-NTBA2SioI3OsHeIn6sQmhvXleSl9T70YY/hostQLveWs0ic+qvbA3fa0kwAwQ0OA/XGaAerNZRQGJyRfhbJK4g==",
"dev": true,
"dependencies": {
- "@babel/helper-module-imports": "^7.22.15",
- "@babel/helper-plugin-utils": "^7.22.5",
- "@babel/helper-remap-async-to-generator": "^7.22.20"
+ "@babel/helper-module-imports": "^7.24.6",
+ "@babel/helper-plugin-utils": "^7.24.6",
+ "@babel/helper-remap-async-to-generator": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
@@ -961,12 +969,12 @@
}
},
"node_modules/@babel/plugin-transform-block-scoped-functions": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.23.3.tgz",
- "integrity": "sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.6.tgz",
+ "integrity": "sha512-XNW7jolYHW9CwORrZgA/97tL/k05qe/HL0z/qqJq1mdWhwwCM6D4BJBV7wAz9HgFziN5dTOG31znkVIzwxv+vw==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5"
+ "@babel/helper-plugin-utils": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
@@ -976,12 +984,12 @@
}
},
"node_modules/@babel/plugin-transform-block-scoping": {
- "version": "7.23.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.4.tgz",
- "integrity": "sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.24.6.tgz",
+ "integrity": "sha512-S/t1Xh4ehW7sGA7c1j/hiOBLnEYCp/c2sEG4ZkL8kI1xX9tW2pqJTCHKtdhe/jHKt8nG0pFCrDHUXd4DvjHS9w==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5"
+ "@babel/helper-plugin-utils": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
@@ -991,13 +999,13 @@
}
},
"node_modules/@babel/plugin-transform-class-properties": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.23.3.tgz",
- "integrity": "sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.6.tgz",
+ "integrity": "sha512-j6dZ0Z2Z2slWLR3kt9aOmSIrBvnntWjMDN/TVcMPxhXMLmJVqX605CBRlcGI4b32GMbfifTEsdEjGjiE+j/c3A==",
"dev": true,
"dependencies": {
- "@babel/helper-create-class-features-plugin": "^7.22.15",
- "@babel/helper-plugin-utils": "^7.22.5"
+ "@babel/helper-create-class-features-plugin": "^7.24.6",
+ "@babel/helper-plugin-utils": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1007,13 +1015,13 @@
}
},
"node_modules/@babel/plugin-transform-class-static-block": {
- "version": "7.23.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.23.4.tgz",
- "integrity": "sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.6.tgz",
+ "integrity": "sha512-1QSRfoPI9RoLRa8Mnakc6v3e0gJxiZQTYrMfLn+mD0sz5+ndSzwymp2hDcYJTyT0MOn0yuWzj8phlIvO72gTHA==",
"dev": true,
"dependencies": {
- "@babel/helper-create-class-features-plugin": "^7.22.15",
- "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/helper-create-class-features-plugin": "^7.24.6",
+ "@babel/helper-plugin-utils": "^7.24.6",
"@babel/plugin-syntax-class-static-block": "^7.14.5"
},
"engines": {
@@ -1024,18 +1032,18 @@
}
},
"node_modules/@babel/plugin-transform-classes": {
- "version": "7.23.8",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.8.tgz",
- "integrity": "sha512-yAYslGsY1bX6Knmg46RjiCiNSwJKv2IUC8qOdYKqMMr0491SXFhcHqOdRDeCRohOOIzwN/90C6mQ9qAKgrP7dg==",
- "dev": true,
- "dependencies": {
- "@babel/helper-annotate-as-pure": "^7.22.5",
- "@babel/helper-compilation-targets": "^7.23.6",
- "@babel/helper-environment-visitor": "^7.22.20",
- "@babel/helper-function-name": "^7.23.0",
- "@babel/helper-plugin-utils": "^7.22.5",
- "@babel/helper-replace-supers": "^7.22.20",
- "@babel/helper-split-export-declaration": "^7.22.6",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.24.6.tgz",
+ "integrity": "sha512-+fN+NO2gh8JtRmDSOB6gaCVo36ha8kfCW1nMq2Gc0DABln0VcHN4PrALDvF5/diLzIRKptC7z/d7Lp64zk92Fg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-annotate-as-pure": "^7.24.6",
+ "@babel/helper-compilation-targets": "^7.24.6",
+ "@babel/helper-environment-visitor": "^7.24.6",
+ "@babel/helper-function-name": "^7.24.6",
+ "@babel/helper-plugin-utils": "^7.24.6",
+ "@babel/helper-replace-supers": "^7.24.6",
+ "@babel/helper-split-export-declaration": "^7.24.6",
"globals": "^11.1.0"
},
"engines": {
@@ -1046,13 +1054,13 @@
}
},
"node_modules/@babel/plugin-transform-computed-properties": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.23.3.tgz",
- "integrity": "sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.6.tgz",
+ "integrity": "sha512-cRzPobcfRP0ZtuIEkA8QzghoUpSB3X3qSH5W2+FzG+VjWbJXExtx0nbRqwumdBN1x/ot2SlTNQLfBCnPdzp6kg==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5",
- "@babel/template": "^7.22.15"
+ "@babel/helper-plugin-utils": "^7.24.6",
+ "@babel/template": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1062,12 +1070,12 @@
}
},
"node_modules/@babel/plugin-transform-destructuring": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.3.tgz",
- "integrity": "sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.6.tgz",
+ "integrity": "sha512-YLW6AE5LQpk5npNXL7i/O+U9CE4XsBCuRPgyjl1EICZYKmcitV+ayuuUGMJm2lC1WWjXYszeTnIxF/dq/GhIZQ==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5"
+ "@babel/helper-plugin-utils": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1077,13 +1085,13 @@
}
},
"node_modules/@babel/plugin-transform-dotall-regex": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.23.3.tgz",
- "integrity": "sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.6.tgz",
+ "integrity": "sha512-rCXPnSEKvkm/EjzOtLoGvKseK+dS4kZwx1HexO3BtRtgL0fQ34awHn34aeSHuXtZY2F8a1X8xqBBPRtOxDVmcA==",
"dev": true,
"dependencies": {
- "@babel/helper-create-regexp-features-plugin": "^7.22.15",
- "@babel/helper-plugin-utils": "^7.22.5"
+ "@babel/helper-create-regexp-features-plugin": "^7.24.6",
+ "@babel/helper-plugin-utils": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1093,12 +1101,12 @@
}
},
"node_modules/@babel/plugin-transform-duplicate-keys": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.23.3.tgz",
- "integrity": "sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.6.tgz",
+ "integrity": "sha512-/8Odwp/aVkZwPFJMllSbawhDAO3UJi65foB00HYnK/uXvvCPm0TAXSByjz1mpRmp0q6oX2SIxpkUOpPFHk7FLA==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5"
+ "@babel/helper-plugin-utils": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1108,12 +1116,12 @@
}
},
"node_modules/@babel/plugin-transform-dynamic-import": {
- "version": "7.23.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.23.4.tgz",
- "integrity": "sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.6.tgz",
+ "integrity": "sha512-vpq8SSLRTBLOHUZHSnBqVo0AKX3PBaoPs2vVzYVWslXDTDIpwAcCDtfhUcHSQQoYoUvcFPTdC8TZYXu9ZnLT/w==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.24.6",
"@babel/plugin-syntax-dynamic-import": "^7.8.3"
},
"engines": {
@@ -1124,13 +1132,13 @@
}
},
"node_modules/@babel/plugin-transform-exponentiation-operator": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.23.3.tgz",
- "integrity": "sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.6.tgz",
+ "integrity": "sha512-EemYpHtmz0lHE7hxxxYEuTYOOBZ43WkDgZ4arQ4r+VX9QHuNZC+WH3wUWmRNvR8ECpTRne29aZV6XO22qpOtdA==",
"dev": true,
"dependencies": {
- "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.15",
- "@babel/helper-plugin-utils": "^7.22.5"
+ "@babel/helper-builder-binary-assignment-operator-visitor": "^7.24.6",
+ "@babel/helper-plugin-utils": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1140,12 +1148,12 @@
}
},
"node_modules/@babel/plugin-transform-export-namespace-from": {
- "version": "7.23.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.23.4.tgz",
- "integrity": "sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.6.tgz",
+ "integrity": "sha512-inXaTM1SVrIxCkIJ5gqWiozHfFMStuGbGJAxZFBoHcRRdDP0ySLb3jH6JOwmfiinPwyMZqMBX+7NBDCO4z0NSA==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.24.6",
"@babel/plugin-syntax-export-namespace-from": "^7.8.3"
},
"engines": {
@@ -1156,13 +1164,13 @@
}
},
"node_modules/@babel/plugin-transform-flow-strip-types": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.23.3.tgz",
- "integrity": "sha512-26/pQTf9nQSNVJCrLB1IkHUKyPxR+lMrH2QDPG89+Znu9rAMbtrybdbWeE9bb7gzjmE5iXHEY+e0HUwM6Co93Q==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.24.6.tgz",
+ "integrity": "sha512-1l8b24NoCpaQ13Vi6FtLG1nv6kNoi8PWvQb1AYO7GHZDpFfBYc3lbXArx1lP2KRt8b4pej1eWc/zrRmsQTfOdQ==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5",
- "@babel/plugin-syntax-flow": "^7.23.3"
+ "@babel/helper-plugin-utils": "^7.24.6",
+ "@babel/plugin-syntax-flow": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1172,13 +1180,13 @@
}
},
"node_modules/@babel/plugin-transform-for-of": {
- "version": "7.23.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.23.6.tgz",
- "integrity": "sha512-aYH4ytZ0qSuBbpfhuofbg/e96oQ7U2w1Aw/UQmKT+1l39uEhUPoFS3fHevDc1G0OvewyDudfMKY1OulczHzWIw==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.6.tgz",
+ "integrity": "sha512-n3Sf72TnqK4nw/jziSqEl1qaWPbCRw2CziHH+jdRYvw4J6yeCzsj4jdw8hIntOEeDGTmHVe2w4MVL44PN0GMzg==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5",
- "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5"
+ "@babel/helper-plugin-utils": "^7.24.6",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1188,14 +1196,14 @@
}
},
"node_modules/@babel/plugin-transform-function-name": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.23.3.tgz",
- "integrity": "sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.24.6.tgz",
+ "integrity": "sha512-sOajCu6V0P1KPljWHKiDq6ymgqB+vfo3isUS4McqW1DZtvSVU2v/wuMhmRmkg3sFoq6GMaUUf8W4WtoSLkOV/Q==",
"dev": true,
"dependencies": {
- "@babel/helper-compilation-targets": "^7.22.15",
- "@babel/helper-function-name": "^7.23.0",
- "@babel/helper-plugin-utils": "^7.22.5"
+ "@babel/helper-compilation-targets": "^7.24.6",
+ "@babel/helper-function-name": "^7.24.6",
+ "@babel/helper-plugin-utils": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1205,12 +1213,12 @@
}
},
"node_modules/@babel/plugin-transform-json-strings": {
- "version": "7.23.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.23.4.tgz",
- "integrity": "sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.6.tgz",
+ "integrity": "sha512-Uvgd9p2gUnzYJxVdBLcU0KurF8aVhkmVyMKW4MIY1/BByvs3EBpv45q01o7pRTVmTvtQq5zDlytP3dcUgm7v9w==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.24.6",
"@babel/plugin-syntax-json-strings": "^7.8.3"
},
"engines": {
@@ -1221,12 +1229,12 @@
}
},
"node_modules/@babel/plugin-transform-literals": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.23.3.tgz",
- "integrity": "sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.24.6.tgz",
+ "integrity": "sha512-f2wHfR2HF6yMj+y+/y07+SLqnOSwRp8KYLpQKOzS58XLVlULhXbiYcygfXQxJlMbhII9+yXDwOUFLf60/TL5tw==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5"
+ "@babel/helper-plugin-utils": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1236,12 +1244,12 @@
}
},
"node_modules/@babel/plugin-transform-logical-assignment-operators": {
- "version": "7.23.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.23.4.tgz",
- "integrity": "sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.6.tgz",
+ "integrity": "sha512-EKaWvnezBCMkRIHxMJSIIylzhqK09YpiJtDbr2wsXTwnO0TxyjMUkaw4RlFIZMIS0iDj0KyIg7H7XCguHu/YDA==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.24.6",
"@babel/plugin-syntax-logical-assignment-operators": "^7.10.4"
},
"engines": {
@@ -1252,12 +1260,12 @@
}
},
"node_modules/@babel/plugin-transform-member-expression-literals": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.23.3.tgz",
- "integrity": "sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.6.tgz",
+ "integrity": "sha512-9g8iV146szUo5GWgXpRbq/GALTnY+WnNuRTuRHWWFfWGbP9ukRL0aO/jpu9dmOPikclkxnNsjY8/gsWl6bmZJQ==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5"
+ "@babel/helper-plugin-utils": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1267,13 +1275,13 @@
}
},
"node_modules/@babel/plugin-transform-modules-amd": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.3.tgz",
- "integrity": "sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.6.tgz",
+ "integrity": "sha512-eAGogjZgcwqAxhyFgqghvoHRr+EYRQPFjUXrTYKBRb5qPnAVxOOglaxc4/byHqjvq/bqO2F3/CGwTHsgKJYHhQ==",
"dev": true,
"dependencies": {
- "@babel/helper-module-transforms": "^7.23.3",
- "@babel/helper-plugin-utils": "^7.22.5"
+ "@babel/helper-module-transforms": "^7.24.6",
+ "@babel/helper-plugin-utils": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1283,14 +1291,14 @@
}
},
"node_modules/@babel/plugin-transform-modules-commonjs": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.3.tgz",
- "integrity": "sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.6.tgz",
+ "integrity": "sha512-JEV8l3MHdmmdb7S7Cmx6rbNEjRCgTQMZxllveHO0mx6uiclB0NflCawlQQ6+o5ZrwjUBYPzHm2XoK4wqGVUFuw==",
"dev": true,
"dependencies": {
- "@babel/helper-module-transforms": "^7.23.3",
- "@babel/helper-plugin-utils": "^7.22.5",
- "@babel/helper-simple-access": "^7.22.5"
+ "@babel/helper-module-transforms": "^7.24.6",
+ "@babel/helper-plugin-utils": "^7.24.6",
+ "@babel/helper-simple-access": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1300,15 +1308,15 @@
}
},
"node_modules/@babel/plugin-transform-modules-systemjs": {
- "version": "7.23.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.9.tgz",
- "integrity": "sha512-KDlPRM6sLo4o1FkiSlXoAa8edLXFsKKIda779fbLrvmeuc3itnjCtaO6RrtoaANsIJANj+Vk1zqbZIMhkCAHVw==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.24.6.tgz",
+ "integrity": "sha512-xg1Z0J5JVYxtpX954XqaaAT6NpAY6LtZXvYFCJmGFJWwtlz2EmJoR8LycFRGNE8dBKizGWkGQZGegtkV8y8s+w==",
"dev": true,
"dependencies": {
- "@babel/helper-hoist-variables": "^7.22.5",
- "@babel/helper-module-transforms": "^7.23.3",
- "@babel/helper-plugin-utils": "^7.22.5",
- "@babel/helper-validator-identifier": "^7.22.20"
+ "@babel/helper-hoist-variables": "^7.24.6",
+ "@babel/helper-module-transforms": "^7.24.6",
+ "@babel/helper-plugin-utils": "^7.24.6",
+ "@babel/helper-validator-identifier": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1318,13 +1326,13 @@
}
},
"node_modules/@babel/plugin-transform-modules-umd": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.23.3.tgz",
- "integrity": "sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.6.tgz",
+ "integrity": "sha512-esRCC/KsSEUvrSjv5rFYnjZI6qv4R1e/iHQrqwbZIoRJqk7xCvEUiN7L1XrmW5QSmQe3n1XD88wbgDTWLbVSyg==",
"dev": true,
"dependencies": {
- "@babel/helper-module-transforms": "^7.23.3",
- "@babel/helper-plugin-utils": "^7.22.5"
+ "@babel/helper-module-transforms": "^7.24.6",
+ "@babel/helper-plugin-utils": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1334,13 +1342,13 @@
}
},
"node_modules/@babel/plugin-transform-named-capturing-groups-regex": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz",
- "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.24.6.tgz",
+ "integrity": "sha512-6DneiCiu91wm3YiNIGDWZsl6GfTTbspuj/toTEqLh9d4cx50UIzSdg+T96p8DuT7aJOBRhFyaE9ZvTHkXrXr6Q==",
"dev": true,
"dependencies": {
- "@babel/helper-create-regexp-features-plugin": "^7.22.5",
- "@babel/helper-plugin-utils": "^7.22.5"
+ "@babel/helper-create-regexp-features-plugin": "^7.24.6",
+ "@babel/helper-plugin-utils": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1350,12 +1358,12 @@
}
},
"node_modules/@babel/plugin-transform-new-target": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.23.3.tgz",
- "integrity": "sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.6.tgz",
+ "integrity": "sha512-f8liz9JG2Va8A4J5ZBuaSdwfPqN6axfWRK+y66fjKYbwf9VBLuq4WxtinhJhvp1w6lamKUwLG0slK2RxqFgvHA==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5"
+ "@babel/helper-plugin-utils": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1365,12 +1373,12 @@
}
},
"node_modules/@babel/plugin-transform-nullish-coalescing-operator": {
- "version": "7.23.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.23.4.tgz",
- "integrity": "sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.6.tgz",
+ "integrity": "sha512-+QlAiZBMsBK5NqrBWFXCYeXyiU1y7BQ/OYaiPAcQJMomn5Tyg+r5WuVtyEuvTbpV7L25ZSLfE+2E9ywj4FD48A==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.24.6",
"@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3"
},
"engines": {
@@ -1381,12 +1389,12 @@
}
},
"node_modules/@babel/plugin-transform-numeric-separator": {
- "version": "7.23.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.23.4.tgz",
- "integrity": "sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.6.tgz",
+ "integrity": "sha512-6voawq8T25Jvvnc4/rXcWZQKKxUNZcKMS8ZNrjxQqoRFernJJKjE3s18Qo6VFaatG5aiX5JV1oPD7DbJhn0a4Q==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.24.6",
"@babel/plugin-syntax-numeric-separator": "^7.10.4"
},
"engines": {
@@ -1397,16 +1405,15 @@
}
},
"node_modules/@babel/plugin-transform-object-rest-spread": {
- "version": "7.23.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.23.4.tgz",
- "integrity": "sha512-9x9K1YyeQVw0iOXJlIzwm8ltobIIv7j2iLyP2jIhEbqPRQ7ScNgwQufU2I0Gq11VjyG4gI4yMXt2VFags+1N3g==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.6.tgz",
+ "integrity": "sha512-OKmi5wiMoRW5Smttne7BwHM8s/fb5JFs+bVGNSeHWzwZkWXWValR1M30jyXo1s/RaqgwwhEC62u4rFH/FBcBPg==",
"dev": true,
"dependencies": {
- "@babel/compat-data": "^7.23.3",
- "@babel/helper-compilation-targets": "^7.22.15",
- "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/helper-compilation-targets": "^7.24.6",
+ "@babel/helper-plugin-utils": "^7.24.6",
"@babel/plugin-syntax-object-rest-spread": "^7.8.3",
- "@babel/plugin-transform-parameters": "^7.23.3"
+ "@babel/plugin-transform-parameters": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1416,13 +1423,13 @@
}
},
"node_modules/@babel/plugin-transform-object-super": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.23.3.tgz",
- "integrity": "sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.6.tgz",
+ "integrity": "sha512-N/C76ihFKlZgKfdkEYKtaRUtXZAgK7sOY4h2qrbVbVTXPrKGIi8aww5WGe/+Wmg8onn8sr2ut6FXlsbu/j6JHg==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5",
- "@babel/helper-replace-supers": "^7.22.20"
+ "@babel/helper-plugin-utils": "^7.24.6",
+ "@babel/helper-replace-supers": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1432,12 +1439,12 @@
}
},
"node_modules/@babel/plugin-transform-optional-catch-binding": {
- "version": "7.23.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.23.4.tgz",
- "integrity": "sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.6.tgz",
+ "integrity": "sha512-L5pZ+b3O1mSzJ71HmxSCmTVd03VOT2GXOigug6vDYJzE5awLI7P1g0wFcdmGuwSDSrQ0L2rDOe/hHws8J1rv3w==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.24.6",
"@babel/plugin-syntax-optional-catch-binding": "^7.8.3"
},
"engines": {
@@ -1448,13 +1455,13 @@
}
},
"node_modules/@babel/plugin-transform-optional-chaining": {
- "version": "7.23.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.4.tgz",
- "integrity": "sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.6.tgz",
+ "integrity": "sha512-cHbqF6l1QP11OkYTYQ+hhVx1E017O5ZcSPXk9oODpqhcAD1htsWG2NpHrrhthEO2qZomLK0FXS+u7NfrkF5aOQ==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5",
- "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.24.6",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.24.6",
"@babel/plugin-syntax-optional-chaining": "^7.8.3"
},
"engines": {
@@ -1465,12 +1472,12 @@
}
},
"node_modules/@babel/plugin-transform-parameters": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.23.3.tgz",
- "integrity": "sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.6.tgz",
+ "integrity": "sha512-ST7guE8vLV+vI70wmAxuZpIKzVjvFX9Qs8bl5w6tN/6gOypPWUmMQL2p7LJz5E63vEGrDhAiYetniJFyBH1RkA==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5"
+ "@babel/helper-plugin-utils": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1480,13 +1487,13 @@
}
},
"node_modules/@babel/plugin-transform-private-methods": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.23.3.tgz",
- "integrity": "sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.6.tgz",
+ "integrity": "sha512-T9LtDI0BgwXOzyXrvgLTT8DFjCC/XgWLjflczTLXyvxbnSR/gpv0hbmzlHE/kmh9nOvlygbamLKRo6Op4yB6aw==",
"dev": true,
"dependencies": {
- "@babel/helper-create-class-features-plugin": "^7.22.15",
- "@babel/helper-plugin-utils": "^7.22.5"
+ "@babel/helper-create-class-features-plugin": "^7.24.6",
+ "@babel/helper-plugin-utils": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1496,14 +1503,14 @@
}
},
"node_modules/@babel/plugin-transform-private-property-in-object": {
- "version": "7.23.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.23.4.tgz",
- "integrity": "sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.6.tgz",
+ "integrity": "sha512-Qu/ypFxCY5NkAnEhCF86Mvg3NSabKsh/TPpBVswEdkGl7+FbsYHy1ziRqJpwGH4thBdQHh8zx+z7vMYmcJ7iaQ==",
"dev": true,
"dependencies": {
- "@babel/helper-annotate-as-pure": "^7.22.5",
- "@babel/helper-create-class-features-plugin": "^7.22.15",
- "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/helper-annotate-as-pure": "^7.24.6",
+ "@babel/helper-create-class-features-plugin": "^7.24.6",
+ "@babel/helper-plugin-utils": "^7.24.6",
"@babel/plugin-syntax-private-property-in-object": "^7.14.5"
},
"engines": {
@@ -1514,12 +1521,12 @@
}
},
"node_modules/@babel/plugin-transform-property-literals": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.23.3.tgz",
- "integrity": "sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.6.tgz",
+ "integrity": "sha512-oARaglxhRsN18OYsnPTpb8TcKQWDYNsPNmTnx5++WOAsUJ0cSC/FZVlIJCKvPbU4yn/UXsS0551CFKJhN0CaMw==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5"
+ "@babel/helper-plugin-utils": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1529,12 +1536,12 @@
}
},
"node_modules/@babel/plugin-transform-react-display-name": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.23.3.tgz",
- "integrity": "sha512-GnvhtVfA2OAtzdX58FJxU19rhoGeQzyVndw3GgtdECQvQFXPEZIOVULHVZGAYmOgmqjXpVpfocAbSjh99V/Fqw==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.24.6.tgz",
+ "integrity": "sha512-/3iiEEHDsJuj9QU09gbyWGSUxDboFcD7Nj6dnHIlboWSodxXAoaY/zlNMHeYAC0WsERMqgO9a7UaM77CsYgWcg==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5"
+ "@babel/helper-plugin-utils": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1544,16 +1551,16 @@
}
},
"node_modules/@babel/plugin-transform-react-jsx": {
- "version": "7.23.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.23.4.tgz",
- "integrity": "sha512-5xOpoPguCZCRbo/JeHlloSkTA8Bld1J/E1/kLfD1nsuiW1m8tduTA1ERCgIZokDflX/IBzKcqR3l7VlRgiIfHA==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.24.6.tgz",
+ "integrity": "sha512-pCtPHhpRZHfwdA5G1Gpk5mIzMA99hv0R8S/Ket50Rw+S+8hkt3wBWqdqHaPw0CuUYxdshUgsPiLQ5fAs4ASMhw==",
"dev": true,
"dependencies": {
- "@babel/helper-annotate-as-pure": "^7.22.5",
- "@babel/helper-module-imports": "^7.22.15",
- "@babel/helper-plugin-utils": "^7.22.5",
- "@babel/plugin-syntax-jsx": "^7.23.3",
- "@babel/types": "^7.23.4"
+ "@babel/helper-annotate-as-pure": "^7.24.6",
+ "@babel/helper-module-imports": "^7.24.6",
+ "@babel/helper-plugin-utils": "^7.24.6",
+ "@babel/plugin-syntax-jsx": "^7.24.6",
+ "@babel/types": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1563,12 +1570,12 @@
}
},
"node_modules/@babel/plugin-transform-react-jsx-development": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.22.5.tgz",
- "integrity": "sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.24.6.tgz",
+ "integrity": "sha512-F7EsNp5StNDouSSdYyDSxh4J+xvj/JqG+Cb6s2fA+jCyHOzigG5vTwgH8tU2U8Voyiu5zCG9bAK49wTr/wPH0w==",
"dev": true,
"dependencies": {
- "@babel/plugin-transform-react-jsx": "^7.22.5"
+ "@babel/plugin-transform-react-jsx": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1578,13 +1585,13 @@
}
},
"node_modules/@babel/plugin-transform-react-pure-annotations": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.23.3.tgz",
- "integrity": "sha512-qMFdSS+TUhB7Q/3HVPnEdYJDQIk57jkntAwSuz9xfSE4n+3I+vHYCli3HoHawN1Z3RfCz/y1zXA/JXjG6cVImQ==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.24.6.tgz",
+ "integrity": "sha512-0HoDQlFJJkXRyV2N+xOpUETbKHcouSwijRQbKWVtxsPoq5bbB30qZag9/pSc5xcWVYjTHlLsBsY+hZDnzQTPNw==",
"dev": true,
"dependencies": {
- "@babel/helper-annotate-as-pure": "^7.22.5",
- "@babel/helper-plugin-utils": "^7.22.5"
+ "@babel/helper-annotate-as-pure": "^7.24.6",
+ "@babel/helper-plugin-utils": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1594,12 +1601,12 @@
}
},
"node_modules/@babel/plugin-transform-regenerator": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.23.3.tgz",
- "integrity": "sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.6.tgz",
+ "integrity": "sha512-SMDxO95I8WXRtXhTAc8t/NFQUT7VYbIWwJCJgEli9ml4MhqUMh4S6hxgH6SmAC3eAQNWCDJFxcFeEt9w2sDdXg==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.24.6",
"regenerator-transform": "^0.15.2"
},
"engines": {
@@ -1610,12 +1617,12 @@
}
},
"node_modules/@babel/plugin-transform-reserved-words": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.23.3.tgz",
- "integrity": "sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.6.tgz",
+ "integrity": "sha512-DcrgFXRRlK64dGE0ZFBPD5egM2uM8mgfrvTMOSB2yKzOtjpGegVYkzh3s1zZg1bBck3nkXiaOamJUqK3Syk+4A==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5"
+ "@babel/helper-plugin-utils": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1625,16 +1632,16 @@
}
},
"node_modules/@babel/plugin-transform-runtime": {
- "version": "7.23.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.23.9.tgz",
- "integrity": "sha512-A7clW3a0aSjm3ONU9o2HAILSegJCYlEZmOhmBRReVtIpY/Z/p7yIZ+wR41Z+UipwdGuqwtID/V/dOdZXjwi9gQ==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.24.6.tgz",
+ "integrity": "sha512-W3gQydMb0SY99y/2lV0Okx2xg/8KzmZLQsLaiCmwNRl1kKomz14VurEm+2TossUb+sRvBCnGe+wx8KtIgDtBbQ==",
"dev": true,
"dependencies": {
- "@babel/helper-module-imports": "^7.22.15",
- "@babel/helper-plugin-utils": "^7.22.5",
- "babel-plugin-polyfill-corejs2": "^0.4.8",
- "babel-plugin-polyfill-corejs3": "^0.9.0",
- "babel-plugin-polyfill-regenerator": "^0.5.5",
+ "@babel/helper-module-imports": "^7.24.6",
+ "@babel/helper-plugin-utils": "^7.24.6",
+ "babel-plugin-polyfill-corejs2": "^0.4.10",
+ "babel-plugin-polyfill-corejs3": "^0.10.1",
+ "babel-plugin-polyfill-regenerator": "^0.6.1",
"semver": "^6.3.1"
},
"engines": {
@@ -1654,12 +1661,12 @@
}
},
"node_modules/@babel/plugin-transform-shorthand-properties": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.23.3.tgz",
- "integrity": "sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.6.tgz",
+ "integrity": "sha512-xnEUvHSMr9eOWS5Al2YPfc32ten7CXdH7Zwyyk7IqITg4nX61oHj+GxpNvl+y5JHjfN3KXE2IV55wAWowBYMVw==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5"
+ "@babel/helper-plugin-utils": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1669,13 +1676,13 @@
}
},
"node_modules/@babel/plugin-transform-spread": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.23.3.tgz",
- "integrity": "sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.6.tgz",
+ "integrity": "sha512-h/2j7oIUDjS+ULsIrNZ6/TKG97FgmEk1PXryk/HQq6op4XUUUwif2f69fJrzK0wza2zjCS1xhXmouACaWV5uPA==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5",
- "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5"
+ "@babel/helper-plugin-utils": "^7.24.6",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1685,12 +1692,12 @@
}
},
"node_modules/@babel/plugin-transform-sticky-regex": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.23.3.tgz",
- "integrity": "sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.6.tgz",
+ "integrity": "sha512-fN8OcTLfGmYv7FnDrsjodYBo1DhPL3Pze/9mIIE2MGCT1KgADYIOD7rEglpLHZj8PZlC/JFX5WcD+85FLAQusw==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5"
+ "@babel/helper-plugin-utils": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1700,12 +1707,12 @@
}
},
"node_modules/@babel/plugin-transform-template-literals": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.23.3.tgz",
- "integrity": "sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.6.tgz",
+ "integrity": "sha512-BJbEqJIcKwrqUP+KfUIkxz3q8VzXe2R8Wv8TaNgO1cx+nNavxn/2+H8kp9tgFSOL6wYPPEgFvU6IKS4qoGqhmg==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5"
+ "@babel/helper-plugin-utils": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1715,12 +1722,12 @@
}
},
"node_modules/@babel/plugin-transform-typeof-symbol": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.23.3.tgz",
- "integrity": "sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.6.tgz",
+ "integrity": "sha512-IshCXQ+G9JIFJI7bUpxTE/oA2lgVLAIK8q1KdJNoPXOpvRaNjMySGuvLfBw/Xi2/1lLo953uE8hyYSDW3TSYig==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5"
+ "@babel/helper-plugin-utils": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1730,15 +1737,15 @@
}
},
"node_modules/@babel/plugin-transform-typescript": {
- "version": "7.23.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.23.6.tgz",
- "integrity": "sha512-6cBG5mBvUu4VUD04OHKnYzbuHNP8huDsD3EDqqpIpsswTDoqHCjLoHb6+QgsV1WsT2nipRqCPgxD3LXnEO7XfA==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.24.6.tgz",
+ "integrity": "sha512-H0i+hDLmaYYSt6KU9cZE0gb3Cbssa/oxWis7PX4ofQzbvsfix9Lbh8SRk7LCPDlLWJHUiFeHU0qRRpF/4Zv7mQ==",
"dev": true,
"dependencies": {
- "@babel/helper-annotate-as-pure": "^7.22.5",
- "@babel/helper-create-class-features-plugin": "^7.23.6",
- "@babel/helper-plugin-utils": "^7.22.5",
- "@babel/plugin-syntax-typescript": "^7.23.3"
+ "@babel/helper-annotate-as-pure": "^7.24.6",
+ "@babel/helper-create-class-features-plugin": "^7.24.6",
+ "@babel/helper-plugin-utils": "^7.24.6",
+ "@babel/plugin-syntax-typescript": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1748,12 +1755,12 @@
}
},
"node_modules/@babel/plugin-transform-unicode-escapes": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.23.3.tgz",
- "integrity": "sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.6.tgz",
+ "integrity": "sha512-bKl3xxcPbkQQo5eX9LjjDpU2xYHeEeNQbOhj0iPvetSzA+Tu9q/o5lujF4Sek60CM6MgYvOS/DJuwGbiEYAnLw==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5"
+ "@babel/helper-plugin-utils": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1763,13 +1770,13 @@
}
},
"node_modules/@babel/plugin-transform-unicode-property-regex": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.23.3.tgz",
- "integrity": "sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.6.tgz",
+ "integrity": "sha512-8EIgImzVUxy15cZiPii9GvLZwsy7Vxc+8meSlR3cXFmBIl5W5Tn9LGBf7CDKkHj4uVfNXCJB8RsVfnmY61iedA==",
"dev": true,
"dependencies": {
- "@babel/helper-create-regexp-features-plugin": "^7.22.15",
- "@babel/helper-plugin-utils": "^7.22.5"
+ "@babel/helper-create-regexp-features-plugin": "^7.24.6",
+ "@babel/helper-plugin-utils": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1779,13 +1786,13 @@
}
},
"node_modules/@babel/plugin-transform-unicode-regex": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.23.3.tgz",
- "integrity": "sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.6.tgz",
+ "integrity": "sha512-pssN6ExsvxaKU638qcWb81RrvvgZom3jDgU/r5xFZ7TONkZGFf4MhI2ltMb8OcQWhHyxgIavEU+hgqtbKOmsPA==",
"dev": true,
"dependencies": {
- "@babel/helper-create-regexp-features-plugin": "^7.22.15",
- "@babel/helper-plugin-utils": "^7.22.5"
+ "@babel/helper-create-regexp-features-plugin": "^7.24.6",
+ "@babel/helper-plugin-utils": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1795,13 +1802,13 @@
}
},
"node_modules/@babel/plugin-transform-unicode-sets-regex": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.23.3.tgz",
- "integrity": "sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.6.tgz",
+ "integrity": "sha512-quiMsb28oXWIDK0gXLALOJRXLgICLiulqdZGOaPPd0vRT7fQp74NtdADAVu+D8s00C+0Xs0MxVP0VKF/sZEUgw==",
"dev": true,
"dependencies": {
- "@babel/helper-create-regexp-features-plugin": "^7.22.15",
- "@babel/helper-plugin-utils": "^7.22.5"
+ "@babel/helper-create-regexp-features-plugin": "^7.24.6",
+ "@babel/helper-plugin-utils": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1811,26 +1818,27 @@
}
},
"node_modules/@babel/preset-env": {
- "version": "7.23.9",
- "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.23.9.tgz",
- "integrity": "sha512-3kBGTNBBk9DQiPoXYS0g0BYlwTQYUTifqgKTjxUwEUkduRT2QOa0FPGBJ+NROQhGyYO5BuTJwGvBnqKDykac6A==",
- "dev": true,
- "dependencies": {
- "@babel/compat-data": "^7.23.5",
- "@babel/helper-compilation-targets": "^7.23.6",
- "@babel/helper-plugin-utils": "^7.22.5",
- "@babel/helper-validator-option": "^7.23.5",
- "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.23.3",
- "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.23.3",
- "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.23.7",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.24.6.tgz",
+ "integrity": "sha512-CrxEAvN7VxfjOG8JNF2Y/eMqMJbZPZ185amwGUBp8D9USK90xQmv7dLdFSa+VbD7fdIqcy/Mfv7WtzG8+/qxKg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/compat-data": "^7.24.6",
+ "@babel/helper-compilation-targets": "^7.24.6",
+ "@babel/helper-plugin-utils": "^7.24.6",
+ "@babel/helper-validator-option": "^7.24.6",
+ "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.24.6",
+ "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.24.6",
+ "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.24.6",
+ "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.24.6",
"@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2",
"@babel/plugin-syntax-async-generators": "^7.8.4",
"@babel/plugin-syntax-class-properties": "^7.12.13",
"@babel/plugin-syntax-class-static-block": "^7.14.5",
"@babel/plugin-syntax-dynamic-import": "^7.8.3",
"@babel/plugin-syntax-export-namespace-from": "^7.8.3",
- "@babel/plugin-syntax-import-assertions": "^7.23.3",
- "@babel/plugin-syntax-import-attributes": "^7.23.3",
+ "@babel/plugin-syntax-import-assertions": "^7.24.6",
+ "@babel/plugin-syntax-import-attributes": "^7.24.6",
"@babel/plugin-syntax-import-meta": "^7.10.4",
"@babel/plugin-syntax-json-strings": "^7.8.3",
"@babel/plugin-syntax-logical-assignment-operators": "^7.10.4",
@@ -1842,58 +1850,58 @@
"@babel/plugin-syntax-private-property-in-object": "^7.14.5",
"@babel/plugin-syntax-top-level-await": "^7.14.5",
"@babel/plugin-syntax-unicode-sets-regex": "^7.18.6",
- "@babel/plugin-transform-arrow-functions": "^7.23.3",
- "@babel/plugin-transform-async-generator-functions": "^7.23.9",
- "@babel/plugin-transform-async-to-generator": "^7.23.3",
- "@babel/plugin-transform-block-scoped-functions": "^7.23.3",
- "@babel/plugin-transform-block-scoping": "^7.23.4",
- "@babel/plugin-transform-class-properties": "^7.23.3",
- "@babel/plugin-transform-class-static-block": "^7.23.4",
- "@babel/plugin-transform-classes": "^7.23.8",
- "@babel/plugin-transform-computed-properties": "^7.23.3",
- "@babel/plugin-transform-destructuring": "^7.23.3",
- "@babel/plugin-transform-dotall-regex": "^7.23.3",
- "@babel/plugin-transform-duplicate-keys": "^7.23.3",
- "@babel/plugin-transform-dynamic-import": "^7.23.4",
- "@babel/plugin-transform-exponentiation-operator": "^7.23.3",
- "@babel/plugin-transform-export-namespace-from": "^7.23.4",
- "@babel/plugin-transform-for-of": "^7.23.6",
- "@babel/plugin-transform-function-name": "^7.23.3",
- "@babel/plugin-transform-json-strings": "^7.23.4",
- "@babel/plugin-transform-literals": "^7.23.3",
- "@babel/plugin-transform-logical-assignment-operators": "^7.23.4",
- "@babel/plugin-transform-member-expression-literals": "^7.23.3",
- "@babel/plugin-transform-modules-amd": "^7.23.3",
- "@babel/plugin-transform-modules-commonjs": "^7.23.3",
- "@babel/plugin-transform-modules-systemjs": "^7.23.9",
- "@babel/plugin-transform-modules-umd": "^7.23.3",
- "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5",
- "@babel/plugin-transform-new-target": "^7.23.3",
- "@babel/plugin-transform-nullish-coalescing-operator": "^7.23.4",
- "@babel/plugin-transform-numeric-separator": "^7.23.4",
- "@babel/plugin-transform-object-rest-spread": "^7.23.4",
- "@babel/plugin-transform-object-super": "^7.23.3",
- "@babel/plugin-transform-optional-catch-binding": "^7.23.4",
- "@babel/plugin-transform-optional-chaining": "^7.23.4",
- "@babel/plugin-transform-parameters": "^7.23.3",
- "@babel/plugin-transform-private-methods": "^7.23.3",
- "@babel/plugin-transform-private-property-in-object": "^7.23.4",
- "@babel/plugin-transform-property-literals": "^7.23.3",
- "@babel/plugin-transform-regenerator": "^7.23.3",
- "@babel/plugin-transform-reserved-words": "^7.23.3",
- "@babel/plugin-transform-shorthand-properties": "^7.23.3",
- "@babel/plugin-transform-spread": "^7.23.3",
- "@babel/plugin-transform-sticky-regex": "^7.23.3",
- "@babel/plugin-transform-template-literals": "^7.23.3",
- "@babel/plugin-transform-typeof-symbol": "^7.23.3",
- "@babel/plugin-transform-unicode-escapes": "^7.23.3",
- "@babel/plugin-transform-unicode-property-regex": "^7.23.3",
- "@babel/plugin-transform-unicode-regex": "^7.23.3",
- "@babel/plugin-transform-unicode-sets-regex": "^7.23.3",
+ "@babel/plugin-transform-arrow-functions": "^7.24.6",
+ "@babel/plugin-transform-async-generator-functions": "^7.24.6",
+ "@babel/plugin-transform-async-to-generator": "^7.24.6",
+ "@babel/plugin-transform-block-scoped-functions": "^7.24.6",
+ "@babel/plugin-transform-block-scoping": "^7.24.6",
+ "@babel/plugin-transform-class-properties": "^7.24.6",
+ "@babel/plugin-transform-class-static-block": "^7.24.6",
+ "@babel/plugin-transform-classes": "^7.24.6",
+ "@babel/plugin-transform-computed-properties": "^7.24.6",
+ "@babel/plugin-transform-destructuring": "^7.24.6",
+ "@babel/plugin-transform-dotall-regex": "^7.24.6",
+ "@babel/plugin-transform-duplicate-keys": "^7.24.6",
+ "@babel/plugin-transform-dynamic-import": "^7.24.6",
+ "@babel/plugin-transform-exponentiation-operator": "^7.24.6",
+ "@babel/plugin-transform-export-namespace-from": "^7.24.6",
+ "@babel/plugin-transform-for-of": "^7.24.6",
+ "@babel/plugin-transform-function-name": "^7.24.6",
+ "@babel/plugin-transform-json-strings": "^7.24.6",
+ "@babel/plugin-transform-literals": "^7.24.6",
+ "@babel/plugin-transform-logical-assignment-operators": "^7.24.6",
+ "@babel/plugin-transform-member-expression-literals": "^7.24.6",
+ "@babel/plugin-transform-modules-amd": "^7.24.6",
+ "@babel/plugin-transform-modules-commonjs": "^7.24.6",
+ "@babel/plugin-transform-modules-systemjs": "^7.24.6",
+ "@babel/plugin-transform-modules-umd": "^7.24.6",
+ "@babel/plugin-transform-named-capturing-groups-regex": "^7.24.6",
+ "@babel/plugin-transform-new-target": "^7.24.6",
+ "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.6",
+ "@babel/plugin-transform-numeric-separator": "^7.24.6",
+ "@babel/plugin-transform-object-rest-spread": "^7.24.6",
+ "@babel/plugin-transform-object-super": "^7.24.6",
+ "@babel/plugin-transform-optional-catch-binding": "^7.24.6",
+ "@babel/plugin-transform-optional-chaining": "^7.24.6",
+ "@babel/plugin-transform-parameters": "^7.24.6",
+ "@babel/plugin-transform-private-methods": "^7.24.6",
+ "@babel/plugin-transform-private-property-in-object": "^7.24.6",
+ "@babel/plugin-transform-property-literals": "^7.24.6",
+ "@babel/plugin-transform-regenerator": "^7.24.6",
+ "@babel/plugin-transform-reserved-words": "^7.24.6",
+ "@babel/plugin-transform-shorthand-properties": "^7.24.6",
+ "@babel/plugin-transform-spread": "^7.24.6",
+ "@babel/plugin-transform-sticky-regex": "^7.24.6",
+ "@babel/plugin-transform-template-literals": "^7.24.6",
+ "@babel/plugin-transform-typeof-symbol": "^7.24.6",
+ "@babel/plugin-transform-unicode-escapes": "^7.24.6",
+ "@babel/plugin-transform-unicode-property-regex": "^7.24.6",
+ "@babel/plugin-transform-unicode-regex": "^7.24.6",
+ "@babel/plugin-transform-unicode-sets-regex": "^7.24.6",
"@babel/preset-modules": "0.1.6-no-external-plugins",
- "babel-plugin-polyfill-corejs2": "^0.4.8",
- "babel-plugin-polyfill-corejs3": "^0.9.0",
- "babel-plugin-polyfill-regenerator": "^0.5.5",
+ "babel-plugin-polyfill-corejs2": "^0.4.10",
+ "babel-plugin-polyfill-corejs3": "^0.10.4",
+ "babel-plugin-polyfill-regenerator": "^0.6.1",
"core-js-compat": "^3.31.0",
"semver": "^6.3.1"
},
@@ -1914,14 +1922,14 @@
}
},
"node_modules/@babel/preset-flow": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.23.3.tgz",
- "integrity": "sha512-7yn6hl8RIv+KNk6iIrGZ+D06VhVY35wLVf23Cz/mMu1zOr7u4MMP4j0nZ9tLf8+4ZFpnib8cFYgB/oYg9hfswA==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.24.6.tgz",
+ "integrity": "sha512-huoe0T1Qs9fQhMWbmqE/NHUeZbqmHDsN6n/jYvPcUUHfuKiPV32C9i8tDhMbQ1DEKTjbBP7Rjm3nSLwlB2X05g==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5",
- "@babel/helper-validator-option": "^7.22.15",
- "@babel/plugin-transform-flow-strip-types": "^7.23.3"
+ "@babel/helper-plugin-utils": "^7.24.6",
+ "@babel/helper-validator-option": "^7.24.6",
+ "@babel/plugin-transform-flow-strip-types": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1945,17 +1953,17 @@
}
},
"node_modules/@babel/preset-react": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.23.3.tgz",
- "integrity": "sha512-tbkHOS9axH6Ysf2OUEqoSZ6T3Fa2SrNH6WTWSPBboxKzdxNc9qOICeLXkNG0ZEwbQ1HY8liwOce4aN/Ceyuq6w==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.24.6.tgz",
+ "integrity": "sha512-8mpzh1bWvmINmwM3xpz6ahu57mNaWavMm+wBNjQ4AFu1nghKBiIRET7l/Wmj4drXany/BBGjJZngICcD98F1iw==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5",
- "@babel/helper-validator-option": "^7.22.15",
- "@babel/plugin-transform-react-display-name": "^7.23.3",
- "@babel/plugin-transform-react-jsx": "^7.22.15",
- "@babel/plugin-transform-react-jsx-development": "^7.22.5",
- "@babel/plugin-transform-react-pure-annotations": "^7.23.3"
+ "@babel/helper-plugin-utils": "^7.24.6",
+ "@babel/helper-validator-option": "^7.24.6",
+ "@babel/plugin-transform-react-display-name": "^7.24.6",
+ "@babel/plugin-transform-react-jsx": "^7.24.6",
+ "@babel/plugin-transform-react-jsx-development": "^7.24.6",
+ "@babel/plugin-transform-react-pure-annotations": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1965,16 +1973,16 @@
}
},
"node_modules/@babel/preset-typescript": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.23.3.tgz",
- "integrity": "sha512-17oIGVlqz6CchO9RFYn5U6ZpWRZIngayYCtrPRSgANSwC2V1Jb+iP74nVxzzXJte8b8BYxrL1yY96xfhTBrNNQ==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.24.6.tgz",
+ "integrity": "sha512-U10aHPDnokCFRXgyT/MaIRTivUu2K/mu0vJlwRS9LxJmJet+PFQNKpggPyFCUtC6zWSBPjvxjnpNkAn3Uw2m5w==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5",
- "@babel/helper-validator-option": "^7.22.15",
- "@babel/plugin-syntax-jsx": "^7.23.3",
- "@babel/plugin-transform-modules-commonjs": "^7.23.3",
- "@babel/plugin-transform-typescript": "^7.23.3"
+ "@babel/helper-plugin-utils": "^7.24.6",
+ "@babel/helper-validator-option": "^7.24.6",
+ "@babel/plugin-syntax-jsx": "^7.24.6",
+ "@babel/plugin-transform-modules-commonjs": "^7.24.6",
+ "@babel/plugin-transform-typescript": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1984,9 +1992,9 @@
}
},
"node_modules/@babel/register": {
- "version": "7.23.7",
- "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.23.7.tgz",
- "integrity": "sha512-EjJeB6+kvpk+Y5DAkEAmbOBEFkh9OASx0huoEkqYTFxAZHzOAX2Oh5uwAUuL2rUddqfM0SA+KPXV2TbzoZ2kvQ==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.24.6.tgz",
+ "integrity": "sha512-WSuFCc2wCqMeXkz/i3yfAAsxwWflEgbVkZzivgAmXl/MxrXeoYFZOOPllbC8R8WTF7u61wSRQtDVZ1879cdu6w==",
"dev": true,
"dependencies": {
"clone-deep": "^4.0.1",
@@ -2137,9 +2145,9 @@
"dev": true
},
"node_modules/@babel/runtime": {
- "version": "7.23.9",
- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.9.tgz",
- "integrity": "sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.6.tgz",
+ "integrity": "sha512-Ja18XcETdEl5mzzACGd+DKgaGJzPTCow7EglgwTmHdwokzDFYh/MHua6lU6DV/hjF2IaOJ4oX2nqnjG7RElKOw==",
"dev": true,
"dependencies": {
"regenerator-runtime": "^0.14.0"
@@ -2149,33 +2157,33 @@
}
},
"node_modules/@babel/template": {
- "version": "7.24.0",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.0.tgz",
- "integrity": "sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.6.tgz",
+ "integrity": "sha512-3vgazJlLwNXi9jhrR1ef8qiB65L1RK90+lEQwv4OxveHnqC3BfmnHdgySwRLzf6akhlOYenT+b7AfWq+a//AHw==",
"dev": true,
"dependencies": {
- "@babel/code-frame": "^7.23.5",
- "@babel/parser": "^7.24.0",
- "@babel/types": "^7.24.0"
+ "@babel/code-frame": "^7.24.6",
+ "@babel/parser": "^7.24.6",
+ "@babel/types": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/traverse": {
- "version": "7.24.0",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.0.tgz",
- "integrity": "sha512-HfuJlI8qq3dEDmNU5ChzzpZRWq+oxCZQyMzIMEqLho+AQnhMnKQUzH6ydo3RBl/YjPCuk68Y6s0Gx0AeyULiWw==",
- "dev": true,
- "dependencies": {
- "@babel/code-frame": "^7.23.5",
- "@babel/generator": "^7.23.6",
- "@babel/helper-environment-visitor": "^7.22.20",
- "@babel/helper-function-name": "^7.23.0",
- "@babel/helper-hoist-variables": "^7.22.5",
- "@babel/helper-split-export-declaration": "^7.22.6",
- "@babel/parser": "^7.24.0",
- "@babel/types": "^7.24.0",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.6.tgz",
+ "integrity": "sha512-OsNjaJwT9Zn8ozxcfoBc+RaHdj3gFmCmYoQLUII1o6ZrUwku0BMg80FoOTPx+Gi6XhcQxAYE4xyjPTo4SxEQqw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/code-frame": "^7.24.6",
+ "@babel/generator": "^7.24.6",
+ "@babel/helper-environment-visitor": "^7.24.6",
+ "@babel/helper-function-name": "^7.24.6",
+ "@babel/helper-hoist-variables": "^7.24.6",
+ "@babel/helper-split-export-declaration": "^7.24.6",
+ "@babel/parser": "^7.24.6",
+ "@babel/types": "^7.24.6",
"debug": "^4.3.1",
"globals": "^11.1.0"
},
@@ -2184,13 +2192,13 @@
}
},
"node_modules/@babel/types": {
- "version": "7.24.0",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.0.tgz",
- "integrity": "sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.6.tgz",
+ "integrity": "sha512-WaMsgi6Q8zMgMth93GvWPXkhAIEobfsIkLTacoVZoK1J0CevIPGYY2Vo5YvJGqyHqXM6P4ppOYGsIRU8MM9pFQ==",
"dev": true,
"dependencies": {
- "@babel/helper-string-parser": "^7.23.4",
- "@babel/helper-validator-identifier": "^7.22.20",
+ "@babel/helper-string-parser": "^7.24.6",
+ "@babel/helper-validator-identifier": "^7.24.6",
"to-fast-properties": "^2.0.0"
},
"engines": {
@@ -2220,9 +2228,9 @@
}
},
"node_modules/@csstools/cascade-layer-name-parser": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-1.0.7.tgz",
- "integrity": "sha512-9J4aMRJ7A2WRjaRLvsMeWrL69FmEuijtiW1XlK/sG+V0UJiHVYUyvj9mY4WAXfU/hGIiGOgL8e0jJcRyaZTjDQ==",
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-1.0.11.tgz",
+ "integrity": "sha512-yhsonEAhaWRQvHFYhSzOUobH2Ev++fMci+ppFRagw0qVSPlcPV4FnNmlwpM/b2BM10ZeMRkVV4So6YRswD0O0w==",
"dev": true,
"funding": [
{
@@ -2238,14 +2246,14 @@
"node": "^14 || ^16 || >=18"
},
"peerDependencies": {
- "@csstools/css-parser-algorithms": "^2.5.0",
- "@csstools/css-tokenizer": "^2.2.3"
+ "@csstools/css-parser-algorithms": "^2.6.3",
+ "@csstools/css-tokenizer": "^2.3.1"
}
},
"node_modules/@csstools/color-helpers": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-4.0.0.tgz",
- "integrity": "sha512-wjyXB22/h2OvxAr3jldPB7R7kjTUEzopvjitS8jWtyd8fN6xJ8vy1HnHu0ZNfEkqpBJgQ76Q+sBDshWcMvTa/w==",
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-4.2.0.tgz",
+ "integrity": "sha512-hJJrSBzbfGxUsaR6X4Bzd/FLx0F1ulKnR5ljY9AiXCtsR+H+zSWQDFWlKES1BRaVZTDHLpIIHS9K2o0h+JLlrg==",
"dev": true,
"funding": [
{
@@ -2262,9 +2270,9 @@
}
},
"node_modules/@csstools/css-calc": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-1.1.6.tgz",
- "integrity": "sha512-YHPAuFg5iA4qZGzMzvrQwzkvJpesXXyIUyaONflQrjtHB+BcFFbgltJkIkb31dMGO4SE9iZFA4HYpdk7+hnYew==",
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-1.2.2.tgz",
+ "integrity": "sha512-0owrl7AruDRKAxoSIW8XzJdz7GnuW3AOj4rYLfmXsoKIX2ZZzttzGXoiC8n8V08X7wIBlEWWVB4C8fAN18+I6Q==",
"dev": true,
"funding": [
{
@@ -2280,14 +2288,14 @@
"node": "^14 || ^16 || >=18"
},
"peerDependencies": {
- "@csstools/css-parser-algorithms": "^2.5.0",
- "@csstools/css-tokenizer": "^2.2.3"
+ "@csstools/css-parser-algorithms": "^2.6.3",
+ "@csstools/css-tokenizer": "^2.3.1"
}
},
"node_modules/@csstools/css-color-parser": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-1.5.1.tgz",
- "integrity": "sha512-x+SajGB2paGrTjPOUorGi8iCztF008YMKXTn+XzGVDBEIVJ/W1121pPerpneJYGOe1m6zWLPLnzOPaznmQxKFw==",
+ "version": "1.6.3",
+ "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-1.6.3.tgz",
+ "integrity": "sha512-pQPUPo32HW3/NuZxrwr3VJHE+vGqSTVI5gK4jGbuJ7eOFUrsTmZikXcVdInCVWOvuxK5xbCzwDWoTlZUCAKN+A==",
"dev": true,
"funding": [
{
@@ -2300,21 +2308,21 @@
}
],
"dependencies": {
- "@csstools/color-helpers": "^4.0.0",
- "@csstools/css-calc": "^1.1.6"
+ "@csstools/color-helpers": "^4.1.0",
+ "@csstools/css-calc": "^1.2.0"
},
"engines": {
"node": "^14 || ^16 || >=18"
},
"peerDependencies": {
- "@csstools/css-parser-algorithms": "^2.5.0",
- "@csstools/css-tokenizer": "^2.2.3"
+ "@csstools/css-parser-algorithms": "^2.6.1",
+ "@csstools/css-tokenizer": "^2.2.4"
}
},
"node_modules/@csstools/css-parser-algorithms": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.5.0.tgz",
- "integrity": "sha512-abypo6m9re3clXA00eu5syw+oaPHbJTPapu9C4pzNsJ4hdZDzushT50Zhu+iIYXgEe1CxnRMn7ngsbV+MLrlpQ==",
+ "version": "2.6.3",
+ "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.6.3.tgz",
+ "integrity": "sha512-xI/tL2zxzEbESvnSxwFgwvy5HS00oCXxL4MLs6HUiDcYfwowsoQaABKxUElp1ARITrINzBnsECOc1q0eg2GOrA==",
"dev": true,
"funding": [
{
@@ -2330,13 +2338,13 @@
"node": "^14 || ^16 || >=18"
},
"peerDependencies": {
- "@csstools/css-tokenizer": "^2.2.3"
+ "@csstools/css-tokenizer": "^2.3.1"
}
},
"node_modules/@csstools/css-tokenizer": {
- "version": "2.2.3",
- "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.2.3.tgz",
- "integrity": "sha512-pp//EvZ9dUmGuGtG1p+n17gTHEOqu9jO+FiCUjNN3BDmyhdA2Jq9QsVeR7K8/2QCK17HSsioPlTW9ZkzoWb3Lg==",
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.3.1.tgz",
+ "integrity": "sha512-iMNHTyxLbBlWIfGtabT157LH9DUx9X8+Y3oymFEuMj8HNc+rpE3dPFGFgHjpKfjeFDjLjYIAIhXPGvS2lKxL9g==",
"dev": true,
"funding": [
{
@@ -2353,9 +2361,9 @@
}
},
"node_modules/@csstools/media-query-list-parser": {
- "version": "2.1.7",
- "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.7.tgz",
- "integrity": "sha512-lHPKJDkPUECsyAvD60joYfDmp8UERYxHGkFfyLJFTVK/ERJe0sVlIFLXU5XFxdjNDTerp5L4KeaKG+Z5S94qxQ==",
+ "version": "2.1.11",
+ "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.11.tgz",
+ "integrity": "sha512-uox5MVhvNHqitPP+SynrB1o8oPxPMt2JLgp5ghJOWf54WGQ5OKu47efne49r1SWqs3wRP8xSWjnO9MBKxhB1dA==",
"dev": true,
"funding": [
{
@@ -2371,8 +2379,8 @@
"node": "^14 || ^16 || >=18"
},
"peerDependencies": {
- "@csstools/css-parser-algorithms": "^2.5.0",
- "@csstools/css-tokenizer": "^2.2.3"
+ "@csstools/css-parser-algorithms": "^2.6.3",
+ "@csstools/css-tokenizer": "^2.3.1"
}
},
"node_modules/@csstools/postcss-cascade-layers": {
@@ -2632,9 +2640,9 @@
}
},
"node_modules/@csstools/postcss-media-minmax": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@csstools/postcss-media-minmax/-/postcss-media-minmax-1.1.2.tgz",
- "integrity": "sha512-7qTRTJxW96u2yiEaTep1+8nto1O/rEDacewKqH+Riq5E6EsHTOmGHxkB4Se5Ic5xgDC4I05lLZxzzxnlnSypxA==",
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/@csstools/postcss-media-minmax/-/postcss-media-minmax-1.1.6.tgz",
+ "integrity": "sha512-bc0frf2Lod53j6wEHVsaVElfvCf6uhc96v99M/wUfer4MmNYfO3YLx1kFuB8xXvb0AXiWx4fohCJqemHV3bfRg==",
"dev": true,
"funding": [
{
@@ -2647,10 +2655,10 @@
}
],
"dependencies": {
- "@csstools/css-calc": "^1.1.6",
- "@csstools/css-parser-algorithms": "^2.5.0",
- "@csstools/css-tokenizer": "^2.2.3",
- "@csstools/media-query-list-parser": "^2.1.7"
+ "@csstools/css-calc": "^1.2.2",
+ "@csstools/css-parser-algorithms": "^2.6.3",
+ "@csstools/css-tokenizer": "^2.3.1",
+ "@csstools/media-query-list-parser": "^2.1.11"
},
"engines": {
"node": "^14 || ^16 || >=18"
@@ -2943,6 +2951,28 @@
"postcss-selector-parser": "^6.0.10"
}
},
+ "node_modules/@csstools/utilities": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@csstools/utilities/-/utilities-1.0.0.tgz",
+ "integrity": "sha512-tAgvZQe/t2mlvpNosA4+CkMiZ2azISW5WPAcdSalZlEjQvUfghHxfQcrCiK/7/CrfAWVxyM88kGFYO82heIGDg==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/csstools"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/csstools"
+ }
+ ],
+ "engines": {
+ "node": "^14 || ^16 || >=18"
+ },
+ "peerDependencies": {
+ "postcss": "^8.4"
+ }
+ },
"node_modules/@discoveryjs/json-ext": {
"version": "0.5.7",
"resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz",
@@ -2953,9 +2983,9 @@
}
},
"node_modules/@emnapi/runtime": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.1.1.tgz",
- "integrity": "sha512-3bfqkzuR1KLx57nZfjr2NLnFOobvyS0aTszaEGCGqmYMVDRaGvgIZbjGSV/MHSSmLgQ/b9JFHQ5xm5WRZYd+XQ==",
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.2.0.tgz",
+ "integrity": "sha512-bV21/9LQmcQeCPEg3BDFtvwL6cwiTMksYNWQQ4KOxCZikEGalWtenoZ0wCiukJINlGCIi2KXx01g4FoH/LxpzQ==",
"optional": true,
"dependencies": {
"tslib": "^2.4.0"
@@ -3338,9 +3368,9 @@
}
},
"node_modules/@eslint-community/regexpp": {
- "version": "4.10.0",
- "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz",
- "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==",
+ "version": "4.10.1",
+ "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.1.tgz",
+ "integrity": "sha512-Zm2NGpWELsQAD1xsJzGQpYfvICSsFkEpU0jxBjfdC6uNEWXcHnfs9hScFWtXVDVl+rBQJGrl4g1vcKIejpH9dA==",
"dev": true,
"engines": {
"node": "^12.0.0 || ^14.0.0 || >=16.0.0"
@@ -3452,31 +3482,31 @@
}
},
"node_modules/@floating-ui/core": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.0.tgz",
- "integrity": "sha512-PcF++MykgmTj3CIyOQbKA/hDzOAiqI3mhuoN44WRCopIs1sgoDoU4oty4Jtqaj/y3oDU6fnVSm4QG0a3t5i0+g==",
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.2.tgz",
+ "integrity": "sha512-+2XpQV9LLZeanU4ZevzRnGFg2neDeKHgFLjP6YLW+tly0IvrhqT4u8enLGjLH3qeh85g19xY5rsAusfwTdn5lg==",
"dev": true,
"dependencies": {
- "@floating-ui/utils": "^0.2.1"
+ "@floating-ui/utils": "^0.2.0"
}
},
"node_modules/@floating-ui/dom": {
- "version": "1.6.1",
- "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.1.tgz",
- "integrity": "sha512-iA8qE43/H5iGozC3W0YSnVSW42Vh522yyM1gj+BqRwVsTNOyr231PsXDaV04yT39PsO0QL2QpbI/M0ZaLUQgRQ==",
+ "version": "1.6.5",
+ "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.5.tgz",
+ "integrity": "sha512-Nsdud2X65Dz+1RHjAIP0t8z5e2ff/IRbei6BqFrl1urT8sDVzM1HMQ+R0XcU5ceRfyO3I6ayeqIfh+6Wb8LGTw==",
"dev": true,
"dependencies": {
- "@floating-ui/core": "^1.6.0",
- "@floating-ui/utils": "^0.2.1"
+ "@floating-ui/core": "^1.0.0",
+ "@floating-ui/utils": "^0.2.0"
}
},
"node_modules/@floating-ui/react-dom": {
- "version": "2.0.8",
- "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.0.8.tgz",
- "integrity": "sha512-HOdqOt3R3OGeTKidaLvJKcgg75S6tibQ3Tif4eyd91QnIJWr0NLvoXFpJA/j8HqkFSL68GDca9AuyWEHlhyClw==",
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.0.tgz",
+ "integrity": "sha512-lNzj5EQmEKn5FFKc04+zasr09h/uX8RtJRNj5gUXsSQIXHVWTVh+hVAg1vOMCexkX8EgvemMvIFpQfkosnVNyA==",
"dev": true,
"dependencies": {
- "@floating-ui/dom": "^1.6.1"
+ "@floating-ui/dom": "^1.0.0"
},
"peerDependencies": {
"react": ">=16.8.0",
@@ -3484,15 +3514,15 @@
}
},
"node_modules/@floating-ui/utils": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.1.tgz",
- "integrity": "sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q==",
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.2.tgz",
+ "integrity": "sha512-J4yDIIthosAsRZ5CPYP/jQvUAQtlZTTD/4suA08/FEnlxqW3sKS9iAhgsa9VYLZ6vDHn/ixJgIqRQPotoBjxIw==",
"dev": true
},
"node_modules/@formatjs/ecma402-abstract": {
- "version": "1.18.2",
- "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.18.2.tgz",
- "integrity": "sha512-+QoPW4csYALsQIl8GbN14igZzDbuwzcpWrku9nyMXlaqAlwRBgl5V+p0vWMGFqHOw37czNXaP/lEk4wbLgcmtA==",
+ "version": "1.18.3",
+ "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.18.3.tgz",
+ "integrity": "sha512-J961RbhyjHWeCIv+iOceNxpoZ/qomJOs5lH+rUJCeKNa59gME4KC0LJVMeWODjHsnv/hTH8Hvd6sevzcAzjuaQ==",
"dependencies": {
"@formatjs/intl-localematcher": "0.5.4",
"tslib": "^2.4.0"
@@ -3507,64 +3537,64 @@
}
},
"node_modules/@formatjs/fast-memoize": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/@formatjs/fast-memoize/-/fast-memoize-1.2.1.tgz",
- "integrity": "sha512-Rg0e76nomkz3vF9IPlKeV+Qynok0r7YZjL6syLz4/urSg0IbjPZCB/iYUMNsYA643gh4mgrX3T7KEIFIxJBQeg==",
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/@formatjs/fast-memoize/-/fast-memoize-2.2.0.tgz",
+ "integrity": "sha512-hnk/nY8FyrL5YxwP9e4r9dqeM6cAbo8PeU9UjyXojZMNvVad2Z06FAVHyR3Ecw6fza+0GH7vdJgiKIVXTMbSBA==",
"dependencies": {
- "tslib": "^2.1.0"
+ "tslib": "^2.4.0"
}
},
"node_modules/@formatjs/icu-messageformat-parser": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.1.0.tgz",
- "integrity": "sha512-Qxv/lmCN6hKpBSss2uQ8IROVnta2r9jd3ymUEIjm2UyIkUCHVcbUVRGL/KS/wv7876edvsPe+hjHVJ4z8YuVaw==",
+ "version": "2.7.8",
+ "resolved": "https://registry.npmjs.org/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.7.8.tgz",
+ "integrity": "sha512-nBZJYmhpcSX0WeJ5SDYUkZ42AgR3xiyhNCsQweFx3cz/ULJjym8bHAzWKvG5e2+1XO98dBYC0fWeeAECAVSwLA==",
"dependencies": {
- "@formatjs/ecma402-abstract": "1.11.4",
- "@formatjs/icu-skeleton-parser": "1.3.6",
- "tslib": "^2.1.0"
+ "@formatjs/ecma402-abstract": "2.0.0",
+ "@formatjs/icu-skeleton-parser": "1.8.2",
+ "tslib": "^2.4.0"
}
},
"node_modules/@formatjs/icu-messageformat-parser/node_modules/@formatjs/ecma402-abstract": {
- "version": "1.11.4",
- "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.11.4.tgz",
- "integrity": "sha512-EBikYFp2JCdIfGEb5G9dyCkTGDmC57KSHhRQOC3aYxoPWVZvfWCDjZwkGYHN7Lis/fmuWl906bnNTJifDQ3sXw==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-2.0.0.tgz",
+ "integrity": "sha512-rRqXOqdFmk7RYvj4khklyqzcfQl9vEL/usogncBHRZfZBDOwMGuSRNFl02fu5KGHXdbinju+YXyuR+Nk8xlr/g==",
"dependencies": {
- "@formatjs/intl-localematcher": "0.2.25",
- "tslib": "^2.1.0"
+ "@formatjs/intl-localematcher": "0.5.4",
+ "tslib": "^2.4.0"
}
},
"node_modules/@formatjs/icu-messageformat-parser/node_modules/@formatjs/intl-localematcher": {
- "version": "0.2.25",
- "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.2.25.tgz",
- "integrity": "sha512-YmLcX70BxoSopLFdLr1Ds99NdlTI2oWoLbaUW2M406lxOIPzE1KQhRz2fPUkq34xVZQaihCoU29h0KK7An3bhA==",
+ "version": "0.5.4",
+ "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.5.4.tgz",
+ "integrity": "sha512-zTwEpWOzZ2CiKcB93BLngUX59hQkuZjT2+SAQEscSm52peDW/getsawMcWF1rGRpMCX6D7nSJA3CzJ8gn13N/g==",
"dependencies": {
- "tslib": "^2.1.0"
+ "tslib": "^2.4.0"
}
},
"node_modules/@formatjs/icu-skeleton-parser": {
- "version": "1.3.6",
- "resolved": "https://registry.npmjs.org/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.3.6.tgz",
- "integrity": "sha512-I96mOxvml/YLrwU2Txnd4klA7V8fRhb6JG/4hm3VMNmeJo1F03IpV2L3wWt7EweqNLES59SZ4d6hVOPCSf80Bg==",
+ "version": "1.8.2",
+ "resolved": "https://registry.npmjs.org/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.8.2.tgz",
+ "integrity": "sha512-k4ERKgw7aKGWJZgTarIcNEmvyTVD9FYh0mTrrBMHZ1b8hUu6iOJ4SzsZlo3UNAvHYa+PnvntIwRPt1/vy4nA9Q==",
"dependencies": {
- "@formatjs/ecma402-abstract": "1.11.4",
- "tslib": "^2.1.0"
+ "@formatjs/ecma402-abstract": "2.0.0",
+ "tslib": "^2.4.0"
}
},
"node_modules/@formatjs/icu-skeleton-parser/node_modules/@formatjs/ecma402-abstract": {
- "version": "1.11.4",
- "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.11.4.tgz",
- "integrity": "sha512-EBikYFp2JCdIfGEb5G9dyCkTGDmC57KSHhRQOC3aYxoPWVZvfWCDjZwkGYHN7Lis/fmuWl906bnNTJifDQ3sXw==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-2.0.0.tgz",
+ "integrity": "sha512-rRqXOqdFmk7RYvj4khklyqzcfQl9vEL/usogncBHRZfZBDOwMGuSRNFl02fu5KGHXdbinju+YXyuR+Nk8xlr/g==",
"dependencies": {
- "@formatjs/intl-localematcher": "0.2.25",
- "tslib": "^2.1.0"
+ "@formatjs/intl-localematcher": "0.5.4",
+ "tslib": "^2.4.0"
}
},
"node_modules/@formatjs/icu-skeleton-parser/node_modules/@formatjs/intl-localematcher": {
- "version": "0.2.25",
- "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.2.25.tgz",
- "integrity": "sha512-YmLcX70BxoSopLFdLr1Ds99NdlTI2oWoLbaUW2M406lxOIPzE1KQhRz2fPUkq34xVZQaihCoU29h0KK7An3bhA==",
+ "version": "0.5.4",
+ "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.5.4.tgz",
+ "integrity": "sha512-zTwEpWOzZ2CiKcB93BLngUX59hQkuZjT2+SAQEscSm52peDW/getsawMcWF1rGRpMCX6D7nSJA3CzJ8gn13N/g==",
"dependencies": {
- "tslib": "^2.1.0"
+ "tslib": "^2.4.0"
}
},
"node_modules/@formatjs/intl-localematcher": {
@@ -3603,9 +3633,9 @@
}
},
"node_modules/@humanwhocodes/object-schema": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz",
- "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==",
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz",
+ "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==",
"dev": true
},
"node_modules/@ianvs/prettier-plugin-sort-imports": {
@@ -3632,9 +3662,9 @@
}
},
"node_modules/@img/sharp-darwin-arm64": {
- "version": "0.33.3",
- "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.3.tgz",
- "integrity": "sha512-FaNiGX1MrOuJ3hxuNzWgsT/mg5OHG/Izh59WW2mk1UwYHUwtfbhk5QNKYZgxf0pLOhx9ctGiGa2OykD71vOnSw==",
+ "version": "0.33.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.4.tgz",
+ "integrity": "sha512-p0suNqXufJs9t3RqLBO6vvrgr5OhgbWp76s5gTRvdmxmuv9E1rcaqGUsl3l4mKVmXPkTkTErXediAui4x+8PSA==",
"cpu": [
"arm64"
],
@@ -3657,9 +3687,9 @@
}
},
"node_modules/@img/sharp-darwin-x64": {
- "version": "0.33.3",
- "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.33.3.tgz",
- "integrity": "sha512-2QeSl7QDK9ru//YBT4sQkoq7L0EAJZA3rtV+v9p8xTKl4U1bUqTIaCnoC7Ctx2kCjQgwFXDasOtPTCT8eCTXvw==",
+ "version": "0.33.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.33.4.tgz",
+ "integrity": "sha512-0l7yRObwtTi82Z6ebVI2PnHT8EB2NxBgpK2MiKJZJ7cz32R4lxd001ecMhzzsZig3Yv9oclvqqdV93jo9hy+Dw==",
"cpu": [
"x64"
],
@@ -3850,9 +3880,9 @@
}
},
"node_modules/@img/sharp-linux-arm": {
- "version": "0.33.3",
- "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.33.3.tgz",
- "integrity": "sha512-Q7Ee3fFSC9P7vUSqVEF0zccJsZ8GiiCJYGWDdhEjdlOeS9/jdkyJ6sUSPj+bL8VuOYFSbofrW0t/86ceVhx32w==",
+ "version": "0.33.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.33.4.tgz",
+ "integrity": "sha512-RUgBD1c0+gCYZGCCe6mMdTiOFS0Zc/XrN0fYd6hISIKcDUbAW5NtSQW9g/powkrXYm6Vzwd6y+fqmExDuCdHNQ==",
"cpu": [
"arm"
],
@@ -3875,9 +3905,9 @@
}
},
"node_modules/@img/sharp-linux-arm64": {
- "version": "0.33.3",
- "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.33.3.tgz",
- "integrity": "sha512-Zf+sF1jHZJKA6Gor9hoYG2ljr4wo9cY4twaxgFDvlG0Xz9V7sinsPp8pFd1XtlhTzYo0IhDbl3rK7P6MzHpnYA==",
+ "version": "0.33.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.33.4.tgz",
+ "integrity": "sha512-2800clwVg1ZQtxwSoTlHvtm9ObgAax7V6MTAB/hDT945Tfyy3hVkmiHpeLPCKYqYR1Gcmv1uDZ3a4OFwkdBL7Q==",
"cpu": [
"arm64"
],
@@ -3900,9 +3930,9 @@
}
},
"node_modules/@img/sharp-linux-s390x": {
- "version": "0.33.3",
- "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.33.3.tgz",
- "integrity": "sha512-vFk441DKRFepjhTEH20oBlFrHcLjPfI8B0pMIxGm3+yilKyYeHEVvrZhYFdqIseSclIqbQ3SnZMwEMWonY5XFA==",
+ "version": "0.33.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.33.4.tgz",
+ "integrity": "sha512-h3RAL3siQoyzSoH36tUeS0PDmb5wINKGYzcLB5C6DIiAn2F3udeFAum+gj8IbA/82+8RGCTn7XW8WTFnqag4tQ==",
"cpu": [
"s390x"
],
@@ -3911,7 +3941,7 @@
"linux"
],
"engines": {
- "glibc": ">=2.28",
+ "glibc": ">=2.31",
"node": "^18.17.0 || ^20.3.0 || >=21.0.0",
"npm": ">=9.6.5",
"pnpm": ">=7.1.0",
@@ -3925,9 +3955,9 @@
}
},
"node_modules/@img/sharp-linux-x64": {
- "version": "0.33.3",
- "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.33.3.tgz",
- "integrity": "sha512-Q4I++herIJxJi+qmbySd072oDPRkCg/SClLEIDh5IL9h1zjhqjv82H0Seupd+q2m0yOfD+/fJnjSoDFtKiHu2g==",
+ "version": "0.33.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.33.4.tgz",
+ "integrity": "sha512-GoR++s0XW9DGVi8SUGQ/U4AeIzLdNjHka6jidVwapQ/JebGVQIpi52OdyxCNVRE++n1FCLzjDovJNozif7w/Aw==",
"cpu": [
"x64"
],
@@ -3950,9 +3980,9 @@
}
},
"node_modules/@img/sharp-linuxmusl-arm64": {
- "version": "0.33.3",
- "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.33.3.tgz",
- "integrity": "sha512-qnDccehRDXadhM9PM5hLvcPRYqyFCBN31kq+ErBSZtZlsAc1U4Z85xf/RXv1qolkdu+ibw64fUDaRdktxTNP9A==",
+ "version": "0.33.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.33.4.tgz",
+ "integrity": "sha512-nhr1yC3BlVrKDTl6cO12gTpXMl4ITBUZieehFvMntlCXFzH2bvKG76tBL2Y/OqhupZt81pR7R+Q5YhJxW0rGgQ==",
"cpu": [
"arm64"
],
@@ -3975,9 +4005,9 @@
}
},
"node_modules/@img/sharp-linuxmusl-x64": {
- "version": "0.33.3",
- "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.33.3.tgz",
- "integrity": "sha512-Jhchim8kHWIU/GZ+9poHMWRcefeaxFIs9EBqf9KtcC14Ojk6qua7ghKiPs0sbeLbLj/2IGBtDcxHyjCdYWkk2w==",
+ "version": "0.33.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.33.4.tgz",
+ "integrity": "sha512-uCPTku0zwqDmZEOi4ILyGdmW76tH7dm8kKlOIV1XC5cLyJ71ENAAqarOHQh0RLfpIpbV5KOpXzdU6XkJtS0daw==",
"cpu": [
"x64"
],
@@ -4000,15 +4030,15 @@
}
},
"node_modules/@img/sharp-wasm32": {
- "version": "0.33.3",
- "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.33.3.tgz",
- "integrity": "sha512-68zivsdJ0koE96stdUfM+gmyaK/NcoSZK5dV5CAjES0FUXS9lchYt8LAB5rTbM7nlWtxaU/2GON0HVN6/ZYJAQ==",
+ "version": "0.33.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.33.4.tgz",
+ "integrity": "sha512-Bmmauh4sXUsUqkleQahpdNXKvo+wa1V9KhT2pDA4VJGKwnKMJXiSTGphn0gnJrlooda0QxCtXc6RX1XAU6hMnQ==",
"cpu": [
"wasm32"
],
"optional": true,
"dependencies": {
- "@emnapi/runtime": "^1.1.0"
+ "@emnapi/runtime": "^1.1.1"
},
"engines": {
"node": "^18.17.0 || ^20.3.0 || >=21.0.0",
@@ -4021,9 +4051,9 @@
}
},
"node_modules/@img/sharp-win32-ia32": {
- "version": "0.33.3",
- "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.33.3.tgz",
- "integrity": "sha512-CyimAduT2whQD8ER4Ux7exKrtfoaUiVr7HG0zZvO0XTFn2idUWljjxv58GxNTkFb8/J9Ub9AqITGkJD6ZginxQ==",
+ "version": "0.33.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.33.4.tgz",
+ "integrity": "sha512-99SJ91XzUhYHbx7uhK3+9Lf7+LjwMGQZMDlO/E/YVJ7Nc3lyDFZPGhjwiYdctoH2BOzW9+TnfqcaMKt0jHLdqw==",
"cpu": [
"ia32"
],
@@ -4042,9 +4072,9 @@
}
},
"node_modules/@img/sharp-win32-x64": {
- "version": "0.33.3",
- "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.3.tgz",
- "integrity": "sha512-viT4fUIDKnli3IfOephGnolMzhz5VaTvDRkYqtZxOMIoMQ4MrAziO7pT1nVnOt2FAm7qW5aa+CCc13aEY6Le0g==",
+ "version": "0.33.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.4.tgz",
+ "integrity": "sha512-3QLocdTRVIrFNye5YocZl+KKpYKP+fksi1QhmOArgx7GyhIbQp/WrJRu176jm8IxromS7RIkzMiMINVdBtC8Aw==",
"cpu": [
"x64"
],
@@ -4366,9 +4396,9 @@
}
},
"node_modules/@jest/core/node_modules/react-is": {
- "version": "18.2.0",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz",
- "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==",
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz",
+ "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==",
"dev": true
},
"node_modules/@jest/core/node_modules/supports-color": {
@@ -4533,6 +4563,7 @@
"version": "7.2.3",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
"integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "deprecated": "Glob versions prior to v9 are no longer supported",
"dev": true,
"dependencies": {
"fs.realpath": "^1.0.0",
@@ -4559,14 +4590,14 @@
}
},
"node_modules/@jest/reporters/node_modules/istanbul-lib-instrument": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.1.tgz",
- "integrity": "sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA==",
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.2.tgz",
+ "integrity": "sha512-1WUsZ9R1lA0HtBSohTkm39WTPlNKSJ5iFk7UwqXkBLoHQT+hfqPsfsTDVuZdKGaBwn7din9bS7SsnoAr943hvw==",
"dev": true,
"dependencies": {
- "@babel/core": "^7.12.3",
- "@babel/parser": "^7.14.7",
- "@istanbuljs/schema": "^0.1.2",
+ "@babel/core": "^7.23.9",
+ "@babel/parser": "^7.23.9",
+ "@istanbuljs/schema": "^0.1.3",
"istanbul-lib-coverage": "^3.2.0",
"semver": "^7.5.4"
},
@@ -4790,45 +4821,45 @@
}
},
"node_modules/@jridgewell/gen-mapping": {
- "version": "0.3.3",
- "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz",
- "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==",
+ "version": "0.3.5",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz",
+ "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==",
"dev": true,
"dependencies": {
- "@jridgewell/set-array": "^1.0.1",
+ "@jridgewell/set-array": "^1.2.1",
"@jridgewell/sourcemap-codec": "^1.4.10",
- "@jridgewell/trace-mapping": "^0.3.9"
+ "@jridgewell/trace-mapping": "^0.3.24"
},
"engines": {
"node": ">=6.0.0"
}
},
"node_modules/@jridgewell/resolve-uri": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz",
- "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==",
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
+ "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
"dev": true,
"engines": {
"node": ">=6.0.0"
}
},
"node_modules/@jridgewell/set-array": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
- "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz",
+ "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==",
"dev": true,
"engines": {
"node": ">=6.0.0"
}
},
"node_modules/@jridgewell/source-map": {
- "version": "0.3.5",
- "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz",
- "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==",
+ "version": "0.3.6",
+ "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz",
+ "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==",
"dev": true,
"dependencies": {
- "@jridgewell/gen-mapping": "^0.3.0",
- "@jridgewell/trace-mapping": "^0.3.9"
+ "@jridgewell/gen-mapping": "^0.3.5",
+ "@jridgewell/trace-mapping": "^0.3.25"
}
},
"node_modules/@jridgewell/sourcemap-codec": {
@@ -4838,9 +4869,9 @@
"dev": true
},
"node_modules/@jridgewell/trace-mapping": {
- "version": "0.3.22",
- "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.22.tgz",
- "integrity": "sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw==",
+ "version": "0.3.25",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz",
+ "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==",
"dev": true,
"dependencies": {
"@jridgewell/resolve-uri": "^3.1.0",
@@ -4902,6 +4933,54 @@
"tar-fs": "^2.1.1"
}
},
+ "node_modules/@ndelangen/get-tarball/node_modules/chownr": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz",
+ "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==",
+ "dev": true
+ },
+ "node_modules/@ndelangen/get-tarball/node_modules/readable-stream": {
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
+ "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
+ "dev": true,
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/@ndelangen/get-tarball/node_modules/tar-fs": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz",
+ "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==",
+ "dev": true,
+ "dependencies": {
+ "chownr": "^1.1.1",
+ "mkdirp-classic": "^0.5.2",
+ "pump": "^3.0.0",
+ "tar-stream": "^2.1.4"
+ }
+ },
+ "node_modules/@ndelangen/get-tarball/node_modules/tar-stream": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz",
+ "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==",
+ "dev": true,
+ "dependencies": {
+ "bl": "^4.0.3",
+ "end-of-stream": "^1.4.1",
+ "fs-constants": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^3.1.1"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
"node_modules/@next/env": {
"version": "14.2.3",
"resolved": "https://registry.npmjs.org/@next/env/-/env-14.2.3.tgz",
@@ -4920,6 +4999,7 @@
"version": "7.1.7",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz",
"integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==",
+ "deprecated": "Glob versions prior to v9 are no longer supported",
"dev": true,
"dependencies": {
"fs.realpath": "^1.0.0",
@@ -5072,9 +5152,9 @@
}
},
"node_modules/@next/third-parties": {
- "version": "14.3.0-canary.59",
- "resolved": "https://registry.npmjs.org/@next/third-parties/-/third-parties-14.3.0-canary.59.tgz",
- "integrity": "sha512-iLFFrkeWU3VWHjviPSecoMA0ehvu6Xnm2YIyX6XCukWYRTyi4hyisaITBt0EVF/ycytBZGxWLnFzP1RW77WV+A==",
+ "version": "14.3.0-canary.87",
+ "resolved": "https://registry.npmjs.org/@next/third-parties/-/third-parties-14.3.0-canary.87.tgz",
+ "integrity": "sha512-6DPZDXU9MqymVloPXC4hceTmZQKPImNEYdUcD/ApqAe6u6S92GafCXCd6p6l3NgPSQ3lr3KwvLY7NyWkmYDq+Q==",
"dependencies": {
"third-party-capital": "1.0.20"
},
@@ -5137,12 +5217,12 @@
}
},
"node_modules/@playwright/test": {
- "version": "1.44.0",
- "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.44.0.tgz",
- "integrity": "sha512-rNX5lbNidamSUorBhB4XZ9SQTjAqfe5M+p37Z8ic0jPFBMo5iCtQz1kRWkEMg+rYOKSlVycpQmpqjSFq7LXOfg==",
+ "version": "1.44.1",
+ "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.44.1.tgz",
+ "integrity": "sha512-1hZ4TNvD5z9VuhNJ/walIjvMVvYkZKf71axoF/uiAqpntQJXpG64dlXhoDXE3OczPuTuvjf/M5KWFg5VAVUS3Q==",
"devOptional": true,
"dependencies": {
- "playwright": "1.44.0"
+ "playwright": "1.44.1"
},
"bin": {
"playwright": "cli.js"
@@ -5152,19 +5232,17 @@
}
},
"node_modules/@pmmmwh/react-refresh-webpack-plugin": {
- "version": "0.5.11",
- "resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.11.tgz",
- "integrity": "sha512-7j/6vdTym0+qZ6u4XbSAxrWBGYSdCfTzySkj7WAFgDLmSyWlOrWvpyzxlFh5jtw9dn0oL/jtW+06XfFiisN3JQ==",
+ "version": "0.5.15",
+ "resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.15.tgz",
+ "integrity": "sha512-LFWllMA55pzB9D34w/wXUCf8+c+IYKuJDgxiZ3qMhl64KRMBHYM1I3VdGaD2BV5FNPV2/S2596bppxHbv2ZydQ==",
"dev": true,
"dependencies": {
- "ansi-html-community": "^0.0.8",
- "common-path-prefix": "^3.0.0",
+ "ansi-html": "^0.0.9",
"core-js-pure": "^3.23.3",
"error-stack-parser": "^2.0.6",
- "find-up": "^5.0.0",
"html-entities": "^2.1.0",
"loader-utils": "^2.0.4",
- "schema-utils": "^3.0.0",
+ "schema-utils": "^4.2.0",
"source-map": "^0.7.3"
},
"engines": {
@@ -5176,7 +5254,7 @@
"sockjs-client": "^1.4.0",
"type-fest": ">=0.17.0 <5.0.0",
"webpack": ">=4.43.0 <6.0.0",
- "webpack-dev-server": "3.x || 4.x",
+ "webpack-dev-server": "3.x || 4.x || 5.x",
"webpack-hot-middleware": "2.x",
"webpack-plugin-serve": "0.x || 1.x"
},
@@ -5879,9 +5957,9 @@
}
},
"node_modules/@rushstack/eslint-patch": {
- "version": "1.7.2",
- "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.7.2.tgz",
- "integrity": "sha512-RbhOOTCNoCrbfkRyoXODZp75MlpiHMgbE5MEBZAnnnLyQNgrigEj4p0lzsMDyc1zVsJDLrivB58tgg3emX0eEA==",
+ "version": "1.10.3",
+ "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.10.3.tgz",
+ "integrity": "sha512-qC/xYId4NMebE6w/V33Fh9gWxLgURiNYgVNObbJl2LZv0GUUItCcCqC5axQSwRaAgaxl2mELq1rMzlswaQ0Zxg==",
"dev": true
},
"node_modules/@sinclair/typebox": {
@@ -5909,12 +5987,12 @@
}
},
"node_modules/@storybook/addon-actions": {
- "version": "7.6.17",
- "resolved": "https://registry.npmjs.org/@storybook/addon-actions/-/addon-actions-7.6.17.tgz",
- "integrity": "sha512-TBphs4v6LRfyTpFo/WINF0TkMaE3rrNog7wW5mbz6n0j8o53kDN4o9ZEcygSL5zQX43CAaghQTeDCss7ueG7ZQ==",
+ "version": "7.6.19",
+ "resolved": "https://registry.npmjs.org/@storybook/addon-actions/-/addon-actions-7.6.19.tgz",
+ "integrity": "sha512-ATLrA5QKFJt7tIAScRHz5T3eBQ+RG3jaZk08L7gChvyQZhei8knWwePElZ7GaWbCr9BgznQp1lQUUXq/UUblAQ==",
"dev": true,
"dependencies": {
- "@storybook/core-events": "7.6.17",
+ "@storybook/core-events": "7.6.19",
"@storybook/global": "^5.0.0",
"@types/uuid": "^9.0.1",
"dequal": "^2.0.2",
@@ -5926,23 +6004,10 @@
"url": "https://opencollective.com/storybook"
}
},
- "node_modules/@storybook/addon-actions/node_modules/@storybook/core-events": {
- "version": "7.6.17",
- "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.6.17.tgz",
- "integrity": "sha512-AriWMCm/k1cxlv10f+jZ1wavThTRpLaN3kY019kHWbYT9XgaSuLU67G7GPr3cGnJ6HuA6uhbzu8qtqVCd6OfXA==",
- "dev": true,
- "dependencies": {
- "ts-dedent": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
- }
- },
"node_modules/@storybook/addon-backgrounds": {
- "version": "7.6.17",
- "resolved": "https://registry.npmjs.org/@storybook/addon-backgrounds/-/addon-backgrounds-7.6.17.tgz",
- "integrity": "sha512-7dize7x8+37PH77kmt69b0xSaeDqOcZ4fpzW6+hk53hIaCVU26eGs4+j+743Xva31eOgZWNLupUhOpUDc6SqZw==",
+ "version": "7.6.19",
+ "resolved": "https://registry.npmjs.org/@storybook/addon-backgrounds/-/addon-backgrounds-7.6.19.tgz",
+ "integrity": "sha512-Nu3LAZODRSV2e5bOroKm/Jp6BIFzwu/nJxD5OvLWkkwNCh+vDXUFbbaVrZf5xRL+fHd9iLFPtWbJQpF/w7UsCw==",
"dev": true,
"dependencies": {
"@storybook/global": "^5.0.0",
@@ -5955,12 +6020,12 @@
}
},
"node_modules/@storybook/addon-controls": {
- "version": "7.6.17",
- "resolved": "https://registry.npmjs.org/@storybook/addon-controls/-/addon-controls-7.6.17.tgz",
- "integrity": "sha512-zR0aLaUF7FtV/nMRyfniFbCls/e0DAAoXACuOAUAwNAv0lbIS8AyZZiHSmKucCvziUQ6WceeCC7+du3C+9y0rQ==",
+ "version": "7.6.19",
+ "resolved": "https://registry.npmjs.org/@storybook/addon-controls/-/addon-controls-7.6.19.tgz",
+ "integrity": "sha512-cl6PCNEwihDjuWIUsKTyDNKk+/IE4J3oMbSY5AZV/9Z0jJbpMV2shVm5DMZm5LhCCVcu5obWcxCIa4FMIMJAMQ==",
"dev": true,
"dependencies": {
- "@storybook/blocks": "7.6.17",
+ "@storybook/blocks": "7.6.19",
"lodash": "^4.17.21",
"ts-dedent": "^2.0.0"
},
@@ -5997,26 +6062,26 @@
}
},
"node_modules/@storybook/addon-docs": {
- "version": "7.6.17",
- "resolved": "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-7.6.17.tgz",
- "integrity": "sha512-FKa4Mdy7nhgvEVZJHpMkHriDzpVHbohn87zv9NCL+Ctjs1iAmzGwxEm0culszyDS1HN2ToVoY0h8CSi2RSSZqA==",
+ "version": "7.6.19",
+ "resolved": "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-7.6.19.tgz",
+ "integrity": "sha512-nv+9SR/NOtM8Od2esOXHcg0NQT8Pk8BMUyGwZu5Q3MLI4JxNVEG65dY0IP2j6Knc4UtlvQTpM0f7m5xp4seHjQ==",
"dev": true,
"dependencies": {
"@jest/transform": "^29.3.1",
"@mdx-js/react": "^2.1.5",
- "@storybook/blocks": "7.6.17",
- "@storybook/client-logger": "7.6.17",
- "@storybook/components": "7.6.17",
- "@storybook/csf-plugin": "7.6.17",
- "@storybook/csf-tools": "7.6.17",
+ "@storybook/blocks": "7.6.19",
+ "@storybook/client-logger": "7.6.19",
+ "@storybook/components": "7.6.19",
+ "@storybook/csf-plugin": "7.6.19",
+ "@storybook/csf-tools": "7.6.19",
"@storybook/global": "^5.0.0",
"@storybook/mdx2-csf": "^1.0.0",
- "@storybook/node-logger": "7.6.17",
- "@storybook/postinstall": "7.6.17",
- "@storybook/preview-api": "7.6.17",
- "@storybook/react-dom-shim": "7.6.17",
- "@storybook/theming": "7.6.17",
- "@storybook/types": "7.6.17",
+ "@storybook/node-logger": "7.6.19",
+ "@storybook/postinstall": "7.6.19",
+ "@storybook/preview-api": "7.6.19",
+ "@storybook/react-dom-shim": "7.6.19",
+ "@storybook/theming": "7.6.19",
+ "@storybook/types": "7.6.19",
"fs-extra": "^11.1.0",
"remark-external-links": "^8.0.0",
"remark-slug": "^6.0.0",
@@ -6031,28 +6096,40 @@
"react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
}
},
- "node_modules/@storybook/addon-docs/node_modules/@storybook/channels": {
- "version": "7.6.17",
- "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-7.6.17.tgz",
- "integrity": "sha512-GFG40pzaSxk1hUr/J/TMqW5AFDDPUSu+HkeE/oqSWJbOodBOLJzHN6CReJS6y1DjYSZLNFt1jftPWZZInG/XUA==",
- "dev": true,
- "dependencies": {
- "@storybook/client-logger": "7.6.17",
- "@storybook/core-events": "7.6.17",
- "@storybook/global": "^5.0.0",
- "qs": "^6.10.0",
- "telejson": "^7.2.0",
- "tiny-invariant": "^1.3.1"
+ "node_modules/@storybook/addon-essentials": {
+ "version": "7.6.19",
+ "resolved": "https://registry.npmjs.org/@storybook/addon-essentials/-/addon-essentials-7.6.19.tgz",
+ "integrity": "sha512-SC33ZEQ5YaOt9wDkrdZmwQgqPWo9om/gqnyif06eug3SwrTe9JjO5iq1PIBfQodLD9MAxr9cwBvO0NG505oszQ==",
+ "dev": true,
+ "dependencies": {
+ "@storybook/addon-actions": "7.6.19",
+ "@storybook/addon-backgrounds": "7.6.19",
+ "@storybook/addon-controls": "7.6.19",
+ "@storybook/addon-docs": "7.6.19",
+ "@storybook/addon-highlight": "7.6.19",
+ "@storybook/addon-measure": "7.6.19",
+ "@storybook/addon-outline": "7.6.19",
+ "@storybook/addon-toolbars": "7.6.19",
+ "@storybook/addon-viewport": "7.6.19",
+ "@storybook/core-common": "7.6.19",
+ "@storybook/manager-api": "7.6.19",
+ "@storybook/node-logger": "7.6.19",
+ "@storybook/preview-api": "7.6.19",
+ "ts-dedent": "^2.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/storybook"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
+ "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
}
},
- "node_modules/@storybook/addon-docs/node_modules/@storybook/client-logger": {
- "version": "7.6.17",
- "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.6.17.tgz",
- "integrity": "sha512-6WBYqixAXNAXlSaBWwgljWpAu10tPRBJrcFvx2gPUne58EeMM20Gi/iHYBz2kMCY+JLAgeIH7ZxInqwO8vDwiQ==",
+ "node_modules/@storybook/addon-highlight": {
+ "version": "7.6.19",
+ "resolved": "https://registry.npmjs.org/@storybook/addon-highlight/-/addon-highlight-7.6.19.tgz",
+ "integrity": "sha512-/pApl0oiVU1CQ8xETRNDLDthMBjeTmvFnTRq8RJ9m0JYTrSsoyHDmj9zS4K1k9gReqijE7brslhP8d2tblBpNw==",
"dev": true,
"dependencies": {
"@storybook/global": "^5.0.0"
@@ -6062,116 +6139,79 @@
"url": "https://opencollective.com/storybook"
}
},
- "node_modules/@storybook/addon-docs/node_modules/@storybook/core-events": {
- "version": "7.6.17",
- "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.6.17.tgz",
- "integrity": "sha512-AriWMCm/k1cxlv10f+jZ1wavThTRpLaN3kY019kHWbYT9XgaSuLU67G7GPr3cGnJ6HuA6uhbzu8qtqVCd6OfXA==",
+ "node_modules/@storybook/addon-measure": {
+ "version": "7.6.19",
+ "resolved": "https://registry.npmjs.org/@storybook/addon-measure/-/addon-measure-7.6.19.tgz",
+ "integrity": "sha512-n+cfhVXXouBv9oQr3a77vvip5dTznaNoBDWMafP2ohauc8jBlAxeBwCjk5r3pyThMRIFCTG/ypZrhiJcSJT3bw==",
"dev": true,
"dependencies": {
- "ts-dedent": "^2.0.0"
+ "@storybook/global": "^5.0.0",
+ "tiny-invariant": "^1.3.1"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/storybook"
}
},
- "node_modules/@storybook/addon-docs/node_modules/@storybook/preview-api": {
- "version": "7.6.17",
- "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-7.6.17.tgz",
- "integrity": "sha512-wLfDdI9RWo1f2zzFe54yRhg+2YWyxLZvqdZnSQ45mTs4/7xXV5Wfbv3QNTtcdw8tT3U5KRTrN1mTfTCiRJc0Kw==",
+ "node_modules/@storybook/addon-outline": {
+ "version": "7.6.19",
+ "resolved": "https://registry.npmjs.org/@storybook/addon-outline/-/addon-outline-7.6.19.tgz",
+ "integrity": "sha512-Tt4MrfjK5j/Mdh8nJ8ccVyh78Dy7aiEPxO31YVvr5XUkge0pDi1PX328mHRDPur0i56NM8ssVbekWBZr+9MxlA==",
"dev": true,
"dependencies": {
- "@storybook/channels": "7.6.17",
- "@storybook/client-logger": "7.6.17",
- "@storybook/core-events": "7.6.17",
- "@storybook/csf": "^0.1.2",
"@storybook/global": "^5.0.0",
- "@storybook/types": "7.6.17",
- "@types/qs": "^6.9.5",
- "dequal": "^2.0.2",
- "lodash": "^4.17.21",
- "memoizerific": "^1.11.3",
- "qs": "^6.10.0",
- "synchronous-promise": "^2.0.15",
- "ts-dedent": "^2.0.0",
- "util-deprecate": "^1.0.2"
+ "ts-dedent": "^2.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/storybook"
}
},
- "node_modules/@storybook/addon-docs/node_modules/@storybook/theming": {
- "version": "7.6.17",
- "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-7.6.17.tgz",
- "integrity": "sha512-ZbaBt3KAbmBtfjNqgMY7wPMBshhSJlhodyMNQypv+95xLD/R+Az6aBYbpVAOygLaUQaQk4ar7H/Ww6lFIoiFbA==",
+ "node_modules/@storybook/addon-toolbars": {
+ "version": "7.6.19",
+ "resolved": "https://registry.npmjs.org/@storybook/addon-toolbars/-/addon-toolbars-7.6.19.tgz",
+ "integrity": "sha512-+qGbPP2Vo/HoPiS4EJopZ127HGculCV74Hkz6ot7ob6AkYdA1yLMPzWns/ZXNIWm6ab3jV+iq+mQCM/i1qJzvA==",
"dev": true,
- "dependencies": {
- "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0",
- "@storybook/client-logger": "7.6.17",
- "@storybook/global": "^5.0.0",
- "memoizerific": "^1.11.3"
- },
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/storybook"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
- "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
}
},
- "node_modules/@storybook/addon-docs/node_modules/@storybook/types": {
- "version": "7.6.17",
- "resolved": "https://registry.npmjs.org/@storybook/types/-/types-7.6.17.tgz",
- "integrity": "sha512-GRY0xEJQ0PrL7DY2qCNUdIfUOE0Gsue6N+GBJw9ku1IUDFLJRDOF+4Dx2BvYcVCPI5XPqdWKlEyZdMdKjiQN7Q==",
+ "node_modules/@storybook/addon-viewport": {
+ "version": "7.6.19",
+ "resolved": "https://registry.npmjs.org/@storybook/addon-viewport/-/addon-viewport-7.6.19.tgz",
+ "integrity": "sha512-OQQtJ2kYwImbvE9QiC3I3yR0O0EBgNjq+XSaSS4ixJrvUyesfuB7Lm7RkubhEEiP4yANi9OlbzsqZelmPOnk6w==",
"dev": true,
"dependencies": {
- "@storybook/channels": "7.6.17",
- "@types/babel__core": "^7.0.0",
- "@types/express": "^4.7.0",
- "file-system-cache": "2.3.0"
+ "memoizerific": "^1.11.3"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/storybook"
}
},
- "node_modules/@storybook/addon-essentials": {
+ "node_modules/@storybook/addons": {
"version": "7.6.17",
- "resolved": "https://registry.npmjs.org/@storybook/addon-essentials/-/addon-essentials-7.6.17.tgz",
- "integrity": "sha512-qlSpamxuYfT2taF953nC9QijGF2pSbg1ewMNpdwLTj16PTZvR/d8NCDMTJujI1bDwM2m18u8Yc43ibh5LEmxCw==",
- "dev": true,
- "dependencies": {
- "@storybook/addon-actions": "7.6.17",
- "@storybook/addon-backgrounds": "7.6.17",
- "@storybook/addon-controls": "7.6.17",
- "@storybook/addon-docs": "7.6.17",
- "@storybook/addon-highlight": "7.6.17",
- "@storybook/addon-measure": "7.6.17",
- "@storybook/addon-outline": "7.6.17",
- "@storybook/addon-toolbars": "7.6.17",
- "@storybook/addon-viewport": "7.6.17",
- "@storybook/core-common": "7.6.17",
+ "resolved": "https://registry.npmjs.org/@storybook/addons/-/addons-7.6.17.tgz",
+ "integrity": "sha512-Ok18Y698Ccyg++MoUNJNHY0cXUvo8ETFIRLJk1g9ElJ70j6kPgNnzW2pAtZkBNmswHtofZ7pT156cj96k/LgfA==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
"@storybook/manager-api": "7.6.17",
- "@storybook/node-logger": "7.6.17",
"@storybook/preview-api": "7.6.17",
- "ts-dedent": "^2.0.0"
+ "@storybook/types": "7.6.17"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/storybook"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
- "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
}
},
- "node_modules/@storybook/addon-essentials/node_modules/@storybook/channels": {
+ "node_modules/@storybook/addons/node_modules/@storybook/channels": {
"version": "7.6.17",
"resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-7.6.17.tgz",
"integrity": "sha512-GFG40pzaSxk1hUr/J/TMqW5AFDDPUSu+HkeE/oqSWJbOodBOLJzHN6CReJS6y1DjYSZLNFt1jftPWZZInG/XUA==",
"dev": true,
+ "peer": true,
"dependencies": {
"@storybook/client-logger": "7.6.17",
"@storybook/core-events": "7.6.17",
@@ -6185,11 +6225,12 @@
"url": "https://opencollective.com/storybook"
}
},
- "node_modules/@storybook/addon-essentials/node_modules/@storybook/client-logger": {
+ "node_modules/@storybook/addons/node_modules/@storybook/client-logger": {
"version": "7.6.17",
"resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.6.17.tgz",
"integrity": "sha512-6WBYqixAXNAXlSaBWwgljWpAu10tPRBJrcFvx2gPUne58EeMM20Gi/iHYBz2kMCY+JLAgeIH7ZxInqwO8vDwiQ==",
"dev": true,
+ "peer": true,
"dependencies": {
"@storybook/global": "^5.0.0"
},
@@ -6198,11 +6239,12 @@
"url": "https://opencollective.com/storybook"
}
},
- "node_modules/@storybook/addon-essentials/node_modules/@storybook/core-events": {
+ "node_modules/@storybook/addons/node_modules/@storybook/core-events": {
"version": "7.6.17",
"resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.6.17.tgz",
"integrity": "sha512-AriWMCm/k1cxlv10f+jZ1wavThTRpLaN3kY019kHWbYT9XgaSuLU67G7GPr3cGnJ6HuA6uhbzu8qtqVCd6OfXA==",
"dev": true,
+ "peer": true,
"dependencies": {
"ts-dedent": "^2.0.0"
},
@@ -6211,11 +6253,12 @@
"url": "https://opencollective.com/storybook"
}
},
- "node_modules/@storybook/addon-essentials/node_modules/@storybook/manager-api": {
+ "node_modules/@storybook/addons/node_modules/@storybook/manager-api": {
"version": "7.6.17",
"resolved": "https://registry.npmjs.org/@storybook/manager-api/-/manager-api-7.6.17.tgz",
"integrity": "sha512-IJIV1Yc6yw1dhCY4tReHCfBnUKDqEBnMyHp3mbXpsaHxnxJZrXO45WjRAZIKlQKhl/Ge1CrnznmHRCmYgqmrWg==",
"dev": true,
+ "peer": true,
"dependencies": {
"@storybook/channels": "7.6.17",
"@storybook/client-logger": "7.6.17",
@@ -6237,11 +6280,12 @@
"url": "https://opencollective.com/storybook"
}
},
- "node_modules/@storybook/addon-essentials/node_modules/@storybook/preview-api": {
+ "node_modules/@storybook/addons/node_modules/@storybook/preview-api": {
"version": "7.6.17",
"resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-7.6.17.tgz",
"integrity": "sha512-wLfDdI9RWo1f2zzFe54yRhg+2YWyxLZvqdZnSQ45mTs4/7xXV5Wfbv3QNTtcdw8tT3U5KRTrN1mTfTCiRJc0Kw==",
"dev": true,
+ "peer": true,
"dependencies": {
"@storybook/channels": "7.6.17",
"@storybook/client-logger": "7.6.17",
@@ -6263,11 +6307,12 @@
"url": "https://opencollective.com/storybook"
}
},
- "node_modules/@storybook/addon-essentials/node_modules/@storybook/router": {
+ "node_modules/@storybook/addons/node_modules/@storybook/router": {
"version": "7.6.17",
"resolved": "https://registry.npmjs.org/@storybook/router/-/router-7.6.17.tgz",
"integrity": "sha512-GnyC0j6Wi5hT4qRhSyT8NPtJfGmf82uZw97LQRWeyYu5gWEshUdM7aj40XlNiScd5cZDp0owO1idduVF2k2l2A==",
"dev": true,
+ "peer": true,
"dependencies": {
"@storybook/client-logger": "7.6.17",
"memoizerific": "^1.11.3",
@@ -6278,11 +6323,12 @@
"url": "https://opencollective.com/storybook"
}
},
- "node_modules/@storybook/addon-essentials/node_modules/@storybook/theming": {
+ "node_modules/@storybook/addons/node_modules/@storybook/theming": {
"version": "7.6.17",
"resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-7.6.17.tgz",
"integrity": "sha512-ZbaBt3KAbmBtfjNqgMY7wPMBshhSJlhodyMNQypv+95xLD/R+Az6aBYbpVAOygLaUQaQk4ar7H/Ww6lFIoiFbA==",
"dev": true,
+ "peer": true,
"dependencies": {
"@emotion/use-insertion-effect-with-fallbacks": "^1.0.0",
"@storybook/client-logger": "7.6.17",
@@ -6298,11 +6344,12 @@
"react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
}
},
- "node_modules/@storybook/addon-essentials/node_modules/@storybook/types": {
+ "node_modules/@storybook/addons/node_modules/@storybook/types": {
"version": "7.6.17",
"resolved": "https://registry.npmjs.org/@storybook/types/-/types-7.6.17.tgz",
"integrity": "sha512-GRY0xEJQ0PrL7DY2qCNUdIfUOE0Gsue6N+GBJw9ku1IUDFLJRDOF+4Dx2BvYcVCPI5XPqdWKlEyZdMdKjiQN7Q==",
"dev": true,
+ "peer": true,
"dependencies": {
"@storybook/channels": "7.6.17",
"@types/babel__core": "^7.0.0",
@@ -6314,103 +6361,23 @@
"url": "https://opencollective.com/storybook"
}
},
- "node_modules/@storybook/addon-highlight": {
- "version": "7.6.17",
- "resolved": "https://registry.npmjs.org/@storybook/addon-highlight/-/addon-highlight-7.6.17.tgz",
- "integrity": "sha512-R1yBPUUqGn+60aJakn8q+5Zt34E/gU3n3VmgPdryP0LJUdZ5q1/RZShoVDV+yYQ40htMH6oaCv3OyyPzFAGJ6A==",
- "dev": true,
- "dependencies": {
- "@storybook/global": "^5.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
- }
- },
- "node_modules/@storybook/addon-measure": {
- "version": "7.6.17",
- "resolved": "https://registry.npmjs.org/@storybook/addon-measure/-/addon-measure-7.6.17.tgz",
- "integrity": "sha512-O5vnHZNkduvZ95jf1UssbOl6ivIxzl5tv+4EpScPYId7w700bxWsJH+QX7ip6KlrCf2o3iUhmPe8bm05ghG2KA==",
- "dev": true,
- "dependencies": {
- "@storybook/global": "^5.0.0",
- "tiny-invariant": "^1.3.1"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
- }
- },
- "node_modules/@storybook/addon-outline": {
- "version": "7.6.17",
- "resolved": "https://registry.npmjs.org/@storybook/addon-outline/-/addon-outline-7.6.17.tgz",
- "integrity": "sha512-9o9JXDsYjNaDgz/cY5+jv694+aik/1aiRGGvsCv68e1p/ob0glkGKav4lnJe2VJqD+gCmaARoD8GOJlhoQl8JQ==",
- "dev": true,
- "dependencies": {
- "@storybook/global": "^5.0.0",
- "ts-dedent": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
- }
- },
- "node_modules/@storybook/addon-toolbars": {
- "version": "7.6.17",
- "resolved": "https://registry.npmjs.org/@storybook/addon-toolbars/-/addon-toolbars-7.6.17.tgz",
- "integrity": "sha512-UMrchbUHiyWrh6WuGnpy34Jqzkx/63B+MSgb3CW7YsQaXz64kE0Rol0TNSznnB+mYXplcqH+ndI4r4kFsmgwDg==",
- "dev": true,
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
- }
- },
- "node_modules/@storybook/addon-viewport": {
- "version": "7.6.17",
- "resolved": "https://registry.npmjs.org/@storybook/addon-viewport/-/addon-viewport-7.6.17.tgz",
- "integrity": "sha512-sA0QCcf4QAMixWvn8uvRYPfkKCSl6JajJaAspoPqXSxHEpK7uwOlpg3kqFU5XJJPXD0X957M+ONgNvBzYqSpEw==",
- "dev": true,
- "dependencies": {
- "memoizerific": "^1.11.3"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
- }
- },
- "node_modules/@storybook/addons": {
- "version": "7.6.12",
- "resolved": "https://registry.npmjs.org/@storybook/addons/-/addons-7.6.12.tgz",
- "integrity": "sha512-q1oN9TMdtpFqwb/oKZfbjcfGj/q629vJjhV0Q5SP9y89rBbhyxLf3U4miATQdzPo9lC3WHvaNm5ME8BjNkqO/Q==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@storybook/manager-api": "7.6.12",
- "@storybook/preview-api": "7.6.12",
- "@storybook/types": "7.6.12"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
- }
- },
"node_modules/@storybook/blocks": {
- "version": "7.6.17",
- "resolved": "https://registry.npmjs.org/@storybook/blocks/-/blocks-7.6.17.tgz",
- "integrity": "sha512-PsNVoe0bX1mMn4Kk3nbKZ0ItDZZ0YJnYAFJ6toAbsyBAbgzg1sce88sQinzvbn58/RT9MPKeWMPB45ZS7ggiNg==",
+ "version": "7.6.19",
+ "resolved": "https://registry.npmjs.org/@storybook/blocks/-/blocks-7.6.19.tgz",
+ "integrity": "sha512-/c/bVQRmyRPoviJhPrFdLfubRcrnZWTwkjxsCvrOTJ/UDOyEl0t/H8yY1mGq7KWWTdbIznnZWhAIofHnH4/Esw==",
"dev": true,
"dependencies": {
- "@storybook/channels": "7.6.17",
- "@storybook/client-logger": "7.6.17",
- "@storybook/components": "7.6.17",
- "@storybook/core-events": "7.6.17",
+ "@storybook/channels": "7.6.19",
+ "@storybook/client-logger": "7.6.19",
+ "@storybook/components": "7.6.19",
+ "@storybook/core-events": "7.6.19",
"@storybook/csf": "^0.1.2",
- "@storybook/docs-tools": "7.6.17",
+ "@storybook/docs-tools": "7.6.19",
"@storybook/global": "^5.0.0",
- "@storybook/manager-api": "7.6.17",
- "@storybook/preview-api": "7.6.17",
- "@storybook/theming": "7.6.17",
- "@storybook/types": "7.6.17",
+ "@storybook/manager-api": "7.6.19",
+ "@storybook/preview-api": "7.6.19",
+ "@storybook/theming": "7.6.19",
+ "@storybook/types": "7.6.19",
"@types/lodash": "^4.14.167",
"color-convert": "^2.0.1",
"dequal": "^2.0.2",
@@ -6433,528 +6400,365 @@
"react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
}
},
- "node_modules/@storybook/blocks/node_modules/@storybook/channels": {
- "version": "7.6.17",
- "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-7.6.17.tgz",
- "integrity": "sha512-GFG40pzaSxk1hUr/J/TMqW5AFDDPUSu+HkeE/oqSWJbOodBOLJzHN6CReJS6y1DjYSZLNFt1jftPWZZInG/XUA==",
+ "node_modules/@storybook/builder-manager": {
+ "version": "7.6.19",
+ "resolved": "https://registry.npmjs.org/@storybook/builder-manager/-/builder-manager-7.6.19.tgz",
+ "integrity": "sha512-Dt5OLh97xeWh4h2mk9uG0SbCxBKHPhIiHLHAKEIDzIZBdwUhuyncVNDPHW2NlXM+S7U0/iKs2tw05waqh2lHvg==",
"dev": true,
"dependencies": {
- "@storybook/client-logger": "7.6.17",
- "@storybook/core-events": "7.6.17",
- "@storybook/global": "^5.0.0",
- "qs": "^6.10.0",
- "telejson": "^7.2.0",
- "tiny-invariant": "^1.3.1"
+ "@fal-works/esbuild-plugin-global-externals": "^2.1.2",
+ "@storybook/core-common": "7.6.19",
+ "@storybook/manager": "7.6.19",
+ "@storybook/node-logger": "7.6.19",
+ "@types/ejs": "^3.1.1",
+ "@types/find-cache-dir": "^3.2.1",
+ "@yarnpkg/esbuild-plugin-pnp": "^3.0.0-rc.10",
+ "browser-assert": "^1.2.1",
+ "ejs": "^3.1.8",
+ "esbuild": "^0.18.0",
+ "esbuild-plugin-alias": "^0.2.1",
+ "express": "^4.17.3",
+ "find-cache-dir": "^3.0.0",
+ "fs-extra": "^11.1.0",
+ "process": "^0.11.10",
+ "util": "^0.12.4"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/storybook"
}
},
- "node_modules/@storybook/blocks/node_modules/@storybook/client-logger": {
- "version": "7.6.17",
- "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.6.17.tgz",
- "integrity": "sha512-6WBYqixAXNAXlSaBWwgljWpAu10tPRBJrcFvx2gPUne58EeMM20Gi/iHYBz2kMCY+JLAgeIH7ZxInqwO8vDwiQ==",
+ "node_modules/@storybook/builder-webpack5": {
+ "version": "7.6.19",
+ "resolved": "https://registry.npmjs.org/@storybook/builder-webpack5/-/builder-webpack5-7.6.19.tgz",
+ "integrity": "sha512-PeP66orYG0tWoWeOGNcCDKtk/kpDBFfosViCkd0Pxb6c2MtvjOuHSGWGB/9AI3hjodsoe5p9xo/SqGf7lDzpoA==",
"dev": true,
"dependencies": {
- "@storybook/global": "^5.0.0"
+ "@babel/core": "^7.23.2",
+ "@storybook/channels": "7.6.19",
+ "@storybook/client-logger": "7.6.19",
+ "@storybook/core-common": "7.6.19",
+ "@storybook/core-events": "7.6.19",
+ "@storybook/core-webpack": "7.6.19",
+ "@storybook/node-logger": "7.6.19",
+ "@storybook/preview": "7.6.19",
+ "@storybook/preview-api": "7.6.19",
+ "@swc/core": "^1.3.82",
+ "@types/node": "^18.0.0",
+ "@types/semver": "^7.3.4",
+ "babel-loader": "^9.0.0",
+ "browser-assert": "^1.2.1",
+ "case-sensitive-paths-webpack-plugin": "^2.4.0",
+ "cjs-module-lexer": "^1.2.3",
+ "constants-browserify": "^1.0.0",
+ "css-loader": "^6.7.1",
+ "es-module-lexer": "^1.4.1",
+ "express": "^4.17.3",
+ "fork-ts-checker-webpack-plugin": "^8.0.0",
+ "fs-extra": "^11.1.0",
+ "html-webpack-plugin": "^5.5.0",
+ "magic-string": "^0.30.5",
+ "path-browserify": "^1.0.1",
+ "process": "^0.11.10",
+ "semver": "^7.3.7",
+ "style-loader": "^3.3.1",
+ "swc-loader": "^0.2.3",
+ "terser-webpack-plugin": "^5.3.1",
+ "ts-dedent": "^2.0.0",
+ "url": "^0.11.0",
+ "util": "^0.12.4",
+ "util-deprecate": "^1.0.2",
+ "webpack": "5",
+ "webpack-dev-middleware": "^6.1.1",
+ "webpack-hot-middleware": "^2.25.1",
+ "webpack-virtual-modules": "^0.5.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/storybook"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
}
},
- "node_modules/@storybook/blocks/node_modules/@storybook/core-events": {
- "version": "7.6.17",
- "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.6.17.tgz",
- "integrity": "sha512-AriWMCm/k1cxlv10f+jZ1wavThTRpLaN3kY019kHWbYT9XgaSuLU67G7GPr3cGnJ6HuA6uhbzu8qtqVCd6OfXA==",
+ "node_modules/@storybook/builder-webpack5/node_modules/@types/node": {
+ "version": "18.19.34",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.34.tgz",
+ "integrity": "sha512-eXF4pfBNV5DAMKGbI02NnDtWrQ40hAN558/2vvS4gMpMIxaf6JmD7YjnZbq0Q9TDSSkKBamime8ewRoomHdt4g==",
"dev": true,
"dependencies": {
- "ts-dedent": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
+ "undici-types": "~5.26.4"
}
},
- "node_modules/@storybook/blocks/node_modules/@storybook/manager-api": {
- "version": "7.6.17",
- "resolved": "https://registry.npmjs.org/@storybook/manager-api/-/manager-api-7.6.17.tgz",
- "integrity": "sha512-IJIV1Yc6yw1dhCY4tReHCfBnUKDqEBnMyHp3mbXpsaHxnxJZrXO45WjRAZIKlQKhl/Ge1CrnznmHRCmYgqmrWg==",
+ "node_modules/@storybook/channels": {
+ "version": "7.6.19",
+ "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-7.6.19.tgz",
+ "integrity": "sha512-2JGh+i95GwjtjqWqhtEh15jM5ifwbRGmXeFqkY7dpdHH50EEWafYHr2mg3opK3heVDwg0rJ/VBptkmshloXuvA==",
"dev": true,
"dependencies": {
- "@storybook/channels": "7.6.17",
- "@storybook/client-logger": "7.6.17",
- "@storybook/core-events": "7.6.17",
- "@storybook/csf": "^0.1.2",
+ "@storybook/client-logger": "7.6.19",
+ "@storybook/core-events": "7.6.19",
"@storybook/global": "^5.0.0",
- "@storybook/router": "7.6.17",
- "@storybook/theming": "7.6.17",
- "@storybook/types": "7.6.17",
- "dequal": "^2.0.2",
- "lodash": "^4.17.21",
- "memoizerific": "^1.11.3",
- "store2": "^2.14.2",
+ "qs": "^6.10.0",
"telejson": "^7.2.0",
- "ts-dedent": "^2.0.0"
+ "tiny-invariant": "^1.3.1"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/storybook"
}
},
- "node_modules/@storybook/blocks/node_modules/@storybook/preview-api": {
- "version": "7.6.17",
- "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-7.6.17.tgz",
- "integrity": "sha512-wLfDdI9RWo1f2zzFe54yRhg+2YWyxLZvqdZnSQ45mTs4/7xXV5Wfbv3QNTtcdw8tT3U5KRTrN1mTfTCiRJc0Kw==",
+ "node_modules/@storybook/cli": {
+ "version": "7.6.19",
+ "resolved": "https://registry.npmjs.org/@storybook/cli/-/cli-7.6.19.tgz",
+ "integrity": "sha512-7OVy7nPgkLfgivv6/dmvoyU6pKl9EzWFk+g9izyQHiM/jS8jOiEyn6akG8Ebj6k5pWslo5lgiXUSW+cEEZUnqQ==",
"dev": true,
"dependencies": {
- "@storybook/channels": "7.6.17",
- "@storybook/client-logger": "7.6.17",
- "@storybook/core-events": "7.6.17",
- "@storybook/csf": "^0.1.2",
- "@storybook/global": "^5.0.0",
- "@storybook/types": "7.6.17",
- "@types/qs": "^6.9.5",
- "dequal": "^2.0.2",
- "lodash": "^4.17.21",
- "memoizerific": "^1.11.3",
- "qs": "^6.10.0",
- "synchronous-promise": "^2.0.15",
+ "@babel/core": "^7.23.2",
+ "@babel/preset-env": "^7.23.2",
+ "@babel/types": "^7.23.0",
+ "@ndelangen/get-tarball": "^3.0.7",
+ "@storybook/codemod": "7.6.19",
+ "@storybook/core-common": "7.6.19",
+ "@storybook/core-events": "7.6.19",
+ "@storybook/core-server": "7.6.19",
+ "@storybook/csf-tools": "7.6.19",
+ "@storybook/node-logger": "7.6.19",
+ "@storybook/telemetry": "7.6.19",
+ "@storybook/types": "7.6.19",
+ "@types/semver": "^7.3.4",
+ "@yarnpkg/fslib": "2.10.3",
+ "@yarnpkg/libzip": "2.3.0",
+ "chalk": "^4.1.0",
+ "commander": "^6.2.1",
+ "cross-spawn": "^7.0.3",
+ "detect-indent": "^6.1.0",
+ "envinfo": "^7.7.3",
+ "execa": "^5.0.0",
+ "express": "^4.17.3",
+ "find-up": "^5.0.0",
+ "fs-extra": "^11.1.0",
+ "get-npm-tarball-url": "^2.0.3",
+ "get-port": "^5.1.1",
+ "giget": "^1.0.0",
+ "globby": "^11.0.2",
+ "jscodeshift": "^0.15.1",
+ "leven": "^3.1.0",
+ "ora": "^5.4.1",
+ "prettier": "^2.8.0",
+ "prompts": "^2.4.0",
+ "puppeteer-core": "^2.1.1",
+ "read-pkg-up": "^7.0.1",
+ "semver": "^7.3.7",
+ "strip-json-comments": "^3.0.1",
+ "tempy": "^1.0.1",
"ts-dedent": "^2.0.0",
"util-deprecate": "^1.0.2"
},
+ "bin": {
+ "getstorybook": "bin/index.js",
+ "sb": "bin/index.js"
+ },
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/storybook"
}
},
- "node_modules/@storybook/blocks/node_modules/@storybook/router": {
- "version": "7.6.17",
- "resolved": "https://registry.npmjs.org/@storybook/router/-/router-7.6.17.tgz",
- "integrity": "sha512-GnyC0j6Wi5hT4qRhSyT8NPtJfGmf82uZw97LQRWeyYu5gWEshUdM7aj40XlNiScd5cZDp0owO1idduVF2k2l2A==",
+ "node_modules/@storybook/cli/node_modules/agent-base": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-5.1.1.tgz",
+ "integrity": "sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g==",
"dev": true,
- "dependencies": {
- "@storybook/client-logger": "7.6.17",
- "memoizerific": "^1.11.3",
- "qs": "^6.10.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
+ "engines": {
+ "node": ">= 6.0.0"
}
},
- "node_modules/@storybook/blocks/node_modules/@storybook/theming": {
- "version": "7.6.17",
- "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-7.6.17.tgz",
- "integrity": "sha512-ZbaBt3KAbmBtfjNqgMY7wPMBshhSJlhodyMNQypv+95xLD/R+Az6aBYbpVAOygLaUQaQk4ar7H/Ww6lFIoiFbA==",
+ "node_modules/@storybook/cli/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
"dependencies": {
- "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0",
- "@storybook/client-logger": "7.6.17",
- "@storybook/global": "^5.0.0",
- "memoizerific": "^1.11.3"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
+ "color-convert": "^2.0.1"
},
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
- "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
- }
- },
- "node_modules/@storybook/blocks/node_modules/@storybook/types": {
- "version": "7.6.17",
- "resolved": "https://registry.npmjs.org/@storybook/types/-/types-7.6.17.tgz",
- "integrity": "sha512-GRY0xEJQ0PrL7DY2qCNUdIfUOE0Gsue6N+GBJw9ku1IUDFLJRDOF+4Dx2BvYcVCPI5XPqdWKlEyZdMdKjiQN7Q==",
- "dev": true,
- "dependencies": {
- "@storybook/channels": "7.6.17",
- "@types/babel__core": "^7.0.0",
- "@types/express": "^4.7.0",
- "file-system-cache": "2.3.0"
+ "engines": {
+ "node": ">=8"
},
"funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
- "node_modules/@storybook/builder-manager": {
- "version": "7.6.17",
- "resolved": "https://registry.npmjs.org/@storybook/builder-manager/-/builder-manager-7.6.17.tgz",
- "integrity": "sha512-Sj8hcDYiPCCMfeLzus37czl0zdrAxAz4IyYam2jBjVymrIrcDAFyL1OCZvnq33ft179QYQWhUs9qwzVmlR/ZWg==",
+ "node_modules/@storybook/cli/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
"dev": true,
"dependencies": {
- "@fal-works/esbuild-plugin-global-externals": "^2.1.2",
- "@storybook/core-common": "7.6.17",
- "@storybook/manager": "7.6.17",
- "@storybook/node-logger": "7.6.17",
- "@types/ejs": "^3.1.1",
- "@types/find-cache-dir": "^3.2.1",
- "@yarnpkg/esbuild-plugin-pnp": "^3.0.0-rc.10",
- "browser-assert": "^1.2.1",
- "ejs": "^3.1.8",
- "esbuild": "^0.18.0",
- "esbuild-plugin-alias": "^0.2.1",
- "express": "^4.17.3",
- "find-cache-dir": "^3.0.0",
- "fs-extra": "^11.1.0",
- "process": "^0.11.10",
- "util": "^0.12.4"
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
},
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
- }
- },
- "node_modules/@storybook/builder-webpack5": {
- "version": "7.6.17",
- "resolved": "https://registry.npmjs.org/@storybook/builder-webpack5/-/builder-webpack5-7.6.17.tgz",
- "integrity": "sha512-GMaBd8/RzivuAmWrYSt9Rga3j8WLcu5LCMYiPVs+XKXsKAC8lTkV0WRWh8Nk6wTmfzsRQ2acwFjSG5oE4ClZKA==",
- "dev": true,
- "dependencies": {
- "@babel/core": "^7.23.2",
- "@storybook/channels": "7.6.17",
- "@storybook/client-logger": "7.6.17",
- "@storybook/core-common": "7.6.17",
- "@storybook/core-events": "7.6.17",
- "@storybook/core-webpack": "7.6.17",
- "@storybook/node-logger": "7.6.17",
- "@storybook/preview": "7.6.17",
- "@storybook/preview-api": "7.6.17",
- "@swc/core": "^1.3.82",
- "@types/node": "^18.0.0",
- "@types/semver": "^7.3.4",
- "babel-loader": "^9.0.0",
- "browser-assert": "^1.2.1",
- "case-sensitive-paths-webpack-plugin": "^2.4.0",
- "cjs-module-lexer": "^1.2.3",
- "constants-browserify": "^1.0.0",
- "css-loader": "^6.7.1",
- "es-module-lexer": "^1.4.1",
- "express": "^4.17.3",
- "fork-ts-checker-webpack-plugin": "^8.0.0",
- "fs-extra": "^11.1.0",
- "html-webpack-plugin": "^5.5.0",
- "magic-string": "^0.30.5",
- "path-browserify": "^1.0.1",
- "process": "^0.11.10",
- "semver": "^7.3.7",
- "style-loader": "^3.3.1",
- "swc-loader": "^0.2.3",
- "terser-webpack-plugin": "^5.3.1",
- "ts-dedent": "^2.0.0",
- "url": "^0.11.0",
- "util": "^0.12.4",
- "util-deprecate": "^1.0.2",
- "webpack": "5",
- "webpack-dev-middleware": "^6.1.1",
- "webpack-hot-middleware": "^2.25.1",
- "webpack-virtual-modules": "^0.5.0"
+ "engines": {
+ "node": ">=10"
},
"funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
+ "url": "https://github.com/chalk/chalk?sponsor=1"
}
},
- "node_modules/@storybook/builder-webpack5/node_modules/@storybook/channels": {
- "version": "7.6.17",
- "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-7.6.17.tgz",
- "integrity": "sha512-GFG40pzaSxk1hUr/J/TMqW5AFDDPUSu+HkeE/oqSWJbOodBOLJzHN6CReJS6y1DjYSZLNFt1jftPWZZInG/XUA==",
+ "node_modules/@storybook/cli/node_modules/commander": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz",
+ "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==",
"dev": true,
- "dependencies": {
- "@storybook/client-logger": "7.6.17",
- "@storybook/core-events": "7.6.17",
- "@storybook/global": "^5.0.0",
- "qs": "^6.10.0",
- "telejson": "^7.2.0",
- "tiny-invariant": "^1.3.1"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
+ "engines": {
+ "node": ">= 6"
}
},
- "node_modules/@storybook/builder-webpack5/node_modules/@storybook/client-logger": {
- "version": "7.6.17",
- "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.6.17.tgz",
- "integrity": "sha512-6WBYqixAXNAXlSaBWwgljWpAu10tPRBJrcFvx2gPUne58EeMM20Gi/iHYBz2kMCY+JLAgeIH7ZxInqwO8vDwiQ==",
+ "node_modules/@storybook/cli/node_modules/extract-zip": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.7.0.tgz",
+ "integrity": "sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA==",
"dev": true,
"dependencies": {
- "@storybook/global": "^5.0.0"
+ "concat-stream": "^1.6.2",
+ "debug": "^2.6.9",
+ "mkdirp": "^0.5.4",
+ "yauzl": "^2.10.0"
},
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
+ "bin": {
+ "extract-zip": "cli.js"
}
},
- "node_modules/@storybook/builder-webpack5/node_modules/@storybook/core-events": {
- "version": "7.6.17",
- "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.6.17.tgz",
- "integrity": "sha512-AriWMCm/k1cxlv10f+jZ1wavThTRpLaN3kY019kHWbYT9XgaSuLU67G7GPr3cGnJ6HuA6uhbzu8qtqVCd6OfXA==",
+ "node_modules/@storybook/cli/node_modules/extract-zip/node_modules/debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
"dev": true,
"dependencies": {
- "ts-dedent": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
+ "ms": "2.0.0"
}
},
- "node_modules/@storybook/builder-webpack5/node_modules/@storybook/preview-api": {
- "version": "7.6.17",
- "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-7.6.17.tgz",
- "integrity": "sha512-wLfDdI9RWo1f2zzFe54yRhg+2YWyxLZvqdZnSQ45mTs4/7xXV5Wfbv3QNTtcdw8tT3U5KRTrN1mTfTCiRJc0Kw==",
+ "node_modules/@storybook/cli/node_modules/glob": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "deprecated": "Glob versions prior to v9 are no longer supported",
"dev": true,
"dependencies": {
- "@storybook/channels": "7.6.17",
- "@storybook/client-logger": "7.6.17",
- "@storybook/core-events": "7.6.17",
- "@storybook/csf": "^0.1.2",
- "@storybook/global": "^5.0.0",
- "@storybook/types": "7.6.17",
- "@types/qs": "^6.9.5",
- "dequal": "^2.0.2",
- "lodash": "^4.17.21",
- "memoizerific": "^1.11.3",
- "qs": "^6.10.0",
- "synchronous-promise": "^2.0.15",
- "ts-dedent": "^2.0.0",
- "util-deprecate": "^1.0.2"
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
},
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
- }
- },
- "node_modules/@storybook/builder-webpack5/node_modules/@storybook/types": {
- "version": "7.6.17",
- "resolved": "https://registry.npmjs.org/@storybook/types/-/types-7.6.17.tgz",
- "integrity": "sha512-GRY0xEJQ0PrL7DY2qCNUdIfUOE0Gsue6N+GBJw9ku1IUDFLJRDOF+4Dx2BvYcVCPI5XPqdWKlEyZdMdKjiQN7Q==",
- "dev": true,
- "dependencies": {
- "@storybook/channels": "7.6.17",
- "@types/babel__core": "^7.0.0",
- "@types/express": "^4.7.0",
- "file-system-cache": "2.3.0"
+ "engines": {
+ "node": "*"
},
"funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
+ "url": "https://github.com/sponsors/isaacs"
}
},
- "node_modules/@storybook/builder-webpack5/node_modules/@types/node": {
- "version": "18.19.14",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.14.tgz",
- "integrity": "sha512-EnQ4Us2rmOS64nHDWr0XqAD8DsO6f3XR6lf9UIIrZQpUzPVdN/oPuEzfDWNHSyXLvoGgjuEm/sPwFGSSs35Wtg==",
+ "node_modules/@storybook/cli/node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true,
- "dependencies": {
- "undici-types": "~5.26.4"
+ "engines": {
+ "node": ">=8"
}
},
- "node_modules/@storybook/channels": {
- "version": "7.6.12",
- "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-7.6.12.tgz",
- "integrity": "sha512-TaPl5Y3lOoVi5kTLgKNRX8xh2sUPekH0Id1l4Ymw+lpgriEY6r60bmkZLysLG1GhlskpQ/da2+S2ap2ht8P2TQ==",
+ "node_modules/@storybook/cli/node_modules/https-proxy-agent": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz",
+ "integrity": "sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg==",
"dev": true,
- "peer": true,
"dependencies": {
- "@storybook/client-logger": "7.6.12",
- "@storybook/core-events": "7.6.12",
- "@storybook/global": "^5.0.0",
- "qs": "^6.10.0",
- "telejson": "^7.2.0",
- "tiny-invariant": "^1.3.1"
+ "agent-base": "5",
+ "debug": "4"
},
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
+ "engines": {
+ "node": ">= 6.0.0"
}
},
- "node_modules/@storybook/cli": {
- "version": "7.6.17",
- "resolved": "https://registry.npmjs.org/@storybook/cli/-/cli-7.6.17.tgz",
- "integrity": "sha512-1sCo+nCqyR+nKfTcEidVu8XzNoECC7Y1l+uW38/r7s2f/TdDorXaIGAVrpjbSaXSoQpx5DxYJVaKCcQuOgqwcA==",
+ "node_modules/@storybook/cli/node_modules/mime": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz",
+ "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==",
"dev": true,
- "dependencies": {
- "@babel/core": "^7.23.2",
- "@babel/preset-env": "^7.23.2",
- "@babel/types": "^7.23.0",
- "@ndelangen/get-tarball": "^3.0.7",
- "@storybook/codemod": "7.6.17",
- "@storybook/core-common": "7.6.17",
- "@storybook/core-events": "7.6.17",
- "@storybook/core-server": "7.6.17",
- "@storybook/csf-tools": "7.6.17",
- "@storybook/node-logger": "7.6.17",
- "@storybook/telemetry": "7.6.17",
- "@storybook/types": "7.6.17",
- "@types/semver": "^7.3.4",
- "@yarnpkg/fslib": "2.10.3",
- "@yarnpkg/libzip": "2.3.0",
- "chalk": "^4.1.0",
- "commander": "^6.2.1",
- "cross-spawn": "^7.0.3",
- "detect-indent": "^6.1.0",
- "envinfo": "^7.7.3",
- "execa": "^5.0.0",
- "express": "^4.17.3",
- "find-up": "^5.0.0",
- "fs-extra": "^11.1.0",
- "get-npm-tarball-url": "^2.0.3",
- "get-port": "^5.1.1",
- "giget": "^1.0.0",
- "globby": "^11.0.2",
- "jscodeshift": "^0.15.1",
- "leven": "^3.1.0",
- "ora": "^5.4.1",
- "prettier": "^2.8.0",
- "prompts": "^2.4.0",
- "puppeteer-core": "^2.1.1",
- "read-pkg-up": "^7.0.1",
- "semver": "^7.3.7",
- "strip-json-comments": "^3.0.1",
- "tempy": "^1.0.1",
- "ts-dedent": "^2.0.0",
- "util-deprecate": "^1.0.2"
- },
"bin": {
- "getstorybook": "bin/index.js",
- "sb": "bin/index.js"
+ "mime": "cli.js"
},
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
+ "engines": {
+ "node": ">=4.0.0"
}
},
- "node_modules/@storybook/cli/node_modules/@storybook/channels": {
- "version": "7.6.17",
- "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-7.6.17.tgz",
- "integrity": "sha512-GFG40pzaSxk1hUr/J/TMqW5AFDDPUSu+HkeE/oqSWJbOodBOLJzHN6CReJS6y1DjYSZLNFt1jftPWZZInG/XUA==",
+ "node_modules/@storybook/cli/node_modules/mkdirp": {
+ "version": "0.5.6",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
+ "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
"dev": true,
"dependencies": {
- "@storybook/client-logger": "7.6.17",
- "@storybook/core-events": "7.6.17",
- "@storybook/global": "^5.0.0",
- "qs": "^6.10.0",
- "telejson": "^7.2.0",
- "tiny-invariant": "^1.3.1"
+ "minimist": "^1.2.6"
},
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
+ "bin": {
+ "mkdirp": "bin/cmd.js"
}
},
- "node_modules/@storybook/cli/node_modules/@storybook/client-logger": {
- "version": "7.6.17",
- "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.6.17.tgz",
- "integrity": "sha512-6WBYqixAXNAXlSaBWwgljWpAu10tPRBJrcFvx2gPUne58EeMM20Gi/iHYBz2kMCY+JLAgeIH7ZxInqwO8vDwiQ==",
- "dev": true,
- "dependencies": {
- "@storybook/global": "^5.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
- }
+ "node_modules/@storybook/cli/node_modules/ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
+ "dev": true
},
- "node_modules/@storybook/cli/node_modules/@storybook/core-events": {
- "version": "7.6.17",
- "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.6.17.tgz",
- "integrity": "sha512-AriWMCm/k1cxlv10f+jZ1wavThTRpLaN3kY019kHWbYT9XgaSuLU67G7GPr3cGnJ6HuA6uhbzu8qtqVCd6OfXA==",
+ "node_modules/@storybook/cli/node_modules/prettier": {
+ "version": "2.8.8",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz",
+ "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==",
"dev": true,
- "dependencies": {
- "ts-dedent": "^2.0.0"
+ "bin": {
+ "prettier": "bin-prettier.js"
},
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
- }
- },
- "node_modules/@storybook/cli/node_modules/@storybook/types": {
- "version": "7.6.17",
- "resolved": "https://registry.npmjs.org/@storybook/types/-/types-7.6.17.tgz",
- "integrity": "sha512-GRY0xEJQ0PrL7DY2qCNUdIfUOE0Gsue6N+GBJw9ku1IUDFLJRDOF+4Dx2BvYcVCPI5XPqdWKlEyZdMdKjiQN7Q==",
- "dev": true,
- "dependencies": {
- "@storybook/channels": "7.6.17",
- "@types/babel__core": "^7.0.0",
- "@types/express": "^4.7.0",
- "file-system-cache": "2.3.0"
+ "engines": {
+ "node": ">=10.13.0"
},
"funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
+ "url": "https://github.com/prettier/prettier?sponsor=1"
}
},
- "node_modules/@storybook/cli/node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "node_modules/@storybook/cli/node_modules/puppeteer-core": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-2.1.1.tgz",
+ "integrity": "sha512-n13AWriBMPYxnpbb6bnaY5YoY6rGj8vPLrz6CZF3o0qJNEwlcfJVxBzYZ0NJsQ21UbdJoijPCDrM++SUVEz7+w==",
"dev": true,
"dependencies": {
- "color-convert": "^2.0.1"
+ "@types/mime-types": "^2.1.0",
+ "debug": "^4.1.0",
+ "extract-zip": "^1.6.6",
+ "https-proxy-agent": "^4.0.0",
+ "mime": "^2.0.3",
+ "mime-types": "^2.1.25",
+ "progress": "^2.0.1",
+ "proxy-from-env": "^1.0.0",
+ "rimraf": "^2.6.1",
+ "ws": "^6.1.0"
},
"engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ "node": ">=8.16.0"
}
},
- "node_modules/@storybook/cli/node_modules/chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "node_modules/@storybook/cli/node_modules/rimraf": {
+ "version": "2.7.1",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
+ "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
+ "deprecated": "Rimraf versions prior to v4 are no longer supported",
"dev": true,
"dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
- "engines": {
- "node": ">=10"
+ "glob": "^7.1.3"
},
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
- }
- },
- "node_modules/@storybook/cli/node_modules/commander": {
- "version": "6.2.1",
- "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz",
- "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==",
- "dev": true,
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/@storybook/cli/node_modules/has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/@storybook/cli/node_modules/prettier": {
- "version": "2.8.8",
- "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz",
- "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==",
- "dev": true,
"bin": {
- "prettier": "bin-prettier.js"
- },
- "engines": {
- "node": ">=10.13.0"
- },
- "funding": {
- "url": "https://github.com/prettier/prettier?sponsor=1"
+ "rimraf": "bin.js"
}
},
"node_modules/@storybook/cli/node_modules/supports-color": {
@@ -6969,12 +6773,20 @@
"node": ">=8"
}
},
+ "node_modules/@storybook/cli/node_modules/ws": {
+ "version": "6.2.2",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz",
+ "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==",
+ "dev": true,
+ "dependencies": {
+ "async-limiter": "~1.0.0"
+ }
+ },
"node_modules/@storybook/client-logger": {
- "version": "7.6.12",
- "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.6.12.tgz",
- "integrity": "sha512-hiRv6dXsOttMPqm9SxEuFoAtDe9rs7TUS8XcO5rmJ9BgfwBJsYlHzAxXkazxmvlyZtKL7gMx6m8OYbCdZgUqtA==",
+ "version": "7.6.19",
+ "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.6.19.tgz",
+ "integrity": "sha512-oGzOxbmLmciSIfd5gsxDzPmX8DttWhoYdPKxjMuCuWLTO2TWpkCWp1FTUMWO72mm/6V/FswT/aqpJJBBvdZ3RQ==",
"dev": true,
- "peer": true,
"dependencies": {
"@storybook/global": "^5.0.0"
},
@@ -6984,85 +6796,25 @@
}
},
"node_modules/@storybook/codemod": {
- "version": "7.6.17",
- "resolved": "https://registry.npmjs.org/@storybook/codemod/-/codemod-7.6.17.tgz",
- "integrity": "sha512-JuTmf2u3C4fCnjO7o3dqRgrq3ozNYfWlrRP8xuIdvT7niMap7a396hJtSKqS10FxCgKFcMAOsRgrCalH1dWxUg==",
+ "version": "7.6.19",
+ "resolved": "https://registry.npmjs.org/@storybook/codemod/-/codemod-7.6.19.tgz",
+ "integrity": "sha512-bmHE0iEEgWZ65dXCmasd+GreChjPiWkXu2FEa0cJmNz/PqY12GsXGls4ke1TkNTj4gdSZnbtJxbclPZZnib2tQ==",
"dev": true,
"dependencies": {
"@babel/core": "^7.23.2",
"@babel/preset-env": "^7.23.2",
"@babel/types": "^7.23.0",
"@storybook/csf": "^0.1.2",
- "@storybook/csf-tools": "7.6.17",
- "@storybook/node-logger": "7.6.17",
- "@storybook/types": "7.6.17",
+ "@storybook/csf-tools": "7.6.19",
+ "@storybook/node-logger": "7.6.19",
+ "@storybook/types": "7.6.19",
"@types/cross-spawn": "^6.0.2",
"cross-spawn": "^7.0.3",
- "globby": "^11.0.2",
- "jscodeshift": "^0.15.1",
- "lodash": "^4.17.21",
- "prettier": "^2.8.0",
- "recast": "^0.23.1"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
- }
- },
- "node_modules/@storybook/codemod/node_modules/@storybook/channels": {
- "version": "7.6.17",
- "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-7.6.17.tgz",
- "integrity": "sha512-GFG40pzaSxk1hUr/J/TMqW5AFDDPUSu+HkeE/oqSWJbOodBOLJzHN6CReJS6y1DjYSZLNFt1jftPWZZInG/XUA==",
- "dev": true,
- "dependencies": {
- "@storybook/client-logger": "7.6.17",
- "@storybook/core-events": "7.6.17",
- "@storybook/global": "^5.0.0",
- "qs": "^6.10.0",
- "telejson": "^7.2.0",
- "tiny-invariant": "^1.3.1"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
- }
- },
- "node_modules/@storybook/codemod/node_modules/@storybook/client-logger": {
- "version": "7.6.17",
- "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.6.17.tgz",
- "integrity": "sha512-6WBYqixAXNAXlSaBWwgljWpAu10tPRBJrcFvx2gPUne58EeMM20Gi/iHYBz2kMCY+JLAgeIH7ZxInqwO8vDwiQ==",
- "dev": true,
- "dependencies": {
- "@storybook/global": "^5.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
- }
- },
- "node_modules/@storybook/codemod/node_modules/@storybook/core-events": {
- "version": "7.6.17",
- "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.6.17.tgz",
- "integrity": "sha512-AriWMCm/k1cxlv10f+jZ1wavThTRpLaN3kY019kHWbYT9XgaSuLU67G7GPr3cGnJ6HuA6uhbzu8qtqVCd6OfXA==",
- "dev": true,
- "dependencies": {
- "ts-dedent": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
- }
- },
- "node_modules/@storybook/codemod/node_modules/@storybook/types": {
- "version": "7.6.17",
- "resolved": "https://registry.npmjs.org/@storybook/types/-/types-7.6.17.tgz",
- "integrity": "sha512-GRY0xEJQ0PrL7DY2qCNUdIfUOE0Gsue6N+GBJw9ku1IUDFLJRDOF+4Dx2BvYcVCPI5XPqdWKlEyZdMdKjiQN7Q==",
- "dev": true,
- "dependencies": {
- "@storybook/channels": "7.6.17",
- "@types/babel__core": "^7.0.0",
- "@types/express": "^4.7.0",
- "file-system-cache": "2.3.0"
+ "globby": "^11.0.2",
+ "jscodeshift": "^0.15.1",
+ "lodash": "^4.17.21",
+ "prettier": "^2.8.0",
+ "recast": "^0.23.1"
},
"funding": {
"type": "opencollective",
@@ -7085,18 +6837,18 @@
}
},
"node_modules/@storybook/components": {
- "version": "7.6.17",
- "resolved": "https://registry.npmjs.org/@storybook/components/-/components-7.6.17.tgz",
- "integrity": "sha512-lbh7GynMidA+CZcJnstVku6Nhs+YkqjYaZ+mKPugvlVhGVWv0DaaeQFVuZ8cJtUGJ/5FFU4Y+n+gylYUHkGBMA==",
+ "version": "7.6.19",
+ "resolved": "https://registry.npmjs.org/@storybook/components/-/components-7.6.19.tgz",
+ "integrity": "sha512-8Zw/RQ4crzKkUR7ojxvRIj8vktKiBBO8Nq93qv4JfDqDWrcR7cro0hOlZgmZmrzbFunBBt6WlsNNO6nVP7R4Xw==",
"dev": true,
"dependencies": {
"@radix-ui/react-select": "^1.2.2",
"@radix-ui/react-toolbar": "^1.0.4",
- "@storybook/client-logger": "7.6.17",
+ "@storybook/client-logger": "7.6.19",
"@storybook/csf": "^0.1.2",
"@storybook/global": "^5.0.0",
- "@storybook/theming": "7.6.17",
- "@storybook/types": "7.6.17",
+ "@storybook/theming": "7.6.19",
+ "@storybook/types": "7.6.19",
"memoizerific": "^1.11.3",
"use-resize-observer": "^9.1.0",
"util-deprecate": "^1.0.2"
@@ -7110,80 +6862,14 @@
"react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
}
},
- "node_modules/@storybook/components/node_modules/@storybook/channels": {
- "version": "7.6.17",
- "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-7.6.17.tgz",
- "integrity": "sha512-GFG40pzaSxk1hUr/J/TMqW5AFDDPUSu+HkeE/oqSWJbOodBOLJzHN6CReJS6y1DjYSZLNFt1jftPWZZInG/XUA==",
- "dev": true,
- "dependencies": {
- "@storybook/client-logger": "7.6.17",
- "@storybook/core-events": "7.6.17",
- "@storybook/global": "^5.0.0",
- "qs": "^6.10.0",
- "telejson": "^7.2.0",
- "tiny-invariant": "^1.3.1"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
- }
- },
- "node_modules/@storybook/components/node_modules/@storybook/client-logger": {
- "version": "7.6.17",
- "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.6.17.tgz",
- "integrity": "sha512-6WBYqixAXNAXlSaBWwgljWpAu10tPRBJrcFvx2gPUne58EeMM20Gi/iHYBz2kMCY+JLAgeIH7ZxInqwO8vDwiQ==",
- "dev": true,
- "dependencies": {
- "@storybook/global": "^5.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
- }
- },
- "node_modules/@storybook/components/node_modules/@storybook/core-events": {
- "version": "7.6.17",
- "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.6.17.tgz",
- "integrity": "sha512-AriWMCm/k1cxlv10f+jZ1wavThTRpLaN3kY019kHWbYT9XgaSuLU67G7GPr3cGnJ6HuA6uhbzu8qtqVCd6OfXA==",
- "dev": true,
- "dependencies": {
- "ts-dedent": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
- }
- },
- "node_modules/@storybook/components/node_modules/@storybook/theming": {
- "version": "7.6.17",
- "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-7.6.17.tgz",
- "integrity": "sha512-ZbaBt3KAbmBtfjNqgMY7wPMBshhSJlhodyMNQypv+95xLD/R+Az6aBYbpVAOygLaUQaQk4ar7H/Ww6lFIoiFbA==",
- "dev": true,
- "dependencies": {
- "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0",
- "@storybook/client-logger": "7.6.17",
- "@storybook/global": "^5.0.0",
- "memoizerific": "^1.11.3"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
- "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
- }
- },
- "node_modules/@storybook/components/node_modules/@storybook/types": {
- "version": "7.6.17",
- "resolved": "https://registry.npmjs.org/@storybook/types/-/types-7.6.17.tgz",
- "integrity": "sha512-GRY0xEJQ0PrL7DY2qCNUdIfUOE0Gsue6N+GBJw9ku1IUDFLJRDOF+4Dx2BvYcVCPI5XPqdWKlEyZdMdKjiQN7Q==",
+ "node_modules/@storybook/core-client": {
+ "version": "7.6.19",
+ "resolved": "https://registry.npmjs.org/@storybook/core-client/-/core-client-7.6.19.tgz",
+ "integrity": "sha512-F0V9nzcEnj6DIpnw2ilrxsV4d9ibyyQS+Wi2uQtXy+wCQQm9PeBVqrOywjXAY2F9pcoftXOaepfhp8jrxX4MXw==",
"dev": true,
"dependencies": {
- "@storybook/channels": "7.6.17",
- "@types/babel__core": "^7.0.0",
- "@types/express": "^4.7.0",
- "file-system-cache": "2.3.0"
+ "@storybook/client-logger": "7.6.19",
+ "@storybook/preview-api": "7.6.19"
},
"funding": {
"type": "opencollective",
@@ -7191,14 +6877,14 @@
}
},
"node_modules/@storybook/core-common": {
- "version": "7.6.17",
- "resolved": "https://registry.npmjs.org/@storybook/core-common/-/core-common-7.6.17.tgz",
- "integrity": "sha512-me2TP3Q9/qzqCLoDHUSsUF+VS1MHxfHbTVF6vAz0D/COTxzsxLpu9TxTbzJoBCxse6XRb6wWI1RgF1mIcjic7g==",
+ "version": "7.6.19",
+ "resolved": "https://registry.npmjs.org/@storybook/core-common/-/core-common-7.6.19.tgz",
+ "integrity": "sha512-njwpGzFJrfbJr/AFxGP8KMrfPfxN85KOfSlxYnQwRm5Z0H1D/lT33LhEBf5m37gaGawHeG7KryxO6RvaioMt2Q==",
"dev": true,
"dependencies": {
- "@storybook/core-events": "7.6.17",
- "@storybook/node-logger": "7.6.17",
- "@storybook/types": "7.6.17",
+ "@storybook/core-events": "7.6.19",
+ "@storybook/node-logger": "7.6.19",
+ "@storybook/types": "7.6.19",
"@types/find-cache-dir": "^3.2.1",
"@types/node": "^18.0.0",
"@types/node-fetch": "^2.6.4",
@@ -7225,70 +6911,10 @@
"url": "https://opencollective.com/storybook"
}
},
- "node_modules/@storybook/core-common/node_modules/@storybook/channels": {
- "version": "7.6.17",
- "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-7.6.17.tgz",
- "integrity": "sha512-GFG40pzaSxk1hUr/J/TMqW5AFDDPUSu+HkeE/oqSWJbOodBOLJzHN6CReJS6y1DjYSZLNFt1jftPWZZInG/XUA==",
- "dev": true,
- "dependencies": {
- "@storybook/client-logger": "7.6.17",
- "@storybook/core-events": "7.6.17",
- "@storybook/global": "^5.0.0",
- "qs": "^6.10.0",
- "telejson": "^7.2.0",
- "tiny-invariant": "^1.3.1"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
- }
- },
- "node_modules/@storybook/core-common/node_modules/@storybook/client-logger": {
- "version": "7.6.17",
- "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.6.17.tgz",
- "integrity": "sha512-6WBYqixAXNAXlSaBWwgljWpAu10tPRBJrcFvx2gPUne58EeMM20Gi/iHYBz2kMCY+JLAgeIH7ZxInqwO8vDwiQ==",
- "dev": true,
- "dependencies": {
- "@storybook/global": "^5.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
- }
- },
- "node_modules/@storybook/core-common/node_modules/@storybook/core-events": {
- "version": "7.6.17",
- "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.6.17.tgz",
- "integrity": "sha512-AriWMCm/k1cxlv10f+jZ1wavThTRpLaN3kY019kHWbYT9XgaSuLU67G7GPr3cGnJ6HuA6uhbzu8qtqVCd6OfXA==",
- "dev": true,
- "dependencies": {
- "ts-dedent": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
- }
- },
- "node_modules/@storybook/core-common/node_modules/@storybook/types": {
- "version": "7.6.17",
- "resolved": "https://registry.npmjs.org/@storybook/types/-/types-7.6.17.tgz",
- "integrity": "sha512-GRY0xEJQ0PrL7DY2qCNUdIfUOE0Gsue6N+GBJw9ku1IUDFLJRDOF+4Dx2BvYcVCPI5XPqdWKlEyZdMdKjiQN7Q==",
- "dev": true,
- "dependencies": {
- "@storybook/channels": "7.6.17",
- "@types/babel__core": "^7.0.0",
- "@types/express": "^4.7.0",
- "file-system-cache": "2.3.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
- }
- },
"node_modules/@storybook/core-common/node_modules/@types/node": {
- "version": "18.19.30",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.30.tgz",
- "integrity": "sha512-453z1zPuJLVDbyahaa1sSD5C2sht6ZpHp5rgJNs+H8YGqhluCXcuOUmBYsAo0Tos0cHySJ3lVUGbGgLlqIkpyg==",
+ "version": "18.19.34",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.34.tgz",
+ "integrity": "sha512-eXF4pfBNV5DAMKGbI02NnDtWrQ40hAN558/2vvS4gMpMIxaf6JmD7YjnZbq0Q9TDSSkKBamime8ewRoomHdt4g==",
"dev": true,
"dependencies": {
"undici-types": "~5.26.4"
@@ -7342,157 +6968,70 @@
"dependencies": {
"has-flag": "^4.0.0"
},
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/@storybook/core-events": {
- "version": "7.6.12",
- "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.6.12.tgz",
- "integrity": "sha512-IO4cwk7bBCKH6lLnnIlHO9FwQXt/9CzLUAoZSY9msWsdPppCdKlw8ynJI5YarSNKDBUn8ArIfnRf0Mve0KQr9Q==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "ts-dedent": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
- }
- },
- "node_modules/@storybook/core-server": {
- "version": "7.6.17",
- "resolved": "https://registry.npmjs.org/@storybook/core-server/-/core-server-7.6.17.tgz",
- "integrity": "sha512-KWGhTTaL1Q14FolcoKKZgytlPJUbH6sbJ1Ptj/84EYWFewcnEgVs0Zlnh1VStRZg+Rd1WC1V4yVd/bbDzxrvQA==",
- "dev": true,
- "dependencies": {
- "@aw-web-design/x-default-browser": "1.4.126",
- "@discoveryjs/json-ext": "^0.5.3",
- "@storybook/builder-manager": "7.6.17",
- "@storybook/channels": "7.6.17",
- "@storybook/core-common": "7.6.17",
- "@storybook/core-events": "7.6.17",
- "@storybook/csf": "^0.1.2",
- "@storybook/csf-tools": "7.6.17",
- "@storybook/docs-mdx": "^0.1.0",
- "@storybook/global": "^5.0.0",
- "@storybook/manager": "7.6.17",
- "@storybook/node-logger": "7.6.17",
- "@storybook/preview-api": "7.6.17",
- "@storybook/telemetry": "7.6.17",
- "@storybook/types": "7.6.17",
- "@types/detect-port": "^1.3.0",
- "@types/node": "^18.0.0",
- "@types/pretty-hrtime": "^1.0.0",
- "@types/semver": "^7.3.4",
- "better-opn": "^3.0.2",
- "chalk": "^4.1.0",
- "cli-table3": "^0.6.1",
- "compression": "^1.7.4",
- "detect-port": "^1.3.0",
- "express": "^4.17.3",
- "fs-extra": "^11.1.0",
- "globby": "^11.0.2",
- "ip": "^2.0.1",
- "lodash": "^4.17.21",
- "open": "^8.4.0",
- "pretty-hrtime": "^1.0.3",
- "prompts": "^2.4.0",
- "read-pkg-up": "^7.0.1",
- "semver": "^7.3.7",
- "telejson": "^7.2.0",
- "tiny-invariant": "^1.3.1",
- "ts-dedent": "^2.0.0",
- "util": "^0.12.4",
- "util-deprecate": "^1.0.2",
- "watchpack": "^2.2.0",
- "ws": "^8.2.3"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
- }
- },
- "node_modules/@storybook/core-server/node_modules/@storybook/channels": {
- "version": "7.6.17",
- "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-7.6.17.tgz",
- "integrity": "sha512-GFG40pzaSxk1hUr/J/TMqW5AFDDPUSu+HkeE/oqSWJbOodBOLJzHN6CReJS6y1DjYSZLNFt1jftPWZZInG/XUA==",
- "dev": true,
- "dependencies": {
- "@storybook/client-logger": "7.6.17",
- "@storybook/core-events": "7.6.17",
- "@storybook/global": "^5.0.0",
- "qs": "^6.10.0",
- "telejson": "^7.2.0",
- "tiny-invariant": "^1.3.1"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
- }
- },
- "node_modules/@storybook/core-server/node_modules/@storybook/client-logger": {
- "version": "7.6.17",
- "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.6.17.tgz",
- "integrity": "sha512-6WBYqixAXNAXlSaBWwgljWpAu10tPRBJrcFvx2gPUne58EeMM20Gi/iHYBz2kMCY+JLAgeIH7ZxInqwO8vDwiQ==",
- "dev": true,
- "dependencies": {
- "@storybook/global": "^5.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
- }
- },
- "node_modules/@storybook/core-server/node_modules/@storybook/core-events": {
- "version": "7.6.17",
- "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.6.17.tgz",
- "integrity": "sha512-AriWMCm/k1cxlv10f+jZ1wavThTRpLaN3kY019kHWbYT9XgaSuLU67G7GPr3cGnJ6HuA6uhbzu8qtqVCd6OfXA==",
- "dev": true,
- "dependencies": {
- "ts-dedent": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
- }
- },
- "node_modules/@storybook/core-server/node_modules/@storybook/preview-api": {
- "version": "7.6.17",
- "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-7.6.17.tgz",
- "integrity": "sha512-wLfDdI9RWo1f2zzFe54yRhg+2YWyxLZvqdZnSQ45mTs4/7xXV5Wfbv3QNTtcdw8tT3U5KRTrN1mTfTCiRJc0Kw==",
- "dev": true,
- "dependencies": {
- "@storybook/channels": "7.6.17",
- "@storybook/client-logger": "7.6.17",
- "@storybook/core-events": "7.6.17",
- "@storybook/csf": "^0.1.2",
- "@storybook/global": "^5.0.0",
- "@storybook/types": "7.6.17",
- "@types/qs": "^6.9.5",
- "dequal": "^2.0.2",
- "lodash": "^4.17.21",
- "memoizerific": "^1.11.3",
- "qs": "^6.10.0",
- "synchronous-promise": "^2.0.15",
- "ts-dedent": "^2.0.0",
- "util-deprecate": "^1.0.2"
- },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@storybook/core-events": {
+ "version": "7.6.19",
+ "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.6.19.tgz",
+ "integrity": "sha512-K/W6Uvum0ocZSgjbi8hiotpe+wDEHDZlvN+KlPqdh9ae9xDK8aBNBq9IelCoqM+uKO1Zj+dDfSQds7CD781DJg==",
+ "dev": true,
+ "dependencies": {
+ "ts-dedent": "^2.0.0"
+ },
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/storybook"
}
},
- "node_modules/@storybook/core-server/node_modules/@storybook/types": {
- "version": "7.6.17",
- "resolved": "https://registry.npmjs.org/@storybook/types/-/types-7.6.17.tgz",
- "integrity": "sha512-GRY0xEJQ0PrL7DY2qCNUdIfUOE0Gsue6N+GBJw9ku1IUDFLJRDOF+4Dx2BvYcVCPI5XPqdWKlEyZdMdKjiQN7Q==",
+ "node_modules/@storybook/core-server": {
+ "version": "7.6.19",
+ "resolved": "https://registry.npmjs.org/@storybook/core-server/-/core-server-7.6.19.tgz",
+ "integrity": "sha512-7mKL73Wv5R2bEl0kJ6QJ9bOu5YY53Idu24QgvTnUdNsQazp2yUONBNwHIrNDnNEXm8SfCi4Mc9o0mmNRMIoiRA==",
"dev": true,
"dependencies": {
- "@storybook/channels": "7.6.17",
- "@types/babel__core": "^7.0.0",
- "@types/express": "^4.7.0",
- "file-system-cache": "2.3.0"
+ "@aw-web-design/x-default-browser": "1.4.126",
+ "@discoveryjs/json-ext": "^0.5.3",
+ "@storybook/builder-manager": "7.6.19",
+ "@storybook/channels": "7.6.19",
+ "@storybook/core-common": "7.6.19",
+ "@storybook/core-events": "7.6.19",
+ "@storybook/csf": "^0.1.2",
+ "@storybook/csf-tools": "7.6.19",
+ "@storybook/docs-mdx": "^0.1.0",
+ "@storybook/global": "^5.0.0",
+ "@storybook/manager": "7.6.19",
+ "@storybook/node-logger": "7.6.19",
+ "@storybook/preview-api": "7.6.19",
+ "@storybook/telemetry": "7.6.19",
+ "@storybook/types": "7.6.19",
+ "@types/detect-port": "^1.3.0",
+ "@types/node": "^18.0.0",
+ "@types/pretty-hrtime": "^1.0.0",
+ "@types/semver": "^7.3.4",
+ "better-opn": "^3.0.2",
+ "chalk": "^4.1.0",
+ "cli-table3": "^0.6.1",
+ "compression": "^1.7.4",
+ "detect-port": "^1.3.0",
+ "express": "^4.17.3",
+ "fs-extra": "^11.1.0",
+ "globby": "^11.0.2",
+ "ip": "^2.0.1",
+ "lodash": "^4.17.21",
+ "open": "^8.4.0",
+ "pretty-hrtime": "^1.0.3",
+ "prompts": "^2.4.0",
+ "read-pkg-up": "^7.0.1",
+ "semver": "^7.3.7",
+ "telejson": "^7.2.0",
+ "tiny-invariant": "^1.3.1",
+ "ts-dedent": "^2.0.0",
+ "util": "^0.12.4",
+ "util-deprecate": "^1.0.2",
+ "watchpack": "^2.2.0",
+ "ws": "^8.2.3"
},
"funding": {
"type": "opencollective",
@@ -7500,9 +7039,9 @@
}
},
"node_modules/@storybook/core-server/node_modules/@types/node": {
- "version": "18.19.24",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.24.tgz",
- "integrity": "sha512-eghAz3gnbQbvnHqB+mgB2ZR3aH6RhdEmHGS48BnV75KceQPHqabkxKI0BbUSsqhqy2Ddhc2xD/VAR9ySZd57Lw==",
+ "version": "18.19.34",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.34.tgz",
+ "integrity": "sha512-eXF4pfBNV5DAMKGbI02NnDtWrQ40hAN558/2vvS4gMpMIxaf6JmD7YjnZbq0Q9TDSSkKBamime8ewRoomHdt4g==",
"dev": true,
"dependencies": {
"undici-types": "~5.26.4"
@@ -7561,14 +7100,14 @@
}
},
"node_modules/@storybook/core-webpack": {
- "version": "7.6.17",
- "resolved": "https://registry.npmjs.org/@storybook/core-webpack/-/core-webpack-7.6.17.tgz",
- "integrity": "sha512-PyGrFhRM8sTONGwwLWLqBQ1HO+LBnVZ+5TOQO7ejQfdV2FWyNOzjBXm2e5jL/C6XlqiEhmL5pyHEyDBaQJQ3KA==",
+ "version": "7.6.19",
+ "resolved": "https://registry.npmjs.org/@storybook/core-webpack/-/core-webpack-7.6.19.tgz",
+ "integrity": "sha512-Ezvn54hFN99qwP8kDOQa7/IEk2V3NyJys2eg0Afqz1cy9Uc3SkL7U7hQorKOHr5+66dsryNDfJdPzM1YMKFMBQ==",
"dev": true,
"dependencies": {
- "@storybook/core-common": "7.6.17",
- "@storybook/node-logger": "7.6.17",
- "@storybook/types": "7.6.17",
+ "@storybook/core-common": "7.6.19",
+ "@storybook/node-logger": "7.6.19",
+ "@storybook/types": "7.6.19",
"@types/node": "^18.0.0",
"ts-dedent": "^2.0.0"
},
@@ -7577,91 +7116,31 @@
"url": "https://opencollective.com/storybook"
}
},
- "node_modules/@storybook/core-webpack/node_modules/@storybook/channels": {
- "version": "7.6.17",
- "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-7.6.17.tgz",
- "integrity": "sha512-GFG40pzaSxk1hUr/J/TMqW5AFDDPUSu+HkeE/oqSWJbOodBOLJzHN6CReJS6y1DjYSZLNFt1jftPWZZInG/XUA==",
- "dev": true,
- "dependencies": {
- "@storybook/client-logger": "7.6.17",
- "@storybook/core-events": "7.6.17",
- "@storybook/global": "^5.0.0",
- "qs": "^6.10.0",
- "telejson": "^7.2.0",
- "tiny-invariant": "^1.3.1"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
- }
- },
- "node_modules/@storybook/core-webpack/node_modules/@storybook/client-logger": {
- "version": "7.6.17",
- "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.6.17.tgz",
- "integrity": "sha512-6WBYqixAXNAXlSaBWwgljWpAu10tPRBJrcFvx2gPUne58EeMM20Gi/iHYBz2kMCY+JLAgeIH7ZxInqwO8vDwiQ==",
- "dev": true,
- "dependencies": {
- "@storybook/global": "^5.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
- }
- },
- "node_modules/@storybook/core-webpack/node_modules/@storybook/core-events": {
- "version": "7.6.17",
- "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.6.17.tgz",
- "integrity": "sha512-AriWMCm/k1cxlv10f+jZ1wavThTRpLaN3kY019kHWbYT9XgaSuLU67G7GPr3cGnJ6HuA6uhbzu8qtqVCd6OfXA==",
- "dev": true,
- "dependencies": {
- "ts-dedent": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
- }
- },
- "node_modules/@storybook/core-webpack/node_modules/@storybook/types": {
- "version": "7.6.17",
- "resolved": "https://registry.npmjs.org/@storybook/types/-/types-7.6.17.tgz",
- "integrity": "sha512-GRY0xEJQ0PrL7DY2qCNUdIfUOE0Gsue6N+GBJw9ku1IUDFLJRDOF+4Dx2BvYcVCPI5XPqdWKlEyZdMdKjiQN7Q==",
- "dev": true,
- "dependencies": {
- "@storybook/channels": "7.6.17",
- "@types/babel__core": "^7.0.0",
- "@types/express": "^4.7.0",
- "file-system-cache": "2.3.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
- }
- },
"node_modules/@storybook/core-webpack/node_modules/@types/node": {
- "version": "18.19.30",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.30.tgz",
- "integrity": "sha512-453z1zPuJLVDbyahaa1sSD5C2sht6ZpHp5rgJNs+H8YGqhluCXcuOUmBYsAo0Tos0cHySJ3lVUGbGgLlqIkpyg==",
+ "version": "18.19.34",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.34.tgz",
+ "integrity": "sha512-eXF4pfBNV5DAMKGbI02NnDtWrQ40hAN558/2vvS4gMpMIxaf6JmD7YjnZbq0Q9TDSSkKBamime8ewRoomHdt4g==",
"dev": true,
"dependencies": {
"undici-types": "~5.26.4"
}
},
"node_modules/@storybook/csf": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.1.2.tgz",
- "integrity": "sha512-ePrvE/pS1vsKR9Xr+o+YwdqNgHUyXvg+1Xjx0h9LrVx7Zq4zNe06pd63F5EvzTbCbJsHj7GHr9tkiaqm7U8WRA==",
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.1.8.tgz",
+ "integrity": "sha512-Ntab9o7LjBCbFIao5l42itFiaSh/Qu+l16l/r/9qmV9LnYZkO+JQ7tzhdlwpgJfhs+B5xeejpdAtftDRyXNajw==",
"dev": true,
"dependencies": {
"type-fest": "^2.19.0"
}
},
"node_modules/@storybook/csf-plugin": {
- "version": "7.6.17",
- "resolved": "https://registry.npmjs.org/@storybook/csf-plugin/-/csf-plugin-7.6.17.tgz",
- "integrity": "sha512-xTHv9BUh3bkDVCvcbmdfVF0/e96BdrEgqPJ3G3RmKbSzWLOkQ2U9yiPfHzT0KJWPhVwj12fjfZp0zunu+pcS6Q==",
+ "version": "7.6.19",
+ "resolved": "https://registry.npmjs.org/@storybook/csf-plugin/-/csf-plugin-7.6.19.tgz",
+ "integrity": "sha512-yUP0xfJyR8e6fmCgKoEt4c1EvslF8dZ8wtwVLE5hnC3kfs7xt8RVDiKLB/9NhYjY3mD/oOesX60HqRXDgJQHwA==",
"dev": true,
"dependencies": {
- "@storybook/csf-tools": "7.6.17",
+ "@storybook/csf-tools": "7.6.19",
"unplugin": "^1.3.1"
},
"funding": {
@@ -7670,9 +7149,9 @@
}
},
"node_modules/@storybook/csf-tools": {
- "version": "7.6.17",
- "resolved": "https://registry.npmjs.org/@storybook/csf-tools/-/csf-tools-7.6.17.tgz",
- "integrity": "sha512-dAQtam0EBPeTJYcQPLxXgz4L9JFqD+HWbLFG9CmNIhMMjticrB0mpk1EFIS6vPXk/VsVWpBgMLD7dZlD6YMKcQ==",
+ "version": "7.6.19",
+ "resolved": "https://registry.npmjs.org/@storybook/csf-tools/-/csf-tools-7.6.19.tgz",
+ "integrity": "sha512-8Vzia3cHhDdGHuS3XKXJReCRxmfRq3vmTm/Te9yKZnPSAsC58CCKcMh8FNEFJ44vxYF9itKTkRutjGs+DprKLQ==",
"dev": true,
"dependencies": {
"@babel/generator": "^7.23.0",
@@ -7680,7 +7159,7 @@
"@babel/traverse": "^7.23.2",
"@babel/types": "^7.23.0",
"@storybook/csf": "^0.1.2",
- "@storybook/types": "7.6.17",
+ "@storybook/types": "7.6.19",
"fs-extra": "^11.1.0",
"recast": "^0.23.1",
"ts-dedent": "^2.0.0"
@@ -7690,66 +7169,6 @@
"url": "https://opencollective.com/storybook"
}
},
- "node_modules/@storybook/csf-tools/node_modules/@storybook/channels": {
- "version": "7.6.17",
- "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-7.6.17.tgz",
- "integrity": "sha512-GFG40pzaSxk1hUr/J/TMqW5AFDDPUSu+HkeE/oqSWJbOodBOLJzHN6CReJS6y1DjYSZLNFt1jftPWZZInG/XUA==",
- "dev": true,
- "dependencies": {
- "@storybook/client-logger": "7.6.17",
- "@storybook/core-events": "7.6.17",
- "@storybook/global": "^5.0.0",
- "qs": "^6.10.0",
- "telejson": "^7.2.0",
- "tiny-invariant": "^1.3.1"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
- }
- },
- "node_modules/@storybook/csf-tools/node_modules/@storybook/client-logger": {
- "version": "7.6.17",
- "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.6.17.tgz",
- "integrity": "sha512-6WBYqixAXNAXlSaBWwgljWpAu10tPRBJrcFvx2gPUne58EeMM20Gi/iHYBz2kMCY+JLAgeIH7ZxInqwO8vDwiQ==",
- "dev": true,
- "dependencies": {
- "@storybook/global": "^5.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
- }
- },
- "node_modules/@storybook/csf-tools/node_modules/@storybook/core-events": {
- "version": "7.6.17",
- "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.6.17.tgz",
- "integrity": "sha512-AriWMCm/k1cxlv10f+jZ1wavThTRpLaN3kY019kHWbYT9XgaSuLU67G7GPr3cGnJ6HuA6uhbzu8qtqVCd6OfXA==",
- "dev": true,
- "dependencies": {
- "ts-dedent": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
- }
- },
- "node_modules/@storybook/csf-tools/node_modules/@storybook/types": {
- "version": "7.6.17",
- "resolved": "https://registry.npmjs.org/@storybook/types/-/types-7.6.17.tgz",
- "integrity": "sha512-GRY0xEJQ0PrL7DY2qCNUdIfUOE0Gsue6N+GBJw9ku1IUDFLJRDOF+4Dx2BvYcVCPI5XPqdWKlEyZdMdKjiQN7Q==",
- "dev": true,
- "dependencies": {
- "@storybook/channels": "7.6.17",
- "@types/babel__core": "^7.0.0",
- "@types/express": "^4.7.0",
- "file-system-cache": "2.3.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
- }
- },
"node_modules/@storybook/docs-mdx": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/@storybook/docs-mdx/-/docs-mdx-0.1.0.tgz",
@@ -7757,14 +7176,14 @@
"dev": true
},
"node_modules/@storybook/docs-tools": {
- "version": "7.6.17",
- "resolved": "https://registry.npmjs.org/@storybook/docs-tools/-/docs-tools-7.6.17.tgz",
- "integrity": "sha512-bYrLoj06adqklyLkEwD32C0Ww6t+9ZVvrJHiVT42bIhTRpFiFPAetl1a9KPHtFLnfduh4n2IxIr1jv32ThPDTA==",
+ "version": "7.6.19",
+ "resolved": "https://registry.npmjs.org/@storybook/docs-tools/-/docs-tools-7.6.19.tgz",
+ "integrity": "sha512-JuwV6wtm7Hb7Kb5ValChfxy4J7XngfrSQNpvwsDCSBNVcQUv2y843hvclpa26Ptfr/c7zpUX8r9FGSaMDy+2aQ==",
"dev": true,
"dependencies": {
- "@storybook/core-common": "7.6.17",
- "@storybook/preview-api": "7.6.17",
- "@storybook/types": "7.6.17",
+ "@storybook/core-common": "7.6.19",
+ "@storybook/preview-api": "7.6.19",
+ "@storybook/types": "7.6.19",
"@types/doctrine": "^0.0.3",
"assert": "^2.1.0",
"doctrine": "^3.0.0",
@@ -7775,92 +7194,6 @@
"url": "https://opencollective.com/storybook"
}
},
- "node_modules/@storybook/docs-tools/node_modules/@storybook/channels": {
- "version": "7.6.17",
- "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-7.6.17.tgz",
- "integrity": "sha512-GFG40pzaSxk1hUr/J/TMqW5AFDDPUSu+HkeE/oqSWJbOodBOLJzHN6CReJS6y1DjYSZLNFt1jftPWZZInG/XUA==",
- "dev": true,
- "dependencies": {
- "@storybook/client-logger": "7.6.17",
- "@storybook/core-events": "7.6.17",
- "@storybook/global": "^5.0.0",
- "qs": "^6.10.0",
- "telejson": "^7.2.0",
- "tiny-invariant": "^1.3.1"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
- }
- },
- "node_modules/@storybook/docs-tools/node_modules/@storybook/client-logger": {
- "version": "7.6.17",
- "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.6.17.tgz",
- "integrity": "sha512-6WBYqixAXNAXlSaBWwgljWpAu10tPRBJrcFvx2gPUne58EeMM20Gi/iHYBz2kMCY+JLAgeIH7ZxInqwO8vDwiQ==",
- "dev": true,
- "dependencies": {
- "@storybook/global": "^5.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
- }
- },
- "node_modules/@storybook/docs-tools/node_modules/@storybook/core-events": {
- "version": "7.6.17",
- "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.6.17.tgz",
- "integrity": "sha512-AriWMCm/k1cxlv10f+jZ1wavThTRpLaN3kY019kHWbYT9XgaSuLU67G7GPr3cGnJ6HuA6uhbzu8qtqVCd6OfXA==",
- "dev": true,
- "dependencies": {
- "ts-dedent": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
- }
- },
- "node_modules/@storybook/docs-tools/node_modules/@storybook/preview-api": {
- "version": "7.6.17",
- "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-7.6.17.tgz",
- "integrity": "sha512-wLfDdI9RWo1f2zzFe54yRhg+2YWyxLZvqdZnSQ45mTs4/7xXV5Wfbv3QNTtcdw8tT3U5KRTrN1mTfTCiRJc0Kw==",
- "dev": true,
- "dependencies": {
- "@storybook/channels": "7.6.17",
- "@storybook/client-logger": "7.6.17",
- "@storybook/core-events": "7.6.17",
- "@storybook/csf": "^0.1.2",
- "@storybook/global": "^5.0.0",
- "@storybook/types": "7.6.17",
- "@types/qs": "^6.9.5",
- "dequal": "^2.0.2",
- "lodash": "^4.17.21",
- "memoizerific": "^1.11.3",
- "qs": "^6.10.0",
- "synchronous-promise": "^2.0.15",
- "ts-dedent": "^2.0.0",
- "util-deprecate": "^1.0.2"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
- }
- },
- "node_modules/@storybook/docs-tools/node_modules/@storybook/types": {
- "version": "7.6.17",
- "resolved": "https://registry.npmjs.org/@storybook/types/-/types-7.6.17.tgz",
- "integrity": "sha512-GRY0xEJQ0PrL7DY2qCNUdIfUOE0Gsue6N+GBJw9ku1IUDFLJRDOF+4Dx2BvYcVCPI5XPqdWKlEyZdMdKjiQN7Q==",
- "dev": true,
- "dependencies": {
- "@storybook/channels": "7.6.17",
- "@types/babel__core": "^7.0.0",
- "@types/express": "^4.7.0",
- "file-system-cache": "2.3.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
- }
- },
"node_modules/@storybook/global": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/@storybook/global/-/global-5.0.0.tgz",
@@ -7868,9 +7201,9 @@
"dev": true
},
"node_modules/@storybook/manager": {
- "version": "7.6.17",
- "resolved": "https://registry.npmjs.org/@storybook/manager/-/manager-7.6.17.tgz",
- "integrity": "sha512-A1LDDIqMpwRzq/dqkbbiza0QI04o4ZHCl2a3UMDZUV/+QLc2nsr2DAaLk4CVL4/cIc5zGqmIcaOTvprx2YKVBw==",
+ "version": "7.6.19",
+ "resolved": "https://registry.npmjs.org/@storybook/manager/-/manager-7.6.19.tgz",
+ "integrity": "sha512-fZWQcf59x4P0iiBhrL74PZrqKJAPuk9sWjP8BIkGbf8wTZtUunbY5Sv4225fOL4NLJbuX9/RYLUPoxQ3nucGHA==",
"dev": true,
"funding": {
"type": "opencollective",
@@ -7878,20 +7211,19 @@
}
},
"node_modules/@storybook/manager-api": {
- "version": "7.6.12",
- "resolved": "https://registry.npmjs.org/@storybook/manager-api/-/manager-api-7.6.12.tgz",
- "integrity": "sha512-XA5KQpY44d6mlqt0AlesZ7fsPpm1PCpoV+nRGFBR0YtF6RdPFvrPyHhlGgLkJC4xSyb2YJmLKn8cERSluAcEgQ==",
+ "version": "7.6.19",
+ "resolved": "https://registry.npmjs.org/@storybook/manager-api/-/manager-api-7.6.19.tgz",
+ "integrity": "sha512-dVCx1Q+HZEA4U08XqYljiG88BeS3I3ahnPAQLZAeWQXQRkoc9G2jMgLNPKYPIqEtq7Xrn6SRlFMIofhwWrwZpg==",
"dev": true,
- "peer": true,
"dependencies": {
- "@storybook/channels": "7.6.12",
- "@storybook/client-logger": "7.6.12",
- "@storybook/core-events": "7.6.12",
+ "@storybook/channels": "7.6.19",
+ "@storybook/client-logger": "7.6.19",
+ "@storybook/core-events": "7.6.19",
"@storybook/csf": "^0.1.2",
"@storybook/global": "^5.0.0",
- "@storybook/router": "7.6.12",
- "@storybook/theming": "7.6.12",
- "@storybook/types": "7.6.12",
+ "@storybook/router": "7.6.19",
+ "@storybook/theming": "7.6.19",
+ "@storybook/types": "7.6.19",
"dequal": "^2.0.2",
"lodash": "^4.17.21",
"memoizerific": "^1.11.3",
@@ -7911,9 +7243,9 @@
"dev": true
},
"node_modules/@storybook/nextjs": {
- "version": "7.6.17",
- "resolved": "https://registry.npmjs.org/@storybook/nextjs/-/nextjs-7.6.17.tgz",
- "integrity": "sha512-bD9x6HzH/fxiFnghOQfDM60tNUNxFNVVCZi6OvTRxVVz/5xdqbVnYVOuaJeUSLuUnGs7ALYfx8+2OTJQ9NrwRA==",
+ "version": "7.6.19",
+ "resolved": "https://registry.npmjs.org/@storybook/nextjs/-/nextjs-7.6.19.tgz",
+ "integrity": "sha512-BnwGPV7KgQJaCq9+fnBm3jfTBx1rtvJoPofdPMqcZqmuIMR3rsQRo7XPvjNLEbVChZFwMeB/kjNqQOQQyPxikQ==",
"dev": true,
"dependencies": {
"@babel/core": "^7.23.2",
@@ -7928,15 +7260,15 @@
"@babel/preset-env": "^7.23.2",
"@babel/preset-react": "^7.22.15",
"@babel/preset-typescript": "^7.23.2",
- "@babel/runtime": "^7.23.2",
- "@storybook/addon-actions": "7.6.17",
- "@storybook/builder-webpack5": "7.6.17",
- "@storybook/core-common": "7.6.17",
- "@storybook/core-events": "7.6.17",
- "@storybook/node-logger": "7.6.17",
- "@storybook/preset-react-webpack": "7.6.17",
- "@storybook/preview-api": "7.6.17",
- "@storybook/react": "7.6.17",
+ "@babel/runtime": "^7.23.2",
+ "@storybook/addon-actions": "7.6.19",
+ "@storybook/builder-webpack5": "7.6.19",
+ "@storybook/core-common": "7.6.19",
+ "@storybook/core-events": "7.6.19",
+ "@storybook/node-logger": "7.6.19",
+ "@storybook/preset-react-webpack": "7.6.19",
+ "@storybook/preview-api": "7.6.19",
+ "@storybook/react": "7.6.19",
"@types/node": "^18.0.0",
"@types/semver": "^7.3.4",
"css-loader": "^6.7.3",
@@ -7984,96 +7316,10 @@
}
}
},
- "node_modules/@storybook/nextjs/node_modules/@storybook/channels": {
- "version": "7.6.17",
- "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-7.6.17.tgz",
- "integrity": "sha512-GFG40pzaSxk1hUr/J/TMqW5AFDDPUSu+HkeE/oqSWJbOodBOLJzHN6CReJS6y1DjYSZLNFt1jftPWZZInG/XUA==",
- "dev": true,
- "dependencies": {
- "@storybook/client-logger": "7.6.17",
- "@storybook/core-events": "7.6.17",
- "@storybook/global": "^5.0.0",
- "qs": "^6.10.0",
- "telejson": "^7.2.0",
- "tiny-invariant": "^1.3.1"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
- }
- },
- "node_modules/@storybook/nextjs/node_modules/@storybook/client-logger": {
- "version": "7.6.17",
- "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.6.17.tgz",
- "integrity": "sha512-6WBYqixAXNAXlSaBWwgljWpAu10tPRBJrcFvx2gPUne58EeMM20Gi/iHYBz2kMCY+JLAgeIH7ZxInqwO8vDwiQ==",
- "dev": true,
- "dependencies": {
- "@storybook/global": "^5.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
- }
- },
- "node_modules/@storybook/nextjs/node_modules/@storybook/core-events": {
- "version": "7.6.17",
- "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.6.17.tgz",
- "integrity": "sha512-AriWMCm/k1cxlv10f+jZ1wavThTRpLaN3kY019kHWbYT9XgaSuLU67G7GPr3cGnJ6HuA6uhbzu8qtqVCd6OfXA==",
- "dev": true,
- "dependencies": {
- "ts-dedent": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
- }
- },
- "node_modules/@storybook/nextjs/node_modules/@storybook/preview-api": {
- "version": "7.6.17",
- "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-7.6.17.tgz",
- "integrity": "sha512-wLfDdI9RWo1f2zzFe54yRhg+2YWyxLZvqdZnSQ45mTs4/7xXV5Wfbv3QNTtcdw8tT3U5KRTrN1mTfTCiRJc0Kw==",
- "dev": true,
- "dependencies": {
- "@storybook/channels": "7.6.17",
- "@storybook/client-logger": "7.6.17",
- "@storybook/core-events": "7.6.17",
- "@storybook/csf": "^0.1.2",
- "@storybook/global": "^5.0.0",
- "@storybook/types": "7.6.17",
- "@types/qs": "^6.9.5",
- "dequal": "^2.0.2",
- "lodash": "^4.17.21",
- "memoizerific": "^1.11.3",
- "qs": "^6.10.0",
- "synchronous-promise": "^2.0.15",
- "ts-dedent": "^2.0.0",
- "util-deprecate": "^1.0.2"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
- }
- },
- "node_modules/@storybook/nextjs/node_modules/@storybook/types": {
- "version": "7.6.17",
- "resolved": "https://registry.npmjs.org/@storybook/types/-/types-7.6.17.tgz",
- "integrity": "sha512-GRY0xEJQ0PrL7DY2qCNUdIfUOE0Gsue6N+GBJw9ku1IUDFLJRDOF+4Dx2BvYcVCPI5XPqdWKlEyZdMdKjiQN7Q==",
- "dev": true,
- "dependencies": {
- "@storybook/channels": "7.6.17",
- "@types/babel__core": "^7.0.0",
- "@types/express": "^4.7.0",
- "file-system-cache": "2.3.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
- }
- },
"node_modules/@storybook/nextjs/node_modules/@types/node": {
- "version": "18.19.30",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.30.tgz",
- "integrity": "sha512-453z1zPuJLVDbyahaa1sSD5C2sht6ZpHp5rgJNs+H8YGqhluCXcuOUmBYsAo0Tos0cHySJ3lVUGbGgLlqIkpyg==",
+ "version": "18.19.34",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.34.tgz",
+ "integrity": "sha512-eXF4pfBNV5DAMKGbI02NnDtWrQ40hAN558/2vvS4gMpMIxaf6JmD7YjnZbq0Q9TDSSkKBamime8ewRoomHdt4g==",
"dev": true,
"dependencies": {
"undici-types": "~5.26.4"
@@ -8140,35 +7386,10 @@
"url": "https://opencollective.com/libvips"
}
},
- "node_modules/@storybook/nextjs/node_modules/tar-fs": {
- "version": "3.0.5",
- "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.5.tgz",
- "integrity": "sha512-JOgGAmZyMgbqpLwct7ZV8VzkEB6pxXFBVErLtb+XCOqzc6w1xiWKI9GVd6bwk68EX7eJ4DWmfXVmq8K2ziZTGg==",
- "dev": true,
- "dependencies": {
- "pump": "^3.0.0",
- "tar-stream": "^3.1.5"
- },
- "optionalDependencies": {
- "bare-fs": "^2.1.1",
- "bare-path": "^2.1.0"
- }
- },
- "node_modules/@storybook/nextjs/node_modules/tar-stream": {
- "version": "3.1.7",
- "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz",
- "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==",
- "dev": true,
- "dependencies": {
- "b4a": "^1.6.4",
- "fast-fifo": "^1.2.0",
- "streamx": "^2.15.0"
- }
- },
"node_modules/@storybook/node-logger": {
- "version": "7.6.17",
- "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-7.6.17.tgz",
- "integrity": "sha512-w59MQuXhhUNrUVmVkXhMwIg2nvFWjdDczLTwYLorhfsE36CWeUOY5QCZWQy0Qf/h+jz8Uo7Evy64qn18v9C4wA==",
+ "version": "7.6.19",
+ "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-7.6.19.tgz",
+ "integrity": "sha512-2g29QC44Zl1jKY37DmQ0/dO7+VSKnGgPI/x0mwVwQffypSapxH3rwLLT5Q5XLHeFyD+fhRu5w9Cj4vTGynJgpA==",
"dev": true,
"funding": {
"type": "opencollective",
@@ -8176,9 +7397,9 @@
}
},
"node_modules/@storybook/postinstall": {
- "version": "7.6.17",
- "resolved": "https://registry.npmjs.org/@storybook/postinstall/-/postinstall-7.6.17.tgz",
- "integrity": "sha512-WaWqB8o9vUc9aaVls+povQSVirf1Xd1LZcVhUKfAocAF3mzYUsnJsVqvnbjRj/F96UFVihOyDt9Zjl/9OvrCvQ==",
+ "version": "7.6.19",
+ "resolved": "https://registry.npmjs.org/@storybook/postinstall/-/postinstall-7.6.19.tgz",
+ "integrity": "sha512-s6p1vpgMfn+QGDfCK2YNdyyWKidUgb3nGicB81FANRyzYqGB//QlJlghEc2LKCIQbGIZQiwP3l8PdZQmczEJRw==",
"dev": true,
"funding": {
"type": "opencollective",
@@ -8186,18 +7407,18 @@
}
},
"node_modules/@storybook/preset-react-webpack": {
- "version": "7.6.17",
- "resolved": "https://registry.npmjs.org/@storybook/preset-react-webpack/-/preset-react-webpack-7.6.17.tgz",
- "integrity": "sha512-gn/LvIbll9loOkzwbFlxzOZGmJ6t1vF2/gfi+p/N/AifDYe8+LVM1QV4KRVKt6UEJwsQd79lKf7vPH92AQaKKQ==",
+ "version": "7.6.19",
+ "resolved": "https://registry.npmjs.org/@storybook/preset-react-webpack/-/preset-react-webpack-7.6.19.tgz",
+ "integrity": "sha512-WvfDE4upH7jmisx5XOn4E07p9Fm8YJn4Aywc9vYM1jqQ8A1lEH8VSC1KR6dPfdmGr94jRscQkD6fjs9sUNTdrw==",
"dev": true,
"dependencies": {
"@babel/preset-flow": "^7.22.15",
"@babel/preset-react": "^7.22.15",
"@pmmmwh/react-refresh-webpack-plugin": "^0.5.11",
- "@storybook/core-webpack": "7.6.17",
- "@storybook/docs-tools": "7.6.17",
- "@storybook/node-logger": "7.6.17",
- "@storybook/react": "7.6.17",
+ "@storybook/core-webpack": "7.6.19",
+ "@storybook/docs-tools": "7.6.19",
+ "@storybook/node-logger": "7.6.19",
+ "@storybook/react": "7.6.19",
"@storybook/react-docgen-typescript-plugin": "1.0.6--canary.9.0c3f3b7.0",
"@types/node": "^18.0.0",
"@types/semver": "^7.3.4",
@@ -8231,200 +7452,36 @@
}
},
"node_modules/@storybook/preset-react-webpack/node_modules/@types/node": {
- "version": "18.19.30",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.30.tgz",
- "integrity": "sha512-453z1zPuJLVDbyahaa1sSD5C2sht6ZpHp5rgJNs+H8YGqhluCXcuOUmBYsAo0Tos0cHySJ3lVUGbGgLlqIkpyg==",
+ "version": "18.19.34",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.34.tgz",
+ "integrity": "sha512-eXF4pfBNV5DAMKGbI02NnDtWrQ40hAN558/2vvS4gMpMIxaf6JmD7YjnZbq0Q9TDSSkKBamime8ewRoomHdt4g==",
"dev": true,
"dependencies": {
"undici-types": "~5.26.4"
}
},
"node_modules/@storybook/preview": {
- "version": "7.6.17",
- "resolved": "https://registry.npmjs.org/@storybook/preview/-/preview-7.6.17.tgz",
- "integrity": "sha512-LvkMYK/y6alGjwRVNDIKL1lFlbyZ0H0c8iAbcQkiMoaFiujMQyVswMDKlWcj42Upfr/B1igydiruomc+eUt0mw==",
- "dev": true,
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
- }
- },
- "node_modules/@storybook/preview-api": {
- "version": "7.6.12",
- "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-7.6.12.tgz",
- "integrity": "sha512-uSzeMSLnCRROjiofJP0F0niLWL+sboQ5ktHW6BAYoPwprumXduPxKBUVEZNxMbVYoAz9v/kEZmaLauh8LRP2Hg==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@storybook/channels": "7.6.12",
- "@storybook/client-logger": "7.6.12",
- "@storybook/core-events": "7.6.12",
- "@storybook/csf": "^0.1.2",
- "@storybook/global": "^5.0.0",
- "@storybook/types": "7.6.12",
- "@types/qs": "^6.9.5",
- "dequal": "^2.0.2",
- "lodash": "^4.17.21",
- "memoizerific": "^1.11.3",
- "qs": "^6.10.0",
- "synchronous-promise": "^2.0.15",
- "ts-dedent": "^2.0.0",
- "util-deprecate": "^1.0.2"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
- }
- },
- "node_modules/@storybook/react": {
- "version": "7.6.17",
- "resolved": "https://registry.npmjs.org/@storybook/react/-/react-7.6.17.tgz",
- "integrity": "sha512-lVqzQSU03rRJWYW+gK2gq6mSo3/qtnVICY8B8oP7gc36jVu4ksDIu45bTfukM618ODkUZy0vZe6T4engK3azjA==",
- "dev": true,
- "dependencies": {
- "@storybook/client-logger": "7.6.17",
- "@storybook/core-client": "7.6.17",
- "@storybook/docs-tools": "7.6.17",
- "@storybook/global": "^5.0.0",
- "@storybook/preview-api": "7.6.17",
- "@storybook/react-dom-shim": "7.6.17",
- "@storybook/types": "7.6.17",
- "@types/escodegen": "^0.0.6",
- "@types/estree": "^0.0.51",
- "@types/node": "^18.0.0",
- "acorn": "^7.4.1",
- "acorn-jsx": "^5.3.1",
- "acorn-walk": "^7.2.0",
- "escodegen": "^2.1.0",
- "html-tags": "^3.1.0",
- "lodash": "^4.17.21",
- "prop-types": "^15.7.2",
- "react-element-to-jsx-string": "^15.0.0",
- "ts-dedent": "^2.0.0",
- "type-fest": "~2.19",
- "util-deprecate": "^1.0.2"
- },
- "engines": {
- "node": ">=16.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
- "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0",
- "typescript": "*"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
- }
- },
- "node_modules/@storybook/react-docgen-typescript-plugin": {
- "version": "1.0.6--canary.9.0c3f3b7.0",
- "resolved": "https://registry.npmjs.org/@storybook/react-docgen-typescript-plugin/-/react-docgen-typescript-plugin-1.0.6--canary.9.0c3f3b7.0.tgz",
- "integrity": "sha512-KUqXC3oa9JuQ0kZJLBhVdS4lOneKTOopnNBK4tUAgoxWQ3u/IjzdueZjFr7gyBrXMoU6duutk3RQR9u8ZpYJ4Q==",
- "dev": true,
- "dependencies": {
- "debug": "^4.1.1",
- "endent": "^2.0.1",
- "find-cache-dir": "^3.3.1",
- "flat-cache": "^3.0.4",
- "micromatch": "^4.0.2",
- "react-docgen-typescript": "^2.2.2",
- "tslib": "^2.0.0"
- },
- "peerDependencies": {
- "typescript": ">= 4.x",
- "webpack": ">= 4"
- }
- },
- "node_modules/@storybook/react-dom-shim": {
- "version": "7.6.17",
- "resolved": "https://registry.npmjs.org/@storybook/react-dom-shim/-/react-dom-shim-7.6.17.tgz",
- "integrity": "sha512-32Sa/G+WnvaPiQ1Wvjjw5UM9rr2c4GDohwCcWVv3/LJuiFPqNS6zglAtmnsrlIBnUwRBMLMh/ekCTdqMiUmfDw==",
- "dev": true,
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
- "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
- }
- },
- "node_modules/@storybook/react/node_modules/@storybook/channels": {
- "version": "7.6.17",
- "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-7.6.17.tgz",
- "integrity": "sha512-GFG40pzaSxk1hUr/J/TMqW5AFDDPUSu+HkeE/oqSWJbOodBOLJzHN6CReJS6y1DjYSZLNFt1jftPWZZInG/XUA==",
- "dev": true,
- "dependencies": {
- "@storybook/client-logger": "7.6.17",
- "@storybook/core-events": "7.6.17",
- "@storybook/global": "^5.0.0",
- "qs": "^6.10.0",
- "telejson": "^7.2.0",
- "tiny-invariant": "^1.3.1"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
- }
- },
- "node_modules/@storybook/react/node_modules/@storybook/client-logger": {
- "version": "7.6.17",
- "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.6.17.tgz",
- "integrity": "sha512-6WBYqixAXNAXlSaBWwgljWpAu10tPRBJrcFvx2gPUne58EeMM20Gi/iHYBz2kMCY+JLAgeIH7ZxInqwO8vDwiQ==",
- "dev": true,
- "dependencies": {
- "@storybook/global": "^5.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
- }
- },
- "node_modules/@storybook/react/node_modules/@storybook/core-client": {
- "version": "7.6.17",
- "resolved": "https://registry.npmjs.org/@storybook/core-client/-/core-client-7.6.17.tgz",
- "integrity": "sha512-LuDbADK+DPNAOOCXOlvY09hdGVueXlDetsdOJ/DgYnSa9QSWv9Uv+F8QcEgR3QckZJbPlztKJIVLgP2n/Xkijw==",
- "dev": true,
- "dependencies": {
- "@storybook/client-logger": "7.6.17",
- "@storybook/preview-api": "7.6.17"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
- }
- },
- "node_modules/@storybook/react/node_modules/@storybook/core-events": {
- "version": "7.6.17",
- "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.6.17.tgz",
- "integrity": "sha512-AriWMCm/k1cxlv10f+jZ1wavThTRpLaN3kY019kHWbYT9XgaSuLU67G7GPr3cGnJ6HuA6uhbzu8qtqVCd6OfXA==",
+ "version": "7.6.19",
+ "resolved": "https://registry.npmjs.org/@storybook/preview/-/preview-7.6.19.tgz",
+ "integrity": "sha512-VqRPua2koOQTOteB+VvuKNXFYQ7IDEopaPpj9Nx+3kom+bqp0hWdAysWcm6CtKN2GGzBQm+5PvGibMNdawsaVg==",
"dev": true,
- "dependencies": {
- "ts-dedent": "^2.0.0"
- },
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/storybook"
}
- },
- "node_modules/@storybook/react/node_modules/@storybook/preview-api": {
- "version": "7.6.17",
- "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-7.6.17.tgz",
- "integrity": "sha512-wLfDdI9RWo1f2zzFe54yRhg+2YWyxLZvqdZnSQ45mTs4/7xXV5Wfbv3QNTtcdw8tT3U5KRTrN1mTfTCiRJc0Kw==",
+ },
+ "node_modules/@storybook/preview-api": {
+ "version": "7.6.19",
+ "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-7.6.19.tgz",
+ "integrity": "sha512-04hdMSQucroJT4dBjQzRd7ZwH2hij8yx2nm5qd4HYGkd1ORkvlH6GOLph4XewNJl5Um3xfzFQzBhvkqvG0WaCQ==",
"dev": true,
"dependencies": {
- "@storybook/channels": "7.6.17",
- "@storybook/client-logger": "7.6.17",
- "@storybook/core-events": "7.6.17",
+ "@storybook/channels": "7.6.19",
+ "@storybook/client-logger": "7.6.19",
+ "@storybook/core-events": "7.6.19",
"@storybook/csf": "^0.1.2",
"@storybook/global": "^5.0.0",
- "@storybook/types": "7.6.17",
+ "@storybook/types": "7.6.19",
"@types/qs": "^6.9.5",
"dequal": "^2.0.2",
"lodash": "^4.17.21",
@@ -8439,39 +7496,101 @@
"url": "https://opencollective.com/storybook"
}
},
- "node_modules/@storybook/react/node_modules/@storybook/types": {
- "version": "7.6.17",
- "resolved": "https://registry.npmjs.org/@storybook/types/-/types-7.6.17.tgz",
- "integrity": "sha512-GRY0xEJQ0PrL7DY2qCNUdIfUOE0Gsue6N+GBJw9ku1IUDFLJRDOF+4Dx2BvYcVCPI5XPqdWKlEyZdMdKjiQN7Q==",
+ "node_modules/@storybook/react": {
+ "version": "7.6.19",
+ "resolved": "https://registry.npmjs.org/@storybook/react/-/react-7.6.19.tgz",
+ "integrity": "sha512-uKShAAp1/pRki1YnRjBveH/jAD3f8V0W2WP1LxTQqnKVFkl01mTbDZ/9ZIK6rVTSILUlmsk3fwsNyRbOKVgBGQ==",
"dev": true,
"dependencies": {
- "@storybook/channels": "7.6.17",
- "@types/babel__core": "^7.0.0",
- "@types/express": "^4.7.0",
- "file-system-cache": "2.3.0"
+ "@storybook/client-logger": "7.6.19",
+ "@storybook/core-client": "7.6.19",
+ "@storybook/docs-tools": "7.6.19",
+ "@storybook/global": "^5.0.0",
+ "@storybook/preview-api": "7.6.19",
+ "@storybook/react-dom-shim": "7.6.19",
+ "@storybook/types": "7.6.19",
+ "@types/escodegen": "^0.0.6",
+ "@types/estree": "^0.0.51",
+ "@types/node": "^18.0.0",
+ "acorn": "^7.4.1",
+ "acorn-jsx": "^5.3.1",
+ "acorn-walk": "^7.2.0",
+ "escodegen": "^2.1.0",
+ "html-tags": "^3.1.0",
+ "lodash": "^4.17.21",
+ "prop-types": "^15.7.2",
+ "react-element-to-jsx-string": "^15.0.0",
+ "ts-dedent": "^2.0.0",
+ "type-fest": "~2.19",
+ "util-deprecate": "^1.0.2"
+ },
+ "engines": {
+ "node": ">=16.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/storybook"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
+ "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0",
+ "typescript": "*"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@storybook/react-docgen-typescript-plugin": {
+ "version": "1.0.6--canary.9.0c3f3b7.0",
+ "resolved": "https://registry.npmjs.org/@storybook/react-docgen-typescript-plugin/-/react-docgen-typescript-plugin-1.0.6--canary.9.0c3f3b7.0.tgz",
+ "integrity": "sha512-KUqXC3oa9JuQ0kZJLBhVdS4lOneKTOopnNBK4tUAgoxWQ3u/IjzdueZjFr7gyBrXMoU6duutk3RQR9u8ZpYJ4Q==",
+ "dev": true,
+ "dependencies": {
+ "debug": "^4.1.1",
+ "endent": "^2.0.1",
+ "find-cache-dir": "^3.3.1",
+ "flat-cache": "^3.0.4",
+ "micromatch": "^4.0.2",
+ "react-docgen-typescript": "^2.2.2",
+ "tslib": "^2.0.0"
+ },
+ "peerDependencies": {
+ "typescript": ">= 4.x",
+ "webpack": ">= 4"
+ }
+ },
+ "node_modules/@storybook/react-dom-shim": {
+ "version": "7.6.19",
+ "resolved": "https://registry.npmjs.org/@storybook/react-dom-shim/-/react-dom-shim-7.6.19.tgz",
+ "integrity": "sha512-tpt2AC1428d1gF4fetMkpkeFZ1WdDr1CLKoLbSInWQZ7i96nbnIMIA9raR/W8ai1bo55KSz9Bq5ytC/1Pac2qQ==",
+ "dev": true,
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
+ "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
}
},
"node_modules/@storybook/react/node_modules/@types/node": {
- "version": "18.19.24",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.24.tgz",
- "integrity": "sha512-eghAz3gnbQbvnHqB+mgB2ZR3aH6RhdEmHGS48BnV75KceQPHqabkxKI0BbUSsqhqy2Ddhc2xD/VAR9ySZd57Lw==",
+ "version": "18.19.34",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.34.tgz",
+ "integrity": "sha512-eXF4pfBNV5DAMKGbI02NnDtWrQ40hAN558/2vvS4gMpMIxaf6JmD7YjnZbq0Q9TDSSkKBamime8ewRoomHdt4g==",
"dev": true,
"dependencies": {
"undici-types": "~5.26.4"
}
},
"node_modules/@storybook/router": {
- "version": "7.6.12",
- "resolved": "https://registry.npmjs.org/@storybook/router/-/router-7.6.12.tgz",
- "integrity": "sha512-1fqscJbePFJXhapqiv7fAIIqAvouSsdPnqWjJGJrUMR6JBtRYMcrb3MnDeqi9OYnU73r65BrQBPtSzWM8nP0LQ==",
+ "version": "7.6.19",
+ "resolved": "https://registry.npmjs.org/@storybook/router/-/router-7.6.19.tgz",
+ "integrity": "sha512-q2/AvY8rG0znFEfbg50OIhkS5yQ6OmyzdCdztoEsDDdsbq87YPmsDj7k8Op1EkTa2T5CB8XhBOCQDtcj7gUUtg==",
"dev": true,
- "peer": true,
"dependencies": {
- "@storybook/client-logger": "7.6.12",
+ "@storybook/client-logger": "7.6.19",
"memoizerific": "^1.11.3",
"qs": "^6.10.0"
},
@@ -8481,14 +7600,14 @@
}
},
"node_modules/@storybook/telemetry": {
- "version": "7.6.17",
- "resolved": "https://registry.npmjs.org/@storybook/telemetry/-/telemetry-7.6.17.tgz",
- "integrity": "sha512-WOcOAmmengYnGInH98Px44F47DSpLyk20BM+Z/IIQDzfttGOLlxNqBBG1XTEhNRn+AYuk4aZ2JEed2lCjVIxcA==",
+ "version": "7.6.19",
+ "resolved": "https://registry.npmjs.org/@storybook/telemetry/-/telemetry-7.6.19.tgz",
+ "integrity": "sha512-rA5xum4I36M57iiD3uzmW0MOdpl0vEpHWBSAa5hK0a0ALPeY9TgAsQlI/0dSyNYJ/K7aczEEN6d4qm1NC4u10A==",
"dev": true,
"dependencies": {
- "@storybook/client-logger": "7.6.17",
- "@storybook/core-common": "7.6.17",
- "@storybook/csf-tools": "7.6.17",
+ "@storybook/client-logger": "7.6.19",
+ "@storybook/core-common": "7.6.19",
+ "@storybook/csf-tools": "7.6.19",
"chalk": "^4.1.0",
"detect-package-manager": "^2.0.1",
"fetch-retry": "^5.0.2",
@@ -8500,19 +7619,6 @@
"url": "https://opencollective.com/storybook"
}
},
- "node_modules/@storybook/telemetry/node_modules/@storybook/client-logger": {
- "version": "7.6.17",
- "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.6.17.tgz",
- "integrity": "sha512-6WBYqixAXNAXlSaBWwgljWpAu10tPRBJrcFvx2gPUne58EeMM20Gi/iHYBz2kMCY+JLAgeIH7ZxInqwO8vDwiQ==",
- "dev": true,
- "dependencies": {
- "@storybook/global": "^5.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
- }
- },
"node_modules/@storybook/telemetry/node_modules/ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
@@ -8566,14 +7672,13 @@
}
},
"node_modules/@storybook/theming": {
- "version": "7.6.12",
- "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-7.6.12.tgz",
- "integrity": "sha512-P4zoMKlSYbNrWJjQROuz+DZSDEpdf3TUvk203EqBRdElqw2EMHcqZ8+0HGPFfVHpqEj05+B9Mr6R/Z/BURj0lw==",
+ "version": "7.6.19",
+ "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-7.6.19.tgz",
+ "integrity": "sha512-sAho13MmtA80ctOaLn8lpkQBsPyiqSdLcOPH5BWFhatQzzBQCpTAKQk+q/xGju8bNiPZ+yQBaBzbN8SfX8ceCg==",
"dev": true,
- "peer": true,
"dependencies": {
"@emotion/use-insertion-effect-with-fallbacks": "^1.0.0",
- "@storybook/client-logger": "7.6.12",
+ "@storybook/client-logger": "7.6.19",
"@storybook/global": "^5.0.0",
"memoizerific": "^1.11.3"
},
@@ -8587,13 +7692,12 @@
}
},
"node_modules/@storybook/types": {
- "version": "7.6.12",
- "resolved": "https://registry.npmjs.org/@storybook/types/-/types-7.6.12.tgz",
- "integrity": "sha512-Wsbd+NS10/2yMHQ/26rXHflXam0hm2qufTFiHOX6VXZWxij3slRU88Fnwzp+1QSyjXb0qkEr8dOx7aG00+ItVw==",
+ "version": "7.6.19",
+ "resolved": "https://registry.npmjs.org/@storybook/types/-/types-7.6.19.tgz",
+ "integrity": "sha512-DeGYrRPRMGTVfT7o2rEZtRzyLT2yKTI2exgpnxbwPWEFAduZCSfzBrcBXZ/nb5B0pjA9tUNWls1YzGkJGlkhpg==",
"dev": true,
- "peer": true,
"dependencies": {
- "@storybook/channels": "7.6.12",
+ "@storybook/channels": "7.6.19",
"@types/babel__core": "^7.0.0",
"@types/express": "^4.7.0",
"file-system-cache": "2.3.0"
@@ -8604,14 +7708,14 @@
}
},
"node_modules/@swc/core": {
- "version": "1.3.107",
- "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.3.107.tgz",
- "integrity": "sha512-zKhqDyFcTsyLIYK1iEmavljZnf4CCor5pF52UzLAz4B6Nu/4GLU+2LQVAf+oRHjusG39PTPjd2AlRT3f3QWfsQ==",
+ "version": "1.5.24",
+ "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.5.24.tgz",
+ "integrity": "sha512-Eph9zvO4xvqWZGVzTdtdEJ0Vqf0VIML/o/e4Qd2RLOqtfgnlRi7avmMu5C0oqciJ0tk+hqdUKVUZ4JPoPaiGvQ==",
"dev": true,
"hasInstallScript": true,
"dependencies": {
- "@swc/counter": "^0.1.1",
- "@swc/types": "^0.1.5"
+ "@swc/counter": "^0.1.3",
+ "@swc/types": "^0.1.7"
},
"engines": {
"node": ">=10"
@@ -8621,19 +7725,19 @@
"url": "https://opencollective.com/swc"
},
"optionalDependencies": {
- "@swc/core-darwin-arm64": "1.3.107",
- "@swc/core-darwin-x64": "1.3.107",
- "@swc/core-linux-arm-gnueabihf": "1.3.107",
- "@swc/core-linux-arm64-gnu": "1.3.107",
- "@swc/core-linux-arm64-musl": "1.3.107",
- "@swc/core-linux-x64-gnu": "1.3.107",
- "@swc/core-linux-x64-musl": "1.3.107",
- "@swc/core-win32-arm64-msvc": "1.3.107",
- "@swc/core-win32-ia32-msvc": "1.3.107",
- "@swc/core-win32-x64-msvc": "1.3.107"
+ "@swc/core-darwin-arm64": "1.5.24",
+ "@swc/core-darwin-x64": "1.5.24",
+ "@swc/core-linux-arm-gnueabihf": "1.5.24",
+ "@swc/core-linux-arm64-gnu": "1.5.24",
+ "@swc/core-linux-arm64-musl": "1.5.24",
+ "@swc/core-linux-x64-gnu": "1.5.24",
+ "@swc/core-linux-x64-musl": "1.5.24",
+ "@swc/core-win32-arm64-msvc": "1.5.24",
+ "@swc/core-win32-ia32-msvc": "1.5.24",
+ "@swc/core-win32-x64-msvc": "1.5.24"
},
"peerDependencies": {
- "@swc/helpers": "^0.5.0"
+ "@swc/helpers": "*"
},
"peerDependenciesMeta": {
"@swc/helpers": {
@@ -8642,9 +7746,9 @@
}
},
"node_modules/@swc/core-darwin-arm64": {
- "version": "1.3.107",
- "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.107.tgz",
- "integrity": "sha512-47tD/5vSXWxPd0j/ZllyQUg4bqalbQTsmqSw0J4dDdS82MWqCAwUErUrAZPRjBkjNQ6Kmrf5rpCWaGTtPw+ngw==",
+ "version": "1.5.24",
+ "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.5.24.tgz",
+ "integrity": "sha512-M7oLOcC0sw+UTyAuL/9uyB9GeO4ZpaBbH76JSH6g1m0/yg7LYJZGRmplhDmwVSDAR5Fq4Sjoi1CksmmGkgihGA==",
"cpu": [
"arm64"
],
@@ -8658,9 +7762,9 @@
}
},
"node_modules/@swc/core-darwin-x64": {
- "version": "1.3.107",
- "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.3.107.tgz",
- "integrity": "sha512-hwiLJ2ulNkBGAh1m1eTfeY1417OAYbRGcb/iGsJ+LuVLvKAhU/itzsl535CvcwAlt2LayeCFfcI8gdeOLeZa9A==",
+ "version": "1.5.24",
+ "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.5.24.tgz",
+ "integrity": "sha512-MfcFjGGYognpSBSos2pYUNYJSmqEhuw5ceGr6qAdME7ddbjGXliza4W6FggsM+JnWwpqa31+e7/R+GetW4WkaQ==",
"cpu": [
"x64"
],
@@ -8674,9 +7778,9 @@
}
},
"node_modules/@swc/core-linux-arm-gnueabihf": {
- "version": "1.3.107",
- "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.3.107.tgz",
- "integrity": "sha512-I2wzcC0KXqh0OwymCmYwNRgZ9nxX7DWnOOStJXV3pS0uB83TXAkmqd7wvMBuIl9qu4Hfomi9aDM7IlEEn9tumQ==",
+ "version": "1.5.24",
+ "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.5.24.tgz",
+ "integrity": "sha512-amI2pwtcWV3E/m/nf+AQtn1LWDzKLZyjCmWd3ms7QjEueWYrY8cU1Y4Wp7wNNsxIoPOi8zek1Uj2wwFD/pttNQ==",
"cpu": [
"arm"
],
@@ -8690,9 +7794,9 @@
}
},
"node_modules/@swc/core-linux-arm64-gnu": {
- "version": "1.3.107",
- "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.107.tgz",
- "integrity": "sha512-HWgnn7JORYlOYnGsdunpSF8A+BCZKPLzLtEUA27/M/ZuANcMZabKL9Zurt7XQXq888uJFAt98Gy+59PU90aHKg==",
+ "version": "1.5.24",
+ "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.5.24.tgz",
+ "integrity": "sha512-sTSvmqMmgT1ynH/nP75Pc51s+iT4crZagHBiDOf5cq+kudUYjda9lWMs7xkXB/TUKFHPCRK0HGunl8bkwiIbuw==",
"cpu": [
"arm64"
],
@@ -8706,9 +7810,9 @@
}
},
"node_modules/@swc/core-linux-arm64-musl": {
- "version": "1.3.107",
- "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.107.tgz",
- "integrity": "sha512-vfPF74cWfAm8hyhS8yvYI94ucMHIo8xIYU+oFOW9uvDlGQRgnUf/6DEVbLyt/3yfX5723Ln57U8uiMALbX5Pyw==",
+ "version": "1.5.24",
+ "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.5.24.tgz",
+ "integrity": "sha512-vd2/hfOBGbrX21FxsFdXCUaffjkHvlZkeE2UMRajdXifwv79jqOHIJg3jXG1F3ZrhCghCzirFts4tAZgcG8XWg==",
"cpu": [
"arm64"
],
@@ -8722,9 +7826,9 @@
}
},
"node_modules/@swc/core-linux-x64-gnu": {
- "version": "1.3.107",
- "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.107.tgz",
- "integrity": "sha512-uBVNhIg0ip8rH9OnOsCARUFZ3Mq3tbPHxtmWk9uAa5u8jQwGWeBx5+nTHpDOVd3YxKb6+5xDEI/edeeLpha/9g==",
+ "version": "1.5.24",
+ "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.5.24.tgz",
+ "integrity": "sha512-Zrdzi7NqzQxm2BvAG5KyOSBEggQ7ayrxh599AqqevJmsUXJ8o2nMiWQOBvgCGp7ye+Biz3pvZn1EnRzAp+TpUg==",
"cpu": [
"x64"
],
@@ -8738,9 +7842,9 @@
}
},
"node_modules/@swc/core-linux-x64-musl": {
- "version": "1.3.107",
- "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.107.tgz",
- "integrity": "sha512-mvACkUvzSIB12q1H5JtabWATbk3AG+pQgXEN95AmEX2ZA5gbP9+B+mijsg7Sd/3tboHr7ZHLz/q3SHTvdFJrEw==",
+ "version": "1.5.24",
+ "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.5.24.tgz",
+ "integrity": "sha512-1F8z9NRi52jdZQCGc5sflwYSctL6omxiVmIFVp8TC9nngjQKc00TtX/JC2Eo2HwvgupkFVl5YQJidAck9YtmJw==",
"cpu": [
"x64"
],
@@ -8754,9 +7858,9 @@
}
},
"node_modules/@swc/core-win32-arm64-msvc": {
- "version": "1.3.107",
- "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.107.tgz",
- "integrity": "sha512-J3P14Ngy/1qtapzbguEH41kY109t6DFxfbK4Ntz9dOWNuVY3o9/RTB841ctnJk0ZHEG+BjfCJjsD2n8H5HcaOA==",
+ "version": "1.5.24",
+ "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.5.24.tgz",
+ "integrity": "sha512-cKpP7KvS6Xr0jFSTBXY53HZX/YfomK5EMQYpCVDOvfsZeYHN20sQSKXfpVLvA/q2igVt1zzy1XJcOhpJcgiKLg==",
"cpu": [
"arm64"
],
@@ -8770,9 +7874,9 @@
}
},
"node_modules/@swc/core-win32-ia32-msvc": {
- "version": "1.3.107",
- "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.107.tgz",
- "integrity": "sha512-ZBUtgyjTHlz8TPJh7kfwwwFma+ktr6OccB1oXC8fMSopD0AxVnQasgun3l3099wIsAB9eEsJDQ/3lDkOLs1gBA==",
+ "version": "1.5.24",
+ "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.5.24.tgz",
+ "integrity": "sha512-IoPWfi0iwqjZuf7gE223+B97/ZwkKbu7qL5KzGP7g3hJrGSKAvv7eC5Y9r2iKKtLKyv5R/T6Ho0kFR/usi7rHw==",
"cpu": [
"ia32"
],
@@ -8786,9 +7890,9 @@
}
},
"node_modules/@swc/core-win32-x64-msvc": {
- "version": "1.3.107",
- "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.107.tgz",
- "integrity": "sha512-Eyzo2XRqWOxqhE1gk9h7LWmUf4Bp4Xn2Ttb0ayAXFp6YSTxQIThXcT9kipXZqcpxcmDwoq8iWbbf2P8XL743EA==",
+ "version": "1.5.24",
+ "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.5.24.tgz",
+ "integrity": "sha512-zHgF2k1uVJL8KIW+PnVz1To4a3Cz9THbh2z2lbehaF/gKHugH4c3djBozU4das1v35KOqf5jWIEviBLql2wDLQ==",
"cpu": [
"x64"
],
@@ -8816,10 +7920,13 @@
}
},
"node_modules/@swc/types": {
- "version": "0.1.5",
- "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.5.tgz",
- "integrity": "sha512-myfUej5naTBWnqOCc/MdVOLVjXUXtIA+NpDrDBKJtLLg2shUjBu3cZmB/85RyitKc55+lUUyl7oRfLOvkr2hsw==",
- "dev": true
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.7.tgz",
+ "integrity": "sha512-scHWahbHF0eyj3JsxG9CFJgFdFNaVQCNAimBlT6PzS3n/HptxqREjsm4OH6AN3lYcffZYSPxXW8ua2BEHp0lJQ==",
+ "dev": true,
+ "dependencies": {
+ "@swc/counter": "^0.1.3"
+ }
},
"node_modules/@testing-library/dom": {
"version": "9.3.4",
@@ -8964,9 +8071,9 @@
}
},
"node_modules/@testing-library/react": {
- "version": "14.2.1",
- "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-14.2.1.tgz",
- "integrity": "sha512-sGdjws32ai5TLerhvzThYFbpnF9XtL65Cjf+gB0Dhr29BGqK+mAeN7SURSdu+eqgET4ANcWoC7FQpkaiGvBr+A==",
+ "version": "14.3.1",
+ "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-14.3.1.tgz",
+ "integrity": "sha512-H99XjUhWQw0lTgyMN05W3xQG1Nh4lq574D8keFf1dDoNTJgp66VbJozRaczoF+wsiaPJNt/TcnfpLGufGxSrZQ==",
"dev": true,
"dependencies": {
"@babel/runtime": "^7.12.5",
@@ -9055,9 +8162,9 @@
}
},
"node_modules/@types/babel__traverse": {
- "version": "7.20.5",
- "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.5.tgz",
- "integrity": "sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==",
+ "version": "7.20.6",
+ "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz",
+ "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==",
"dev": true,
"dependencies": {
"@babel/types": "^7.20.7"
@@ -9110,9 +8217,9 @@
"dev": true
},
"node_modules/@types/emscripten": {
- "version": "1.39.10",
- "resolved": "https://registry.npmjs.org/@types/emscripten/-/emscripten-1.39.10.tgz",
- "integrity": "sha512-TB/6hBkYQJxsZHSqyeuO1Jt0AB/bW6G7rHt9g7lML7SOF6lbgcHvw/Lr+69iqN0qxgXLhWKScAon73JNnptuDw==",
+ "version": "1.39.13",
+ "resolved": "https://registry.npmjs.org/@types/emscripten/-/emscripten-1.39.13.tgz",
+ "integrity": "sha512-cFq+fO/isvhvmuP/+Sl4K4jtU6E23DoivtbO4r50e3odaxAiVdbfSYRDdJ4gCdxx+3aRjhphS5ZMwIH4hFy/Cw==",
"dev": true
},
"node_modules/@types/escodegen": {
@@ -9122,9 +8229,9 @@
"dev": true
},
"node_modules/@types/eslint": {
- "version": "8.56.2",
- "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.2.tgz",
- "integrity": "sha512-uQDwm1wFHmbBbCZCqAlq6Do9LYwByNZHWzXppSnay9SuwJ+VRbjkbLABer54kcPnMSlG6Fdiy2yaFXm/z9Z5gw==",
+ "version": "8.56.10",
+ "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.10.tgz",
+ "integrity": "sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==",
"dev": true,
"dependencies": {
"@types/estree": "*",
@@ -9160,9 +8267,9 @@
}
},
"node_modules/@types/express-serve-static-core": {
- "version": "4.17.42",
- "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.42.tgz",
- "integrity": "sha512-ckM3jm2bf/MfB3+spLPWYPUH573plBFwpOhqQ2WottxYV85j1HQFlxmnTq57X1yHY9awZPig06hL/cLMgNWHIQ==",
+ "version": "4.19.3",
+ "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.3.tgz",
+ "integrity": "sha512-KOzM7MhcBFlmnlr/fzISFF5vGWVSvN6fTd4T+ExOt08bA/dA5kpSzY52nMsI1KDFmUREpJelPYyuslLRSjjgCg==",
"dev": true,
"dependencies": {
"@types/node": "*",
@@ -9269,9 +8376,9 @@
}
},
"node_modules/@types/jest/node_modules/react-is": {
- "version": "18.2.0",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz",
- "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==",
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz",
+ "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==",
"dev": true
},
"node_modules/@types/js-cookie": {
@@ -9304,15 +8411,15 @@
"dev": true
},
"node_modules/@types/lodash": {
- "version": "4.17.0",
- "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.0.tgz",
- "integrity": "sha512-t7dhREVv6dbNj0q17X12j7yDG4bD/DHYX7o5/DbDxobP0HnGPgpRz2Ej77aL7TZT3DSw13fqUTj8J4mMnqa7WA==",
+ "version": "4.17.4",
+ "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.4.tgz",
+ "integrity": "sha512-wYCP26ZLxaT3R39kiN2+HcJ4kTd3U1waI/cY7ivWYqFP6pW3ZNpvi6Wd6PHZx7T/t8z0vlkXMg3QYLa7DZ/IJQ==",
"dev": true
},
"node_modules/@types/mdx": {
- "version": "2.0.11",
- "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.11.tgz",
- "integrity": "sha512-HM5bwOaIQJIQbAYfax35HCKxx7a3KrK3nBtIqJgSOitivTD1y3oW9P3rxY9RkXYPUk7y/AjAohfHKmFpGE79zw==",
+ "version": "2.0.13",
+ "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.13.tgz",
+ "integrity": "sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==",
"dev": true
},
"node_modules/@types/mime": {
@@ -9328,9 +8435,9 @@
"dev": true
},
"node_modules/@types/node": {
- "version": "20.12.5",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.5.tgz",
- "integrity": "sha512-BD+BjQ9LS/D8ST9p5uqBxghlN+S42iuNxjsUGjeZobe/ciXzk2qb1B6IXc6AnRLS+yFJRpN2IPEHMzwspfDJNw==",
+ "version": "20.14.1",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.1.tgz",
+ "integrity": "sha512-T2MzSGEu+ysB/FkWfqmhV3PLyQlowdptmmgD20C6QxsS8Fmv5SjpZ1ayXaEC0S21/h5UJ9iA6W/5vSNU5l00OA==",
"dev": true,
"dependencies": {
"undici-types": "~5.26.4"
@@ -9365,15 +8472,15 @@
"dev": true
},
"node_modules/@types/prop-types": {
- "version": "15.7.11",
- "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.11.tgz",
- "integrity": "sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==",
+ "version": "15.7.12",
+ "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz",
+ "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==",
"dev": true
},
"node_modules/@types/qs": {
- "version": "6.9.11",
- "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.11.tgz",
- "integrity": "sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ==",
+ "version": "6.9.15",
+ "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.15.tgz",
+ "integrity": "sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==",
"dev": true
},
"node_modules/@types/range-parser": {
@@ -9383,9 +8490,9 @@
"dev": true
},
"node_modules/@types/react": {
- "version": "18.2.74",
- "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.74.tgz",
- "integrity": "sha512-9AEqNZZyBx8OdZpxzQlaFEVCSFUM2YXJH46yPOiOpm078k6ZLOCcuAzGum/zK8YBwY+dbahVNbHrbgrAwIRlqw==",
+ "version": "18.3.3",
+ "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.3.tgz",
+ "integrity": "sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw==",
"dev": true,
"dependencies": {
"@types/prop-types": "*",
@@ -9393,9 +8500,9 @@
}
},
"node_modules/@types/react-dom": {
- "version": "18.2.24",
- "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.24.tgz",
- "integrity": "sha512-cN6upcKd8zkGy4HU9F1+/s98Hrp6D4MOcippK4PoE8OZRngohHZpbJn1GsaDLz87MqvHNoT13nHvNqM9ocRHZg==",
+ "version": "18.3.0",
+ "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.0.tgz",
+ "integrity": "sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==",
"dev": true,
"dependencies": {
"@types/react": "*"
@@ -9408,9 +8515,9 @@
"dev": true
},
"node_modules/@types/semver": {
- "version": "7.5.6",
- "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.6.tgz",
- "integrity": "sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==",
+ "version": "7.5.8",
+ "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz",
+ "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==",
"dev": true
},
"node_modules/@types/send": {
@@ -9424,14 +8531,14 @@
}
},
"node_modules/@types/serve-static": {
- "version": "1.15.5",
- "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.5.tgz",
- "integrity": "sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==",
+ "version": "1.15.7",
+ "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz",
+ "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==",
"dev": true,
"dependencies": {
"@types/http-errors": "*",
- "@types/mime": "*",
- "@types/node": "*"
+ "@types/node": "*",
+ "@types/send": "*"
}
},
"node_modules/@types/stack-utils": {
@@ -9488,6 +8595,16 @@
"integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==",
"dev": true
},
+ "node_modules/@types/yauzl": {
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz",
+ "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==",
+ "dev": true,
+ "optional": true,
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
"node_modules/@typescript-eslint/eslint-plugin": {
"version": "5.62.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz",
@@ -9683,9 +8800,9 @@
"dev": true
},
"node_modules/@uswds/uswds": {
- "version": "3.7.1",
- "resolved": "https://registry.npmjs.org/@uswds/uswds/-/uswds-3.7.1.tgz",
- "integrity": "sha512-32u2S50bf5dwIujebqL+f1Jgx2rmRrpxcaccSZzdo3Qv9HaDUdcmeavlrxHqN30edHc7p8kRPjvjevOmOJKB7w==",
+ "version": "3.8.1",
+ "resolved": "https://registry.npmjs.org/@uswds/uswds/-/uswds-3.8.1.tgz",
+ "integrity": "sha512-bKG/B9mJF1v0yoqth48wQDzST5Xyu3OxxpePIPDyhKWS84oDrCehnu3Z88JhSjdIAJMl8dtjtH8YvdO9kZUpAg==",
"dependencies": {
"classlist-polyfill": "1.2.0",
"object-assign": "4.1.1",
@@ -9697,9 +8814,9 @@
}
},
"node_modules/@webassemblyjs/ast": {
- "version": "1.11.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz",
- "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==",
+ "version": "1.12.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz",
+ "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==",
"dev": true,
"dependencies": {
"@webassemblyjs/helper-numbers": "1.11.6",
@@ -9719,9 +8836,9 @@
"dev": true
},
"node_modules/@webassemblyjs/helper-buffer": {
- "version": "1.11.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz",
- "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==",
+ "version": "1.12.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz",
+ "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==",
"dev": true
},
"node_modules/@webassemblyjs/helper-numbers": {
@@ -9742,15 +8859,15 @@
"dev": true
},
"node_modules/@webassemblyjs/helper-wasm-section": {
- "version": "1.11.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz",
- "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==",
+ "version": "1.12.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz",
+ "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==",
"dev": true,
"dependencies": {
- "@webassemblyjs/ast": "1.11.6",
- "@webassemblyjs/helper-buffer": "1.11.6",
+ "@webassemblyjs/ast": "1.12.1",
+ "@webassemblyjs/helper-buffer": "1.12.1",
"@webassemblyjs/helper-wasm-bytecode": "1.11.6",
- "@webassemblyjs/wasm-gen": "1.11.6"
+ "@webassemblyjs/wasm-gen": "1.12.1"
}
},
"node_modules/@webassemblyjs/ieee754": {
@@ -9778,28 +8895,28 @@
"dev": true
},
"node_modules/@webassemblyjs/wasm-edit": {
- "version": "1.11.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz",
- "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==",
+ "version": "1.12.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz",
+ "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==",
"dev": true,
"dependencies": {
- "@webassemblyjs/ast": "1.11.6",
- "@webassemblyjs/helper-buffer": "1.11.6",
+ "@webassemblyjs/ast": "1.12.1",
+ "@webassemblyjs/helper-buffer": "1.12.1",
"@webassemblyjs/helper-wasm-bytecode": "1.11.6",
- "@webassemblyjs/helper-wasm-section": "1.11.6",
- "@webassemblyjs/wasm-gen": "1.11.6",
- "@webassemblyjs/wasm-opt": "1.11.6",
- "@webassemblyjs/wasm-parser": "1.11.6",
- "@webassemblyjs/wast-printer": "1.11.6"
+ "@webassemblyjs/helper-wasm-section": "1.12.1",
+ "@webassemblyjs/wasm-gen": "1.12.1",
+ "@webassemblyjs/wasm-opt": "1.12.1",
+ "@webassemblyjs/wasm-parser": "1.12.1",
+ "@webassemblyjs/wast-printer": "1.12.1"
}
},
"node_modules/@webassemblyjs/wasm-gen": {
- "version": "1.11.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz",
- "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==",
+ "version": "1.12.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz",
+ "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==",
"dev": true,
"dependencies": {
- "@webassemblyjs/ast": "1.11.6",
+ "@webassemblyjs/ast": "1.12.1",
"@webassemblyjs/helper-wasm-bytecode": "1.11.6",
"@webassemblyjs/ieee754": "1.11.6",
"@webassemblyjs/leb128": "1.11.6",
@@ -9807,24 +8924,24 @@
}
},
"node_modules/@webassemblyjs/wasm-opt": {
- "version": "1.11.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz",
- "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==",
+ "version": "1.12.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz",
+ "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==",
"dev": true,
"dependencies": {
- "@webassemblyjs/ast": "1.11.6",
- "@webassemblyjs/helper-buffer": "1.11.6",
- "@webassemblyjs/wasm-gen": "1.11.6",
- "@webassemblyjs/wasm-parser": "1.11.6"
+ "@webassemblyjs/ast": "1.12.1",
+ "@webassemblyjs/helper-buffer": "1.12.1",
+ "@webassemblyjs/wasm-gen": "1.12.1",
+ "@webassemblyjs/wasm-parser": "1.12.1"
}
},
"node_modules/@webassemblyjs/wasm-parser": {
- "version": "1.11.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz",
- "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==",
+ "version": "1.12.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz",
+ "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==",
"dev": true,
"dependencies": {
- "@webassemblyjs/ast": "1.11.6",
+ "@webassemblyjs/ast": "1.12.1",
"@webassemblyjs/helper-api-error": "1.11.6",
"@webassemblyjs/helper-wasm-bytecode": "1.11.6",
"@webassemblyjs/ieee754": "1.11.6",
@@ -9833,12 +8950,12 @@
}
},
"node_modules/@webassemblyjs/wast-printer": {
- "version": "1.11.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz",
- "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==",
+ "version": "1.12.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz",
+ "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==",
"dev": true,
"dependencies": {
- "@webassemblyjs/ast": "1.11.6",
+ "@webassemblyjs/ast": "1.12.1",
"@xtuc/long": "4.2.2"
}
},
@@ -10095,15 +9212,15 @@
}
},
"node_modules/ajv-formats/node_modules/ajv": {
- "version": "8.12.0",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz",
- "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==",
+ "version": "8.16.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.16.0.tgz",
+ "integrity": "sha512-F0twR8U1ZU67JIEtekUcLkXkoO5mMMmgGD8sK/xUFzJ805jxHQl92hImFAqqXMyMYjSPOyUPAwHYhB72g5sTXw==",
"dev": true,
"dependencies": {
- "fast-deep-equal": "^3.1.1",
+ "fast-deep-equal": "^3.1.3",
"json-schema-traverse": "^1.0.0",
"require-from-string": "^2.0.2",
- "uri-js": "^4.2.2"
+ "uri-js": "^4.4.1"
},
"funding": {
"type": "github",
@@ -10152,6 +9269,18 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/ansi-html": {
+ "version": "0.0.9",
+ "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.9.tgz",
+ "integrity": "sha512-ozbS3LuenHVxNRh/wdnN16QapUHzauqSomAl1jwwJRRsGwFwtj644lIhxfWu0Fy0acCij2+AEgHvjscq3dlVXg==",
+ "dev": true,
+ "engines": [
+ "node >= 0.8.0"
+ ],
+ "bin": {
+ "ansi-html": "bin/ansi-html"
+ }
+ },
"node_modules/ansi-html-community": {
"version": "0.0.8",
"resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz",
@@ -10229,9 +9358,9 @@
}
},
"node_modules/aria-hidden": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.3.tgz",
- "integrity": "sha512-xcLxITLe2HYa1cnYnwCjkOO1PqUHQpozB8x9AR0OgWN2woOBi5kSDVxKfd0b7sb1hw5qFeJhXm9H1nu3xSfLeQ==",
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.4.tgz",
+ "integrity": "sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A==",
"dev": true,
"dependencies": {
"tslib": "^2.0.0"
@@ -10250,13 +9379,16 @@
}
},
"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==",
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz",
+ "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.2",
- "is-array-buffer": "^3.0.1"
+ "call-bind": "^1.0.5",
+ "is-array-buffer": "^3.0.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
@@ -10269,15 +9401,16 @@
"dev": true
},
"node_modules/array-includes": {
- "version": "3.1.7",
- "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz",
- "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==",
+ "version": "3.1.8",
+ "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz",
+ "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.2.0",
- "es-abstract": "^1.22.1",
- "get-intrinsic": "^1.2.1",
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.2",
+ "es-object-atoms": "^1.0.0",
+ "get-intrinsic": "^1.2.4",
"is-string": "^1.0.7"
},
"engines": {
@@ -10296,17 +9429,47 @@
"node": ">=8"
}
},
+ "node_modules/array-uniq": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
+ "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/array.prototype.findlast": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz",
+ "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.2",
+ "es-errors": "^1.3.0",
+ "es-object-atoms": "^1.0.0",
+ "es-shim-unscopables": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/array.prototype.findlastindex": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz",
- "integrity": "sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==",
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz",
+ "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.2.0",
- "es-abstract": "^1.22.1",
- "es-shim-unscopables": "^1.0.0",
- "get-intrinsic": "^1.2.1"
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.2",
+ "es-errors": "^1.3.0",
+ "es-object-atoms": "^1.0.0",
+ "es-shim-unscopables": "^1.0.2"
},
"engines": {
"node": ">= 0.4"
@@ -10351,31 +9514,47 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/array.prototype.tosorted": {
+ "node_modules/array.prototype.toreversed": {
"version": "1.1.2",
- "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.2.tgz",
- "integrity": "sha512-HuQCHOlk1Weat5jzStICBCd83NxiIMwqDg/dHEsoefabn/hJRj5pVdWcPUSpRrwhwxZOsQassMpgN/xRYFBMIg==",
+ "resolved": "https://registry.npmjs.org/array.prototype.toreversed/-/array.prototype.toreversed-1.1.2.tgz",
+ "integrity": "sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA==",
"dev": true,
"dependencies": {
"call-bind": "^1.0.2",
"define-properties": "^1.2.0",
"es-abstract": "^1.22.1",
- "es-shim-unscopables": "^1.0.0",
- "get-intrinsic": "^1.2.1"
+ "es-shim-unscopables": "^1.0.0"
+ }
+ },
+ "node_modules/array.prototype.tosorted": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz",
+ "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.3",
+ "es-errors": "^1.3.0",
+ "es-shim-unscopables": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
}
},
"node_modules/arraybuffer.prototype.slice": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz",
- "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==",
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz",
+ "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==",
"dev": true,
"dependencies": {
- "array-buffer-byte-length": "^1.0.0",
- "call-bind": "^1.0.2",
- "define-properties": "^1.2.0",
- "es-abstract": "^1.22.1",
- "get-intrinsic": "^1.2.1",
- "is-array-buffer": "^3.0.2",
+ "array-buffer-byte-length": "^1.0.1",
+ "call-bind": "^1.0.5",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.22.3",
+ "es-errors": "^1.2.1",
+ "get-intrinsic": "^1.2.3",
+ "is-array-buffer": "^3.0.4",
"is-shared-array-buffer": "^1.0.2"
},
"engines": {
@@ -10386,15 +9565,14 @@
}
},
"node_modules/asn1.js": {
- "version": "5.4.1",
- "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz",
- "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==",
+ "version": "4.10.1",
+ "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz",
+ "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==",
"dev": true,
"dependencies": {
"bn.js": "^4.0.0",
"inherits": "^2.0.1",
- "minimalistic-assert": "^1.0.0",
- "safer-buffer": "^2.1.0"
+ "minimalistic-assert": "^1.0.0"
}
},
"node_modules/asn1.js/node_modules/bn.js": {
@@ -10416,18 +9594,6 @@
"util": "^0.12.5"
}
},
- "node_modules/ast-types": {
- "version": "0.16.1",
- "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.16.1.tgz",
- "integrity": "sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==",
- "dev": true,
- "dependencies": {
- "tslib": "^2.0.1"
- },
- "engines": {
- "node": ">=4"
- }
- },
"node_modules/ast-types-flow": {
"version": "0.0.8",
"resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz",
@@ -10435,10 +9601,13 @@
"dev": true
},
"node_modules/async": {
- "version": "3.2.5",
- "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz",
- "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==",
- "dev": true
+ "version": "2.6.4",
+ "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz",
+ "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==",
+ "dev": true,
+ "dependencies": {
+ "lodash": "^4.17.14"
+ }
},
"node_modules/async-limiter": {
"version": "1.0.1",
@@ -10446,15 +9615,6 @@
"integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==",
"dev": true
},
- "node_modules/asynciterator.prototype": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/asynciterator.prototype/-/asynciterator.prototype-1.0.0.tgz",
- "integrity": "sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==",
- "dev": true,
- "dependencies": {
- "has-symbols": "^1.0.3"
- }
- },
"node_modules/asynckit": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
@@ -10462,9 +9622,9 @@
"dev": true
},
"node_modules/autoprefixer": {
- "version": "10.4.17",
- "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.17.tgz",
- "integrity": "sha512-/cpVNRLSfhOtcGflT13P2794gVSgmPgTR+erw5ifnMLZb0UnSlkK4tquLmkd3BhA+nLo5tX8Cu0upUsGKvKbmg==",
+ "version": "10.4.19",
+ "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.19.tgz",
+ "integrity": "sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==",
"dev": true,
"funding": [
{
@@ -10481,8 +9641,8 @@
}
],
"dependencies": {
- "browserslist": "^4.22.2",
- "caniuse-lite": "^1.0.30001578",
+ "browserslist": "^4.23.0",
+ "caniuse-lite": "^1.0.30001599",
"fraction.js": "^4.3.7",
"normalize-range": "^0.1.2",
"picocolors": "^1.0.0",
@@ -10499,10 +9659,13 @@
}
},
"node_modules/available-typed-arrays": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.6.tgz",
- "integrity": "sha512-j1QzY8iPNPG4o4xmO3ptzpRxTciqD3MgEHtifP/YnJpIo58Xu+ne4BejlbkuaLfXn/nz6HFiw29bLpj2PNMdGg==",
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz",
+ "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==",
"dev": true,
+ "dependencies": {
+ "possible-typed-array-names": "^1.0.0"
+ },
"engines": {
"node": ">= 0.4"
},
@@ -10529,9 +9692,9 @@
}
},
"node_modules/b4a": {
- "version": "1.6.4",
- "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.4.tgz",
- "integrity": "sha512-fpWrvyVHEKyeEvbKZTVOeZF3VSKKWtJxFIxX/jaVPf+cLbGUSitjb49pHLqPV2BUNNZ0LcoeEGfE/YCpyDYHIw==",
+ "version": "1.6.6",
+ "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.6.tgz",
+ "integrity": "sha512-5Tk1HLk6b6ctmjIkAcU/Ujv/1WqiDl0F0JdRCR80VsOcUlHcu7pWeWRlOqQLHfDEsVx9YH/aif5AG4ehoCtTmg==",
"dev": true
},
"node_modules/babel-core": {
@@ -10615,50 +9778,22 @@
"engines": {
"node": ">=8"
}
- },
- "node_modules/babel-loader": {
- "version": "9.1.3",
- "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.1.3.tgz",
- "integrity": "sha512-xG3ST4DglodGf8qSwv0MdeWLhrDsw/32QMdTO5T1ZIp9gQur0HkCyFs7Awskr10JKXFXwpAhiCuYX5oGXnRGbw==",
- "dev": true,
- "dependencies": {
- "find-cache-dir": "^4.0.0",
- "schema-utils": "^4.0.0"
- },
- "engines": {
- "node": ">= 14.15.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.12.0",
- "webpack": ">=5"
- }
- },
- "node_modules/babel-loader/node_modules/ajv": {
- "version": "8.12.0",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz",
- "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==",
- "dev": true,
- "dependencies": {
- "fast-deep-equal": "^3.1.1",
- "json-schema-traverse": "^1.0.0",
- "require-from-string": "^2.0.2",
- "uri-js": "^4.2.2"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/epoberezkin"
- }
- },
- "node_modules/babel-loader/node_modules/ajv-keywords": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz",
- "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==",
+ },
+ "node_modules/babel-loader": {
+ "version": "9.1.3",
+ "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.1.3.tgz",
+ "integrity": "sha512-xG3ST4DglodGf8qSwv0MdeWLhrDsw/32QMdTO5T1ZIp9gQur0HkCyFs7Awskr10JKXFXwpAhiCuYX5oGXnRGbw==",
"dev": true,
"dependencies": {
- "fast-deep-equal": "^3.1.3"
+ "find-cache-dir": "^4.0.0",
+ "schema-utils": "^4.0.0"
+ },
+ "engines": {
+ "node": ">= 14.15.0"
},
"peerDependencies": {
- "ajv": "^8.8.2"
+ "@babel/core": "^7.12.0",
+ "webpack": ">=5"
}
},
"node_modules/babel-loader/node_modules/find-cache-dir": {
@@ -10693,12 +9828,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/babel-loader/node_modules/json-schema-traverse": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
- "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
- "dev": true
- },
"node_modules/babel-loader/node_modules/locate-path": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz",
@@ -10768,25 +9897,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/babel-loader/node_modules/schema-utils": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz",
- "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==",
- "dev": true,
- "dependencies": {
- "@types/json-schema": "^7.0.9",
- "ajv": "^8.9.0",
- "ajv-formats": "^2.1.1",
- "ajv-keywords": "^5.1.0"
- },
- "engines": {
- "node": ">= 12.13.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/webpack"
- }
- },
"node_modules/babel-loader/node_modules/yocto-queue": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz",
@@ -10837,13 +9947,13 @@
}
},
"node_modules/babel-plugin-polyfill-corejs2": {
- "version": "0.4.8",
- "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.8.tgz",
- "integrity": "sha512-OtIuQfafSzpo/LhnJaykc0R/MMnuLSSVjVYy9mHArIZ9qTCSZ6TpWCuEKZYVoN//t8HqBNScHrOtCrIK5IaGLg==",
+ "version": "0.4.11",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz",
+ "integrity": "sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==",
"dev": true,
"dependencies": {
"@babel/compat-data": "^7.22.6",
- "@babel/helper-define-polyfill-provider": "^0.5.0",
+ "@babel/helper-define-polyfill-provider": "^0.6.2",
"semver": "^6.3.1"
},
"peerDependencies": {
@@ -10860,25 +9970,25 @@
}
},
"node_modules/babel-plugin-polyfill-corejs3": {
- "version": "0.9.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.9.0.tgz",
- "integrity": "sha512-7nZPG1uzK2Ymhy/NbaOWTg3uibM2BmGASS4vHS4szRZAIR8R6GwA/xAujpdrXU5iyklrimWnLWU+BLF9suPTqg==",
+ "version": "0.10.4",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.4.tgz",
+ "integrity": "sha512-25J6I8NGfa5YkCDogHRID3fVCadIR8/pGl1/spvCkzb6lVn6SR3ojpx9nOn9iEBcUsjY24AmdKm5khcfKdylcg==",
"dev": true,
"dependencies": {
- "@babel/helper-define-polyfill-provider": "^0.5.0",
- "core-js-compat": "^3.34.0"
+ "@babel/helper-define-polyfill-provider": "^0.6.1",
+ "core-js-compat": "^3.36.1"
},
"peerDependencies": {
"@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
}
},
"node_modules/babel-plugin-polyfill-regenerator": {
- "version": "0.5.5",
- "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.5.tgz",
- "integrity": "sha512-OJGYZlhLqBh2DDHeqAxWB1XIvr49CxiJ2gIt61/PU55CQK4Z58OzMqjDe1zwQdQk+rBYsRc+1rJmdajM3gimHg==",
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz",
+ "integrity": "sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==",
"dev": true,
"dependencies": {
- "@babel/helper-define-polyfill-provider": "^0.5.0"
+ "@babel/helper-define-polyfill-provider": "^0.6.2"
},
"peerDependencies": {
"@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
@@ -10930,41 +10040,51 @@
"dev": true
},
"node_modules/bare-events": {
- "version": "2.2.2",
- "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.2.2.tgz",
- "integrity": "sha512-h7z00dWdG0PYOQEvChhOSWvOfkIKsdZGkWr083FgN/HyoQuebSew/cgirYqh9SCuy/hRvxc5Vy6Fw8xAmYHLkQ==",
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.3.1.tgz",
+ "integrity": "sha512-sJnSOTVESURZ61XgEleqmP255T6zTYwHPwE4r6SssIh0U9/uDvfpdoJYpVUerJJZH2fueO+CdT8ZT+OC/7aZDA==",
"dev": true,
"optional": true
},
"node_modules/bare-fs": {
- "version": "2.2.3",
- "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-2.2.3.tgz",
- "integrity": "sha512-amG72llr9pstfXOBOHve1WjiuKKAMnebcmMbPWDZ7BCevAoJLpugjuAPRsDINEyjT0a6tbaVx3DctkXIRbLuJw==",
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-2.3.1.tgz",
+ "integrity": "sha512-W/Hfxc/6VehXlsgFtbB5B4xFcsCl+pAh30cYhoFyXErf6oGrwjh8SwiPAdHgpmWonKuYpZgGywN0SXt7dgsADA==",
"dev": true,
"optional": true,
"dependencies": {
"bare-events": "^2.0.0",
"bare-path": "^2.0.0",
- "streamx": "^2.13.0"
+ "bare-stream": "^2.0.0"
}
},
"node_modules/bare-os": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-2.2.1.tgz",
- "integrity": "sha512-OwPyHgBBMkhC29Hl3O4/YfxW9n7mdTr2+SsO29XBWKKJsbgj3mnorDB80r5TiCQgQstgE5ga1qNYrpes6NvX2w==",
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-2.3.0.tgz",
+ "integrity": "sha512-oPb8oMM1xZbhRQBngTgpcQ5gXw6kjOaRsSWsIeNyRxGed2w/ARyP7ScBYpWR1qfX2E5rS3gBw6OWcSQo+s+kUg==",
"dev": true,
"optional": true
},
"node_modules/bare-path": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-2.1.1.tgz",
- "integrity": "sha512-OHM+iwRDRMDBsSW7kl3dO62JyHdBKO3B25FB9vNQBPcGHMo4+eA8Yj41Lfbk3pS/seDY+siNge0LdRTulAau/A==",
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-2.1.3.tgz",
+ "integrity": "sha512-lh/eITfU8hrj9Ru5quUp0Io1kJWIk1bTjzo7JH1P5dWmQ2EL4hFUlfI8FonAhSlgIfhn63p84CDY/x+PisgcXA==",
"dev": true,
"optional": true,
"dependencies": {
"bare-os": "^2.1.0"
}
},
+ "node_modules/bare-stream": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.0.1.tgz",
+ "integrity": "sha512-ubLyoDqPnUf5o0kSFp709HC0WRZuxVuh4pbte5eY95Xvx5bdvz07c2JFmXBfqqe60q+9PJ8S4X5GRvmcNSKMxg==",
+ "dev": true,
+ "optional": true,
+ "dependencies": {
+ "streamx": "^2.18.0"
+ }
+ },
"node_modules/base64-js": {
"version": "1.5.1",
"resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
@@ -11016,12 +10136,15 @@
}
},
"node_modules/binary-extensions": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
- "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
+ "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
"devOptional": true,
"engines": {
"node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/bl": {
@@ -11073,6 +10196,12 @@
"node": ">= 6"
}
},
+ "node_modules/bluebird": {
+ "version": "3.7.2",
+ "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
+ "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==",
+ "dev": true
+ },
"node_modules/bn.js": {
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz",
@@ -11080,13 +10209,13 @@
"dev": true
},
"node_modules/body-parser": {
- "version": "1.20.1",
- "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz",
- "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==",
+ "version": "1.20.2",
+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz",
+ "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==",
"dev": true,
"dependencies": {
"bytes": "3.1.2",
- "content-type": "~1.0.4",
+ "content-type": "~1.0.5",
"debug": "2.6.9",
"depd": "2.0.0",
"destroy": "1.2.0",
@@ -11094,7 +10223,7 @@
"iconv-lite": "0.4.24",
"on-finished": "2.4.1",
"qs": "6.11.0",
- "raw-body": "2.5.1",
+ "raw-body": "2.5.2",
"type-is": "~1.6.18",
"unpipe": "1.0.0"
},
@@ -11162,12 +10291,12 @@
}
},
"node_modules/braces": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
- "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
+ "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
"devOptional": true,
"dependencies": {
- "fill-range": "^7.0.1"
+ "fill-range": "^7.1.1"
},
"engines": {
"node": ">=8"
@@ -11233,39 +10362,68 @@
}
},
"node_modules/browserify-sign": {
- "version": "4.2.2",
- "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.2.tgz",
- "integrity": "sha512-1rudGyeYY42Dk6texmv7c4VcQ0EsvVbLwZkA+AQB7SxvXxmcD93jcHie8bzecJ+ChDlmAm2Qyu0+Ccg5uhZXCg==",
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.3.tgz",
+ "integrity": "sha512-JWCZW6SKhfhjJxO8Tyiiy+XYB7cqd2S5/+WeYHsKdNKFlCBhKbblba1A/HN/90YwtxKc8tCErjffZl++UNmGiw==",
"dev": true,
"dependencies": {
"bn.js": "^5.2.1",
"browserify-rsa": "^4.1.0",
"create-hash": "^1.2.0",
"create-hmac": "^1.1.7",
- "elliptic": "^6.5.4",
+ "elliptic": "^6.5.5",
+ "hash-base": "~3.0",
"inherits": "^2.0.4",
- "parse-asn1": "^5.1.6",
- "readable-stream": "^3.6.2",
+ "parse-asn1": "^5.1.7",
+ "readable-stream": "^2.3.8",
"safe-buffer": "^5.2.1"
},
"engines": {
- "node": ">= 4"
+ "node": ">= 0.12"
}
},
+ "node_modules/browserify-sign/node_modules/isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
+ "dev": true
+ },
"node_modules/browserify-sign/node_modules/readable-stream": {
- "version": "3.6.2",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
- "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
+ "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
"dev": true,
"dependencies": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- },
- "engines": {
- "node": ">= 6"
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "node_modules/browserify-sign/node_modules/readable-stream/node_modules/safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
+ "node_modules/browserify-sign/node_modules/string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
}
},
+ "node_modules/browserify-sign/node_modules/string_decoder/node_modules/safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
"node_modules/browserify-zlib": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz",
@@ -11276,9 +10434,9 @@
}
},
"node_modules/browserslist": {
- "version": "4.22.3",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.3.tgz",
- "integrity": "sha512-UAp55yfwNv0klWNapjs/ktHoguxuQNGnOzxYmfnXIS+8AsRDZkSDxg7R1AX3GKzn078SBI5dzwzj/Yx0Or0e3A==",
+ "version": "4.23.0",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz",
+ "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==",
"dev": true,
"funding": [
{
@@ -11295,8 +10453,8 @@
}
],
"dependencies": {
- "caniuse-lite": "^1.0.30001580",
- "electron-to-chromium": "^1.4.648",
+ "caniuse-lite": "^1.0.30001587",
+ "electron-to-chromium": "^1.4.668",
"node-releases": "^2.0.14",
"update-browserslist-db": "^1.0.13"
},
@@ -11368,9 +10526,9 @@
"dev": true
},
"node_modules/builtins": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz",
- "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==",
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.1.0.tgz",
+ "integrity": "sha512-SW9lzGTLvWTP1AY8xeAMZimqDrIaSdLQUcVr9DMef51niJ022Ri87SwRRKYm4A6iHfkPaiVUu/Duw2Wc4J7kKg==",
"dev": true,
"dependencies": {
"semver": "^7.0.0"
@@ -11397,14 +10555,19 @@
}
},
"node_modules/call-bind": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz",
- "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==",
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz",
+ "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==",
"dev": true,
"dependencies": {
+ "es-define-property": "^1.0.0",
+ "es-errors": "^1.3.0",
"function-bind": "^1.1.2",
- "get-intrinsic": "^1.2.1",
- "set-function-length": "^1.1.1"
+ "get-intrinsic": "^1.2.4",
+ "set-function-length": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
@@ -11439,9 +10602,9 @@
}
},
"node_modules/caniuse-lite": {
- "version": "1.0.30001583",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001583.tgz",
- "integrity": "sha512-acWTYaha8xfhA/Du/z4sNZjHUWjkiuoAi2LM+T/aL+kemKQgPT1xBb/YKjlQ0Qo8gvbHsGNplrEJ+9G3gL7i4Q==",
+ "version": "1.0.30001627",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001627.tgz",
+ "integrity": "sha512-4zgNiB8nTyV/tHhwZrFs88ryjls/lHiqFhrxCW4qSTeuRByBVnPYpDInchOIySWknznucaf31Z4KYqjfbrecVw==",
"funding": [
{
"type": "opencollective",
@@ -11489,6 +10652,50 @@
"node": ">=10"
}
},
+ "node_modules/check-types": {
+ "version": "11.2.3",
+ "resolved": "https://registry.npmjs.org/check-types/-/check-types-11.2.3.tgz",
+ "integrity": "sha512-+67P1GkJRaxQD6PKK0Et9DhwQB+vGg3PM5+aavopCpZT1lj9jeqfvpgTLAWErNj8qApkkmXlu/Ug74kmhagkXg==",
+ "dev": true
+ },
+ "node_modules/cheerio": {
+ "version": "1.0.0-rc.12",
+ "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz",
+ "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==",
+ "dev": true,
+ "dependencies": {
+ "cheerio-select": "^2.1.0",
+ "dom-serializer": "^2.0.0",
+ "domhandler": "^5.0.3",
+ "domutils": "^3.0.1",
+ "htmlparser2": "^8.0.1",
+ "parse5": "^7.0.0",
+ "parse5-htmlparser2-tree-adapter": "^7.0.0"
+ },
+ "engines": {
+ "node": ">= 6"
+ },
+ "funding": {
+ "url": "https://github.com/cheeriojs/cheerio?sponsor=1"
+ }
+ },
+ "node_modules/cheerio-select": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz",
+ "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==",
+ "dev": true,
+ "dependencies": {
+ "boolbase": "^1.0.0",
+ "css-select": "^5.1.0",
+ "css-what": "^6.1.0",
+ "domelementtype": "^2.3.0",
+ "domhandler": "^5.0.3",
+ "domutils": "^3.0.1"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/fb55"
+ }
+ },
"node_modules/chokidar": {
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
@@ -11535,9 +10742,9 @@
}
},
"node_modules/chrome-trace-event": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz",
- "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==",
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz",
+ "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==",
"dev": true,
"engines": {
"node": ">=6.0"
@@ -11569,18 +10776,18 @@
}
},
"node_modules/citty": {
- "version": "0.1.5",
- "resolved": "https://registry.npmjs.org/citty/-/citty-0.1.5.tgz",
- "integrity": "sha512-AS7n5NSc0OQVMV9v6wt3ByujNIrne0/cTjiC2MYqhvao57VNfiuVksTSr2p17nVOhEr2KtqiAkGwHcgMC/qUuQ==",
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/citty/-/citty-0.1.6.tgz",
+ "integrity": "sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==",
"dev": true,
"dependencies": {
"consola": "^3.2.3"
}
},
"node_modules/cjs-module-lexer": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz",
- "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==",
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.3.1.tgz",
+ "integrity": "sha512-a3KdPAANPbNE4ZUv9h6LckSl9zLsYOP4MBmhIPkRaeyybt+r4UghLvq+xw/YwUcC1gqylCkL4rdVs3Lwupjm4Q==",
"dev": true
},
"node_modules/classlist-polyfill": {
@@ -11643,9 +10850,9 @@
}
},
"node_modules/cli-table3": {
- "version": "0.6.3",
- "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz",
- "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==",
+ "version": "0.6.5",
+ "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.5.tgz",
+ "integrity": "sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==",
"dev": true,
"dependencies": {
"string-width": "^4.2.0"
@@ -12041,9 +11248,9 @@
"dev": true
},
"node_modules/cookie": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz",
- "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==",
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz",
+ "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==",
"dev": true,
"engines": {
"node": ">= 0.6"
@@ -12056,12 +11263,12 @@
"dev": true
},
"node_modules/core-js-compat": {
- "version": "3.35.1",
- "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.35.1.tgz",
- "integrity": "sha512-sftHa5qUJY3rs9Zht1WEnmkvXputCyDBczPnr7QDgL8n3qrF3CMXY4VPSYtOLLiOUJcah2WNXREd48iOl6mQIw==",
+ "version": "3.37.1",
+ "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.37.1.tgz",
+ "integrity": "sha512-9TNiImhKvQqSUkOvk/mMRZzOANTiEVC7WaBNhHcKM7x+/5E1l5NvsysR19zuDQScE8k+kfQXWRN3AtS/eOSHpg==",
"dev": true,
"dependencies": {
- "browserslist": "^4.22.2"
+ "browserslist": "^4.23.0"
},
"funding": {
"type": "opencollective",
@@ -12069,9 +11276,9 @@
}
},
"node_modules/core-js-pure": {
- "version": "3.35.1",
- "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.35.1.tgz",
- "integrity": "sha512-zcIdi/CL3MWbBJYo5YCeVAAx+Sy9yJE9I3/u9LkFABwbeaPhTMRWraM8mYFp9jW5Z50hOy7FVzCc8dCrpZqtIQ==",
+ "version": "3.37.1",
+ "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.37.1.tgz",
+ "integrity": "sha512-J/r5JTHSmzTxbiYYrzXg9w1VpqrYt+gexenBE9pugeyhwPZTAEJddyiReJWsLO6uNQ8xJZFbod6XC7KKwatCiA==",
"dev": true,
"hasInstallScript": true,
"funding": {
@@ -12312,16 +11519,16 @@
}
},
"node_modules/css-loader": {
- "version": "6.10.0",
- "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.10.0.tgz",
- "integrity": "sha512-LTSA/jWbwdMlk+rhmElbDR2vbtQoTBPr7fkJE+mxrHj+7ru0hUmHafDRzWIjIHTwpitWVaqY2/UWGRca3yUgRw==",
+ "version": "6.11.0",
+ "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.11.0.tgz",
+ "integrity": "sha512-CTJ+AEQJjq5NzLga5pE39qdiSV56F8ywCIsqNIRF0r7BDgWsN25aazToqAFg7ZrtA/U016xudB3ffgweORxX7g==",
"dev": true,
"dependencies": {
"icss-utils": "^5.1.0",
"postcss": "^8.4.33",
- "postcss-modules-extract-imports": "^3.0.0",
- "postcss-modules-local-by-default": "^4.0.4",
- "postcss-modules-scope": "^3.1.1",
+ "postcss-modules-extract-imports": "^3.1.0",
+ "postcss-modules-local-by-default": "^4.0.5",
+ "postcss-modules-scope": "^3.2.0",
"postcss-modules-values": "^4.0.0",
"postcss-value-parser": "^4.2.0",
"semver": "^7.5.4"
@@ -12363,15 +11570,15 @@
}
},
"node_modules/css-select": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz",
- "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==",
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz",
+ "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==",
"dev": true,
"dependencies": {
"boolbase": "^1.0.0",
- "css-what": "^6.0.1",
- "domhandler": "^4.3.1",
- "domutils": "^2.8.0",
+ "css-what": "^6.1.0",
+ "domhandler": "^5.0.2",
+ "domutils": "^3.0.1",
"nth-check": "^2.0.1"
},
"funding": {
@@ -12397,9 +11604,9 @@
"dev": true
},
"node_modules/cssdb": {
- "version": "7.10.0",
- "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-7.10.0.tgz",
- "integrity": "sha512-yGZ5tmA57gWh/uvdQBHs45wwFY0IBh3ypABk5sEubPBPSzXzkNgsWReqx7gdx6uhC+QoFBe+V8JwBB9/hQ6cIA==",
+ "version": "7.11.2",
+ "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-7.11.2.tgz",
+ "integrity": "sha512-lhQ32TFkc1X4eTefGfYPvgovRSzIMofHkigfH8nWtyRL4XJLsRhJFreRvEgKzept7x1rjBuy3J/MurXLaFxW/A==",
"dev": true,
"funding": [
{
@@ -12474,10 +11681,61 @@
"node": ">=12"
}
},
+ "node_modules/data-view-buffer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz",
+ "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.6",
+ "es-errors": "^1.3.0",
+ "is-data-view": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/data-view-byte-length": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz",
+ "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "es-errors": "^1.3.0",
+ "is-data-view": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/data-view-byte-offset": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz",
+ "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.6",
+ "es-errors": "^1.3.0",
+ "is-data-view": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "version": "4.3.5",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz",
+ "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==",
"dev": true,
"dependencies": {
"ms": "2.1.2"
@@ -12603,17 +11861,20 @@
}
},
"node_modules/define-data-property": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz",
- "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==",
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
+ "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
"dev": true,
"dependencies": {
- "get-intrinsic": "^1.2.1",
- "gopd": "^1.0.1",
- "has-property-descriptors": "^1.0.0"
+ "es-define-property": "^1.0.0",
+ "es-errors": "^1.3.0",
+ "gopd": "^1.0.1"
},
"engines": {
"node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/define-lazy-prop": {
@@ -12762,9 +12023,9 @@
}
},
"node_modules/detect-port": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.5.1.tgz",
- "integrity": "sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ==",
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.6.1.tgz",
+ "integrity": "sha512-CmnVc+Hek2egPx1PeTFVta2W78xy2K/9Rkf6cC4T59S50tVnzKj+tnx5mmx5lwvCkujZ4uRrpRSuV+IVs3f90Q==",
"dev": true,
"dependencies": {
"address": "^1.0.1",
@@ -12773,6 +12034,9 @@
"bin": {
"detect": "bin/detect-port.js",
"detect-port": "bin/detect-port.js"
+ },
+ "engines": {
+ "node": ">= 4.0.0"
}
},
"node_modules/diff-sequences": {
@@ -12841,28 +12105,19 @@
}
},
"node_modules/dom-serializer": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz",
- "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz",
+ "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==",
"dev": true,
"dependencies": {
- "domelementtype": "^2.0.1",
- "domhandler": "^4.2.0",
- "entities": "^2.0.0"
+ "domelementtype": "^2.3.0",
+ "domhandler": "^5.0.2",
+ "entities": "^4.2.0"
},
"funding": {
"url": "https://github.com/cheeriojs/dom-serializer?sponsor=1"
}
},
- "node_modules/dom-serializer/node_modules/entities": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz",
- "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==",
- "dev": true,
- "funding": {
- "url": "https://github.com/fb55/entities?sponsor=1"
- }
- },
"node_modules/domain-browser": {
"version": "4.23.0",
"resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-4.23.0.tgz",
@@ -12901,12 +12156,12 @@
}
},
"node_modules/domhandler": {
- "version": "4.3.1",
- "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz",
- "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==",
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz",
+ "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==",
"dev": true,
"dependencies": {
- "domelementtype": "^2.2.0"
+ "domelementtype": "^2.3.0"
},
"engines": {
"node": ">= 4"
@@ -12916,14 +12171,14 @@
}
},
"node_modules/domutils": {
- "version": "2.8.0",
- "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz",
- "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==",
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz",
+ "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==",
"dev": true,
"dependencies": {
- "dom-serializer": "^1.0.1",
- "domelementtype": "^2.2.0",
- "domhandler": "^4.2.0"
+ "dom-serializer": "^2.0.0",
+ "domelementtype": "^2.3.0",
+ "domhandler": "^5.0.3"
},
"funding": {
"url": "https://github.com/fb55/domutils?sponsor=1"
@@ -12940,15 +12195,15 @@
}
},
"node_modules/dotenv": {
- "version": "16.4.1",
- "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.1.tgz",
- "integrity": "sha512-CjA3y+Dr3FyFDOAMnxZEGtnW9KBR2M0JvvUtXNW+dYJL5ROWxP9DUHCwgFqpMk0OXCc0ljhaNTr2w/kutYIcHQ==",
+ "version": "16.4.5",
+ "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz",
+ "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==",
"dev": true,
"engines": {
"node": ">=12"
},
"funding": {
- "url": "https://github.com/motdotla/dotenv?sponsor=1"
+ "url": "https://dotenvx.com"
}
},
"node_modules/dotenv-expand": {
@@ -13021,9 +12276,9 @@
"dev": true
},
"node_modules/ejs": {
- "version": "3.1.9",
- "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.9.tgz",
- "integrity": "sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==",
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz",
+ "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==",
"dev": true,
"dependencies": {
"jake": "^10.8.5"
@@ -13036,9 +12291,9 @@
}
},
"node_modules/electron-to-chromium": {
- "version": "1.4.655",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.655.tgz",
- "integrity": "sha512-2yszojF7vIZ68adIOvzV4bku8OZad9w5H9xF3ZAMZjPuOjBarlflUkjN6DggdV+L71WZuKUfKUhov/34+G5QHg==",
+ "version": "1.4.789",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.789.tgz",
+ "integrity": "sha512-0VbyiaXoT++Fi2vHGo2ThOeS6X3vgRCWrjPeO2FeIAWL6ItiSJ9BqlH8LfCXe3X1IdcG+S0iLoNaxQWhfZoGzQ==",
"dev": true
},
"node_modules/element-closest": {
@@ -13050,9 +12305,9 @@
}
},
"node_modules/elliptic": {
- "version": "6.5.4",
- "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz",
- "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==",
+ "version": "6.5.5",
+ "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.5.tgz",
+ "integrity": "sha512-7EjbcmUm17NQFu4Pmgmq2olYMj8nwMnpcddByChSUjArp8F5DQWcIcpriwO4ZToLNAJig0yiyjswfyGNje/ixw==",
"dev": true,
"dependencies": {
"bn.js": "^4.11.9",
@@ -13127,9 +12382,9 @@
}
},
"node_modules/enhanced-resolve": {
- "version": "5.15.0",
- "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz",
- "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==",
+ "version": "5.17.0",
+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.0.tgz",
+ "integrity": "sha512-dwDPwZL0dmye8Txp2gzFmA6sxALaSvdRDjPH0viLcKrtlOL3tw62nWWweVD1SdILDTJrbrL6tdWVN58Wo6U3eA==",
"dev": true,
"dependencies": {
"graceful-fs": "^4.2.4",
@@ -13182,50 +12437,57 @@
}
},
"node_modules/es-abstract": {
- "version": "1.22.3",
- "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.3.tgz",
- "integrity": "sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==",
- "dev": true,
- "dependencies": {
- "array-buffer-byte-length": "^1.0.0",
- "arraybuffer.prototype.slice": "^1.0.2",
- "available-typed-arrays": "^1.0.5",
- "call-bind": "^1.0.5",
- "es-set-tostringtag": "^2.0.1",
+ "version": "1.23.3",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz",
+ "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==",
+ "dev": true,
+ "dependencies": {
+ "array-buffer-byte-length": "^1.0.1",
+ "arraybuffer.prototype.slice": "^1.0.3",
+ "available-typed-arrays": "^1.0.7",
+ "call-bind": "^1.0.7",
+ "data-view-buffer": "^1.0.1",
+ "data-view-byte-length": "^1.0.1",
+ "data-view-byte-offset": "^1.0.0",
+ "es-define-property": "^1.0.0",
+ "es-errors": "^1.3.0",
+ "es-object-atoms": "^1.0.0",
+ "es-set-tostringtag": "^2.0.3",
"es-to-primitive": "^1.2.1",
"function.prototype.name": "^1.1.6",
- "get-intrinsic": "^1.2.2",
- "get-symbol-description": "^1.0.0",
+ "get-intrinsic": "^1.2.4",
+ "get-symbol-description": "^1.0.2",
"globalthis": "^1.0.3",
"gopd": "^1.0.1",
- "has-property-descriptors": "^1.0.0",
- "has-proto": "^1.0.1",
+ "has-property-descriptors": "^1.0.2",
+ "has-proto": "^1.0.3",
"has-symbols": "^1.0.3",
- "hasown": "^2.0.0",
- "internal-slot": "^1.0.5",
- "is-array-buffer": "^3.0.2",
+ "hasown": "^2.0.2",
+ "internal-slot": "^1.0.7",
+ "is-array-buffer": "^3.0.4",
"is-callable": "^1.2.7",
- "is-negative-zero": "^2.0.2",
+ "is-data-view": "^1.0.1",
+ "is-negative-zero": "^2.0.3",
"is-regex": "^1.1.4",
- "is-shared-array-buffer": "^1.0.2",
+ "is-shared-array-buffer": "^1.0.3",
"is-string": "^1.0.7",
- "is-typed-array": "^1.1.12",
+ "is-typed-array": "^1.1.13",
"is-weakref": "^1.0.2",
"object-inspect": "^1.13.1",
"object-keys": "^1.1.1",
- "object.assign": "^4.1.4",
- "regexp.prototype.flags": "^1.5.1",
- "safe-array-concat": "^1.0.1",
- "safe-regex-test": "^1.0.0",
- "string.prototype.trim": "^1.2.8",
- "string.prototype.trimend": "^1.0.7",
- "string.prototype.trimstart": "^1.0.7",
- "typed-array-buffer": "^1.0.0",
- "typed-array-byte-length": "^1.0.0",
- "typed-array-byte-offset": "^1.0.0",
- "typed-array-length": "^1.0.4",
+ "object.assign": "^4.1.5",
+ "regexp.prototype.flags": "^1.5.2",
+ "safe-array-concat": "^1.1.2",
+ "safe-regex-test": "^1.0.3",
+ "string.prototype.trim": "^1.2.9",
+ "string.prototype.trimend": "^1.0.8",
+ "string.prototype.trimstart": "^1.0.8",
+ "typed-array-buffer": "^1.0.2",
+ "typed-array-byte-length": "^1.0.1",
+ "typed-array-byte-offset": "^1.0.2",
+ "typed-array-length": "^1.0.6",
"unbox-primitive": "^1.0.2",
- "which-typed-array": "^1.1.13"
+ "which-typed-array": "^1.1.15"
},
"engines": {
"node": ">= 0.4"
@@ -13234,6 +12496,27 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/es-define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz",
+ "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==",
+ "dev": true,
+ "dependencies": {
+ "get-intrinsic": "^1.2.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-errors": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
+ "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
"node_modules/es-get-iterator": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz",
@@ -13255,42 +12538,57 @@
}
},
"node_modules/es-iterator-helpers": {
- "version": "1.0.15",
- "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.15.tgz",
- "integrity": "sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g==",
+ "version": "1.0.19",
+ "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.19.tgz",
+ "integrity": "sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw==",
"dev": true,
"dependencies": {
- "asynciterator.prototype": "^1.0.0",
- "call-bind": "^1.0.2",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.22.1",
- "es-set-tostringtag": "^2.0.1",
- "function-bind": "^1.1.1",
- "get-intrinsic": "^1.2.1",
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.3",
+ "es-errors": "^1.3.0",
+ "es-set-tostringtag": "^2.0.3",
+ "function-bind": "^1.1.2",
+ "get-intrinsic": "^1.2.4",
"globalthis": "^1.0.3",
- "has-property-descriptors": "^1.0.0",
- "has-proto": "^1.0.1",
+ "has-property-descriptors": "^1.0.2",
+ "has-proto": "^1.0.3",
"has-symbols": "^1.0.3",
- "internal-slot": "^1.0.5",
+ "internal-slot": "^1.0.7",
"iterator.prototype": "^1.1.2",
- "safe-array-concat": "^1.0.1"
+ "safe-array-concat": "^1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
}
},
"node_modules/es-module-lexer": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.4.1.tgz",
- "integrity": "sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==",
+ "version": "1.5.3",
+ "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.3.tgz",
+ "integrity": "sha512-i1gCgmR9dCl6Vil6UKPI/trA69s08g/syhiDK9TG0Nf1RJjjFI+AzoWW7sPufzkgYAn861skuCwJa0pIIHYxvg==",
"dev": true
},
+ "node_modules/es-object-atoms": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz",
+ "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==",
+ "dev": true,
+ "dependencies": {
+ "es-errors": "^1.3.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
"node_modules/es-set-tostringtag": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz",
- "integrity": "sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==",
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz",
+ "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==",
"dev": true,
"dependencies": {
- "get-intrinsic": "^1.2.2",
- "has-tostringtag": "^1.0.0",
- "hasown": "^2.0.0"
+ "get-intrinsic": "^1.2.4",
+ "has-tostringtag": "^1.0.2",
+ "hasown": "^2.0.1"
},
"engines": {
"node": ">= 0.4"
@@ -13378,9 +12676,9 @@
}
},
"node_modules/escalade": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
- "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz",
+ "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==",
"dev": true,
"engines": {
"node": ">=6"
@@ -13646,9 +12944,9 @@
}
},
"node_modules/eslint-module-utils": {
- "version": "2.8.0",
- "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz",
- "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==",
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz",
+ "integrity": "sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==",
"dev": true,
"dependencies": {
"debug": "^3.2.7"
@@ -13809,9 +13107,9 @@
}
},
"node_modules/eslint-plugin-jest": {
- "version": "27.6.3",
- "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-27.6.3.tgz",
- "integrity": "sha512-+YsJFVH6R+tOiO3gCJon5oqn4KWc+mDq2leudk8mrp8RFubLOo9CVyi3cib4L7XMpxExmkmBZQTPDYVBzgpgOA==",
+ "version": "27.9.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-27.9.0.tgz",
+ "integrity": "sha512-QIT7FH7fNmd9n4se7FFKHbsLKGQiw885Ds6Y/sxKgCZ6natwCsXdgPOADnYVxN2QrRweF0FZWbJ6S7Rsn7llug==",
"dev": true,
"dependencies": {
"@typescript-eslint/utils": "^5.10.0"
@@ -13820,7 +13118,7 @@
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
},
"peerDependencies": {
- "@typescript-eslint/eslint-plugin": "^5.0.0 || ^6.0.0",
+ "@typescript-eslint/eslint-plugin": "^5.0.0 || ^6.0.0 || ^7.0.0",
"eslint": "^7.0.0 || ^8.0.0",
"jest": "*"
},
@@ -13834,9 +13132,9 @@
}
},
"node_modules/eslint-plugin-jest-dom": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/eslint-plugin-jest-dom/-/eslint-plugin-jest-dom-5.1.0.tgz",
- "integrity": "sha512-JIXZp+E/h/aGlP/rQc4tuOejiHlZXg65qw8JAJMIJA5VsdjOkss/SYcRSqBrQuEOytEM8JvngUjcz31d1RrCrA==",
+ "version": "5.4.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-jest-dom/-/eslint-plugin-jest-dom-5.4.0.tgz",
+ "integrity": "sha512-yBqvFsnpS5Sybjoq61cJiUsenRkC9K32hYQBFS9doBR7nbQZZ5FyO+X7MlmfM1C48Ejx/qTuOCgukDUNyzKZ7A==",
"dev": true,
"dependencies": {
"@babel/runtime": "^7.16.3",
@@ -13848,8 +13146,8 @@
"yarn": ">=1"
},
"peerDependencies": {
- "@testing-library/dom": "^8.0.0 || ^9.0.0",
- "eslint": "^6.8.0 || ^7.0.0 || ^8.0.0"
+ "@testing-library/dom": "^8.0.0 || ^9.0.0 || ^10.0.0",
+ "eslint": "^6.8.0 || ^7.0.0 || ^8.0.0 || ^9.0.0"
},
"peerDependenciesMeta": {
"@testing-library/dom": {
@@ -13931,39 +13229,44 @@
}
},
"node_modules/eslint-plugin-promise": {
- "version": "6.1.1",
- "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz",
- "integrity": "sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==",
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.2.0.tgz",
+ "integrity": "sha512-QmAqwizauvnKOlifxyDj2ObfULpHQawlg/zQdgEixur9vl0CvZGv/LCJV2rtj3210QCoeGBzVMfMXqGAOr/4fA==",
"dev": true,
"engines": {
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
},
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ },
"peerDependencies": {
- "eslint": "^7.0.0 || ^8.0.0"
+ "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0"
}
},
"node_modules/eslint-plugin-react": {
- "version": "7.33.2",
- "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz",
- "integrity": "sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==",
+ "version": "7.34.2",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.34.2.tgz",
+ "integrity": "sha512-2HCmrU+/JNigDN6tg55cRDKCQWicYAPB38JGSFDQt95jDm8rrvSUo7YPkOIm5l6ts1j1zCvysNcasvfTMQzUOw==",
"dev": true,
"dependencies": {
- "array-includes": "^3.1.6",
- "array.prototype.flatmap": "^1.3.1",
- "array.prototype.tosorted": "^1.1.1",
+ "array-includes": "^3.1.8",
+ "array.prototype.findlast": "^1.2.5",
+ "array.prototype.flatmap": "^1.3.2",
+ "array.prototype.toreversed": "^1.1.2",
+ "array.prototype.tosorted": "^1.1.3",
"doctrine": "^2.1.0",
- "es-iterator-helpers": "^1.0.12",
+ "es-iterator-helpers": "^1.0.19",
"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",
+ "object.entries": "^1.1.8",
+ "object.fromentries": "^2.0.8",
+ "object.hasown": "^1.1.4",
+ "object.values": "^1.2.0",
"prop-types": "^15.8.1",
- "resolve": "^2.0.0-next.4",
+ "resolve": "^2.0.0-next.5",
"semver": "^6.3.1",
- "string.prototype.matchall": "^4.0.8"
+ "string.prototype.matchall": "^4.0.11"
},
"engines": {
"node": ">=4"
@@ -13973,9 +13276,9 @@
}
},
"node_modules/eslint-plugin-react-hooks": {
- "version": "4.6.0",
- "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz",
- "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==",
+ "version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz",
+ "integrity": "sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==",
"dev": true,
"engines": {
"node": ">=10"
@@ -14436,17 +13739,17 @@
}
},
"node_modules/express": {
- "version": "4.18.2",
- "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz",
- "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==",
+ "version": "4.19.2",
+ "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz",
+ "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==",
"dev": true,
"dependencies": {
"accepts": "~1.3.8",
"array-flatten": "1.1.1",
- "body-parser": "1.20.1",
+ "body-parser": "1.20.2",
"content-disposition": "0.5.4",
"content-type": "~1.0.4",
- "cookie": "0.5.0",
+ "cookie": "0.6.0",
"cookie-signature": "1.0.6",
"debug": "2.6.9",
"depd": "2.0.0",
@@ -14514,35 +13817,40 @@
"dev": true
},
"node_modules/extract-zip": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.7.0.tgz",
- "integrity": "sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz",
+ "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==",
"dev": true,
"dependencies": {
- "concat-stream": "^1.6.2",
- "debug": "^2.6.9",
- "mkdirp": "^0.5.4",
+ "debug": "^4.1.1",
+ "get-stream": "^5.1.0",
"yauzl": "^2.10.0"
},
"bin": {
"extract-zip": "cli.js"
+ },
+ "engines": {
+ "node": ">= 10.17.0"
+ },
+ "optionalDependencies": {
+ "@types/yauzl": "^2.9.1"
}
},
- "node_modules/extract-zip/node_modules/debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "node_modules/extract-zip/node_modules/get-stream": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
+ "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
"dev": true,
"dependencies": {
- "ms": "2.0.0"
+ "pump": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/extract-zip/node_modules/ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
- "dev": true
- },
"node_modules/fast-deep-equal": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
@@ -14602,9 +13910,9 @@
"dev": true
},
"node_modules/fastq": {
- "version": "1.17.0",
- "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.0.tgz",
- "integrity": "sha512-zGygtijUMT7jnk3h26kUms3BkSDp4IfIKjmnqI2tvx6nuBfiF1UqOxbnLfzdv+apBy+53oaImsKtMw/xYbW+1w==",
+ "version": "1.17.1",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz",
+ "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==",
"dev": true,
"dependencies": {
"reusify": "^1.0.4"
@@ -14670,6 +13978,15 @@
"node": ">=14.14"
}
},
+ "node_modules/file-url": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/file-url/-/file-url-3.0.0.tgz",
+ "integrity": "sha512-g872QGsHexznxkIAdK8UiZRe7SkE6kvylShU4Nsj8NvfvZag7S0QuQ4IgvPDkk75HxgjIVDwycFTDAgIiO4nDA==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/filelist": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz",
@@ -14701,9 +14018,9 @@
}
},
"node_modules/fill-range": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
- "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
+ "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
"devOptional": true,
"dependencies": {
"to-regex-range": "^5.0.1"
@@ -14866,15 +14183,15 @@
}
},
"node_modules/flatted": {
- "version": "3.2.9",
- "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz",
- "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==",
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz",
+ "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==",
"dev": true
},
"node_modules/flow-parser": {
- "version": "0.230.0",
- "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.230.0.tgz",
- "integrity": "sha512-ZAfKaarESYYcP/RoLdM91vX0u/1RR7jI5TJaFLnxwRlC2mp0o+Rw7ipIY7J6qpIpQYtAobWb/J6S0XPeu0gO8g==",
+ "version": "0.237.2",
+ "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.237.2.tgz",
+ "integrity": "sha512-mvI/kdfr3l1waaPbThPA8dJa77nHXrfZIun+SWvFwSwDjmeByU7mGJGRmv1+7guU6ccyLV8e1lqZA1lD4iMGnQ==",
"dev": true,
"engines": {
"node": ">=0.4.0"
@@ -14987,6 +14304,24 @@
"node": ">=8"
}
},
+ "node_modules/fork-ts-checker-webpack-plugin/node_modules/schema-utils": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz",
+ "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==",
+ "dev": true,
+ "dependencies": {
+ "@types/json-schema": "^7.0.8",
+ "ajv": "^6.12.5",
+ "ajv-keywords": "^3.5.2"
+ },
+ "engines": {
+ "node": ">= 10.13.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/webpack"
+ }
+ },
"node_modules/fork-ts-checker-webpack-plugin/node_modules/supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
@@ -15095,9 +14430,9 @@
"dev": true
},
"node_modules/fs-monkey": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.5.tgz",
- "integrity": "sha512-8uMbBjrhzW76TYgEV27Y5E//W2f/lTFmx78P2w19FZSxarhI/798APGQyuGCwmkNxgwGRhrLfvWyLBvNtuOmew==",
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.6.tgz",
+ "integrity": "sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg==",
"dev": true
},
"node_modules/fs.realpath": {
@@ -15175,16 +14510,20 @@
}
},
"node_modules/get-intrinsic": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz",
- "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==",
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz",
+ "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==",
"dev": true,
"dependencies": {
+ "es-errors": "^1.3.0",
"function-bind": "^1.1.2",
"has-proto": "^1.0.1",
"has-symbols": "^1.0.3",
"hasown": "^2.0.0"
},
+ "engines": {
+ "node": ">= 0.4"
+ },
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
@@ -15241,13 +14580,14 @@
}
},
"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==",
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz",
+ "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.2",
- "get-intrinsic": "^1.1.1"
+ "call-bind": "^1.0.5",
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.4"
},
"engines": {
"node": ">= 0.4"
@@ -15257,9 +14597,9 @@
}
},
"node_modules/get-tsconfig": {
- "version": "4.7.2",
- "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.2.tgz",
- "integrity": "sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==",
+ "version": "4.7.5",
+ "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.5.tgz",
+ "integrity": "sha512-ZCuZCnlqNzjb4QprAzXKdpp/gh6KTxSJuw3IBsPnV/7fV4NxC9ckB+vPTt8w7fJA0TaSD7c55BR47JD6MEDyDw==",
"dev": true,
"dependencies": {
"resolve-pkg-maps": "^1.0.0"
@@ -15269,18 +14609,18 @@
}
},
"node_modules/giget": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/giget/-/giget-1.2.1.tgz",
- "integrity": "sha512-4VG22mopWtIeHwogGSy1FViXVo0YT+m6BrqZfz0JJFwbSsePsCdOzdLIIli5BtMp7Xe8f/o2OmBpQX2NBOC24g==",
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/giget/-/giget-1.2.3.tgz",
+ "integrity": "sha512-8EHPljDvs7qKykr6uw8b+lqLiUc/vUg+KVTI0uND4s63TdsZM2Xus3mflvF0DDG9SiM4RlCkFGL+7aAjRmV7KA==",
"dev": true,
"dependencies": {
- "citty": "^0.1.5",
+ "citty": "^0.1.6",
"consola": "^3.2.3",
- "defu": "^6.1.3",
- "node-fetch-native": "^1.6.1",
- "nypm": "^0.3.3",
+ "defu": "^6.1.4",
+ "node-fetch-native": "^1.6.3",
+ "nypm": "^0.3.8",
"ohash": "^1.1.3",
- "pathe": "^1.1.1",
+ "pathe": "^1.1.2",
"tar": "^6.2.0"
},
"bin": {
@@ -15300,22 +14640,22 @@
"dev": true
},
"node_modules/glob": {
- "version": "10.3.10",
- "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz",
- "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==",
+ "version": "10.4.1",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.1.tgz",
+ "integrity": "sha512-2jelhlq3E4ho74ZyVLN03oKdAZVUa6UDZzFLVH1H7dnoax+y9qyaq8zBkfDIggjniU19z0wU18y16jMB2eyVIw==",
"dev": true,
"dependencies": {
"foreground-child": "^3.1.0",
- "jackspeak": "^2.3.5",
- "minimatch": "^9.0.1",
- "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0",
- "path-scurry": "^1.10.1"
+ "jackspeak": "^3.1.2",
+ "minimatch": "^9.0.4",
+ "minipass": "^7.1.2",
+ "path-scurry": "^1.11.1"
},
"bin": {
"glob": "dist/esm/bin.mjs"
},
"engines": {
- "node": ">=16 || 14 >=14.17"
+ "node": ">=16 || 14 >=14.18"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
@@ -15349,9 +14689,9 @@
}
},
"node_modules/glob/node_modules/minimatch": {
- "version": "9.0.3",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz",
- "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==",
+ "version": "9.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz",
+ "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==",
"dev": true,
"dependencies": {
"brace-expansion": "^2.0.1"
@@ -15373,12 +14713,13 @@
}
},
"node_modules/globalthis": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz",
- "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==",
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz",
+ "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==",
"dev": true,
"dependencies": {
- "define-properties": "^1.1.3"
+ "define-properties": "^1.2.1",
+ "gopd": "^1.0.1"
},
"engines": {
"node": ">= 0.4"
@@ -15511,21 +14852,21 @@
}
},
"node_modules/has-property-descriptors": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz",
- "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==",
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
+ "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
"dev": true,
"dependencies": {
- "get-intrinsic": "^1.2.2"
+ "es-define-property": "^1.0.0"
},
"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==",
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz",
+ "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==",
"dev": true,
"engines": {
"node": ">= 0.4"
@@ -15562,33 +14903,18 @@
}
},
"node_modules/hash-base": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz",
- "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==",
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz",
+ "integrity": "sha512-EeeoJKjTyt868liAlVmcv2ZsUfGHlE3Q+BICOXcZiwN3osr5Q/zFGYmTJpoIzuaSTAwndFy+GqhEwlU4L3j4Ow==",
"dev": true,
"dependencies": {
- "inherits": "^2.0.4",
- "readable-stream": "^3.6.0",
- "safe-buffer": "^5.2.0"
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
},
"engines": {
"node": ">=4"
}
},
- "node_modules/hash-base/node_modules/readable-stream": {
- "version": "3.6.2",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
- "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
- "dev": true,
- "dependencies": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
"node_modules/hash.js": {
"version": "1.1.7",
"resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz",
@@ -15600,9 +14926,9 @@
}
},
"node_modules/hasown": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz",
- "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==",
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
+ "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
"dev": true,
"dependencies": {
"function-bind": "^1.1.2"
@@ -15631,12 +14957,30 @@
"minimalistic-crypto-utils": "^1.0.1"
}
},
+ "node_modules/hoopy": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz",
+ "integrity": "sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==",
+ "dev": true,
+ "engines": {
+ "node": ">= 6.0.0"
+ }
+ },
"node_modules/hosted-git-info": {
"version": "2.8.9",
"resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz",
"integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==",
"dev": true
},
+ "node_modules/html_codesniffer": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/html_codesniffer/-/html_codesniffer-2.5.1.tgz",
+ "integrity": "sha512-vcz0yAaX/OaV6sdNHuT9alBOKkSxYb8h5Yq26dUqgi7XmCgGUSa7U9PiY1PBXQFMjKv1wVPs5/QzHlGuxPDUGg==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
"node_modules/html-encoding-sniffer": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz",
@@ -15650,9 +14994,9 @@
}
},
"node_modules/html-entities": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.4.0.tgz",
- "integrity": "sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ==",
+ "version": "2.5.2",
+ "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.5.2.tgz",
+ "integrity": "sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==",
"dev": true,
"funding": [
{
@@ -15747,9 +15091,9 @@
}
},
"node_modules/htmlparser2": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz",
- "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==",
+ "version": "8.0.2",
+ "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz",
+ "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==",
"dev": true,
"funding": [
"https://github.com/fb55/htmlparser2?sponsor=1",
@@ -15759,19 +15103,10 @@
}
],
"dependencies": {
- "domelementtype": "^2.0.1",
- "domhandler": "^4.0.0",
- "domutils": "^2.5.2",
- "entities": "^2.0.0"
- }
- },
- "node_modules/htmlparser2/node_modules/entities": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz",
- "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==",
- "dev": true,
- "funding": {
- "url": "https://github.com/fb55/entities?sponsor=1"
+ "domelementtype": "^2.3.0",
+ "domhandler": "^5.0.3",
+ "domutils": "^3.0.1",
+ "entities": "^4.4.0"
}
},
"node_modules/http-errors": {
@@ -15833,9 +15168,9 @@
}
},
"node_modules/i18next": {
- "version": "23.8.2",
- "resolved": "https://registry.npmjs.org/i18next/-/i18next-23.8.2.tgz",
- "integrity": "sha512-Z84zyEangrlERm0ZugVy4bIt485e/H8VecGUZkZWrH7BDePG6jT73QdL9EA1tRTTVVMpry/MgWIP1FjEn0DRXA==",
+ "version": "23.11.5",
+ "resolved": "https://registry.npmjs.org/i18next/-/i18next-23.11.5.tgz",
+ "integrity": "sha512-41pvpVbW9rhZPk5xjCX2TPJi2861LEig/YRhUkY+1FQ2IQPS0bKUDYnEqY8XPPbB48h1uIwLnP9iiEfuSl20CA==",
"dev": true,
"funding": [
{
@@ -15857,18 +15192,18 @@
}
},
"node_modules/i18next-browser-languagedetector": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/i18next-browser-languagedetector/-/i18next-browser-languagedetector-7.2.0.tgz",
- "integrity": "sha512-U00DbDtFIYD3wkWsr2aVGfXGAj2TgnELzOX9qv8bT0aJtvPV9CRO77h+vgmHFBMe7LAxdwvT/7VkCWGya6L3tA==",
+ "version": "7.2.1",
+ "resolved": "https://registry.npmjs.org/i18next-browser-languagedetector/-/i18next-browser-languagedetector-7.2.1.tgz",
+ "integrity": "sha512-h/pM34bcH6tbz8WgGXcmWauNpQupCGr25XPp9cZwZInR9XHSjIFDYp1SIok7zSPsTOMxdvuLyu86V+g2Kycnfw==",
"dev": true,
"dependencies": {
"@babel/runtime": "^7.23.2"
}
},
"node_modules/i18next-http-backend": {
- "version": "2.4.3",
- "resolved": "https://registry.npmjs.org/i18next-http-backend/-/i18next-http-backend-2.4.3.tgz",
- "integrity": "sha512-jo2M03O6n1/DNb51WSQ8PsQ0xEELzLZRdYUTbf17mLw3rVwnJF9hwNgMXvEFSxxb+N8dT+o0vtigA6s5mGWyPA==",
+ "version": "2.5.2",
+ "resolved": "https://registry.npmjs.org/i18next-http-backend/-/i18next-http-backend-2.5.2.tgz",
+ "integrity": "sha512-+K8HbDfrvc1/2X8jpb7RLhI9ZxBDpx3xogYkQwGKlWAUXLSEGXzgdt3EcUjLlBCdMwdQY+K+EUF6oh8oB6rwHw==",
"dev": true,
"dependencies": {
"cross-fetch": "4.0.0"
@@ -15943,9 +15278,9 @@
}
},
"node_modules/immutable": {
- "version": "4.3.5",
- "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.5.tgz",
- "integrity": "sha512-8eabxkth9gZatlwl5TBuJnCsoTADlL6ftEr7A4qgdaTsPyreilDSnUk57SO+jfKcNtxPa22U5KK6DSeAYhpBJw==",
+ "version": "4.3.6",
+ "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.6.tgz",
+ "integrity": "sha512-Ju0+lEMyzMVZarkTn/gqRpdqd5dOPaz1mCZ0SH3JV6iFw81PldE/PEB1hWVEA288HPt4WXW8O7AWxB10M+03QQ==",
"devOptional": true
},
"node_modules/import-fresh": {
@@ -16078,6 +15413,7 @@
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
"integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
+ "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.",
"dev": true,
"dependencies": {
"once": "^1.3.0",
@@ -16097,12 +15433,12 @@
"dev": true
},
"node_modules/internal-slot": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.6.tgz",
- "integrity": "sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==",
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz",
+ "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==",
"dev": true,
"dependencies": {
- "get-intrinsic": "^1.2.2",
+ "es-errors": "^1.3.0",
"hasown": "^2.0.0",
"side-channel": "^1.0.4"
},
@@ -16111,31 +15447,31 @@
}
},
"node_modules/intl-messageformat": {
- "version": "9.13.0",
- "resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-9.13.0.tgz",
- "integrity": "sha512-7sGC7QnSQGa5LZP7bXLDhVDtQOeKGeBFGHF2Y8LVBwYZoQZCgWeKoPGTa5GMG8g/TzDgeXuYJQis7Ggiw2xTOw==",
+ "version": "10.5.14",
+ "resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-10.5.14.tgz",
+ "integrity": "sha512-IjC6sI0X7YRjjyVH9aUgdftcmZK7WXdHeil4KwbjDnRWjnVitKpAx3rr6t6di1joFp5188VqKcobOPA6mCLG/w==",
"dependencies": {
- "@formatjs/ecma402-abstract": "1.11.4",
- "@formatjs/fast-memoize": "1.2.1",
- "@formatjs/icu-messageformat-parser": "2.1.0",
- "tslib": "^2.1.0"
+ "@formatjs/ecma402-abstract": "2.0.0",
+ "@formatjs/fast-memoize": "2.2.0",
+ "@formatjs/icu-messageformat-parser": "2.7.8",
+ "tslib": "^2.4.0"
}
},
"node_modules/intl-messageformat/node_modules/@formatjs/ecma402-abstract": {
- "version": "1.11.4",
- "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.11.4.tgz",
- "integrity": "sha512-EBikYFp2JCdIfGEb5G9dyCkTGDmC57KSHhRQOC3aYxoPWVZvfWCDjZwkGYHN7Lis/fmuWl906bnNTJifDQ3sXw==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-2.0.0.tgz",
+ "integrity": "sha512-rRqXOqdFmk7RYvj4khklyqzcfQl9vEL/usogncBHRZfZBDOwMGuSRNFl02fu5KGHXdbinju+YXyuR+Nk8xlr/g==",
"dependencies": {
- "@formatjs/intl-localematcher": "0.2.25",
- "tslib": "^2.1.0"
+ "@formatjs/intl-localematcher": "0.5.4",
+ "tslib": "^2.4.0"
}
},
"node_modules/intl-messageformat/node_modules/@formatjs/intl-localematcher": {
- "version": "0.2.25",
- "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.2.25.tgz",
- "integrity": "sha512-YmLcX70BxoSopLFdLr1Ds99NdlTI2oWoLbaUW2M406lxOIPzE1KQhRz2fPUkq34xVZQaihCoU29h0KK7An3bhA==",
+ "version": "0.5.4",
+ "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.5.4.tgz",
+ "integrity": "sha512-zTwEpWOzZ2CiKcB93BLngUX59hQkuZjT2+SAQEscSm52peDW/getsawMcWF1rGRpMCX6D7nSJA3CzJ8gn13N/g==",
"dependencies": {
- "tslib": "^2.1.0"
+ "tslib": "^2.4.0"
}
},
"node_modules/invariant": {
@@ -16162,6 +15498,15 @@
"node": ">= 0.10"
}
},
+ "node_modules/is": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/is/-/is-3.3.0.tgz",
+ "integrity": "sha512-nW24QBoPcFGGHJGUwnfpI7Yc5CdqWNdsyHQszVE/z2pKHXzh7FZ5GWhJqSyaQ9wMkQnsTx+kAI8bHlCX4tKdbg==",
+ "dev": true,
+ "engines": {
+ "node": "*"
+ }
+ },
"node_modules/is-absolute-url": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz",
@@ -16188,14 +15533,16 @@
}
},
"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==",
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz",
+ "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==",
"dev": true,
"dependencies": {
"call-bind": "^1.0.2",
- "get-intrinsic": "^1.2.0",
- "is-typed-array": "^1.1.10"
+ "get-intrinsic": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
@@ -16286,6 +15633,21 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/is-data-view": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz",
+ "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==",
+ "dev": true,
+ "dependencies": {
+ "is-typed-array": "^1.1.13"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/is-date-object": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz",
@@ -16407,10 +15769,13 @@
}
},
"node_modules/is-map": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz",
- "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==",
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz",
+ "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==",
"dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ },
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
@@ -16432,9 +15797,9 @@
}
},
"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==",
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz",
+ "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==",
"dev": true,
"engines": {
"node": ">= 0.4"
@@ -16517,21 +15882,27 @@
}
},
"node_modules/is-set": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz",
- "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==",
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz",
+ "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==",
"dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ },
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"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==",
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz",
+ "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.2"
+ "call-bind": "^1.0.7"
+ },
+ "engines": {
+ "node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
@@ -16607,10 +15978,13 @@
}
},
"node_modules/is-weakmap": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz",
- "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==",
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz",
+ "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==",
"dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ },
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
@@ -16628,13 +16002,16 @@
}
},
"node_modules/is-weakset": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz",
- "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==",
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz",
+ "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.2",
- "get-intrinsic": "^1.1.1"
+ "call-bind": "^1.0.7",
+ "get-intrinsic": "^1.2.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
@@ -16781,9 +16158,9 @@
}
},
"node_modules/istanbul-reports": {
- "version": "3.1.6",
- "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz",
- "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==",
+ "version": "3.1.7",
+ "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz",
+ "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==",
"dev": true,
"dependencies": {
"html-escaper": "^2.0.0",
@@ -16807,9 +16184,9 @@
}
},
"node_modules/jackspeak": {
- "version": "2.3.6",
- "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz",
- "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==",
+ "version": "3.2.5",
+ "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.2.5.tgz",
+ "integrity": "sha512-a1hopwtr4NawFIrSmFgufzrN1Qy2BAfMJ0yScJBs/olJhTcctCy3YIDx4hTY2DOTJD1pUMTly80kmlYZxjZr5w==",
"dev": true,
"dependencies": {
"@isaacs/cliui": "^8.0.2"
@@ -16825,9 +16202,9 @@
}
},
"node_modules/jake": {
- "version": "10.8.7",
- "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.7.tgz",
- "integrity": "sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==",
+ "version": "10.9.1",
+ "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.1.tgz",
+ "integrity": "sha512-61btcOHNnLnsOdtLgA5efqQWjnSi/vow5HbI7HMdKKWqvrKR1bLK3BPlJn9gcSaP2ewuamUSMB5XEy76KUIS2w==",
"dev": true,
"dependencies": {
"async": "^3.2.3",
@@ -16857,6 +16234,12 @@
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
+ "node_modules/jake/node_modules/async": {
+ "version": "3.2.5",
+ "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz",
+ "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==",
+ "dev": true
+ },
"node_modules/jake/node_modules/chalk": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
@@ -17026,9 +16409,9 @@
}
},
"node_modules/jest-axe/node_modules/react-is": {
- "version": "18.2.0",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz",
- "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==",
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz",
+ "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==",
"dev": true
},
"node_modules/jest-axe/node_modules/supports-color": {
@@ -17120,9 +16503,9 @@
}
},
"node_modules/jest-circus/node_modules/dedent": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz",
- "integrity": "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==",
+ "version": "1.5.3",
+ "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.3.tgz",
+ "integrity": "sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==",
"dev": true,
"peerDependencies": {
"babel-plugin-macros": "^3.1.0"
@@ -17169,9 +16552,9 @@
}
},
"node_modules/jest-circus/node_modules/react-is": {
- "version": "18.2.0",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz",
- "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==",
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz",
+ "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==",
"dev": true
},
"node_modules/jest-circus/node_modules/supports-color": {
@@ -17351,6 +16734,7 @@
"version": "7.2.3",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
"integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "deprecated": "Glob versions prior to v9 are no longer supported",
"dev": true,
"dependencies": {
"fs.realpath": "^1.0.0",
@@ -17403,9 +16787,9 @@
}
},
"node_modules/jest-config/node_modules/react-is": {
- "version": "18.2.0",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz",
- "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==",
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz",
+ "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==",
"dev": true
},
"node_modules/jest-config/node_modules/supports-color": {
@@ -17502,9 +16886,9 @@
}
},
"node_modules/jest-diff/node_modules/react-is": {
- "version": "18.2.0",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz",
- "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==",
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz",
+ "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==",
"dev": true
},
"node_modules/jest-diff/node_modules/supports-color": {
@@ -17614,9 +16998,9 @@
}
},
"node_modules/jest-each/node_modules/react-is": {
- "version": "18.2.0",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz",
- "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==",
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz",
+ "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==",
"dev": true
},
"node_modules/jest-each/node_modules/supports-color": {
@@ -17749,9 +17133,9 @@
}
},
"node_modules/jest-leak-detector/node_modules/react-is": {
- "version": "18.2.0",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz",
- "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==",
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz",
+ "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==",
"dev": true
},
"node_modules/jest-matcher-utils": {
@@ -17836,9 +17220,9 @@
}
},
"node_modules/jest-matcher-utils/node_modules/react-is": {
- "version": "18.2.0",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz",
- "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==",
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz",
+ "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==",
"dev": true
},
"node_modules/jest-matcher-utils/node_modules/supports-color": {
@@ -17940,9 +17324,9 @@
}
},
"node_modules/jest-message-util/node_modules/react-is": {
- "version": "18.2.0",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz",
- "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==",
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz",
+ "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==",
"dev": true
},
"node_modules/jest-message-util/node_modules/supports-color": {
@@ -18234,6 +17618,7 @@
"version": "7.2.3",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
"integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "deprecated": "Glob versions prior to v9 are no longer supported",
"dev": true,
"dependencies": {
"fs.realpath": "^1.0.0",
@@ -18369,9 +17754,9 @@
}
},
"node_modules/jest-snapshot/node_modules/react-is": {
- "version": "18.2.0",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz",
- "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==",
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz",
+ "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==",
"dev": true
},
"node_modules/jest-snapshot/node_modules/supports-color": {
@@ -18551,9 +17936,9 @@
}
},
"node_modules/jest-validate/node_modules/react-is": {
- "version": "18.2.0",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz",
- "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==",
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz",
+ "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==",
"dev": true
},
"node_modules/jest-validate/node_modules/supports-color": {
@@ -18977,9 +18362,9 @@
}
},
"node_modules/kleur": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
- "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==",
+ "version": "4.1.5",
+ "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz",
+ "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==",
"dev": true,
"engines": {
"node": ">=6"
@@ -18995,9 +18380,9 @@
}
},
"node_modules/language-subtag-registry": {
- "version": "0.3.22",
- "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz",
- "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==",
+ "version": "0.3.23",
+ "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz",
+ "integrity": "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==",
"dev": true
},
"node_modules/language-tags": {
@@ -19095,9 +18480,9 @@
}
},
"node_modules/loader-utils": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz",
- "integrity": "sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==",
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.3.0.tgz",
+ "integrity": "sha512-LugZ5wJCsACYzc728QQ5J3SJ7G+3P6cLuFfdwWJRhOrJMkBMPIx5tDCT9Q9H99jTJIBddEywMrxNliGYqU4qRw==",
"dev": true,
"engines": {
"node": ">= 12.13.0"
@@ -19242,15 +18627,12 @@
}
},
"node_modules/magic-string": {
- "version": "0.30.6",
- "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.6.tgz",
- "integrity": "sha512-n62qCLbPjNjyo+owKtveQxZFZTBm+Ms6YoGD23Wew6Vw337PElFNifQpknPruVRQV57kVShPnLGo9vWxVhpPvA==",
+ "version": "0.30.10",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.10.tgz",
+ "integrity": "sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==",
"dev": true,
"dependencies": {
"@jridgewell/sourcemap-codec": "^1.4.15"
- },
- "engines": {
- "node": ">=12"
}
},
"node_modules/make-dir": {
@@ -19293,9 +18675,9 @@
"dev": true
},
"node_modules/markdown-to-jsx": {
- "version": "7.4.3",
- "resolved": "https://registry.npmjs.org/markdown-to-jsx/-/markdown-to-jsx-7.4.3.tgz",
- "integrity": "sha512-qwu2XftKs/SP+f6oCe0ruAFKX6jZaKxrBfDBV4CthqbVbRQwHhNM28QGDQuTldCaOn+hocaqbmGvCuXO5m3smA==",
+ "version": "7.4.7",
+ "resolved": "https://registry.npmjs.org/markdown-to-jsx/-/markdown-to-jsx-7.4.7.tgz",
+ "integrity": "sha512-0+ls1IQZdU6cwM1yu0ZjjiVWYtkbExSyUIFU2ZeDIFuZM1W42Mh4OlJ4nb4apX4H8smxDHRdFaoIVJGwfv5hkg==",
"dev": true,
"engines": {
"node": ">= 10"
@@ -19404,12 +18786,12 @@
}
},
"node_modules/micromatch": {
- "version": "4.0.5",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
- "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
+ "version": "4.0.7",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz",
+ "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==",
"dev": true,
"dependencies": {
- "braces": "^3.0.2",
+ "braces": "^3.0.3",
"picomatch": "^2.3.1"
},
"engines": {
@@ -19532,9 +18914,9 @@
}
},
"node_modules/minipass": {
- "version": "7.0.4",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz",
- "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==",
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
+ "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
"dev": true,
"engines": {
"node": ">=16 || 14 >=14.17"
@@ -19572,15 +18954,15 @@
"dev": true
},
"node_modules/mkdirp": {
- "version": "0.5.6",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
- "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
+ "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
"dev": true,
- "dependencies": {
- "minimist": "^1.2.6"
- },
"bin": {
"mkdirp": "bin/cmd.js"
+ },
+ "engines": {
+ "node": ">=10"
}
},
"node_modules/mkdirp-classic": {
@@ -19595,6 +18977,15 @@
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
"dev": true
},
+ "node_modules/mustache": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/mustache/-/mustache-4.2.0.tgz",
+ "integrity": "sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==",
+ "dev": true,
+ "bin": {
+ "mustache": "bin/mustache"
+ }
+ },
"node_modules/nanoid": {
"version": "3.3.7",
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz",
@@ -19694,9 +19085,9 @@
}
},
"node_modules/next-intl": {
- "version": "3.11.1",
- "resolved": "https://registry.npmjs.org/next-intl/-/next-intl-3.11.1.tgz",
- "integrity": "sha512-KaMdMMTLJ8Qs15AfltKFTdzk3OjAEIKRGmRu6kpH5Mv3DPUoOX9sQ+fXvNlKmLzw+TeBt5yPCswzLZFmJMbsOA==",
+ "version": "3.14.1",
+ "resolved": "https://registry.npmjs.org/next-intl/-/next-intl-3.14.1.tgz",
+ "integrity": "sha512-Jb5KdYaJCH3z4O/Ab05YOi7lzaqtFcnOa8KdUCHvHKxPYNM7H6I/5hC3dvKPDb9S5gW6wMp3bNQoMzcWw227jw==",
"funding": [
{
"type": "individual",
@@ -19706,7 +19097,7 @@
"dependencies": {
"@formatjs/intl-localematcher": "^0.2.32",
"negotiator": "^0.6.3",
- "use-intl": "^3.11.1"
+ "use-intl": "^3.14.1"
},
"peerDependencies": {
"next": "^10.0.0 || ^11.0.0 || ^12.0.0 || ^13.0.0 || ^14.0.0",
@@ -19751,9 +19142,9 @@
}
},
"node_modules/node-abi": {
- "version": "3.54.0",
- "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.54.0.tgz",
- "integrity": "sha512-p7eGEiQil0YUV3ItH4/tBb781L5impVmmx2E9FRKF7d18XXzp4PGT2tdYMFY6wQqgxD0IwNZOiSJ0/K0fSi/OA==",
+ "version": "3.63.0",
+ "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.63.0.tgz",
+ "integrity": "sha512-vAszCsOUrUxjGAmdnM/pq7gUgie0IRteCQMX6d4A534fQCR93EJU5qgzBvU6EkFfK27s0T3HEV3BOyJIr7OMYw==",
"dev": true,
"dependencies": {
"semver": "^7.3.5"
@@ -19807,9 +19198,9 @@
}
},
"node_modules/node-fetch-native": {
- "version": "1.6.1",
- "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.1.tgz",
- "integrity": "sha512-bW9T/uJDPAJB2YNYEpWzE54U5O3MQidXsOyTfnbKYtTtFexRvGzb1waphBN4ZwP6EcIvYYEOwW0b72BpAqydTw==",
+ "version": "1.6.4",
+ "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.4.tgz",
+ "integrity": "sha512-IhOigYzAKHd244OC0JIMIUrjzctirCmPkaIfhDeGcEETWof5zKYUW7e7MYvChGWh/4CJeXEgsRyGzuF334rOOQ==",
"dev": true
},
"node_modules/node-fetch/node_modules/tr46": {
@@ -19885,6 +19276,19 @@
"integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==",
"dev": true
},
+ "node_modules/node.extend": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/node.extend/-/node.extend-2.0.3.tgz",
+ "integrity": "sha512-xwADg/okH48PvBmRZyoX8i8GJaKuJ1CqlqotlZOhUio8egD1P5trJupHKBzcPjSF9ifK2gPcEICRBnkfPqQXZw==",
+ "dev": true,
+ "dependencies": {
+ "hasown": "^2.0.0",
+ "is": "^3.3.0"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
"node_modules/normalize-package-data": {
"version": "2.5.0",
"resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
@@ -19949,21 +19353,22 @@
}
},
"node_modules/nwsapi": {
- "version": "2.2.7",
- "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz",
- "integrity": "sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==",
+ "version": "2.2.10",
+ "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.10.tgz",
+ "integrity": "sha512-QK0sRs7MKv0tKe1+5uZIQk/C8XGza4DAnztJG8iD+TpJIORARrCxczA738awHrZoHeTjSSoHqao2teO0dC/gFQ==",
"dev": true
},
"node_modules/nypm": {
- "version": "0.3.6",
- "resolved": "https://registry.npmjs.org/nypm/-/nypm-0.3.6.tgz",
- "integrity": "sha512-2CATJh3pd6CyNfU5VZM7qSwFu0ieyabkEdnogE30Obn1czrmOYiZ8DOZLe1yBdLKWoyD3Mcy2maUs+0MR3yVjQ==",
+ "version": "0.3.8",
+ "resolved": "https://registry.npmjs.org/nypm/-/nypm-0.3.8.tgz",
+ "integrity": "sha512-IGWlC6So2xv6V4cIDmoV0SwwWx7zLG086gyqkyumteH2fIgCAM4nDVFB2iDRszDvmdSVW9xb1N+2KjQ6C7d4og==",
"dev": true,
"dependencies": {
- "citty": "^0.1.5",
+ "citty": "^0.1.6",
+ "consola": "^3.2.3",
"execa": "^8.0.1",
"pathe": "^1.1.2",
- "ufo": "^1.3.2"
+ "ufo": "^1.4.0"
},
"bin": {
"nypm": "dist/cli.mjs"
@@ -20022,17 +19427,285 @@
"integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==",
"dev": true,
"engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/nypm/node_modules/mimic-fn": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz",
+ "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/nypm/node_modules/npm-run-path": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz",
+ "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==",
+ "dev": true,
+ "dependencies": {
+ "path-key": "^4.0.0"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/nypm/node_modules/onetime": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz",
+ "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==",
+ "dev": true,
+ "dependencies": {
+ "mimic-fn": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/nypm/node_modules/path-key": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz",
+ "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/nypm/node_modules/strip-final-newline": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz",
+ "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object-inspect": {
+ "version": "1.13.1",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz",
+ "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==",
+ "dev": true,
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/object-is": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.6.tgz",
+ "integrity": "sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/object-keys": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
+ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/object.assign": {
+ "version": "4.1.5",
+ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz",
+ "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.5",
+ "define-properties": "^1.2.1",
+ "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.8",
+ "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz",
+ "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-object-atoms": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/object.fromentries": {
+ "version": "2.0.8",
+ "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz",
+ "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.2",
+ "es-object-atoms": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/object.groupby": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz",
+ "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/object.hasown": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.4.tgz",
+ "integrity": "sha512-FZ9LZt9/RHzGySlBARE3VF+gE26TxR38SdmqOqliuTnl9wrKulaQs+4dee1V+Io8VfxqzAfHu6YuRgUy8OHoTg==",
+ "dev": true,
+ "dependencies": {
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.2",
+ "es-object-atoms": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/object.values": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz",
+ "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-object-atoms": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/objectorarray": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/objectorarray/-/objectorarray-1.0.5.tgz",
+ "integrity": "sha512-eJJDYkhJFFbBBAxeh8xW+weHlkI28n2ZdQV/J/DNfWfSKlGEf2xcfAbZTv3riEXHAhL9SVOTs2pRmXiSTf78xg==",
+ "dev": true
+ },
+ "node_modules/ohash": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/ohash/-/ohash-1.1.3.tgz",
+ "integrity": "sha512-zuHHiGTYTA1sYJ/wZN+t5HKZaH23i4yI1HMwbuXm24Nid7Dv0KcuRlKoNKS9UNfAVSBlnGLcuQrnOKWOZoEGaw==",
+ "dev": true
+ },
+ "node_modules/on-finished": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
+ "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
+ "dev": true,
+ "dependencies": {
+ "ee-first": "1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/on-headers": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz",
+ "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "dev": true,
+ "dependencies": {
+ "wrappy": "1"
+ }
+ },
+ "node_modules/onetime": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
+ "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
+ "dev": true,
+ "dependencies": {
+ "mimic-fn": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=6"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/nypm/node_modules/mimic-fn": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz",
- "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==",
+ "node_modules/open": {
+ "version": "8.4.2",
+ "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz",
+ "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==",
"dev": true,
+ "dependencies": {
+ "define-lazy-prop": "^2.0.0",
+ "is-docker": "^2.1.1",
+ "is-wsl": "^2.2.0"
+ },
"engines": {
"node": ">=12"
},
@@ -20040,419 +19713,568 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/nypm/node_modules/npm-run-path": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.2.0.tgz",
- "integrity": "sha512-W4/tgAXFqFA0iL7fk0+uQ3g7wkL8xJmx3XdK0VGb4cHW//eZTtKGvFBBoRKVTpY7n6ze4NL9ly7rgXcHufqXKg==",
+ "node_modules/optionator": {
+ "version": "0.9.4",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz",
+ "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==",
"dev": true,
"dependencies": {
- "path-key": "^4.0.0"
+ "deep-is": "^0.1.3",
+ "fast-levenshtein": "^2.0.6",
+ "levn": "^0.4.1",
+ "prelude-ls": "^1.2.1",
+ "type-check": "^0.4.0",
+ "word-wrap": "^1.2.5"
},
"engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "node": ">= 0.8.0"
}
},
- "node_modules/nypm/node_modules/onetime": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz",
- "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==",
+ "node_modules/ora": {
+ "version": "5.4.1",
+ "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz",
+ "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==",
"dev": true,
"dependencies": {
- "mimic-fn": "^4.0.0"
+ "bl": "^4.1.0",
+ "chalk": "^4.1.0",
+ "cli-cursor": "^3.1.0",
+ "cli-spinners": "^2.5.0",
+ "is-interactive": "^1.0.0",
+ "is-unicode-supported": "^0.1.0",
+ "log-symbols": "^4.1.0",
+ "strip-ansi": "^6.0.0",
+ "wcwidth": "^1.0.1"
},
"engines": {
- "node": ">=12"
+ "node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/nypm/node_modules/path-key": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz",
- "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==",
+ "node_modules/ora/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
"engines": {
- "node": ">=12"
+ "node": ">=8"
},
"funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
- "node_modules/nypm/node_modules/strip-final-newline": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz",
- "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==",
+ "node_modules/ora/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
"dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
"engines": {
- "node": ">=12"
+ "node": ">=10"
},
"funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "url": "https://github.com/chalk/chalk?sponsor=1"
}
},
- "node_modules/object-assign": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
- "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
+ "node_modules/ora/node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
"engines": {
- "node": ">=0.10.0"
+ "node": ">=8"
}
},
- "node_modules/object-inspect": {
- "version": "1.13.1",
- "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz",
- "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==",
+ "node_modules/ora/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
}
},
- "node_modules/object-is": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz",
- "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==",
+ "node_modules/os-browserify": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz",
+ "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==",
+ "dev": true
+ },
+ "node_modules/p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.3"
+ "yocto-queue": "^0.1.0"
},
"engines": {
- "node": ">= 0.4"
+ "node": ">=10"
},
"funding": {
- "url": "https://github.com/sponsors/ljharb"
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "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==",
+ "node_modules/p-locate": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
+ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
"dev": true,
+ "dependencies": {
+ "p-limit": "^3.0.2"
+ },
"engines": {
- "node": ">= 0.4"
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/object.assign": {
- "version": "4.1.5",
- "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz",
- "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==",
+ "node_modules/p-map": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz",
+ "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.5",
- "define-properties": "^1.2.1",
- "has-symbols": "^1.0.3",
- "object-keys": "^1.1.1"
+ "aggregate-error": "^3.0.0"
},
"engines": {
- "node": ">= 0.4"
+ "node": ">=10"
},
"funding": {
- "url": "https://github.com/sponsors/ljharb"
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/object.entries": {
- "version": "1.1.7",
- "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.7.tgz",
- "integrity": "sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==",
+ "node_modules/p-timeout": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-4.1.0.tgz",
+ "integrity": "sha512-+/wmHtzJuWii1sXn3HCuH/FTwGhrp4tmJTxSKJbfS+vkipci6osxXM5mY0jUiRzWKMTgUT8l7HFbeSwZAynqHw==",
"dev": true,
- "dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.2.0",
- "es-abstract": "^1.22.1"
- },
"engines": {
- "node": ">= 0.4"
+ "node": ">=10"
}
},
- "node_modules/object.fromentries": {
- "version": "2.0.7",
- "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz",
- "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==",
+ "node_modules/p-try": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
"dev": true,
- "dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.2.0",
- "es-abstract": "^1.22.1"
- },
"engines": {
- "node": ">= 0.4"
+ "node": ">=6"
+ }
+ },
+ "node_modules/pa11y-ci": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/pa11y-ci/-/pa11y-ci-3.1.0.tgz",
+ "integrity": "sha512-1WBGBMq0dYtZ+N/SH/AcnFSsT6sZ2w27d8Z/5XHJWSELeX8Qhh4yX5f0drb7crwjt7ugKSo4A7eEF9RbMB0LYg==",
+ "dev": true,
+ "dependencies": {
+ "async": "~2.6.4",
+ "cheerio": "~1.0.0-rc.10",
+ "commander": "~6.2.1",
+ "globby": "~6.1.0",
+ "kleur": "~4.1.4",
+ "lodash": "~4.17.21",
+ "node-fetch": "~2.6.1",
+ "pa11y": "^6.2.3",
+ "protocolify": "~3.0.0",
+ "puppeteer": "~9.1.1",
+ "wordwrap": "~1.0.0"
},
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
+ "bin": {
+ "pa11y-ci": "bin/pa11y-ci.js"
+ },
+ "engines": {
+ "node": ">= 12"
}
},
- "node_modules/object.groupby": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.1.tgz",
- "integrity": "sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==",
+ "node_modules/pa11y-ci/node_modules/array-union": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
+ "integrity": "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.2.0",
- "es-abstract": "^1.22.1",
- "get-intrinsic": "^1.2.1"
+ "array-uniq": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "node_modules/object.hasown": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.3.tgz",
- "integrity": "sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==",
+ "node_modules/pa11y-ci/node_modules/axe-core": {
+ "version": "4.2.4",
+ "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.2.4.tgz",
+ "integrity": "sha512-9AiDKFKUCWEQm1Kj4lcq7KFavLqSXdf2m/zJo+NVh4VXlW5iwXRJ6alkKmipCyYorsRnqsICH9XLubP1jBF+Og==",
"dev": true,
- "dependencies": {
- "define-properties": "^1.2.0",
- "es-abstract": "^1.22.1"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
+ "engines": {
+ "node": ">=4"
}
},
- "node_modules/object.values": {
- "version": "1.1.7",
- "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz",
- "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==",
+ "node_modules/pa11y-ci/node_modules/bfj": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/bfj/-/bfj-7.0.2.tgz",
+ "integrity": "sha512-+e/UqUzwmzJamNF50tBV6tZPTORow7gQ96iFow+8b562OdMpEK0BcJEq2OSPEDmAbSMBQ7PKZ87ubFkgxpYWgw==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.2.0",
- "es-abstract": "^1.22.1"
+ "bluebird": "^3.5.5",
+ "check-types": "^11.1.1",
+ "hoopy": "^0.1.4",
+ "tryer": "^1.0.1"
},
"engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
+ "node": ">= 8.0.0"
}
},
- "node_modules/objectorarray": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/objectorarray/-/objectorarray-1.0.5.tgz",
- "integrity": "sha512-eJJDYkhJFFbBBAxeh8xW+weHlkI28n2ZdQV/J/DNfWfSKlGEf2xcfAbZTv3riEXHAhL9SVOTs2pRmXiSTf78xg==",
+ "node_modules/pa11y-ci/node_modules/chownr": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz",
+ "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==",
"dev": true
},
- "node_modules/ohash": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/ohash/-/ohash-1.1.3.tgz",
- "integrity": "sha512-zuHHiGTYTA1sYJ/wZN+t5HKZaH23i4yI1HMwbuXm24Nid7Dv0KcuRlKoNKS9UNfAVSBlnGLcuQrnOKWOZoEGaw==",
+ "node_modules/pa11y-ci/node_modules/commander": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz",
+ "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/pa11y-ci/node_modules/devtools-protocol": {
+ "version": "0.0.869402",
+ "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.869402.tgz",
+ "integrity": "sha512-VvlVYY+VDJe639yHs5PHISzdWTLL3Aw8rO4cvUtwvoxFd6FHbE4OpHHcde52M6096uYYazAmd4l0o5VuFRO2WA==",
"dev": true
},
- "node_modules/on-finished": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
- "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
+ "node_modules/pa11y-ci/node_modules/envinfo": {
+ "version": "7.8.1",
+ "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz",
+ "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==",
+ "dev": true,
+ "bin": {
+ "envinfo": "dist/cli.js"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/pa11y-ci/node_modules/find-up": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
"dev": true,
"dependencies": {
- "ee-first": "1.1.1"
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
},
"engines": {
- "node": ">= 0.8"
+ "node": ">=8"
}
},
- "node_modules/on-headers": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz",
- "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==",
+ "node_modules/pa11y-ci/node_modules/glob": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "deprecated": "Glob versions prior to v9 are no longer supported",
"dev": true,
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
"engines": {
- "node": ">= 0.8"
+ "node": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
}
},
- "node_modules/once": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
- "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "node_modules/pa11y-ci/node_modules/globby": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz",
+ "integrity": "sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==",
"dev": true,
"dependencies": {
- "wrappy": "1"
+ "array-union": "^1.0.1",
+ "glob": "^7.0.3",
+ "object-assign": "^4.0.1",
+ "pify": "^2.0.0",
+ "pinkie-promise": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "node_modules/onetime": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
- "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
+ "node_modules/pa11y-ci/node_modules/locate-path": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
"dev": true,
"dependencies": {
- "mimic-fn": "^2.1.0"
+ "p-locate": "^4.1.0"
},
"engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "node": ">=8"
}
},
- "node_modules/open": {
- "version": "8.4.2",
- "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz",
- "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==",
+ "node_modules/pa11y-ci/node_modules/lru-cache": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+ "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
"dev": true,
"dependencies": {
- "define-lazy-prop": "^2.0.0",
- "is-docker": "^2.1.1",
- "is-wsl": "^2.2.0"
+ "yallist": "^4.0.0"
},
"engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "node": ">=10"
}
},
- "node_modules/optionator": {
- "version": "0.9.3",
- "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz",
- "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==",
+ "node_modules/pa11y-ci/node_modules/node-fetch": {
+ "version": "2.6.13",
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.13.tgz",
+ "integrity": "sha512-StxNAxh15zr77QvvkmveSQ8uCQ4+v5FkvNTj0OESmiHu+VRi/gXArXtkWMElOsOUNLtUEvI4yS+rdtOHZTwlQA==",
"dev": true,
"dependencies": {
- "@aashutoshrathi/word-wrap": "^1.2.3",
- "deep-is": "^0.1.3",
- "fast-levenshtein": "^2.0.6",
- "levn": "^0.4.1",
- "prelude-ls": "^1.2.1",
- "type-check": "^0.4.0"
+ "whatwg-url": "^5.0.0"
},
"engines": {
- "node": ">= 0.8.0"
+ "node": "4.x || >=6.0.0"
+ },
+ "peerDependencies": {
+ "encoding": "^0.1.0"
+ },
+ "peerDependenciesMeta": {
+ "encoding": {
+ "optional": true
+ }
}
},
- "node_modules/ora": {
- "version": "5.4.1",
- "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz",
- "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==",
+ "node_modules/pa11y-ci/node_modules/p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
"dev": true,
"dependencies": {
- "bl": "^4.1.0",
- "chalk": "^4.1.0",
- "cli-cursor": "^3.1.0",
- "cli-spinners": "^2.5.0",
- "is-interactive": "^1.0.0",
- "is-unicode-supported": "^0.1.0",
- "log-symbols": "^4.1.0",
- "strip-ansi": "^6.0.0",
- "wcwidth": "^1.0.1"
+ "p-try": "^2.0.0"
},
"engines": {
- "node": ">=10"
+ "node": ">=6"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/ora/node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "node_modules/pa11y-ci/node_modules/p-locate": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
"dev": true,
"dependencies": {
- "color-convert": "^2.0.1"
+ "p-limit": "^2.2.0"
},
"engines": {
"node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
- "node_modules/ora/node_modules/chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "node_modules/pa11y-ci/node_modules/pa11y": {
+ "version": "6.2.3",
+ "resolved": "https://registry.npmjs.org/pa11y/-/pa11y-6.2.3.tgz",
+ "integrity": "sha512-69JoUlfW2QVmrgQAm+17XBxIvmd1u0ImFBYIHPyjC61CzAkmxO3kkbqDVxIcl0OKLvAMYSMbvfCH8kMFE9xsbg==",
"dev": true,
"dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
+ "axe-core": "~4.2.1",
+ "bfj": "~7.0.2",
+ "commander": "~8.0.0",
+ "envinfo": "~7.8.1",
+ "html_codesniffer": "~2.5.1",
+ "kleur": "~4.1.4",
+ "mustache": "~4.2.0",
+ "node.extend": "~2.0.2",
+ "p-timeout": "~4.1.0",
+ "puppeteer": "~9.1.1",
+ "semver": "~7.3.5"
},
- "engines": {
- "node": ">=10"
+ "bin": {
+ "pa11y": "bin/pa11y.js"
},
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
+ "engines": {
+ "node": ">=12"
}
},
- "node_modules/ora/node_modules/has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "node_modules/pa11y-ci/node_modules/pa11y/node_modules/commander": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-8.0.0.tgz",
+ "integrity": "sha512-Xvf85aAtu6v22+E5hfVoLHqyul/jyxh91zvqk/ioJTQuJR7Z78n7H558vMPKanPSRgIEeZemT92I2g9Y8LPbSQ==",
"dev": true,
"engines": {
- "node": ">=8"
+ "node": ">= 12"
}
},
- "node_modules/ora/node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "node_modules/pa11y-ci/node_modules/pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/pa11y-ci/node_modules/pkg-dir": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
+ "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
"dev": true,
"dependencies": {
- "has-flag": "^4.0.0"
+ "find-up": "^4.0.0"
},
"engines": {
"node": ">=8"
}
},
- "node_modules/os-browserify": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz",
- "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==",
- "dev": true
- },
- "node_modules/p-limit": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
- "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+ "node_modules/pa11y-ci/node_modules/puppeteer": {
+ "version": "9.1.1",
+ "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-9.1.1.tgz",
+ "integrity": "sha512-W+nOulP2tYd/ZG99WuZC/I5ljjQQ7EUw/jQGcIb9eu8mDlZxNY2SgcJXTLG9h5gRvqA3uJOe4hZXYsd3EqioMw==",
+ "deprecated": "< 22.5.0 is no longer supported",
"dev": true,
+ "hasInstallScript": true,
"dependencies": {
- "yocto-queue": "^0.1.0"
+ "debug": "^4.1.0",
+ "devtools-protocol": "0.0.869402",
+ "extract-zip": "^2.0.0",
+ "https-proxy-agent": "^5.0.0",
+ "node-fetch": "^2.6.1",
+ "pkg-dir": "^4.2.0",
+ "progress": "^2.0.1",
+ "proxy-from-env": "^1.1.0",
+ "rimraf": "^3.0.2",
+ "tar-fs": "^2.0.0",
+ "unbzip2-stream": "^1.3.3",
+ "ws": "^7.2.3"
},
"engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "node": ">=10.18.1"
}
},
- "node_modules/p-locate": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
- "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
+ "node_modules/pa11y-ci/node_modules/readable-stream": {
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
+ "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
"dev": true,
"dependencies": {
- "p-limit": "^3.0.2"
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
},
"engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "node": ">= 6"
}
},
- "node_modules/p-map": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz",
- "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==",
+ "node_modules/pa11y-ci/node_modules/semver": {
+ "version": "7.3.8",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz",
+ "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==",
"dev": true,
"dependencies": {
- "aggregate-error": "^3.0.0"
+ "lru-cache": "^6.0.0"
+ },
+ "bin": {
+ "semver": "bin/semver.js"
},
"engines": {
"node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/p-try": {
+ "node_modules/pa11y-ci/node_modules/tar-fs": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz",
+ "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==",
+ "dev": true,
+ "dependencies": {
+ "chownr": "^1.1.1",
+ "mkdirp-classic": "^0.5.2",
+ "pump": "^3.0.0",
+ "tar-stream": "^2.1.4"
+ }
+ },
+ "node_modules/pa11y-ci/node_modules/tar-stream": {
"version": "2.2.0",
- "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
- "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
+ "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz",
+ "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==",
"dev": true,
+ "dependencies": {
+ "bl": "^4.0.3",
+ "end-of-stream": "^1.4.1",
+ "fs-constants": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^3.1.1"
+ },
"engines": {
"node": ">=6"
}
},
+ "node_modules/pa11y-ci/node_modules/tr46": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
+ "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==",
+ "dev": true
+ },
+ "node_modules/pa11y-ci/node_modules/webidl-conversions": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
+ "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==",
+ "dev": true
+ },
+ "node_modules/pa11y-ci/node_modules/whatwg-url": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
+ "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
+ "dev": true,
+ "dependencies": {
+ "tr46": "~0.0.3",
+ "webidl-conversions": "^3.0.0"
+ }
+ },
+ "node_modules/pa11y-ci/node_modules/ws": {
+ "version": "7.5.9",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz",
+ "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=8.3.0"
+ },
+ "peerDependencies": {
+ "bufferutil": "^4.0.1",
+ "utf-8-validate": "^5.0.2"
+ },
+ "peerDependenciesMeta": {
+ "bufferutil": {
+ "optional": true
+ },
+ "utf-8-validate": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/pa11y-ci/node_modules/yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+ "dev": true
+ },
"node_modules/pako": {
"version": "1.0.11",
"resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
@@ -20482,16 +20304,20 @@
}
},
"node_modules/parse-asn1": {
- "version": "5.1.6",
- "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz",
- "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==",
+ "version": "5.1.7",
+ "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.7.tgz",
+ "integrity": "sha512-CTM5kuWR3sx9IFamcl5ErfPl6ea/N8IYwiJ+vpeB2g+1iknv7zBl5uPwbMbRVznRVbrNY6lGuDoE5b30grmbqg==",
"dev": true,
"dependencies": {
- "asn1.js": "^5.2.0",
- "browserify-aes": "^1.0.0",
- "evp_bytestokey": "^1.0.0",
- "pbkdf2": "^3.0.3",
- "safe-buffer": "^5.1.1"
+ "asn1.js": "^4.10.1",
+ "browserify-aes": "^1.2.0",
+ "evp_bytestokey": "^1.0.3",
+ "hash-base": "~3.0",
+ "pbkdf2": "^3.1.2",
+ "safe-buffer": "^5.2.1"
+ },
+ "engines": {
+ "node": ">= 0.10"
}
},
"node_modules/parse-json": {
@@ -20524,6 +20350,19 @@
"url": "https://github.com/inikulin/parse5?sponsor=1"
}
},
+ "node_modules/parse5-htmlparser2-tree-adapter": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz",
+ "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==",
+ "dev": true,
+ "dependencies": {
+ "domhandler": "^5.0.2",
+ "parse5": "^7.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/inikulin/parse5?sponsor=1"
+ }
+ },
"node_modules/parseurl": {
"version": "1.3.3",
"resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
@@ -20583,25 +20422,25 @@
"dev": true
},
"node_modules/path-scurry": {
- "version": "1.10.1",
- "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz",
- "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==",
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
+ "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
"dev": true,
"dependencies": {
- "lru-cache": "^9.1.1 || ^10.0.0",
+ "lru-cache": "^10.2.0",
"minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
},
"engines": {
- "node": ">=16 || 14 >=14.17"
+ "node": ">=16 || 14 >=14.18"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/path-scurry/node_modules/lru-cache": {
- "version": "10.2.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz",
- "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==",
+ "version": "10.2.2",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz",
+ "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==",
"dev": true,
"engines": {
"node": "14 || >=16.14"
@@ -20662,9 +20501,9 @@
"dev": true
},
"node_modules/picocolors": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
- "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz",
+ "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew=="
},
"node_modules/picomatch": {
"version": "2.3.1",
@@ -20687,6 +20526,27 @@
"node": ">=6"
}
},
+ "node_modules/pinkie": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
+ "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/pinkie-promise": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
+ "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==",
+ "dev": true,
+ "dependencies": {
+ "pinkie": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/pirates": {
"version": "4.0.6",
"resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz",
@@ -20709,12 +20569,12 @@
}
},
"node_modules/playwright": {
- "version": "1.44.0",
- "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.44.0.tgz",
- "integrity": "sha512-F9b3GUCLQ3Nffrfb6dunPOkE5Mh68tR7zN32L4jCk4FjQamgesGay7/dAAe1WaMEGV04DkdJfcJzjoCKygUaRQ==",
+ "version": "1.44.1",
+ "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.44.1.tgz",
+ "integrity": "sha512-qr/0UJ5CFAtloI3avF95Y0L1xQo6r3LQArLIg/z/PoGJ6xa+EwzrwO5lpNr/09STxdHuUoP2mvuELJS+hLdtgg==",
"devOptional": true,
"dependencies": {
- "playwright-core": "1.44.0"
+ "playwright-core": "1.44.1"
},
"bin": {
"playwright": "cli.js"
@@ -20727,9 +20587,9 @@
}
},
"node_modules/playwright-core": {
- "version": "1.44.0",
- "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.44.0.tgz",
- "integrity": "sha512-ZTbkNpFfYcGWohvTTl+xewITm7EOuqIqex0c7dNZ+aXsbrLj0qI8XlGKfPpipjm0Wny/4Lt4CJsWJk1stVS5qQ==",
+ "version": "1.44.1",
+ "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.44.1.tgz",
+ "integrity": "sha512-wh0JWtYTrhv1+OSsLPgFzGzt67Y7BE/ZS3jEqgGBlp2ppp1ZDj8c+9IARNW4dwf1poq5MgHreEM2KV/GuR4cFA==",
"devOptional": true,
"bin": {
"playwright-core": "cli.js"
@@ -20775,10 +20635,19 @@
"node": ">=10"
}
},
+ "node_modules/possible-typed-array-names": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz",
+ "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
"node_modules/postcss": {
- "version": "8.4.33",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.33.tgz",
- "integrity": "sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg==",
+ "version": "8.4.38",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz",
+ "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==",
"dev": true,
"funding": [
{
@@ -20797,27 +20666,33 @@
"dependencies": {
"nanoid": "^3.3.7",
"picocolors": "^1.0.0",
- "source-map-js": "^1.0.2"
+ "source-map-js": "^1.2.0"
},
"engines": {
"node": "^10 || ^12 || >=14"
}
},
"node_modules/postcss-attribute-case-insensitive": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-6.0.2.tgz",
- "integrity": "sha512-IRuCwwAAQbgaLhxQdQcIIK0dCVXg3XDUnzgKD8iwdiYdwU4rMWRWyl/W9/0nA4ihVpq5pyALiHB2veBJ0292pw==",
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-6.0.3.tgz",
+ "integrity": "sha512-KHkmCILThWBRtg+Jn1owTnHPnFit4OkqS+eKiGEOPIGke54DCeYGJ6r0Fx/HjfE9M9kznApCLcU0DvnPchazMQ==",
"dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/csstools"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/csstools"
+ }
+ ],
"dependencies": {
- "postcss-selector-parser": "^6.0.10"
+ "postcss-selector-parser": "^6.0.13"
},
"engines": {
"node": "^14 || ^16 || >=18"
},
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/csstools"
- },
"peerDependencies": {
"postcss": "^8.4"
}
@@ -20864,9 +20739,9 @@
}
},
"node_modules/postcss-color-hex-alpha": {
- "version": "9.0.3",
- "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-9.0.3.tgz",
- "integrity": "sha512-7sEHU4tAS6htlxun8AB9LDrCXoljxaC34tFVRlYKcvO+18r5fvGiXgv5bQzN40+4gXLCyWSMRK5FK31244WcCA==",
+ "version": "9.0.4",
+ "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-9.0.4.tgz",
+ "integrity": "sha512-XQZm4q4fNFqVCYMGPiBjcqDhuG7Ey2xrl99AnDJMyr5eDASsAGalndVgHZF8i97VFNy1GQeZc4q2ydagGmhelQ==",
"dev": true,
"funding": [
{
@@ -20879,6 +20754,7 @@
}
],
"dependencies": {
+ "@csstools/utilities": "^1.0.0",
"postcss-value-parser": "^4.2.0"
},
"engines": {
@@ -20936,9 +20812,9 @@
}
},
"node_modules/postcss-custom-properties": {
- "version": "13.3.4",
- "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-13.3.4.tgz",
- "integrity": "sha512-9YN0gg9sG3OH+Z9xBrp2PWRb+O4msw+5Sbp3ZgqrblrwKspXVQe5zr5sVqi43gJGwW/Rv1A483PRQUzQOEewvA==",
+ "version": "13.3.10",
+ "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-13.3.10.tgz",
+ "integrity": "sha512-ejaalIpl7p0k0L5ngIZ86AZGmp3m1KdeOCbSQTK4gQcB1ncaoPTHorw206+tsZRIhIDYvh5ZButEje6740YDXw==",
"dev": true,
"funding": [
{
@@ -20951,9 +20827,10 @@
}
],
"dependencies": {
- "@csstools/cascade-layer-name-parser": "^1.0.7",
- "@csstools/css-parser-algorithms": "^2.5.0",
- "@csstools/css-tokenizer": "^2.2.3",
+ "@csstools/cascade-layer-name-parser": "^1.0.11",
+ "@csstools/css-parser-algorithms": "^2.6.3",
+ "@csstools/css-tokenizer": "^2.3.1",
+ "@csstools/utilities": "^1.0.0",
"postcss-value-parser": "^4.2.0"
},
"engines": {
@@ -20964,9 +20841,9 @@
}
},
"node_modules/postcss-custom-selectors": {
- "version": "7.1.6",
- "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-7.1.6.tgz",
- "integrity": "sha512-svsjWRaxqL3vAzv71dV0/65P24/FB8TbPX+lWyyf9SZ7aZm4S4NhCn7N3Bg+Z5sZunG3FS8xQ80LrCU9hb37cw==",
+ "version": "7.1.10",
+ "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-7.1.10.tgz",
+ "integrity": "sha512-bV/6+IExyT2J4kMzX6c+ZMlN1xDfjcC4ePr1ywKezcTgwgUn11qQN3jdzFBpo8Dk1K7vO/OYOwMb5AtJP4JZcg==",
"dev": true,
"funding": [
{
@@ -20979,9 +20856,9 @@
}
],
"dependencies": {
- "@csstools/cascade-layer-name-parser": "^1.0.5",
- "@csstools/css-parser-algorithms": "^2.3.2",
- "@csstools/css-tokenizer": "^2.2.1",
+ "@csstools/cascade-layer-name-parser": "^1.0.11",
+ "@csstools/css-parser-algorithms": "^2.6.3",
+ "@csstools/css-tokenizer": "^2.3.1",
"postcss-selector-parser": "^6.0.13"
},
"engines": {
@@ -21247,9 +21124,9 @@
}
},
"node_modules/postcss-modules-extract-imports": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz",
- "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==",
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz",
+ "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==",
"dev": true,
"engines": {
"node": "^10 || ^12 || >= 14"
@@ -21259,9 +21136,9 @@
}
},
"node_modules/postcss-modules-local-by-default": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.4.tgz",
- "integrity": "sha512-L4QzMnOdVwRm1Qb8m4x8jsZzKAaPAgrUF1r/hjDR2Xj7R+8Zsf97jAlSQzWtKx5YNiNGN8QxmPFIc/sh+RQl+Q==",
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.5.tgz",
+ "integrity": "sha512-6MieY7sIfTK0hYfafw1OMEG+2bg8Q1ocHCpoWLqOKj3JXlKu4G7btkmM/B7lFubYkYWmRSPLZi5chid63ZaZYw==",
"dev": true,
"dependencies": {
"icss-utils": "^5.0.0",
@@ -21276,9 +21153,9 @@
}
},
"node_modules/postcss-modules-scope": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.1.1.tgz",
- "integrity": "sha512-uZgqzdTleelWjzJY+Fhti6F3C9iF1JR/dODLs/JDefozYcKTBCdD8BIl6nNPbTbcLnGrk56hzwZC2DaGNvYjzA==",
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.0.tgz",
+ "integrity": "sha512-oq+g1ssrsZOsx9M96c5w8laRmvEu9C3adDSjI8oTcbfkrTE8hx/zfyobUoWIxaKPO8bt6S62kxpw5GqypEw1QQ==",
"dev": true,
"dependencies": {
"postcss-selector-parser": "^6.0.4"
@@ -21509,28 +21386,34 @@
}
},
"node_modules/postcss-selector-not": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-7.0.1.tgz",
- "integrity": "sha512-1zT5C27b/zeJhchN7fP0kBr16Cc61mu7Si9uWWLoA3Px/D9tIJPKchJCkUH3tPO5D0pCFmGeApAv8XpXBQJ8SQ==",
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-7.0.2.tgz",
+ "integrity": "sha512-/SSxf/90Obye49VZIfc0ls4H0P6i6V1iHv0pzZH8SdgvZOPFkF37ef1r5cyWcMflJSFJ5bfuoluTnFnBBFiuSA==",
"dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/csstools"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/csstools"
+ }
+ ],
"dependencies": {
- "postcss-selector-parser": "^6.0.10"
+ "postcss-selector-parser": "^6.0.13"
},
"engines": {
"node": "^14 || ^16 || >=18"
},
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/csstools"
- },
"peerDependencies": {
"postcss": "^8.4"
}
},
"node_modules/postcss-selector-parser": {
- "version": "6.0.15",
- "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.15.tgz",
- "integrity": "sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==",
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.0.tgz",
+ "integrity": "sha512-UMz42UD0UY0EApS0ZL9o1XnLhSTtvvvLe5Dc2H2O56fvRZi+KulDyf5ctDhhtYJBGKStV2FL1fy6253cmLgqVQ==",
"dev": true,
"dependencies": {
"cssesc": "^3.0.0",
@@ -21547,9 +21430,9 @@
"dev": true
},
"node_modules/prebuild-install": {
- "version": "7.1.1",
- "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz",
- "integrity": "sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==",
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.2.tgz",
+ "integrity": "sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ==",
"dev": true,
"dependencies": {
"detect-libc": "^2.0.0",
@@ -21572,6 +21455,54 @@
"node": ">=10"
}
},
+ "node_modules/prebuild-install/node_modules/chownr": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz",
+ "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==",
+ "dev": true
+ },
+ "node_modules/prebuild-install/node_modules/readable-stream": {
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
+ "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
+ "dev": true,
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/prebuild-install/node_modules/tar-fs": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz",
+ "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==",
+ "dev": true,
+ "dependencies": {
+ "chownr": "^1.1.1",
+ "mkdirp-classic": "^0.5.2",
+ "pump": "^3.0.0",
+ "tar-stream": "^2.1.4"
+ }
+ },
+ "node_modules/prebuild-install/node_modules/tar-stream": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz",
+ "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==",
+ "dev": true,
+ "dependencies": {
+ "bl": "^4.0.3",
+ "end-of-stream": "^1.4.1",
+ "fs-constants": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^3.1.1"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
"node_modules/prelude-ls": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
@@ -21581,10 +21512,19 @@
"node": ">= 0.8.0"
}
},
+ "node_modules/prepend-http": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-3.0.1.tgz",
+ "integrity": "sha512-BLxfZh+m6UiAiCPZFJ4+vYoL7NrRs5XgCTRrjseATAggXhdZKKxn+JUNmuVYWY23bDHgaEHodxw8mnmtVEDtHw==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/prettier": {
- "version": "3.2.5",
- "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.2.5.tgz",
- "integrity": "sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==",
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.0.tgz",
+ "integrity": "sha512-J9odKxERhCQ10OC2yb93583f6UnYutOeiV5i0zEDS7UGTdUt0u+y8erxl3lBKvwo/JHyyoEdXjwp4dke9oyZ/g==",
"dev": true,
"bin": {
"prettier": "bin/prettier.cjs"
@@ -21632,12 +21572,6 @@
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
- "node_modules/pretty-format/node_modules/react-is": {
- "version": "17.0.2",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz",
- "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==",
- "dev": true
- },
"node_modules/pretty-hrtime": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz",
@@ -21684,6 +21618,15 @@
"node": ">= 6"
}
},
+ "node_modules/prompts/node_modules/kleur": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
+ "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
"node_modules/prop-types": {
"version": "15.8.1",
"resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
@@ -21695,6 +21638,25 @@
"react-is": "^16.13.1"
}
},
+ "node_modules/prop-types/node_modules/react-is": {
+ "version": "16.13.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
+ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==",
+ "dev": true
+ },
+ "node_modules/protocolify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/protocolify/-/protocolify-3.0.0.tgz",
+ "integrity": "sha512-PuvDJOkKJMVQx8jSNf8E5g0bJw/UTKm30mTjFHg4N30c8sefgA5Qr/f8INKqYBKfvP/MUSJrj+z1Smjbq4/3rQ==",
+ "dev": true,
+ "dependencies": {
+ "file-url": "^3.0.0",
+ "prepend-http": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/proxy-addr": {
"version": "2.0.7",
"resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
@@ -21738,148 +21700,52 @@
"version": "4.12.0",
"resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
"integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
- "dev": true
- },
- "node_modules/pump": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
- "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
- "dev": true,
- "dependencies": {
- "end-of-stream": "^1.1.0",
- "once": "^1.3.1"
- }
- },
- "node_modules/pumpify": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz",
- "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==",
- "dev": true,
- "dependencies": {
- "duplexify": "^3.6.0",
- "inherits": "^2.0.3",
- "pump": "^2.0.0"
- }
- },
- "node_modules/pumpify/node_modules/pump": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz",
- "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==",
- "dev": true,
- "dependencies": {
- "end-of-stream": "^1.1.0",
- "once": "^1.3.1"
- }
- },
- "node_modules/punycode": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
- "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/puppeteer-core": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-2.1.1.tgz",
- "integrity": "sha512-n13AWriBMPYxnpbb6bnaY5YoY6rGj8vPLrz6CZF3o0qJNEwlcfJVxBzYZ0NJsQ21UbdJoijPCDrM++SUVEz7+w==",
- "dev": true,
- "dependencies": {
- "@types/mime-types": "^2.1.0",
- "debug": "^4.1.0",
- "extract-zip": "^1.6.6",
- "https-proxy-agent": "^4.0.0",
- "mime": "^2.0.3",
- "mime-types": "^2.1.25",
- "progress": "^2.0.1",
- "proxy-from-env": "^1.0.0",
- "rimraf": "^2.6.1",
- "ws": "^6.1.0"
- },
- "engines": {
- "node": ">=8.16.0"
- }
- },
- "node_modules/puppeteer-core/node_modules/agent-base": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-5.1.1.tgz",
- "integrity": "sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g==",
- "dev": true,
- "engines": {
- "node": ">= 6.0.0"
- }
- },
- "node_modules/puppeteer-core/node_modules/glob": {
- "version": "7.2.3",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
- "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
- "dev": true,
- "dependencies": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.1.1",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- },
- "engines": {
- "node": "*"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/puppeteer-core/node_modules/https-proxy-agent": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz",
- "integrity": "sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg==",
+ "dev": true
+ },
+ "node_modules/pump": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
+ "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
"dev": true,
"dependencies": {
- "agent-base": "5",
- "debug": "4"
- },
- "engines": {
- "node": ">= 6.0.0"
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.1"
}
},
- "node_modules/puppeteer-core/node_modules/mime": {
- "version": "2.6.0",
- "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz",
- "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==",
+ "node_modules/pumpify": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz",
+ "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==",
"dev": true,
- "bin": {
- "mime": "cli.js"
- },
- "engines": {
- "node": ">=4.0.0"
+ "dependencies": {
+ "duplexify": "^3.6.0",
+ "inherits": "^2.0.3",
+ "pump": "^2.0.0"
}
},
- "node_modules/puppeteer-core/node_modules/rimraf": {
- "version": "2.7.1",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
- "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
+ "node_modules/pumpify/node_modules/pump": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz",
+ "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==",
"dev": true,
"dependencies": {
- "glob": "^7.1.3"
- },
- "bin": {
- "rimraf": "bin.js"
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.1"
}
},
- "node_modules/puppeteer-core/node_modules/ws": {
- "version": "6.2.2",
- "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz",
- "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==",
+ "node_modules/punycode": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
+ "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
"dev": true,
- "dependencies": {
- "async-limiter": "~1.0.0"
+ "engines": {
+ "node": ">=6"
}
},
"node_modules/pure-rand": {
- "version": "6.0.4",
- "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.4.tgz",
- "integrity": "sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA==",
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz",
+ "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==",
"dev": true,
"funding": [
{
@@ -21893,12 +21759,12 @@
]
},
"node_modules/qs": {
- "version": "6.11.2",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz",
- "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==",
+ "version": "6.12.1",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.12.1.tgz",
+ "integrity": "sha512-zWmv4RSuB9r2mYQw3zxQuHWeU+42aKi1wWig/j4ele4ygELZ7PEO6MM7rim9oAQH2A5MWfsAVf/jPvTPgCbvUQ==",
"dev": true,
"dependencies": {
- "side-channel": "^1.0.4"
+ "side-channel": "^1.0.6"
},
"engines": {
"node": ">=0.6"
@@ -21996,9 +21862,9 @@
}
},
"node_modules/raw-body": {
- "version": "2.5.1",
- "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz",
- "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==",
+ "version": "2.5.2",
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz",
+ "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==",
"dev": true,
"dependencies": {
"bytes": "3.1.2",
@@ -22035,9 +21901,9 @@
}
},
"node_modules/react": {
- "version": "18.2.0",
- "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz",
- "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==",
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz",
+ "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==",
"dependencies": {
"loose-envify": "^1.1.0"
},
@@ -22092,15 +21958,15 @@
"dev": true
},
"node_modules/react-dom": {
- "version": "18.2.0",
- "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz",
- "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==",
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz",
+ "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==",
"dependencies": {
"loose-envify": "^1.1.0",
- "scheduler": "^0.23.0"
+ "scheduler": "^0.23.2"
},
"peerDependencies": {
- "react": "^18.2.0"
+ "react": "^18.3.1"
}
},
"node_modules/react-element-to-jsx-string": {
@@ -22125,13 +21991,13 @@
"dev": true
},
"node_modules/react-i18next": {
- "version": "14.0.1",
- "resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-14.0.1.tgz",
- "integrity": "sha512-TMV8hFismBmpMdIehoFHin/okfvgjFhp723RYgIqB4XyhDobVMyukyM3Z8wtTRmajyFMZrBl/OaaXF2P6WjUAw==",
+ "version": "14.1.2",
+ "resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-14.1.2.tgz",
+ "integrity": "sha512-FSIcJy6oauJbGEXfhUgVeLzvWBhIBIS+/9c6Lj4niwKZyGaGb4V4vUbATXSlsHJDXXB+ociNxqFNiFuV1gmoqg==",
"dev": true,
"peer": true,
"dependencies": {
- "@babel/runtime": "^7.22.5",
+ "@babel/runtime": "^7.23.9",
"html-parse-stringify": "^3.0.1"
},
"peerDependencies": {
@@ -22148,15 +22014,15 @@
}
},
"node_modules/react-is": {
- "version": "16.13.1",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
- "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==",
+ "version": "17.0.2",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz",
+ "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==",
"dev": true
},
"node_modules/react-refresh": {
- "version": "0.14.0",
- "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz",
- "integrity": "sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==",
+ "version": "0.14.2",
+ "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz",
+ "integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==",
"dev": true,
"engines": {
"node": ">=0.10.0"
@@ -22188,9 +22054,9 @@
}
},
"node_modules/react-remove-scroll-bar": {
- "version": "2.3.4",
- "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.4.tgz",
- "integrity": "sha512-63C4YQBUt0m6ALadE9XV56hV8BgJWDmmTPY758iIJjfQKt2nYwoUrPk0LXRXcB/yIj82T1/Ixfdpdk68LwIB0A==",
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.6.tgz",
+ "integrity": "sha512-DtSYaao4mBmX+HDo5YWYdBWQwYIQQshUV/dVxFxK+KM26Wjwp1gZ6rv6OC3oujI6Bfu6Xyg3TwK533AQutsn/g==",
"dev": true,
"dependencies": {
"react-style-singleton": "^2.2.1",
@@ -22363,21 +22229,33 @@
}
},
"node_modules/recast": {
- "version": "0.23.4",
- "resolved": "https://registry.npmjs.org/recast/-/recast-0.23.4.tgz",
- "integrity": "sha512-qtEDqIZGVcSZCHniWwZWbRy79Dc6Wp3kT/UmDA2RJKBPg7+7k51aQBZirHmUGn5uvHf2rg8DkjizrN26k61ATw==",
+ "version": "0.23.9",
+ "resolved": "https://registry.npmjs.org/recast/-/recast-0.23.9.tgz",
+ "integrity": "sha512-Hx/BGIbwj+Des3+xy5uAtAbdCyqK9y9wbBcDFDYanLS9JnMqf7OeF87HQwUimE87OEc72mr6tkKUKMBBL+hF9Q==",
"dev": true,
"dependencies": {
- "assert": "^2.0.0",
"ast-types": "^0.16.1",
"esprima": "~4.0.0",
"source-map": "~0.6.1",
+ "tiny-invariant": "^1.3.3",
"tslib": "^2.0.1"
},
"engines": {
"node": ">= 4"
}
},
+ "node_modules/recast/node_modules/ast-types": {
+ "version": "0.16.1",
+ "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.16.1.tgz",
+ "integrity": "sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==",
+ "dev": true,
+ "dependencies": {
+ "tslib": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
"node_modules/recast/node_modules/source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
@@ -22424,15 +22302,16 @@
}
},
"node_modules/reflect.getprototypeof": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.4.tgz",
- "integrity": "sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw==",
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz",
+ "integrity": "sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.2.0",
- "es-abstract": "^1.22.1",
- "get-intrinsic": "^1.2.1",
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.1",
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.4",
"globalthis": "^1.0.3",
"which-builtin-type": "^1.1.3"
},
@@ -22483,14 +22362,15 @@
"dev": true
},
"node_modules/regexp.prototype.flags": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz",
- "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==",
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz",
+ "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.2.0",
- "set-function-name": "^2.0.0"
+ "call-bind": "^1.0.6",
+ "define-properties": "^1.2.1",
+ "es-errors": "^1.3.0",
+ "set-function-name": "^2.0.1"
},
"engines": {
"node": ">= 0.4"
@@ -22603,6 +22483,93 @@
"strip-ansi": "^6.0.1"
}
},
+ "node_modules/renderkid/node_modules/css-select": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz",
+ "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==",
+ "dev": true,
+ "dependencies": {
+ "boolbase": "^1.0.0",
+ "css-what": "^6.0.1",
+ "domhandler": "^4.3.1",
+ "domutils": "^2.8.0",
+ "nth-check": "^2.0.1"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/fb55"
+ }
+ },
+ "node_modules/renderkid/node_modules/dom-serializer": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz",
+ "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==",
+ "dev": true,
+ "dependencies": {
+ "domelementtype": "^2.0.1",
+ "domhandler": "^4.2.0",
+ "entities": "^2.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1"
+ }
+ },
+ "node_modules/renderkid/node_modules/domhandler": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz",
+ "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==",
+ "dev": true,
+ "dependencies": {
+ "domelementtype": "^2.2.0"
+ },
+ "engines": {
+ "node": ">= 4"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/domhandler?sponsor=1"
+ }
+ },
+ "node_modules/renderkid/node_modules/domutils": {
+ "version": "2.8.0",
+ "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz",
+ "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==",
+ "dev": true,
+ "dependencies": {
+ "dom-serializer": "^1.0.1",
+ "domelementtype": "^2.2.0",
+ "domhandler": "^4.2.0"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/domutils?sponsor=1"
+ }
+ },
+ "node_modules/renderkid/node_modules/entities": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz",
+ "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==",
+ "dev": true,
+ "funding": {
+ "url": "https://github.com/fb55/entities?sponsor=1"
+ }
+ },
+ "node_modules/renderkid/node_modules/htmlparser2": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz",
+ "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==",
+ "dev": true,
+ "funding": [
+ "https://github.com/fb55/htmlparser2?sponsor=1",
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/fb55"
+ }
+ ],
+ "dependencies": {
+ "domelementtype": "^2.0.1",
+ "domhandler": "^4.0.0",
+ "domutils": "^2.5.2",
+ "entities": "^2.0.0"
+ }
+ },
"node_modules/require-directory": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
@@ -22775,6 +22742,7 @@
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
"integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "deprecated": "Rimraf versions prior to v4 are no longer supported",
"dev": true,
"dependencies": {
"glob": "^7.1.3"
@@ -22790,6 +22758,7 @@
"version": "7.2.3",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
"integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "deprecated": "Glob versions prior to v9 are no longer supported",
"dev": true,
"dependencies": {
"fs.realpath": "^1.0.0",
@@ -22840,13 +22809,13 @@
}
},
"node_modules/safe-array-concat": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.0.tgz",
- "integrity": "sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg==",
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz",
+ "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.5",
- "get-intrinsic": "^1.2.2",
+ "call-bind": "^1.0.7",
+ "get-intrinsic": "^1.2.4",
"has-symbols": "^1.0.3",
"isarray": "^2.0.5"
},
@@ -22878,13 +22847,13 @@
]
},
"node_modules/safe-regex-test": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.2.tgz",
- "integrity": "sha512-83S9w6eFq12BBIJYvjMux6/dkirb8+4zJRA9cxNBVb7Wq5fJBW+Xze48WqR8pxua7bDuAaaAxtVVd4Idjp1dBQ==",
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz",
+ "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.5",
- "get-intrinsic": "^1.2.2",
+ "call-bind": "^1.0.6",
+ "es-errors": "^1.3.0",
"is-regex": "^1.1.4"
},
"engines": {
@@ -22901,9 +22870,9 @@
"dev": true
},
"node_modules/sass": {
- "version": "1.70.0",
- "resolved": "https://registry.npmjs.org/sass/-/sass-1.70.0.tgz",
- "integrity": "sha512-uUxNQ3zAHeAx5nRFskBnrWzDUJrrvpCPD5FNAoRvTi0WwremlheES3tg+56PaVtCs5QDRX5CBLxxKMDJMEa1WQ==",
+ "version": "1.77.4",
+ "resolved": "https://registry.npmjs.org/sass/-/sass-1.77.4.tgz",
+ "integrity": "sha512-vcF3Ckow6g939GMA4PeU7b2K/9FALXk2KF9J87txdHzXbUF9XRQRwSxcAs/fGaTnJeBFd7UoV22j3lzMLdM0Pw==",
"devOptional": true,
"dependencies": {
"chokidar": ">=3.0.0 <4.0.0",
@@ -22967,61 +22936,77 @@
}
},
"node_modules/scheduler": {
- "version": "0.23.0",
- "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz",
- "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==",
+ "version": "0.23.2",
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz",
+ "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==",
"dependencies": {
"loose-envify": "^1.1.0"
}
},
"node_modules/schema-utils": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz",
- "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==",
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz",
+ "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==",
"dev": true,
"dependencies": {
- "@types/json-schema": "^7.0.8",
- "ajv": "^6.12.5",
- "ajv-keywords": "^3.5.2"
+ "@types/json-schema": "^7.0.9",
+ "ajv": "^8.9.0",
+ "ajv-formats": "^2.1.1",
+ "ajv-keywords": "^5.1.0"
},
"engines": {
- "node": ">= 10.13.0"
+ "node": ">= 12.13.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/webpack"
}
},
- "node_modules/semver": {
- "version": "7.6.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz",
- "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
+ "node_modules/schema-utils/node_modules/ajv": {
+ "version": "8.16.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.16.0.tgz",
+ "integrity": "sha512-F0twR8U1ZU67JIEtekUcLkXkoO5mMMmgGD8sK/xUFzJ805jxHQl92hImFAqqXMyMYjSPOyUPAwHYhB72g5sTXw==",
+ "dev": true,
"dependencies": {
- "lru-cache": "^6.0.0"
- },
- "bin": {
- "semver": "bin/semver.js"
+ "fast-deep-equal": "^3.1.3",
+ "json-schema-traverse": "^1.0.0",
+ "require-from-string": "^2.0.2",
+ "uri-js": "^4.4.1"
},
- "engines": {
- "node": ">=10"
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
}
},
- "node_modules/semver/node_modules/lru-cache": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
- "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+ "node_modules/schema-utils/node_modules/ajv-keywords": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz",
+ "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==",
+ "dev": true,
"dependencies": {
- "yallist": "^4.0.0"
+ "fast-deep-equal": "^3.1.3"
+ },
+ "peerDependencies": {
+ "ajv": "^8.8.2"
+ }
+ },
+ "node_modules/schema-utils/node_modules/json-schema-traverse": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
+ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
+ "dev": true
+ },
+ "node_modules/semver": {
+ "version": "7.6.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
+ "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+ "bin": {
+ "semver": "bin/semver.js"
},
"engines": {
"node": ">=10"
}
},
- "node_modules/semver/node_modules/yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
- },
"node_modules/send": {
"version": "0.18.0",
"resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz",
@@ -23097,30 +23082,32 @@
"integrity": "sha512-qepMx2JxAa5jjfzxG79yPPq+8BuFToHd1hm7kI+Z4zAq1ftQiP7HcxMhDDItrbtwVeLg/cY2JnKnrcFkmiswNA=="
},
"node_modules/set-function-length": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.0.tgz",
- "integrity": "sha512-4DBHDoyHlM1IRPGYcoxexgh67y4ueR53FKV1yyxwFMY7aCqcN/38M1+SwZ/qJQ8iLv7+ck385ot4CcisOAPT9w==",
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
+ "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==",
"dev": true,
"dependencies": {
- "define-data-property": "^1.1.1",
+ "define-data-property": "^1.1.4",
+ "es-errors": "^1.3.0",
"function-bind": "^1.1.2",
- "get-intrinsic": "^1.2.2",
+ "get-intrinsic": "^1.2.4",
"gopd": "^1.0.1",
- "has-property-descriptors": "^1.0.1"
+ "has-property-descriptors": "^1.0.2"
},
"engines": {
"node": ">= 0.4"
}
},
"node_modules/set-function-name": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz",
- "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==",
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz",
+ "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==",
"dev": true,
"dependencies": {
- "define-data-property": "^1.0.1",
+ "define-data-property": "^1.1.4",
+ "es-errors": "^1.3.0",
"functions-have-names": "^1.2.3",
- "has-property-descriptors": "^1.0.0"
+ "has-property-descriptors": "^1.0.2"
},
"engines": {
"node": ">= 0.4"
@@ -23164,9 +23151,9 @@
}
},
"node_modules/sharp": {
- "version": "0.33.3",
- "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.33.3.tgz",
- "integrity": "sha512-vHUeXJU1UvlO/BNwTpT0x/r53WkLUVxrmb5JTgW92fdFCFk0ispLMAeu/jPO2vjkXM1fYUi3K7/qcLF47pwM1A==",
+ "version": "0.33.4",
+ "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.33.4.tgz",
+ "integrity": "sha512-7i/dt5kGl7qR4gwPRD2biwD2/SvBn3O04J77XKFgL2OnZtQw+AG9wnuS/csmu80nPRHLYE9E41fyEiG8nhH6/Q==",
"hasInstallScript": true,
"dependencies": {
"color": "^4.2.3",
@@ -23181,8 +23168,8 @@
"url": "https://opencollective.com/libvips"
},
"optionalDependencies": {
- "@img/sharp-darwin-arm64": "0.33.3",
- "@img/sharp-darwin-x64": "0.33.3",
+ "@img/sharp-darwin-arm64": "0.33.4",
+ "@img/sharp-darwin-x64": "0.33.4",
"@img/sharp-libvips-darwin-arm64": "1.0.2",
"@img/sharp-libvips-darwin-x64": "1.0.2",
"@img/sharp-libvips-linux-arm": "1.0.2",
@@ -23191,15 +23178,15 @@
"@img/sharp-libvips-linux-x64": "1.0.2",
"@img/sharp-libvips-linuxmusl-arm64": "1.0.2",
"@img/sharp-libvips-linuxmusl-x64": "1.0.2",
- "@img/sharp-linux-arm": "0.33.3",
- "@img/sharp-linux-arm64": "0.33.3",
- "@img/sharp-linux-s390x": "0.33.3",
- "@img/sharp-linux-x64": "0.33.3",
- "@img/sharp-linuxmusl-arm64": "0.33.3",
- "@img/sharp-linuxmusl-x64": "0.33.3",
- "@img/sharp-wasm32": "0.33.3",
- "@img/sharp-win32-ia32": "0.33.3",
- "@img/sharp-win32-x64": "0.33.3"
+ "@img/sharp-linux-arm": "0.33.4",
+ "@img/sharp-linux-arm64": "0.33.4",
+ "@img/sharp-linux-s390x": "0.33.4",
+ "@img/sharp-linux-x64": "0.33.4",
+ "@img/sharp-linuxmusl-arm64": "0.33.4",
+ "@img/sharp-linuxmusl-x64": "0.33.4",
+ "@img/sharp-wasm32": "0.33.4",
+ "@img/sharp-win32-ia32": "0.33.4",
+ "@img/sharp-win32-x64": "0.33.4"
}
},
"node_modules/shebang-command": {
@@ -23224,14 +23211,18 @@
}
},
"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==",
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz",
+ "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.0",
- "get-intrinsic": "^1.0.2",
- "object-inspect": "^1.9.0"
+ "call-bind": "^1.0.7",
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.4",
+ "object-inspect": "^1.13.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
@@ -23332,9 +23323,9 @@
}
},
"node_modules/source-map-js": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
- "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz",
+ "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==",
"engines": {
"node": ">=0.10.0"
}
@@ -23395,9 +23386,9 @@
}
},
"node_modules/spdx-license-ids": {
- "version": "3.0.17",
- "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.17.tgz",
- "integrity": "sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg==",
+ "version": "3.0.18",
+ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.18.tgz",
+ "integrity": "sha512-xxRs31BqRYHwiMzudOrpSiHtZ8i/GeionCBDSilhYRj+9gIcI8wCZTlXZKu9vZIVqViP3dcp9qE5G6AlIaD+TQ==",
"dev": true
},
"node_modules/sprintf-js": {
@@ -23455,18 +23446,18 @@
}
},
"node_modules/store2": {
- "version": "2.14.2",
- "resolved": "https://registry.npmjs.org/store2/-/store2-2.14.2.tgz",
- "integrity": "sha512-siT1RiqlfQnGqgT/YzXVUNsom9S0H1OX+dpdGN1xkyYATo4I6sep5NmsRD/40s3IIOvlCq6akxkqG82urIZW1w==",
+ "version": "2.14.3",
+ "resolved": "https://registry.npmjs.org/store2/-/store2-2.14.3.tgz",
+ "integrity": "sha512-4QcZ+yx7nzEFiV4BMLnr/pRa5HYzNITX2ri0Zh6sT9EyQHbBHacC6YigllUPU9X3D0f/22QCgfokpKs52YRrUg==",
"dev": true
},
"node_modules/storybook": {
- "version": "7.6.17",
- "resolved": "https://registry.npmjs.org/storybook/-/storybook-7.6.17.tgz",
- "integrity": "sha512-8+EIo91bwmeFWPg1eysrxXlhIYv3OsXrznTr4+4Eq0NikqAoq6oBhtlN5K2RGS2lBVF537eN+9jTCNbR+WrzDA==",
+ "version": "7.6.19",
+ "resolved": "https://registry.npmjs.org/storybook/-/storybook-7.6.19.tgz",
+ "integrity": "sha512-xWD1C4vD/4KMffCrBBrUpsLUO/9uNpm8BVW8+Vcb30gkQDfficZ0oziWkmLexpT53VSioa24iazGXMwBqllYjQ==",
"dev": true,
"dependencies": {
- "@storybook/cli": "7.6.17"
+ "@storybook/cli": "7.6.19"
},
"bin": {
"sb": "index.js",
@@ -23587,13 +23578,17 @@
}
},
"node_modules/streamx": {
- "version": "2.15.7",
- "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.15.7.tgz",
- "integrity": "sha512-NPEKS5+yjyo597eafGbKW5ujh7Sm6lDLHZQd/lRSz6S0VarpADBJItqfB4PnwpS+472oob1GX5cCY9vzfJpHUA==",
+ "version": "2.18.0",
+ "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.18.0.tgz",
+ "integrity": "sha512-LLUC1TWdjVdn1weXGcSxyTR3T4+acB6tVGXT95y0nGbca4t4o/ng1wKAGTljm9VicuCVLvRlqFYXYy5GwgM7sQ==",
"dev": true,
"dependencies": {
- "fast-fifo": "^1.1.0",
- "queue-tick": "^1.0.1"
+ "fast-fifo": "^1.3.2",
+ "queue-tick": "^1.0.1",
+ "text-decoder": "^1.1.0"
+ },
+ "optionalDependencies": {
+ "bare-events": "^2.2.0"
}
},
"node_modules/string_decoder": {
@@ -23684,34 +23679,41 @@
}
},
"node_modules/string.prototype.matchall": {
- "version": "4.0.10",
- "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz",
- "integrity": "sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==",
- "dev": true,
- "dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.2.0",
- "es-abstract": "^1.22.1",
- "get-intrinsic": "^1.2.1",
+ "version": "4.0.11",
+ "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz",
+ "integrity": "sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.2",
+ "es-errors": "^1.3.0",
+ "es-object-atoms": "^1.0.0",
+ "get-intrinsic": "^1.2.4",
+ "gopd": "^1.0.1",
"has-symbols": "^1.0.3",
- "internal-slot": "^1.0.5",
- "regexp.prototype.flags": "^1.5.0",
- "set-function-name": "^2.0.0",
- "side-channel": "^1.0.4"
+ "internal-slot": "^1.0.7",
+ "regexp.prototype.flags": "^1.5.2",
+ "set-function-name": "^2.0.2",
+ "side-channel": "^1.0.6"
+ },
+ "engines": {
+ "node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/string.prototype.trim": {
- "version": "1.2.8",
- "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz",
- "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==",
+ "version": "1.2.9",
+ "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz",
+ "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.2.0",
- "es-abstract": "^1.22.1"
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.0",
+ "es-object-atoms": "^1.0.0"
},
"engines": {
"node": ">= 0.4"
@@ -23721,28 +23723,31 @@
}
},
"node_modules/string.prototype.trimend": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz",
- "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==",
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz",
+ "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.2.0",
- "es-abstract": "^1.22.1"
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-object-atoms": "^1.0.0"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/string.prototype.trimstart": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz",
- "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==",
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz",
+ "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.2.0",
- "es-abstract": "^1.22.1"
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-object-atoms": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
@@ -23881,10 +23886,13 @@
}
},
"node_modules/swc-loader": {
- "version": "0.2.4",
- "resolved": "https://registry.npmjs.org/swc-loader/-/swc-loader-0.2.4.tgz",
- "integrity": "sha512-B0toRR3M8PuUV3f0hSoXHogtLCRW8bVYVZl0L1p1iSeTgVBkXa9mOQOYuQBbSJnSdnoQiM7ZCHIY47b0dKaehg==",
+ "version": "0.2.6",
+ "resolved": "https://registry.npmjs.org/swc-loader/-/swc-loader-0.2.6.tgz",
+ "integrity": "sha512-9Zi9UP2YmDpgmQVbyOPJClY0dwf58JDyDMQ7uRc4krmc72twNI2fvlBWHLqVekBpPc7h5NJkGVT1zNDxFrqhvg==",
"dev": true,
+ "dependencies": {
+ "@swc/counter": "^0.1.3"
+ },
"peerDependencies": {
"@swc/core": "^1.2.147",
"webpack": ">=2"
@@ -23912,9 +23920,9 @@
}
},
"node_modules/tar": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.0.tgz",
- "integrity": "sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==",
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz",
+ "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==",
"dev": true,
"dependencies": {
"chownr": "^2.0.0",
@@ -23929,51 +23937,28 @@
}
},
"node_modules/tar-fs": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz",
- "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==",
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.5.tgz",
+ "integrity": "sha512-JOgGAmZyMgbqpLwct7ZV8VzkEB6pxXFBVErLtb+XCOqzc6w1xiWKI9GVd6bwk68EX7eJ4DWmfXVmq8K2ziZTGg==",
"dev": true,
"dependencies": {
- "chownr": "^1.1.1",
- "mkdirp-classic": "^0.5.2",
"pump": "^3.0.0",
- "tar-stream": "^2.1.4"
- }
- },
- "node_modules/tar-fs/node_modules/chownr": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz",
- "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==",
- "dev": true
- },
- "node_modules/tar-stream": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz",
- "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==",
- "dev": true,
- "dependencies": {
- "bl": "^4.0.3",
- "end-of-stream": "^1.4.1",
- "fs-constants": "^1.0.0",
- "inherits": "^2.0.3",
- "readable-stream": "^3.1.1"
+ "tar-stream": "^3.1.5"
},
- "engines": {
- "node": ">=6"
+ "optionalDependencies": {
+ "bare-fs": "^2.1.1",
+ "bare-path": "^2.1.0"
}
},
- "node_modules/tar-stream/node_modules/readable-stream": {
- "version": "3.6.2",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
- "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
+ "node_modules/tar-stream": {
+ "version": "3.1.7",
+ "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz",
+ "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==",
"dev": true,
"dependencies": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- },
- "engines": {
- "node": ">= 6"
+ "b4a": "^1.6.4",
+ "fast-fifo": "^1.2.0",
+ "streamx": "^2.15.0"
}
},
"node_modules/tar/node_modules/minipass": {
@@ -23985,18 +23970,6 @@
"node": ">=8"
}
},
- "node_modules/tar/node_modules/mkdirp": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
- "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
- "dev": true,
- "bin": {
- "mkdirp": "bin/cmd.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/tar/node_modules/yallist": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
@@ -24037,6 +24010,7 @@
"version": "7.2.3",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
"integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "deprecated": "Glob versions prior to v9 are no longer supported",
"dev": true,
"dependencies": {
"fs.realpath": "^1.0.0",
@@ -24057,6 +24031,7 @@
"version": "2.6.3",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
"integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
+ "deprecated": "Rimraf versions prior to v4 are no longer supported",
"dev": true,
"dependencies": {
"glob": "^7.1.3"
@@ -24097,9 +24072,9 @@
}
},
"node_modules/terser": {
- "version": "5.27.0",
- "resolved": "https://registry.npmjs.org/terser/-/terser-5.27.0.tgz",
- "integrity": "sha512-bi1HRwVRskAjheeYl291n3JC4GgO/Ty4z1nVs5AAsmonJulGxpSektecnNedrwK9C7vpvVtcX3cw00VSLt7U2A==",
+ "version": "5.31.0",
+ "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.0.tgz",
+ "integrity": "sha512-Q1JFAoUKE5IMfI4Z/lkE/E6+SwgzO+x4tq4v1AyBLRj8VSYvRO6A/rQrPg1yud4g0En9EKI1TvFRF2tQFcoUkg==",
"dev": true,
"dependencies": {
"@jridgewell/source-map": "^0.3.3",
@@ -24171,6 +24146,24 @@
"node": ">= 10.13.0"
}
},
+ "node_modules/terser-webpack-plugin/node_modules/schema-utils": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz",
+ "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==",
+ "dev": true,
+ "dependencies": {
+ "@types/json-schema": "^7.0.8",
+ "ajv": "^6.12.5",
+ "ajv-keywords": "^3.5.2"
+ },
+ "engines": {
+ "node": ">= 10.13.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/webpack"
+ }
+ },
"node_modules/terser-webpack-plugin/node_modules/supports-color": {
"version": "8.1.1",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
@@ -24241,6 +24234,7 @@
"version": "7.2.3",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
"integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "deprecated": "Glob versions prior to v9 are no longer supported",
"dev": true,
"dependencies": {
"fs.realpath": "^1.0.0",
@@ -24257,6 +24251,15 @@
"url": "https://github.com/sponsors/isaacs"
}
},
+ "node_modules/text-decoder": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.1.0.tgz",
+ "integrity": "sha512-TmLJNj6UgX8xcUZo4UDStGQtDiTzF7BzWlzn9g7UWrjkpHr5uJTK1ld16wZ3LXb2vb6jH8qU89dW5whuMdXYdw==",
+ "dev": true,
+ "dependencies": {
+ "b4a": "^1.6.4"
+ }
+ },
"node_modules/text-table": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
@@ -24268,6 +24271,12 @@
"resolved": "https://registry.npmjs.org/third-party-capital/-/third-party-capital-1.0.20.tgz",
"integrity": "sha512-oB7yIimd8SuGptespDAZnNkzIz+NWaJCu2RMsbs4Wmp9zSDUM8Nhi3s2OOcqYuv3mN4hitXc8DVx+LyUmbUDiA=="
},
+ "node_modules/through": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
+ "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==",
+ "dev": true
+ },
"node_modules/through2": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
@@ -24327,9 +24336,9 @@
}
},
"node_modules/tiny-invariant": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.1.tgz",
- "integrity": "sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==",
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz",
+ "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==",
"dev": true
},
"node_modules/tmpl": {
@@ -24360,9 +24369,9 @@
}
},
"node_modules/tocbot": {
- "version": "4.25.0",
- "resolved": "https://registry.npmjs.org/tocbot/-/tocbot-4.25.0.tgz",
- "integrity": "sha512-kE5wyCQJ40hqUaRVkyQ4z5+4juzYsv/eK+aqD97N62YH0TxFhzJvo22RUQQZdO3YnXAk42ZOfOpjVdy+Z0YokA==",
+ "version": "4.28.2",
+ "resolved": "https://registry.npmjs.org/tocbot/-/tocbot-4.28.2.tgz",
+ "integrity": "sha512-/MaSa9xI6mIo84IxqqliSCtPlH0oy7sLcY9s26qPMyH/2CxtZ2vNAXYlIdEQ7kjAkCQnc0rbLygf//F5c663oQ==",
"dev": true
},
"node_modules/toidentifier": {
@@ -24375,9 +24384,9 @@
}
},
"node_modules/tough-cookie": {
- "version": "4.1.3",
- "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz",
- "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==",
+ "version": "4.1.4",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz",
+ "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==",
"dev": true,
"dependencies": {
"psl": "^1.1.33",
@@ -24410,6 +24419,12 @@
"node": ">=12"
}
},
+ "node_modules/tryer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz",
+ "integrity": "sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==",
+ "dev": true
+ },
"node_modules/ts-dedent": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/ts-dedent/-/ts-dedent-2.2.0.tgz",
@@ -24613,29 +24628,30 @@
}
},
"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==",
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz",
+ "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.2",
- "get-intrinsic": "^1.2.1",
- "is-typed-array": "^1.1.10"
+ "call-bind": "^1.0.7",
+ "es-errors": "^1.3.0",
+ "is-typed-array": "^1.1.13"
},
"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==",
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz",
+ "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.2",
+ "call-bind": "^1.0.7",
"for-each": "^0.3.3",
- "has-proto": "^1.0.1",
- "is-typed-array": "^1.1.10"
+ "gopd": "^1.0.1",
+ "has-proto": "^1.0.3",
+ "is-typed-array": "^1.1.13"
},
"engines": {
"node": ">= 0.4"
@@ -24645,16 +24661,17 @@
}
},
"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==",
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz",
+ "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==",
"dev": true,
"dependencies": {
- "available-typed-arrays": "^1.0.5",
- "call-bind": "^1.0.2",
+ "available-typed-arrays": "^1.0.7",
+ "call-bind": "^1.0.7",
"for-each": "^0.3.3",
- "has-proto": "^1.0.1",
- "is-typed-array": "^1.1.10"
+ "gopd": "^1.0.1",
+ "has-proto": "^1.0.3",
+ "is-typed-array": "^1.1.13"
},
"engines": {
"node": ">= 0.4"
@@ -24664,14 +24681,20 @@
}
},
"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==",
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz",
+ "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.2",
+ "call-bind": "^1.0.7",
"for-each": "^0.3.3",
- "is-typed-array": "^1.1.9"
+ "gopd": "^1.0.1",
+ "has-proto": "^1.0.3",
+ "is-typed-array": "^1.1.13",
+ "possible-typed-array-names": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
@@ -24684,9 +24707,9 @@
"dev": true
},
"node_modules/typescript": {
- "version": "5.4.4",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.4.tgz",
- "integrity": "sha512-dGE2Vv8cpVvw28v8HCPqyb08EzbBURxDpuhJvTrusShUfGnhHBafDsLdS1EhhxyL6BJQE+2cT3dDPAv+MQ6oLw==",
+ "version": "5.4.5",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz",
+ "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==",
"dev": true,
"bin": {
"tsc": "bin/tsc",
@@ -24697,9 +24720,9 @@
}
},
"node_modules/ufo": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.3.2.tgz",
- "integrity": "sha512-o+ORpgGwaYQXgqGDwd+hkS4PuZ3QnmqMMxRuajK/a38L6fTpcE5GPIfrf+L/KemFzfUpeUQc1rRS1iDBozvnFA==",
+ "version": "1.5.3",
+ "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.5.3.tgz",
+ "integrity": "sha512-Y7HYmWaFwPUmkoQCUIAYpKqkOf+SbVj/2fJJZ4RJMCfZp0rTGwRbzQD+HghfnhKOjL9E01okqz+ncJskGYfBNw==",
"dev": true
},
"node_modules/uglify-js": {
@@ -24730,6 +24753,40 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/unbzip2-stream": {
+ "version": "1.4.3",
+ "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz",
+ "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==",
+ "dev": true,
+ "dependencies": {
+ "buffer": "^5.2.1",
+ "through": "^2.3.8"
+ }
+ },
+ "node_modules/unbzip2-stream/node_modules/buffer": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
+ "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "dependencies": {
+ "base64-js": "^1.3.1",
+ "ieee754": "^1.1.13"
+ }
+ },
"node_modules/undici-types": {
"version": "5.26.5",
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
@@ -24846,9 +24903,9 @@
}
},
"node_modules/unplugin": {
- "version": "1.10.0",
- "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.10.0.tgz",
- "integrity": "sha512-CuZtvvO8ua2Wl+9q2jEaqH6m3DoQ38N7pvBYQbbaeNlWGvK2l6GHiKi29aIHDPoSxdUzQ7Unevf1/ugil5X6Pg==",
+ "version": "1.10.1",
+ "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.10.1.tgz",
+ "integrity": "sha512-d6Mhq8RJeGA8UfKCu54Um4lFA0eSaRa3XxdAJg8tIdxbu1ubW0hBCZUL7yI2uGyYCRndvbK8FLHzqy2XKfeMsg==",
"dev": true,
"dependencies": {
"acorn": "^8.11.3",
@@ -24873,9 +24930,9 @@
}
},
"node_modules/unplugin/node_modules/webpack-virtual-modules": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.6.1.tgz",
- "integrity": "sha512-poXpCylU7ExuvZK8z+On3kX+S8o/2dQ/SVYueKA0D4WEMXROXgY8Ez50/bQEUmvoSMMrWcrJqCHuhAbsiwg7Dg==",
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.6.2.tgz",
+ "integrity": "sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==",
"dev": true
},
"node_modules/untildify": {
@@ -24888,9 +24945,9 @@
}
},
"node_modules/update-browserslist-db": {
- "version": "1.0.13",
- "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz",
- "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==",
+ "version": "1.0.16",
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.16.tgz",
+ "integrity": "sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==",
"dev": true,
"funding": [
{
@@ -24907,8 +24964,8 @@
}
],
"dependencies": {
- "escalade": "^3.1.1",
- "picocolors": "^1.0.0"
+ "escalade": "^3.1.2",
+ "picocolors": "^1.0.1"
},
"bin": {
"update-browserslist-db": "cli.js"
@@ -24953,9 +25010,9 @@
"dev": true
},
"node_modules/use-callback-ref": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.1.tgz",
- "integrity": "sha512-Lg4Vx1XZQauB42Hw3kK7JM6yjVjgFmFC5/Ab797s79aARomD2nEErc4mCgM8EZrARLmmbWpi5DGCadmK50DcAQ==",
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.2.tgz",
+ "integrity": "sha512-elOQwe6Q8gqZgDA8mrh44qRTQqpIHDcZ3hXTLjBe1i4ph8XpNJnO+aQf3NaG+lriLopI4HMx9VjQLfPQ6vhnoA==",
"dev": true,
"dependencies": {
"tslib": "^2.0.0"
@@ -24974,9 +25031,9 @@
}
},
"node_modules/use-debounce": {
- "version": "10.0.0",
- "resolved": "https://registry.npmjs.org/use-debounce/-/use-debounce-10.0.0.tgz",
- "integrity": "sha512-XRjvlvCB46bah9IBXVnq/ACP2lxqXyZj0D9hj4K5OzNroMDpTEBg8Anuh1/UfRTRs7pLhQ+RiNxxwZu9+MVl1A==",
+ "version": "10.0.1",
+ "resolved": "https://registry.npmjs.org/use-debounce/-/use-debounce-10.0.1.tgz",
+ "integrity": "sha512-0uUXjOfm44e6z4LZ/woZvkM8FwV1wiuoB6xnrrOmeAEjRDDzTLQNRFtYHvqUsJdrz1X37j0rVGIVp144GLHGKg==",
"engines": {
"node": ">= 16.0.0"
},
@@ -24985,12 +25042,12 @@
}
},
"node_modules/use-intl": {
- "version": "3.11.1",
- "resolved": "https://registry.npmjs.org/use-intl/-/use-intl-3.11.1.tgz",
- "integrity": "sha512-pFfrQXa3LBHh2MairVFUEXp6BnVcqJno9wbHIEaH0n7ib2kNTMP8jjjuboLHEIphRHygEpbFAjKIr0glUHCytA==",
+ "version": "3.14.1",
+ "resolved": "https://registry.npmjs.org/use-intl/-/use-intl-3.14.1.tgz",
+ "integrity": "sha512-LVjHUSnQxryiWY+zCFkwoe+a8LK4RIM/4+lV54FSLehOH3gO1JcnXQ85TbfKUTfvEDY7B0DkH7WOM+CWppZanA==",
"dependencies": {
"@formatjs/ecma402-abstract": "^1.11.4",
- "intl-messageformat": "^9.3.18"
+ "intl-messageformat": "^10.5.11"
},
"peerDependencies": {
"react": "^16.8.0 || ^17.0.0 || ^18.0.0"
@@ -25149,9 +25206,9 @@
}
},
"node_modules/watchpack": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz",
- "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==",
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.1.tgz",
+ "integrity": "sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==",
"dev": true,
"dependencies": {
"glob-to-regexp": "^0.4.1",
@@ -25180,26 +25237,26 @@
}
},
"node_modules/webpack": {
- "version": "5.90.1",
- "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.90.1.tgz",
- "integrity": "sha512-SstPdlAC5IvgFnhiRok8hqJo/+ArAbNv7rhU4fnWGHNVfN59HSQFaxZDSAL3IFG2YmqxuRs+IU33milSxbPlog==",
+ "version": "5.91.0",
+ "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.91.0.tgz",
+ "integrity": "sha512-rzVwlLeBWHJbmgTC/8TvAcu5vpJNII+MelQpylD4jNERPwpBJOE2lEcko1zJX3QJeLjTTAnQxn/OJ8bjDzVQaw==",
"dev": true,
"dependencies": {
"@types/eslint-scope": "^3.7.3",
"@types/estree": "^1.0.5",
- "@webassemblyjs/ast": "^1.11.5",
- "@webassemblyjs/wasm-edit": "^1.11.5",
- "@webassemblyjs/wasm-parser": "^1.11.5",
+ "@webassemblyjs/ast": "^1.12.1",
+ "@webassemblyjs/wasm-edit": "^1.12.1",
+ "@webassemblyjs/wasm-parser": "^1.12.1",
"acorn": "^8.7.1",
"acorn-import-assertions": "^1.9.0",
"browserslist": "^4.21.10",
"chrome-trace-event": "^1.0.2",
- "enhanced-resolve": "^5.15.0",
+ "enhanced-resolve": "^5.16.0",
"es-module-lexer": "^1.2.1",
"eslint-scope": "5.1.1",
"events": "^3.2.0",
"glob-to-regexp": "^0.4.1",
- "graceful-fs": "^4.2.9",
+ "graceful-fs": "^4.2.11",
"json-parse-even-better-errors": "^2.3.1",
"loader-runner": "^4.2.0",
"mime-types": "^2.1.27",
@@ -25207,7 +25264,7 @@
"schema-utils": "^3.2.0",
"tapable": "^2.1.1",
"terser-webpack-plugin": "^5.3.10",
- "watchpack": "^2.4.0",
+ "watchpack": "^2.4.1",
"webpack-sources": "^3.2.3"
},
"bin": {
@@ -25227,9 +25284,9 @@
}
},
"node_modules/webpack-dev-middleware": {
- "version": "6.1.1",
- "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-6.1.1.tgz",
- "integrity": "sha512-y51HrHaFeeWir0YO4f0g+9GwZawuigzcAdRNon6jErXy/SqV/+O6eaVAzDqE6t3e3NpGeR5CS+cCDaTC+V3yEQ==",
+ "version": "6.1.3",
+ "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-6.1.3.tgz",
+ "integrity": "sha512-A4ChP0Qj8oGociTs6UdlRUGANIGrCDL3y+pmQMc+dSsraXHCatFpmMey4mYELA+juqwUqwQsUgJJISXl1KWmiw==",
"dev": true,
"dependencies": {
"colorette": "^2.0.10",
@@ -25254,59 +25311,6 @@
}
}
},
- "node_modules/webpack-dev-middleware/node_modules/ajv": {
- "version": "8.12.0",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz",
- "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==",
- "dev": true,
- "dependencies": {
- "fast-deep-equal": "^3.1.1",
- "json-schema-traverse": "^1.0.0",
- "require-from-string": "^2.0.2",
- "uri-js": "^4.2.2"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/epoberezkin"
- }
- },
- "node_modules/webpack-dev-middleware/node_modules/ajv-keywords": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz",
- "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==",
- "dev": true,
- "dependencies": {
- "fast-deep-equal": "^3.1.3"
- },
- "peerDependencies": {
- "ajv": "^8.8.2"
- }
- },
- "node_modules/webpack-dev-middleware/node_modules/json-schema-traverse": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
- "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
- "dev": true
- },
- "node_modules/webpack-dev-middleware/node_modules/schema-utils": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz",
- "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==",
- "dev": true,
- "dependencies": {
- "@types/json-schema": "^7.0.9",
- "ajv": "^8.9.0",
- "ajv-formats": "^2.1.1",
- "ajv-keywords": "^5.1.0"
- },
- "engines": {
- "node": ">= 12.13.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/webpack"
- }
- },
"node_modules/webpack-hot-middleware": {
"version": "2.26.1",
"resolved": "https://registry.npmjs.org/webpack-hot-middleware/-/webpack-hot-middleware-2.26.1.tgz",
@@ -25360,6 +25364,24 @@
"acorn": "^8"
}
},
+ "node_modules/webpack/node_modules/schema-utils": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz",
+ "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==",
+ "dev": true,
+ "dependencies": {
+ "@types/json-schema": "^7.0.8",
+ "ajv": "^6.12.5",
+ "ajv-keywords": "^3.5.2"
+ },
+ "engines": {
+ "node": ">= 10.13.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/webpack"
+ }
+ },
"node_modules/whatwg-encoding": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz",
@@ -25464,31 +25486,34 @@
}
},
"node_modules/which-collection": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz",
- "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==",
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz",
+ "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==",
"dev": true,
"dependencies": {
- "is-map": "^2.0.1",
- "is-set": "^2.0.1",
- "is-weakmap": "^2.0.1",
- "is-weakset": "^2.0.1"
+ "is-map": "^2.0.3",
+ "is-set": "^2.0.3",
+ "is-weakmap": "^2.0.2",
+ "is-weakset": "^2.0.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/which-typed-array": {
- "version": "1.1.14",
- "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.14.tgz",
- "integrity": "sha512-VnXFiIW8yNn9kIHN88xvZ4yOWchftKDsRJ8fEPacX/wl1lOvBrhsJ/OeJCXq7B0AaijRuqgzSKalJoPk+D8MPg==",
+ "version": "1.1.15",
+ "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz",
+ "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==",
"dev": true,
"dependencies": {
- "available-typed-arrays": "^1.0.6",
- "call-bind": "^1.0.5",
+ "available-typed-arrays": "^1.0.7",
+ "call-bind": "^1.0.7",
"for-each": "^0.3.3",
"gopd": "^1.0.1",
- "has-tostringtag": "^1.0.1"
+ "has-tostringtag": "^1.0.2"
},
"engines": {
"node": ">= 0.4"
@@ -25497,6 +25522,15 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/word-wrap": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz",
+ "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/wordwrap": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
@@ -25638,9 +25672,9 @@
"dev": true
},
"node_modules/ws": {
- "version": "8.16.0",
- "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz",
- "integrity": "sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==",
+ "version": "8.17.0",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.0.tgz",
+ "integrity": "sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==",
"dev": true,
"engines": {
"node": ">=10.0.0"
diff --git a/frontend/package.json b/frontend/package.json
index 6d1e365f4..c90957005 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -17,6 +17,7 @@
"storybook": "storybook dev -p 6006",
"storybook-build": "storybook build",
"test": "jest --ci --coverage",
+ "test:pa11y": "pa11y-ci --config .pa11yci.json",
"test-update": "jest --update-snapshot",
"test-watch": "jest --watch",
"test:e2e": "npx playwright test --config ./tests/playwright.config.ts",
@@ -70,6 +71,7 @@
"jest-axe": "^7.0.0",
"jest-cli": "^29.5.0",
"jest-environment-jsdom": "^29.5.0",
+ "pa11y-ci": "^3.1.0",
"postcss": "^8.4.31",
"postcss-loader": "^7.1.0",
"postcss-preset-env": "^8.0.1",
diff --git a/frontend/src/app/[locale]/search/page.tsx b/frontend/src/app/[locale]/search/page.tsx
index 36cb75ef4..7f7f207a2 100644
--- a/frontend/src/app/[locale]/search/page.tsx
+++ b/frontend/src/app/[locale]/search/page.tsx
@@ -1,13 +1,9 @@
-import {
- ServerSideRouteParams,
- ServerSideSearchParams,
-} from "../../../types/searchRequestURLTypes";
-
import BetaAlert from "src/components/BetaAlert";
import { Metadata } from "next";
import React from "react";
import SearchCallToAction from "../../../components/search/SearchCallToAction";
import { SearchForm } from "./SearchForm";
+import { ServerSideSearchParams } from "../../../types/searchRequestURLTypes";
import { convertSearchParamsToProperTypes } from "../../../utils/search/convertSearchParamsToProperTypes";
import { generateAgencyNameLookup } from "src/utils/search/generateAgencyNameLookup";
import { getSearchFetcher } from "../../../services/search/searchfetcher/SearchFetcherUtil";
@@ -17,7 +13,6 @@ import withFeatureFlag from "../../../hoc/search/withFeatureFlag";
const searchFetcher = getSearchFetcher();
interface ServerPageProps {
- params: ServerSideRouteParams;
searchParams: ServerSideSearchParams;
}
From 65e6840acdfe764e33d6d63e5d80ad243521cc9a Mon Sep 17 00:00:00 2001
From: Michael Chouinard <46358556+chouinar@users.noreply.github.com>
Date: Mon, 17 Jun 2024 14:51:16 -0400
Subject: [PATCH 21/21] [Issue #88] Adjust docker commands based on recent
updates (#89)
## Summary
Fixes #88
### Time to review: __5 mins__
## Changes proposed
Remove the version field from the docker-compose files
Adjust the docker commands to use `docker compose` instead of
`docker-compose`
## Context for reviewers
A recent version of docker removed the need for specifying a version in
the compose files - so the field is now obsolete and just gives a
warning whenever you run a command:
https://docs.docker.com/compose/compose-file/04-version-and-name/
The change in the command we run is actually from 2021 and makes sure we
use docker compose v2. Depending on how you've setup your local instance
of docker, `docker-compose` may have been aliased to `docker compose`
anyways (I actually think if it wasn't, certain things break anyways).
This is just using the proper format for certain.
## Additional information
I went through running several docker commands and noticed no
difference, as this change shouldn't meaningfully change anything, that
is to be expected.
---
api/Makefile | 18 +++++++++---------
api/README.md | 2 +-
api/docker-compose.debug.yml | 3 ---
api/docker-compose.yml | 3 ---
api/local.env | 2 +-
docker-compose.yml | 2 --
frontend/docker-compose.yml | 2 --
7 files changed, 11 insertions(+), 21 deletions(-)
diff --git a/api/Makefile b/api/Makefile
index d5daab1d2..e6a87c819 100644
--- a/api/Makefile
+++ b/api/Makefile
@@ -38,7 +38,7 @@ endif
ifeq "$(PY_RUN_APPROACH)" "local"
PY_RUN_CMD := poetry run
else
-PY_RUN_CMD := docker-compose run $(DOCKER_EXEC_ARGS) --rm $(APP_NAME) poetry run
+PY_RUN_CMD := docker compose run $(DOCKER_EXEC_ARGS) --rm $(APP_NAME) poetry run
endif
FLASK_CMD := $(PY_RUN_CMD) flask
@@ -89,24 +89,24 @@ setup-local:
##################################################
build:
- docker-compose build
+ docker compose build
start:
- docker-compose up --detach
+ docker compose up --detach
start-debug:
docker compose -f docker-compose.yml -f docker-compose.debug.yml up --detach
run-logs: start
- docker-compose logs --follow --no-color $(APP_NAME)
+ docker compose logs --follow --no-color $(APP_NAME)
init: build init-db init-opensearch
clean-volumes: ## Remove project docker volumes (which includes the DB state)
- docker-compose down --volumes
+ docker compose down --volumes
stop:
- docker-compose down
+ docker compose down
check: format-check lint db-check-migrations test
@@ -123,7 +123,7 @@ check: format-check lint db-check-migrations test
init-db: start-db setup-postgres-db db-migrate
start-db:
- docker-compose up --detach grants-db
+ docker compose up --detach grants-db
./bin/wait-for-local-db.sh
## Destroy current DB, setup new one
@@ -187,8 +187,8 @@ init-opensearch: start-opensearch
# TODO - in subsequent PRs, we'll add more to this command to setup the search index locally
start-opensearch:
- docker-compose up --detach opensearch-node
- docker-compose up --detach opensearch-dashboards
+ docker compose up --detach opensearch-node
+ docker compose up --detach opensearch-dashboards
./bin/wait-for-local-opensearch.sh
diff --git a/api/README.md b/api/README.md
index f7b5d4302..452009a68 100644
--- a/api/README.md
+++ b/api/README.md
@@ -32,7 +32,7 @@ root
│ └── setup.cfg Python config for tools that don't support pyproject.toml yet
│ └── Dockerfile Docker build file for project
│
-└── docker-compose.yml Config file for docker-compose tool, used for local development
+└── docker-compose.yml Config file for docker compose tool, used for local development
```
## Local Development
diff --git a/api/docker-compose.debug.yml b/api/docker-compose.debug.yml
index dcb5d09fa..3215e8bae 100644
--- a/api/docker-compose.debug.yml
+++ b/api/docker-compose.debug.yml
@@ -1,8 +1,5 @@
-version: "3.8"
-
# run with `docker compose -f`
# combines ports and env vars with the main docker-compose.yml main-app service
-
services:
grants-api:
command: [
diff --git a/api/docker-compose.yml b/api/docker-compose.yml
index 9ec206214..30a7df050 100644
--- a/api/docker-compose.yml
+++ b/api/docker-compose.yml
@@ -1,7 +1,4 @@
-version: '3'
-
services:
-
grants-db:
image: postgres:15-alpine
container_name: grants-db
diff --git a/api/local.env b/api/local.env
index 598e300d8..498c89324 100644
--- a/api/local.env
+++ b/api/local.env
@@ -1,5 +1,5 @@
# Local environment variables
-# Used by docker-compose and it can be loaded
+# Used by docker compose and it can be loaded
# by calling load_local_env_vars() from api/src/util/local.py
ENVIRONMENT=local
diff --git a/docker-compose.yml b/docker-compose.yml
index 34331c555..8c52657da 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -1,5 +1,3 @@
-version: '3'
-
include:
- path: ./api/docker-compose.yml
- path: ./frontend/docker-compose.yml
diff --git a/frontend/docker-compose.yml b/frontend/docker-compose.yml
index a8e7ecf1f..974b27b3f 100644
--- a/frontend/docker-compose.yml
+++ b/frontend/docker-compose.yml
@@ -1,5 +1,3 @@
-version: "3"
-
services:
nextjs:
container_name: next-dev