From f961967e415bd037ff9f2c37788b16988d3c4530 Mon Sep 17 00:00:00 2001 From: Adam Joseph Arling Date: Tue, 2 Jan 2024 12:57:34 -0500 Subject: [PATCH] Add Playwright integration tests --- .eslintrc.json | 20 +- .github/workflows/playwright.yml | 43 + .gitignore | 6 + README.md | 28 +- components/Facets/Filter/Clear.tsx | 1 - components/Footer/Footer.tsx | 2 +- components/Header/Super.tsx | 1 + components/Nav/Nav.tsx | 2 +- components/Shared/Container.tsx | 3 + components/Shared/SVG/Northwestern.tsx | 1 + cypress.config.ts | 11 - cypress/.eslintrc.json | 8 - cypress/e2e/homepage/homepage.cy.ts | 32 - cypress/e2e/item/item.cy.ts | 15 - cypress/e2e/search/search.cy.ts | 285 -- cypress/fixtures/example.json | 5 - cypress/fixtures/item/manifest1.json | 39 - .../fixtures/search/aggregations/aggs1.json | 44 - .../fixtures/search/aggregations/aggs2.json | 68 - cypress/fixtures/search/pagination/page1.json | 334 -- .../fixtures/search/pagination/page15.json | 134 - cypress/fixtures/search/pagination/page2.json | 335 -- cypress/fixtures/search/pagination/page3.json | 335 -- cypress/fixtures/search/response1.js | 64 - cypress/fixtures/search/response1.json | 53 - cypress/support/commands.ts | 37 - cypress/support/e2e.ts | 20 - cypress/support/index.ts | 24 - cypress/tsconfig.json | 8 - jest.config.js | 1 + package-lock.json | 3774 ++++++++--------- package.json | 12 +- playwright-report/index.html | 34 +- playwright.config.ts | 81 + tests/fixtures/open-graph.ts | 86 + tests/fixtures/search-page.ts | 44 + tests/fixtures/work-page.ts | 7 + tests/fixtures/works/canary-work.ts | 398 ++ tests/home.spec.ts | 24 + tests/layout.spec.ts | 44 + tests/search.spec.ts | 506 +++ tests/work.spec.ts | 541 +++ tsconfig.json | 67 +- 43 files changed, 3760 insertions(+), 3817 deletions(-) create mode 100644 .github/workflows/playwright.yml delete mode 100644 cypress.config.ts delete mode 100644 cypress/.eslintrc.json delete mode 100644 cypress/e2e/homepage/homepage.cy.ts delete mode 100644 cypress/e2e/item/item.cy.ts delete mode 100644 cypress/e2e/search/search.cy.ts delete mode 100644 cypress/fixtures/example.json delete mode 100644 cypress/fixtures/item/manifest1.json delete mode 100644 cypress/fixtures/search/aggregations/aggs1.json delete mode 100644 cypress/fixtures/search/aggregations/aggs2.json delete mode 100644 cypress/fixtures/search/pagination/page1.json delete mode 100644 cypress/fixtures/search/pagination/page15.json delete mode 100644 cypress/fixtures/search/pagination/page2.json delete mode 100644 cypress/fixtures/search/pagination/page3.json delete mode 100644 cypress/fixtures/search/response1.js delete mode 100644 cypress/fixtures/search/response1.json delete mode 100644 cypress/support/commands.ts delete mode 100644 cypress/support/e2e.ts delete mode 100644 cypress/support/index.ts delete mode 100644 cypress/tsconfig.json create mode 100644 playwright.config.ts create mode 100644 tests/fixtures/open-graph.ts create mode 100644 tests/fixtures/search-page.ts create mode 100644 tests/fixtures/work-page.ts create mode 100644 tests/fixtures/works/canary-work.ts create mode 100644 tests/home.spec.ts create mode 100644 tests/layout.spec.ts create mode 100644 tests/search.spec.ts create mode 100644 tests/work.spec.ts diff --git a/.eslintrc.json b/.eslintrc.json index 855f5a80..62b703ce 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -6,13 +6,21 @@ "prettier" ], "overrides": [ - // Only uses Testing Library lint rules in test files + // // Only uses Testing Library lint rules in test files + // { + // "files": [ + // "**/__tests__/**/*.[jt]s?(x)", + // "**/?(*.)+(spec|test).[jt]s?(x)" + // ], + // "extends": ["plugin:testing-library/react"] + // }, + + // Overrides for Playwright tests { - "files": [ - "**/__tests__/**/*.[jt]s?(x)", - "**/?(*.)+(spec|test).[jt]s?(x)" - ], - "extends": ["plugin:testing-library/react"] + "files": ["tests/**/*.[jt]s?(x)"], + "rules": { + "testing-library/prefer-screen-queries": "off" + } } ], "rules": { diff --git a/.github/workflows/playwright.yml b/.github/workflows/playwright.yml new file mode 100644 index 00000000..eb95b77c --- /dev/null +++ b/.github/workflows/playwright.yml @@ -0,0 +1,43 @@ +name: Playwright Tests +on: + push: + branches: [main, deploy-staging, 4284-playwright-setup] + pull_request: + branches: [main, deploy-staging] +jobs: + test: + timeout-minutes: 10 + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: 18 + - name: Install dependencies + run: npm ci + + - name: Install Playwright Browsers + run: npx playwright install --with-deps + + - name: Build app + run: npm run build + env: + NEXT_PUBLIC_DCAPI_ENDPOINT: ${{ secrets.NEXT_PUBLIC_DCAPI_ENDPOINT }} + + - name: Start app + run: npm run start & + + - name: Wait for server + run: npx wait-on http://localhost:3000 + + - name: Run Playwright tests + run: npx playwright test + env: + BASE_URL: ${{ secrets.BASE_URL }} + + - uses: actions/upload-artifact@v3 + if: always() + with: + name: playwright-report + path: playwright-report/ + retention-days: 30 diff --git a/.gitignore b/.gitignore index 3c5de8d9..075be015 100644 --- a/.gitignore +++ b/.gitignore @@ -46,3 +46,9 @@ yarn-error.log* # vscode /.vscode/* + +# playwright +/test-results/ +/playwright-report/* +/blob-report/ +/playwright/.cache/ diff --git a/README.md b/README.md index 1bddff02..02e34b2f 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,6 @@ Digital Collections v2 (DCv2) is a UI application for discovering and interactin The following dependencies should be "pinned" or held behind `@latest` versions -- `next`: We've experienced issues with the AWS Amplify build process when using `@latest` versions of NextJS. To be safe, in general we should pin NextJS to >= 1 minor versions behind `next@latest`. - `@elastic/elasticsearch`: To match the version of `OpenSearch` our app uses. - `swiper` - `@honeybadger-io/js` @@ -123,17 +122,34 @@ A pre-commit hook will ensure code is linted before committed. ### End to end tests -Test fixtures can be accessed by pointing the app to a [Test Environment API](https://github.com/nulib/dc-test-environment). Setting the `NEXT_PUBLIC_DCAPI_ENDPOINT` `env` variable value to https://dc-test-api.rdc-staging.library.northwestern.edu/api/v2 will run DC v2 against test data. The following commands start your server and the test suite. +Test fixtures can be accessed by pointing the app to a [Test Environment API](https://github.com/nulib/dc-test-environment). ```bash -# Start local server +NEXT_PUBLIC_DCAPI_ENDPOINT="https://dc-test-api.rdc-staging.library.northwestern.edu/api/v2" +``` + +```bash +# Start local server (automatically points NEXT_PUBLIC_DCAPI_ENDPOINT to the test data API) npm run dev:test-env -# Start Cypress test runner -npm run cypress:open +# If in AWS Dev Environment, set a BASE_URL environment variable in a .env.local file +BASE_URL="[YOUR_DEV_ID].dev.rdc.library.northwestern.edu" + +# Start Playwright tests in headless mode +npm run test:playwright +``` + +To run more visual tests, try experimenting with: + +```bash +# Run in an interactive test browser to visually see tests run +npx playwright test --ui + +# Run all tests in headed mode +npx playwright test --headed ``` -E2E tests use [Cypress](https://docs.cypress.io/), and are linted with [Cypress ESLint Plugin](https://github.com/cypress-io/eslint-plugin-cypress). +For more info, view the docs: [Playwright](https://playwright.dev/). ### Unit tests diff --git a/components/Facets/Filter/Clear.tsx b/components/Facets/Filter/Clear.tsx index 2e2d49c6..e4236c9b 100644 --- a/components/Facets/Filter/Clear.tsx +++ b/components/Facets/Filter/Clear.tsx @@ -20,7 +20,6 @@ const FilterClear: React.FC = ({ isModal = false }) => { } = router; const handleClear = () => { - console.log("Clear click"); isModal ? filterDispatch({ type: "updateUserFacets", diff --git a/components/Footer/Footer.tsx b/components/Footer/Footer.tsx index ffa71d95..201bbab0 100644 --- a/components/Footer/Footer.tsx +++ b/components/Footer/Footer.tsx @@ -7,7 +7,7 @@ import SiteContentMessage from "./SiteContentMessage/SiteContentMessage"; export default function Footer() { return ( - + diff --git a/components/Header/Super.tsx b/components/Header/Super.tsx index 28e7b1ed..8724e606 100644 --- a/components/Header/Super.tsx +++ b/components/Header/Super.tsx @@ -5,6 +5,7 @@ import { Super, User, } from "@/components/Header/Header.styled"; + import Container from "../Shared/Container"; import { DCAPI_ENDPOINT } from "@/lib/constants/endpoints"; import Link from "next/link"; diff --git a/components/Nav/Nav.tsx b/components/Nav/Nav.tsx index 8dacddb4..b6b533e4 100644 --- a/components/Nav/Nav.tsx +++ b/components/Nav/Nav.tsx @@ -6,7 +6,7 @@ interface NavProps { } const Nav: React.FC = ({ children }) => { - return {children}; + return {children}; }; export default Nav; diff --git a/components/Shared/Container.tsx b/components/Shared/Container.tsx index dee88ed8..d582b368 100644 --- a/components/Shared/Container.tsx +++ b/components/Shared/Container.tsx @@ -7,6 +7,7 @@ interface ContainerProps { containerType?: "default" | "wide"; isFlex?: boolean; maxWidth?: number; + [key: string]: unknown; } const Container: React.FC = ({ @@ -15,6 +16,7 @@ const Container: React.FC = ({ containerType = "default", isFlex = false, maxWidth, + ...restProps }) => { const manualWidth = maxWidth ? { maxWidth: maxWidth } : {}; @@ -24,6 +26,7 @@ const Container: React.FC = ({ containerType={containerType} css={{ ...manualWidth }} isFlex={isFlex} + {...restProps} > {children} diff --git a/components/Shared/SVG/Northwestern.tsx b/components/Shared/SVG/Northwestern.tsx index b435575e..33c5ac05 100644 --- a/components/Shared/SVG/Northwestern.tsx +++ b/components/Shared/SVG/Northwestern.tsx @@ -13,6 +13,7 @@ const NorthwesternWordmark: React.FC = () => ( { - it("renders the hero slider", () => { - cy.visit("/"); - cy.get(".swiper").within(() => { - cy.get(".swiper-button-prev"); - cy.get(".swiper-button-next").as("nextBtn"); - - cy.get("figure") - .first() - .contains("Edward S. Curtis's The North American Indian") - .should( - "have.attr", - "href", - "https://dc-next.rdc-staging.library.northwestern.edu/collections/55ff2504-dd53-4943-b2cb-aeea46e77bc3" - ); - cy.contains("Crossing the Pend d'Oreille - Kalispel"); - - cy.get("@nextBtn").click(); - - cy.contains("Berkeley Folk Music Festival").should( - "have.attr", - "href", - "https://dc-next.rdc-staging.library.northwestern.edu/collections/18ec4c6b-192a-4ab8-9903-ea0f393c35f7" - ); - cy.contains("Joan Baez"); - }); - }); - - //TODO: Learn more section - - //TODO: Harmful Content -}); diff --git a/cypress/e2e/item/item.cy.ts b/cypress/e2e/item/item.cy.ts deleted file mode 100644 index f321eccc..00000000 --- a/cypress/e2e/item/item.cy.ts +++ /dev/null @@ -1,15 +0,0 @@ -describe("Item page", () => { - it("renders page content", () => { - cy.fixture("/item/manifest1.json").then((json) => { - cy.intercept( - "GET", - "https://iiif.stack.rdc-staging.library.northwestern.edu/public/4b/d4/e8/bd/-8/66/5-/4b/b8/-9/a5/5-/f3/ab/dd/65/aa/98-manifest.json", - json - ); - cy.visit( - "https://devbox.library.northwestern.edu:3000/items/4bd4e8bd-8665-4bb8-9a55-f3abdd65aa98" - ); - cy.get("[data-testid='work-viewer-wrapper']"); - }); - }); -}); diff --git a/cypress/e2e/search/search.cy.ts b/cypress/e2e/search/search.cy.ts deleted file mode 100644 index 783a8c2e..00000000 --- a/cypress/e2e/search/search.cy.ts +++ /dev/null @@ -1,285 +0,0 @@ -const DEFAULT_PAGINATION_SIZE = 40; -const TOTAL_RESULTS = 182; - -function getPaginationResults(count: number) { - return count > DEFAULT_PAGINATION_SIZE ? DEFAULT_PAGINATION_SIZE : count; -} - -function verifyGridItemCount(count = 0) { - const paginationResults = getPaginationResults(count); - cy.get("[data-testid='grid-item']").should("have.length", paginationResults); -} - -function verifyTopResultsCount(count: number) { - cy.get("[data-testid='results-count']").contains(`${count} results`); -} - -describe("Search page component", () => { - it("renders the global search bar and fires off a successful searches", () => { - cy.visit("/search"); - - const searches = [ - { - expectedResultCount: 4, - term: "Obama", - }, - { - expectedResultCount: 32, - term: "Illinois", - }, - { - expectedResultCount: 8, - term: "Berkeley", - }, - ]; - - /** Test Search only functionality */ - cy.get("form[data-testid='search-ui-component'] input").as("searchInput"); - cy.contains("Search").as("searchBtn"); - verifyTopResultsCount(TOTAL_RESULTS); - verifyGridItemCount(TOTAL_RESULTS); - - searches.forEach((s) => { - cy.get("@searchInput").clear().type(s.term); - - cy.get("@searchBtn").click(); - cy.url().should("include", `/search?q=${s.term}`); - verifyTopResultsCount(s.expectedResultCount); - cy.get("@searchInput").should("have.value", s.term); - - const paginationResults = getPaginationResults(s.expectedResultCount); - verifyGridItemCount(s.expectedResultCount); - cy.contains( - `Showing 1 to ${paginationResults} of ${paginationResults} results` - ); - }); - - /** Reset search input */ - cy.get("button[type='reset']").click(); - cy.url().should("include", `/search`); - verifyTopResultsCount(TOTAL_RESULTS); - verifyGridItemCount(TOTAL_RESULTS); - }); - - it("renders Facet filter buttons above the grid correctly", () => { - cy.visit("/search"); - - /** Work Type facet top buttons */ - cy.get("[data-testid='facet-inline-component']").within(() => { - cy.contains("All").as("allBtn"); - cy.contains("Image").as("imageBtn"); - cy.contains("Audio").as("audioBtn"); - cy.contains("Video").as("videoBtn"); - }); - - cy.get("@allBtn").parent().should("have.attr", "aria-checked", "true"); - cy.get("@imageBtn").parent().should("have.attr", "aria-checked", "false"); - - cy.get("@imageBtn").click(); - cy.get("@imageBtn").parent().should("have.attr", "aria-checked", "true"); - cy.get("@allBtn").parent().should("have.attr", "aria-checked", "false"); - verifyTopResultsCount(136); - verifyGridItemCount(136); - - cy.get("@audioBtn").click(); - cy.get("@audioBtn").parent().should("have.attr", "aria-checked", "true"); - cy.get("@imageBtn").parent().should("have.attr", "aria-checked", "false"); - verifyTopResultsCount(21); - verifyGridItemCount(21); - - cy.get("@videoBtn").click(); - cy.get("@videoBtn").parent().should("have.attr", "aria-checked", "true"); - cy.get("@audioBtn").parent().should("have.attr", "aria-checked", "false"); - verifyTopResultsCount(25); - verifyGridItemCount(25); - - /** Test Public Works toggle */ - cy.get("@allBtn").click(); - cy.contains("Public works only") - .siblings("button[role='switch']") - .as("publicWorksToggle") - .click(); - verifyTopResultsCount(114); - verifyGridItemCount(114); - - /** Test Filter Facet Toggle UI */ - cy.contains("Clear All").click(); - cy.get("[data-testid='facet-user-component']").as("facetUserComponent"); - cy.get("@facetUserComponent").should("not.exist"); - cy.get("@imageBtn").click(); - cy.get("@facetUserComponent") - .should("exist") - .within(() => { - cy.contains("1"); - }); - /** Tests the facet count tag value updates */ - cy.get("@publicWorksToggle").click({ force: true }); - cy.get("@facetUserComponent").within(() => { - cy.contains("2"); - }); - }); - - it("renders the Filter modal and interactions within", () => { - cy.visit("/search"); - cy.contains("Filter").as("filterBtn").click(); - cy.get("[data-testid='modal-content']").within(() => { - describe("Verify main modal structure components on modal load", () => { - cy.get("header").contains("Filter"); - cy.get("[data-testid='facets-filter-close']"); - cy.get("footer button").contains("Clear All").as("clearAllBtn"); - cy.get("footer button").contains("Cancel").as("cancelBtn"); - cy.get("[data-testid='facets-submit'] button").as("viewResultsBtn"); - }); - - /** Facet category menu buttons display */ - /** Subject and Description Facets category defaults to open on load */ - - cy.get("[data-testid='facets-group-list']").within(() => { - cy.get("h3 button") - .contains("Subject and Descriptive") - .as("subjectsAndDescriptiveBtn"); - - /** Displays Subject and Description children facets */ - cy.contains("Genre"); - cy.contains("Language"); - cy.contains("Style Period"); - cy.contains("Subject"); - cy.contains("Technique"); - cy.contains("Work Type"); - - /** Displays other Facet categories */ - cy.contains("Collection and Location"); - cy.contains("Creator and Contributor").as("creatorAndContributorBtn"); - cy.contains("Rights and Usage"); - }); - - /** Test interacting with a Facet */ - cy.get("button").contains("Style Period").click(); - cy.get("h3").contains("Style Period"); - cy.get("[data-testid='facet-find'] input").as("facetFilterInput"); - cy.get("@facetFilterInput").should("have.value", ""); - cy.get("@facetFilterInput").should( - "have.attr", - "placeholder", - "Find Style Period" - ); - cy.get("[data-testid='facet-options']") - .as("facetOptions") - .children() - .should("have.length", 6); - - /** Test facet input filter doesn't care about capitalization */ - cy.get("@facetFilterInput").type("a", { force: true }); - cy.get("@facetOptions").children().should("have.length", 4); - cy.get("@facetFilterInput").clear().type("A", { force: true }); - cy.get("@facetOptions").children().should("have.length", 4); - - /** Test filtering of facets */ - cy.get("@facetFilterInput").clear(); - cy.get("[data-testid='facets-group-list'] div[role='tablist'] button") - .contains("Subject") - .as("subjectBtn") - .click(); - cy.get("@facetFilterInput").type("foo", { force: true }); - cy.get("@facetOptions").children().should("have.length", 14); - cy.get("@facetFilterInput").clear().type("Rose", { force: true }); - cy.get("@facetOptions").children().should("have.length", 2); - - /** Test narrowing checkbox selections across Facets */ - cy.get("@facetFilterInput").clear(); - cy.get("@clearAllBtn").click(); - - cy.get("[data-testid='facets-group-list'] div[role='tablist'] button") - .contains("Genre") - .click(); - cy.get("@facetOptions").within(() => { - cy.contains("photographs").click(); - }); - cy.get("@facetOptions").children().should("have.length", 2); - cy.get("@viewResultsBtn").should("have.text", "View Results (13)"); - cy.get("li[data-testid='facets-filter-preview-item']") - .as("previewResultItems") - .should("have.length", 5); - - cy.get("@subjectBtn").click(); - cy.get("@facetOptions").within(() => { - cy.contains("Women").click(); - }); - cy.get("@viewResultsBtn").should("have.text", "View Results (2)"); - cy.get("@previewResultItems").should("have.length", 2); - cy.get("@facetOptions").within(() => { - cy.contains("British").click(); - }); - cy.get("@viewResultsBtn").should("have.text", "View Results (1)"); - cy.get("@previewResultItems").should("have.length", 1); - - /** Display interactive active facets in Filter modal header */ - cy.get("@clearAllBtn").click(); - cy.get("@facetFilterInput").clear(); - - cy.get("@subjectBtn").click(); - cy.get("@facetOptions").contains("British Columbia").click(); - cy.get("[data-testid='facet-user-value-component']") - .as("activeUserFacet") - .should("have.length", 1); - cy.get("@activeUserFacet").contains("British Columbia"); - cy.get("@activeUserFacet").contains("Subject"); - - cy.get("@creatorAndContributorBtn").click(); - cy.get("[data-testid='facet-value-button']") - .as("facetValueBtn") - .contains("Contributor") - .click(); - cy.get("@facetOptions") - .contains("Curtis, Edward S., 1868-1952 (Publisher)") - .click(); - cy.get("@activeUserFacet").should("have.length", 2); - cy.get("@activeUserFacet").contains( - "Curtis, Edward S., 1868-1952 (Publisher)" - ); - cy.get("@activeUserFacet").contains("Contributor"); - - /** Removes above active facets successfully */ - cy.get("@viewResultsBtn").contains("View Results (5)"); - cy.get("@activeUserFacet").contains("British Columbia").click(); - cy.get("@activeUserFacet").should("have.length", 1); - cy.get("@viewResultsBtn").contains("View Results (6)"); - cy.get("@activeUserFacet") - .contains("Curtis, Edward S., 1868-1952 (Publisher)") - .click(); - cy.get("@activeUserFacet").should("have.length", 0); - cy.get("@viewResultsBtn").contains("View Results (182)"); - }); - }); - - it("Shows and hides the filter modal", () => { - cy.visit("/search"); - verifyTopResultsCount(TOTAL_RESULTS); - cy.get("[data-testid='modal-content']").should("not.exist"); - cy.contains("Filter").as("filterBtn").click(); - cy.get("[data-testid='modal-content']").as("filterModal").should("exist"); - - /** Top Close button does not update Search Results */ - cy.contains("Chamber music groups").click(); - cy.contains("View Results (7)"); - cy.get("header [data-testid='facets-filter-close']").click(); - cy.get("@filterModal").should("not.exist"); - verifyTopResultsCount(TOTAL_RESULTS); - - /** Footer Cancel button does not update Search Results */ - cy.get("@filterBtn").click(); - cy.contains("Film posters").click(); - cy.contains("View Results (5)"); - cy.contains("Cancel").click(); - verifyTopResultsCount(TOTAL_RESULTS); - - /** View Results Button updates Search */ - cy.get("@filterBtn").click(); - cy.contains("Language").click(); - cy.contains("French").click(); - cy.contains("View Results (11)").click(); - verifyTopResultsCount(11); - verifyGridItemCount(11); - cy.get("[data-testid='facet-user-component']").contains("1"); - }); -}); diff --git a/cypress/fixtures/example.json b/cypress/fixtures/example.json deleted file mode 100644 index 02e42543..00000000 --- a/cypress/fixtures/example.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "name": "Using fixtures to represent data", - "email": "hello@cypress.io", - "body": "Fixtures are a great way to mock data for responses to routes" -} diff --git a/cypress/fixtures/item/manifest1.json b/cypress/fixtures/item/manifest1.json deleted file mode 100644 index d83f05a3..00000000 --- a/cypress/fixtures/item/manifest1.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "label": "Staff for Testing", - "sequences": [ - { - "canvases": [ - { - "height": "480", - "images": [ - { - "motivation": "sc:painting", - "on": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/4b/d4/e8/bd/-8/66/5-/4b/b8/-9/a5/5-/f3/ab/dd/65/aa/98-manifest.json/canvas/907c8fde-38a3-4a72-8ea4-0a35605d1ab7", - "resource": { - "label": "inu-dil-2bffba2b-5883-4155-a234-75cfbd9f5157.tif", - "service": { - "profile": "http://iiif.io/api/image/2/level2.json", - "@context": "http://iiif.io/api/image/2/context.json", - "@id": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/907c8fde-38a3-4a72-8ea4-0a35605d1ab7" - }, - "@id": "https://iiif.stack.rdc.library.northwestern.edu/iiif/2/76c26a0a-0454-48d8-a225-9fc26735315b/full/pct:10/0/default.jpg", - "@type": "dctypes:Image" - }, - "@type": "oa:Annotation" - } - ], - "label": "inu-dil-2bffba2b-5883-4155-a234-75cfbd9f5157.tif", - "width": "640", - "@id": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/4b/d4/e8/bd/-8/66/5-/4b/b8/-9/a5/5-/f3/ab/dd/65/aa/98-manifest.json/canvas/907c8fde-38a3-4a72-8ea4-0a35605d1ab7", - "@type": "sc:Canvas" - } - ], - "@context": "http://iiif.io/api/presentation/2/context.json", - "@id": "/sequence/normal", - "@type": "sc:Sequence" - } - ], - "@context": "http://iiif.io/api/presentation/2/context.json", - "@id": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/4b/d4/e8/bd/-8/66/5-/4b/b8/-9/a5/5-/f3/ab/dd/65/aa/98-manifest.json", - "@type": "sc:Manifest" -} diff --git a/cypress/fixtures/search/aggregations/aggs1.json b/cypress/fixtures/search/aggregations/aggs1.json deleted file mode 100644 index f573847f..00000000 --- a/cypress/fixtures/search/aggregations/aggs1.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "data": [], - "pagination": { - "query_url": "https://dcapi.rdc-staging.library.northwestern.edu/api/v2/search?searchToken=N4IgRg9gJgniBcoDOBLAXgUwQBgDQgH0kIBXAJwGMt4BtEAQwqqVQgDsC2SBbMDMkPhRRBIFOIBmBbvTYoJGJABdRSlEoA2WfEoAWPMG3ooNogO4QyAawJKYABywBdfAEcS-OInAQIp79wkygg0TgC%2BEfjc0BgaSCEgFtbxLiASljIq8CBQGBL0JBoq%2BBD2auzxiBFAA", - "current_page": 1, - "limit": 10, - "offset": 0, - "total_hits": 575, - "total_pages": 58, - "next_url": "https://dcapi.rdc-staging.library.northwestern.edu/api/v2/search?searchToken=N4IgRg9gJgniBcoDOBLAXgUwQBgDQgH0kIBXAJwGMt4BtEAQwqqVQgDsC2SBbMDMkPhRRBIFOIBmBbvTYoJGJABdRSlEoA2WfEoAWPMG3ooNogO4QyAawJKYABywBdfAEcS-OInAQIp79wkygg0TgC%2BEfjc0BgaSCEgFtbxLiASljIq8CBQGBL0JBoq%2BBD2auzxiBFAA&page=2" - }, - "info": {}, - "aggregations": { - "subject": { - "doc_count_error_upper_bound": 5, - "sum_other_doc_count": 842, - "buckets": [ - { "key": "Adam", "doc_count": 88 }, - { "key": "Painting", "doc_count": 80 }, - { "key": "Berkeley (Calif.)", "doc_count": 12 }, - { "key": "Buddhist art", "doc_count": 11 }, - { "key": "Northwestern University (Evanston, Ill.)", "doc_count": 11 }, - { "key": "Church architecture", "doc_count": 10 }, - { "key": "Giant panda", "doc_count": 10 }, - { "key": "Olivier, Barry, 1935-", "doc_count": 10 }, - { "key": "Illinois--Evanston", "doc_count": 8 }, - { "key": "19th century", "doc_count": 7 }, - { "key": "College students", "doc_count": 7 }, - { "key": "Architecture, Domestic", "doc_count": 6 }, - { - "key": "Berkeley Folk Music Festival (6th : 1963 : Berkeley, Calif.)", - "doc_count": 6 - }, - { "key": "Hinton, Sam, 1917-2009", "doc_count": 5 }, - { "key": "Peace movements", "doc_count": 5 }, - { "key": "San Francisco (Calif.)", "doc_count": 5 }, - { "key": "San Francisco chronicle", "doc_count": 5 }, - { "key": "University of California, Berkeley", "doc_count": 5 }, - { "key": "20th century", "doc_count": 4 }, - { "key": "Anti-war demonstrations", "doc_count": 4 } - ] - } - } -} diff --git a/cypress/fixtures/search/aggregations/aggs2.json b/cypress/fixtures/search/aggregations/aggs2.json deleted file mode 100644 index b7e5b828..00000000 --- a/cypress/fixtures/search/aggregations/aggs2.json +++ /dev/null @@ -1,68 +0,0 @@ -{ - "data": [], - "pagination": { - "query_url": "https://dcapi.rdc-staging.library.northwestern.edu/api/v2/search?searchToken=N4IgRg9gJgniBcoDOBLAXgUwQBgDQgH0kIBXAJwGMt4BtEAQwqqVQgDsC2SBbMDMkPhRRBIFOIBmBbvTYoJGJABdRSlEoA2WfEoAWPMG3ooNogO4QyAawJKYABywBdfAEcS-OInAQIp79wkygg0TgC%2BEfjc0BgaSCEgFtbxLiASljIq8CBQGBL0JBoq%2BBD2auzxiBFAA", - "current_page": 1, - "limit": 10, - "offset": 0, - "total_hits": 575, - "total_pages": 58, - "next_url": "https://dcapi.rdc-staging.library.northwestern.edu/api/v2/search?searchToken=N4IgRg9gJgniBcoDOBLAXgUwQBgDQgH0kIBXAJwGMt4BtEAQwqqVQgDsC2SBbMDMkPhRRBIFOIBmBbvTYoJGJABdRSlEoA2WfEoAWPMG3ooNogO4QyAawJKYABywBdfAEcS-OInAQIp79wkygg0TgC%2BEfjc0BgaSCEgFtbxLiASljIq8CBQGBL0JBoq%2BBD2auzxiBFAA&page=2" - }, - "info": {}, - "aggregations": { - "subject": { - "doc_count_error_upper_bound": 0, - "sum_other_doc_count": 67, - "buckets": [ - { "key": "Berkeley (Calif.)", "doc_count": 12 }, - { "key": "San Francisco (Calif.)", "doc_count": 7 }, - { - "key": "Berkeley Folk Music Festival (6th : 1963 : Berkeley, Calif.)", - "doc_count": 6 - }, - { "key": "Los Angeles (Calif.)", "doc_count": 5 }, - { "key": "University of California, Berkeley", "doc_count": 5 }, - { "key": "University of California, Los Angeles", "doc_count": 5 }, - { - "key": "Berkeley Folk Music Festival (7th : 1964 : Berkeley, Calif.)", - "doc_count": 4 - }, - { - "key": "Wild West Festival (1969 : San Francisco, Calif.)", - "doc_count": 4 - }, - { - "key": "Northwestern University (Evanston, Ill.). Traffic Institute", - "doc_count": 3 - }, - { "key": "Relief (Sculpture)", "doc_count": 3 }, - { - "key": "William Randolph Hearst Greek Theatre (Berkeley, Calif.)", - "doc_count": 3 - }, - { - "key": "Berkeley Folk Music Festival (5th : 1962 : Berkeley, Calif.)", - "doc_count": 2 - }, - { "key": "Defense work", "doc_count": 2 }, - { "key": "Driftwood, Jimmie", "doc_count": 2 }, - { - "key": "KQED-TV (Television station : San Francisco, Calif.)", - "doc_count": 2 - }, - { "key": "NUL Items for Review", "doc_count": 2 }, - { "key": "Richmond (Calif.)", "doc_count": 2 }, - { - "key": "Richmond Festival of the Arts (1965 : Richmond, Calif.)", - "doc_count": 2 - }, - { - "key": "Richmond Memorial Auditorium (Richmond, Calif.)", - "doc_count": 2 - }, - { "key": "Self-portraits", "doc_count": 2 } - ] - } - } -} diff --git a/cypress/fixtures/search/pagination/page1.json b/cypress/fixtures/search/pagination/page1.json deleted file mode 100644 index 1cf5f232..00000000 --- a/cypress/fixtures/search/pagination/page1.json +++ /dev/null @@ -1,334 +0,0 @@ -{ - "data": [ - { - "accession_number": "BFMF_B03_F19_005_001n", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/ac987e48-b6a5-4d34-b5e0-1d2006996a44/full/!300,300/0!/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/8d/71/0f/86/-e/c5/4-/43/cf/-9/ec/4-/eb/71/b1/c9/0c/5dD-manifest.json", - "work_type": "Image", - "id": "8d710f86-ec54-43cf-9ec4-eb71b1c90c5d", - "title": "Mimi Farina" - }, - { - "accession_number": "BFMF_B19_F11_006_010n", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/95b354c0-c03b-4e41-ab7f-429e654159fe/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/75/2c/bc/86/-4/b3/5-/4a/20/-b/06/a-/b8/70/88/c1/64/cc-manifest.json", - "work_type": "Image", - "id": "752cbc86-4b35-4a20-b06a-b87088c164cc", - "title": "Sam Hinton, Richmond Festival of the Arts folk song concert" - }, - { - "accession_number": "BFMF_B06_F11_010_020n", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/3dff9186-99a8-4836-9a08-9e1db0fede05/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/43/89/ed/19/-c/21/a-/46/70/-8/8d/8-/8e/d9/19/72/d9/8f-manifest.json", - "work_type": "Image", - "id": "4389ed19-c21a-4670-88d8-8ed91972d98f", - "title": "Kathy and Carol" - }, - { - "accession_number": "BFMF_B33_F05_031", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/d673dfb7-505b-4a81-9d77-da01b1ccc5cc/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/ca/90/1f/24/-e/52/6-/48/ef/-9/86/e-/b2/0c/ef/36/2b/2a-manifest.json", - "work_type": "Image", - "id": "ca901f24-e526-48ef-986e-b20cef362b2a", - "title": "'Tiny Alice': Is it a hoax, a curdled brew of mysticism" - }, - { - "accession_number": "BFMF_B33_F13_006", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/a1e186b9-043a-4e75-af6a-096678d3a2a8/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/e6/4c/63/e6/-d/ff/8-/43/9f/-9/30/f-/08/36/c4/ee/f5/6b-manifest.json", - "work_type": "Image", - "id": "e64c63e6-dff8-439f-930f-0836c4eef56b", - "title": "VITA - Archie Green" - }, - { - "accession_number": "BFMF_B31_F04_040", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/46086c41-0fc0-4cc2-b2da-cdbbc0db7ab5/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/f1/8a/02/ba/-4/20/e-/45/94/-a/c4/9-/33/d3/e6/ec/d5/9b-manifest.json", - "work_type": "Image", - "id": "f18a02ba-420e-4594-ac49-33d3e6ecd59b", - "title": "Cowboy singer Slim Critchlow dies in Oakland" - }, - { - "accession_number": "BFMF_B05_F08_006", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/812edd1e-e767-4ed3-919d-46d7afe161f8/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/fa/55/da/0d/-8/b3/7-/4f/08/-8/49/1-/a1/a5/32/1e/44/23-manifest.json", - "work_type": "Image", - "id": "fa55da0d-8b37-4f08-8491-a1a5321e4423", - "title": "Roscoe Holcomb" - }, - { - "accession_number": "BFMF_B56_F13_010", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/6444cf38-da9a-4f66-8128-a58189ab5613/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/cf/4a/ef/d2/-7/fa/a-/42/ce/-b/89/d-/46/48/9e/c1/19/36-manifest.json", - "work_type": "Image", - "id": "cf4aefd2-7faa-42ce-b89d-46489ec11936", - "title": "Budweiser ad" - }, - { - "accession_number": "BFMF_B09_F20_047_024n", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/97a8bea4-74d9-4227-91da-1b28f5207d83/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/41/9b/d5/45/-6/1e/f-/45/32/-9/0d/3-/62/3d/d7/5d/5e/26-manifest.json", - "work_type": "Image", - "id": "419bd545-61ef-4532-90d3-623dd75d5e26", - "title": "Jean Redpath" - }, - { - "accession_number": "BFMF_B09_F17_009", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/5a843953-83bd-416f-b4b4-92284f9b5c42/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/4e/40/34/4a/-5/d1/2-/43/de/-9/bb/7-/75/c2/16/b0/e6/03-manifest.json", - "work_type": "Image", - "id": "4e40344a-5d12-43de-9bb7-75c216b0e603", - "title": "Pine Valley Boys, El Cerrito Plaza" - }, - { - "accession_number": "BFMF_B48_F08_047", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/39802352-ed19-4256-a9f3-eb76ff93ad67/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/b8/94/95/36/-6/71/4-/44/6e/-9/3d/3-/e2/86/60/e7/46/c7-manifest.json", - "work_type": "Image", - "id": "b8949536-6714-446e-93d3-e28660e746c7", - "title": "Memo to Arita Press about ticket printing" - }, - { - "accession_number": "BFMF_B45_F02_078", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/05d68a65-aadb-402f-b90c-070a3a2cf612/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/d8/c9/03/dd/-f/02/9-/46/98/-a/c6/b-/00/c3/0d/3c/b2/d3-manifest.json", - "work_type": "Image", - "id": "d8c903dd-f029-4698-ac6b-00c30d3cb2d3", - "title": "Letter from Jane Welch to Barry Olivier" - }, - { - "accession_number": "BFMF_B32_F07_047", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/7c6523c9-b855-473c-81f9-a252b70268b1/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/fe/27/38/ff/-6/13/6-/46/52/-8/bc/c-/cc/08/aa/a8/4b/b2-manifest.json", - "work_type": "Image", - "id": "fe2738ff-6136-4652-8bcc-cc08aaa84bb2", - "title": "Billy Faier flier" - }, - { - "accession_number": "StreamingTestPublic", - "thumbnail": null, - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/iiif3/b6/5d/e0/cc/-9/77/6-/44/66/-b/b9/7-/83/64/f9/e7/d3/67-manifest.json", - "work_type": "Video", - "id": "b65de0cc-9776-4466-bb97-8364f9e7d367", - "title": "StreamingTestPublic" - }, - { - "accession_number": "BFMF_B46_F16_058", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/f26a2c04-a1d8-4632-83f5-4376968ae030/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/de/86/f4/37/-6/24/6-/4c/ed/-a/b3/8-/a2/ce/34/6a/fa/c5-manifest.json", - "work_type": "Image", - "id": "de86f437-6246-4ced-ab38-a2ce346afac5", - "title": "Critical commentary on the 1967 Berkeley Folk Music Festival" - }, - { - "accession_number": "BFMF_B13_F01_022_021n", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/66e2843d-5159-4948-b38b-4bac496562db/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/e8/04/de/37/-f/7d/3-/43/7d/-a/b1/7-/5b/53/5c/66/50/ab-manifest.json", - "work_type": "Image", - "id": "e804de37-f7d3-437d-ab17-5b535c6650ab", - "title": "Sam Hinton, UCLA Folk Festival" - }, - { - "accession_number": "BFMF_B06_F11_008_008n", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/435693a1-3969-42f0-a757-ec98c0042c4f/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/8e/2d/6b/c5/-3/f0/0-/45/d1/-8/80/b-/a4/58/cd/df/0c/1c-manifest.json", - "work_type": "Image", - "id": "8e2d6bc5-3f00-45d1-880b-a458cddf0c1c", - "title": "Kathy, Carol, and Charles" - }, - { - "accession_number": "BFMF_B19_F08_008_027n", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/37d8b390-525d-4258-849e-009cddba33be/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/32/44/e1/cb/-d/e4/b-/4b/e3/-a/73/9-/b3/dd/8f/6c/2a/49-manifest.json", - "work_type": "Image", - "id": "3244e1cb-de4b-4be3-a739-b3dd8f6c2a49", - "title": "Clouds" - }, - { - "accession_number": "BFMF_B09_F12_029", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/585c22a1-7abf-425c-a15c-d1a7139a4b65/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/0e/35/3a/1d/-4/03/8-/4e/5b/-b/6c/9-/7e/8b/12/df/30/3b-manifest.json", - "work_type": "Image", - "id": "0e353a1d-4038-4e5b-b6c9-7e8b12df303b", - "title": "Caroline and Sandy Paton" - }, - { - "accession_number": "Voyager:Lif1849", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/a10bc580-4ebe-46d8-91c3-7d4c0535c92c/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/2f/d3/4c/54/-b/67/3-/42/51/-b/43/6-/d3/9c/ae/0f/68/27-manifest.json", - "work_type": "Image", - "id": "2fd34c54-b673-4251-b436-d39cae0f6827", - "title": "The Annunciation Altar (total with predella). Predella: presentation in Temple" - }, - { - "accession_number": "Voyager:243193", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/21d2e632-1420-4731-8830-04670049cf16/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/82/d1/ca/cb/-0/8c/b-/48/d1/-8/b4/7-/1a/95/be/b3/d4/e6-manifest.json", - "work_type": "Image", - "id": "82d1cacb-08cb-48d1-8b47-1a95beb3d4e6", - "title": "Church of Sao Francisco de Assis. Interior" - }, - { - "accession_number": "Voyager:Mvd0652", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/0816716c-d2db-40e2-800d-4c747b5b0ecc/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/a4/bf/61/8f/-9/c9/d-/4a/e5/-9/0c/c-/a5/33/0a/c3/35/01-manifest.json", - "work_type": "Image", - "id": "a4bf618f-9c9d-4ae5-90cc-a5330ac33501", - "title": "Altar of the Holy Sacrament. very close detail of the central pediment surmounted by female allegorical figures" - }, - { - "accession_number": "Voyager:159157", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/0df98eb2-f8ac-40ec-b4b8-71176a29367e/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/db/3c/77/ce/-8/46/5-/43/03/-9/c6/6-/55/09/c0/fd/45/13-manifest.json", - "work_type": "Image", - "id": "db3c77ce-8465-4303-9c66-5509c0fd4513", - "title": "Inner Shrine. Exterior: Festival Shrine" - }, - { - "accession_number": "Voyager:Lgf0413", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/6fe4735a-a45d-4970-a8df-69e98d21ca2c/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/92/52/ea/1e/-2/f8/8-/4d/83/-9/39/e-/c2/0b/77/39/95/82-manifest.json", - "work_type": "Image", - "id": "9252ea1e-2f88-4d83-939e-c20b77399582", - "title": "St. Valentin with Kneeling Donor. Saint and crosier" - }, - { - "accession_number": "Voyager:inudilcsmi1116", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/ca25f394-1a7c-447c-8004-6ed1595a460d/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/93/7f/ee/e7/-9/a2/c-/41/9e/-8/83/b-/4a/83/5d/63/23/f4-manifest.json", - "work_type": "Image", - "id": "937feee7-9a2c-419e-883b-4a835d6323f4", - "title": "Coast in Winter" - }, - { - "accession_number": "Accession:JR_163_32", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/d0314464-4ac1-4266-b14d-ab701b072c53/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/02/45/f0/1c/-e/bf/8-/4d/31/-9/27/8-/cd/a8/13/16/4e/3c-manifest.json", - "work_type": "Image", - "id": "0245f01c-ebf8-4d31-9278-cda813164e3c", - "title": "Intramural football championship" - }, - { - "accession_number": "Voyager:Mia2060", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/6040357c-9783-4868-830a-3deeaec70409/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/03/bd/b3/01/-0/fd/d-/46/00/-9/51/6-/df/7c/53/25/48/0d-manifest.json", - "work_type": "Image", - "id": "03bdb301-0fdd-4600-9516-df7c5325480d", - "title": "Jami Mosque (Masjid). Architecture. Close detail: decoration of arcade with inlaid Persian inscriptions" - }, - { - "accession_number": "inu-wint-43-2-79-2A", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/32106332-9e1d-4beb-872f-a370e6218624/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/0b/34/c6/19/-e/5d/0-/48/a1/-8/90/9-/b0/40/1d/81/6f/d6-manifest.json", - "work_type": "Image", - "id": "0b34c619-e5d0-48a1-8909-b0401d816fd6", - "title": "Kisumu Market, Kenya" - }, - { - "accession_number": "Sull_0536", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/37a27b1d-ea5a-4bbe-b38a-fcd2f5904f25/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/16/87/26/a0/-3/c7/6-/4f/68/-8/38/e-/28/a0/34/7f/40/e5-manifest.json", - "work_type": "Image", - "id": "168726a0-3c76-4f68-838e-28a0347f40e5", - "title": "4603/74, Brickyard" - }, - { - "accession_number": "Accession:314827", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/5f8e4223-9bee-4782-b5be-221a8d53780e/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/16/a6/d5/e6/-3/fa/3-/4e/a6/-b/81/2-/9e/ad/a6/ce/0f/1b-manifest.json", - "work_type": "Image", - "id": "16a6d5e6-3fa3-4ea6-b812-9eada6ce0f1b", - "title": "Bhutadamara. View: front" - }, - { - "accession_number": "Accession:320275", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/a5e1ae54-822d-4cd4-ab54-2abc63fbc4fe/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/1e/63/bd/7e/-9/a4/2-/43/d4/-b/75/2-/af/e9/2e/23/f2/70-manifest.json", - "work_type": "Image", - "id": "1e63bd7e-9a42-43d4-b752-afe92e23f270", - "title": "La Caricature, (1883), cover" - }, - { - "accession_number": "Voyager:299097", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/188a4376-8a76-4ecf-87cb-bd33cec86d7c/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/36/fe/94/77/-7/12/c-/4b/d9/-9/15/5-/f1/43/e3/b5/9f/20-manifest.json", - "work_type": "Image", - "id": "36fe9477-712c-4bd9-9155-f143e3b59f20", - "title": "Cutting the Rice" - }, - { - "accession_number": "0.003196864", - "thumbnail": null, - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/iiif3/c4/83/bc/c2/-a/4b/e-/41/75/-a/2d/7-/b2/bc/b1/e2/4d/28-manifest.json", - "work_type": "Audio", - "id": "c483bcc2-a4be-4175-a2d7-b2bcb1e24d28", - "title": null - }, - { - "accession_number": "0.635415315", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/a76e5b8c-3104-4050-b267-91e56d36add1/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/69/05/e1/a0/-5/a3/4-/46/b7/-b/60/e-/90/d0/81/64/64/ae-manifest.json", - "work_type": "Image", - "id": "6905e1a0-5a34-46b7-b60e-90d0816464ae", - "title": null - }, - { - "accession_number": "0.533456561", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/a687ef55-9de2-4869-b7f6-6aed003bab5d/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/ed/81/77/ec/-0/bf/3-/45/be/-9/24/e-/a5/90/6a/aa/01/c7-manifest.json", - "work_type": "Image", - "id": "ed8177ec-0bf3-45be-924e-a5906aaa01c7", - "title": null - }, - { - "accession_number": "5-23-010", - "thumbnail": null, - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/iiif3/a3/44/c1/0a/-c/5b/8-/4d/9a/-b/ee/5-/17/6f/bd/62/24/d7-manifest.json", - "work_type": "Audio", - "id": "a344c10a-c5b8-4d9a-bee5-176fbd6224d7", - "title": null - }, - { - "accession_number": "5-23-013", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/ba8659de-593e-47f9-aa91-0b0857f2190a/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/42/5c/27/40/-3/19/2-/46/c0/-8/e5/9-/5c/4f/15/09/9f/30-manifest.json", - "work_type": "Image", - "id": "425c2740-3192-46c0-8e59-5c4f15099f30", - "title": null - }, - { - "accession_number": "0.219590227", - "thumbnail": null, - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/iiif3/58/c7/1f/0e/-0/77/7-/4a/65/-8/fb/d-/d0/b2/e6/40/a5/1b-manifest.json", - "work_type": "Video", - "id": "58c71f0e-0777-4a65-8fbd-d0b2e640a51b", - "title": null - }, - { - "accession_number": "0.865461908", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/a6e7a5a8-7dd5-49d3-8dfb-935bbd11494c/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/af/d4/0c/d3/-c/e7/d-/4f/c3/-9/ec/3-/54/ed/2e/89/c6/ba-manifest.json", - "work_type": "Image", - "id": "afd40cd3-ce7d-4fc3-9ec3-54ed2e89c6ba", - "title": null - }, - { - "accession_number": "0.64960007", - "thumbnail": null, - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/iiif3/6e/01/49/85/-d/d9/9-/4c/9f/-b/ac/5-/69/77/71/54/3a/99-manifest.json", - "work_type": "Audio", - "id": "6e014985-dd99-4c9f-bac5-697771543a99", - "title": null - } - ], - "pagination": { - "query_url": "https://dcapi.rdc-staging.library.northwestern.edu/api/v2/search?searchToken=N4IgRg9gJgniBcoDOBLAXgUwQFgAwBoQB9JCAVwCcBjLeAbRAEMqalUIA7IjsgWzAwUQhFFGEgUkgGZFejDiikYkAF3EqUKgDZZCKgBZ8wHRii3iA7hAoBrIipgAHLAF1CARzKC4icBAjmvrxkqgh0LgC%2BUYS80BhaSGEgVraJbiBS1nJq8CBQGFKMZFpqhBCOGpyJiFFAA", - "current_page": 1, - "limit": 40, - "offset": 0, - "total_hits": 575, - "total_pages": 15, - "next_url": "https://dcapi.rdc-staging.library.northwestern.edu/api/v2/search?searchToken=N4IgRg9gJgniBcoDOBLAXgUwQFgAwBoQB9JCAVwCcBjLeAbRAEMqalUIA7IjsgWzAwUQhFFGEgUkgGZFejDiikYkAF3EqUKgDZZCKgBZ8wHRii3iA7hAoBrIipgAHLAF1CARzKC4icBAjmvrxkqgh0LgC%2BUYS80BhaSGEgVraJbiBS1nJq8CBQGFKMZFpqhBCOGpyJiFFAA&page=2" - }, - "info": {} -} diff --git a/cypress/fixtures/search/pagination/page15.json b/cypress/fixtures/search/pagination/page15.json deleted file mode 100644 index 214b2e88..00000000 --- a/cypress/fixtures/search/pagination/page15.json +++ /dev/null @@ -1,134 +0,0 @@ -{ - "data": [ - { - "accession_number": "Accession:JR_004_38", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/3f4f1a98-0353-4918-b42b-dc385adb495c/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/a0/f2/dd/d0/-4/97/d-/4c/49/-b/62/d-/ad/9b/3d/2d/a2/fe-manifest.json", - "work_type": "Image", - "id": "a0f2ddd0-497d-4c49-b62d-ad9b3d2da2fe", - "title": "Northwestern anti-war rally" - }, - { - "accession_number": "Voyager:265063", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/8c26d233-a69f-41cf-ad90-8d67ed38c742/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/a6/76/12/e1/-5/1b/a-/46/ad/-a/9d/0-/cc/83/0f/ed/0f/dc-manifest.json", - "work_type": "Image", - "id": "a67612e1-51ba-46ad-a9d0-cc830fed0fdc", - "title": "Sistine Chapel Ceiling. The Expulsion" - }, - { - "accession_number": "Accession:B03F01_C003a_85R", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/39ea6571-0354-455e-adc5-862038e6cfb6/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/af/62/14/ec/-5/41/c-/42/a2/-b/c2/2-/d9/a5/2c/a2/57/c8-manifest.json", - "work_type": "Image", - "id": "af6214ec-541c-42a2-bc22-d9a52ca257c8", - "title": "Suscinio Castle" - }, - { - "accession_number": "Voyager:Mhf0481", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/73ad6af8-f1ae-4b0d-8176-0352c2fe1dd5/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/b0/8d/f7/a7/-b/65/3-/4c/b3/-8/9e/0-/10/3d/57/4a/fe/d7-manifest.json", - "work_type": "Image", - "id": "b08df7a7-b653-4cb3-89e0-103d574afed7", - "title": "Dutch Harbor and Cityscape" - }, - { - "accession_number": "Voyager:236791", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/fe9a360c-09d9-48ba-b65f-d91c1e4fcd5f/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/b8/37/73/d9/-0/ec/f-/41/a3/-8/80/f-/30/eb/48/80/44/bf-manifest.json", - "work_type": "Image", - "id": "b83773d9-0ecf-41a3-880f-30eb488044bf", - "title": "Improvision" - }, - { - "accession_number": "Voyager:176883", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/5eeb7a1e-f66a-4617-8ebc-1c4645e094af/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/c7/01/9d/e4/-9/33/a-/40/37/-8/d9/1-/80/f8/1a/f7/4e/45-manifest.json", - "work_type": "Image", - "id": "c7019de4-933a-4037-8d91-80f81af74e45", - "title": "Building of the Patriots Association. Exterior: corner view" - }, - { - "accession_number": "Voyager:115448", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/2550a584-ebf6-48a8-84f9-d3de1f96f660/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/c9/95/e7/ff/-f/a7/d-/4d/db/-b/96/6-/26/78/23/46/5f/52-manifest.json", - "work_type": "Image", - "id": "c995e7ff-fa7d-4ddb-b966-267823465f52", - "title": "The Manger" - }, - { - "accession_number": "Voyager:47096", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/3cd7ced9-cad2-486d-8c2f-fa32f2bcb50e/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/ca/56/b7/f5/-d/35/6-/4d/6e/-8/08/d-/a7/c3/ef/e5/cd/5c-manifest.json", - "work_type": "Image", - "id": "ca56b7f5-d356-4d6e-808d-a7c3efe5cd5c", - "title": "Ancestor figure. 3/4 view" - }, - { - "accession_number": "Voyager:Msf0386", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/85b84e15-8e37-4f68-9d7d-d5626856febe/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/d5/73/fd/16/-5/9c/6-/42/8c/-b/ab/a-/53/24/a2/5e/dc/4c-manifest.json", - "work_type": "Image", - "id": "d573fd16-59c6-428c-baba-5324a25edc4c", - "title": "Saint Casilda" - }, - { - "accession_number": "Voyager:60647", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/2c79e577-3a3f-4ebb-b57e-5227184d2d6e/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/e2/43/5c/81/-1/6d/8-/4a/33/-a/05/d-/ae/16/a7/87/44/fa-manifest.json", - "work_type": "Image", - "id": "e2435c81-16d8-4a33-a05d-ae16a78744fa", - "title": "Humanoid head and neck with skull necklace. Front" - }, - { - "accession_number": "Accession:B02F06_0025a_005", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/79d55f3c-d74a-4710-8fee-5b29280398af/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/f2/b8/af/41/-f/4e/a-/4a/b3/-8/ae/2-/9f/6a/5d/5e/1c/af-manifest.json", - "work_type": "Image", - "id": "f2b8af41-f4ea-4ab3-8ae2-9f6a5d5e1caf", - "title": "Man rowing boat" - }, - { - "accession_number": "Voyager:150208", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/63a3b500-fb6e-429e-afef-84c1e8beefd0/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/f4/ed/6c/f1/-7/e5/c-/4f/4a/-b/ce/e-/cb/69/8f/1d/b6/6b-manifest.json", - "work_type": "Image", - "id": "f4ed6cf1-7e5c-4f4a-bcee-cb698f1db66b", - "title": "Sotira Lykodimou Church. Exterior" - }, - { - "accession_number": "Voyager:Nff0884", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/badbedc3-089f-4bb0-a8c1-65ebd1ef2cd1/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/f7/e3/b1/92/-f/ce/6-/4e/9f/-b/b1/d-/26/ad/f8/6d/dd/38-manifest.json", - "work_type": "Image", - "id": "f7e3b192-fce6-4e9f-bb1d-26adf86ddd38", - "title": "Young Girls at the Sea. reclining, pensive nude" - }, - { - "accession_number": "Voyager:Jia0477", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/d0795326-9f53-4c41-bf86-aa3cf1a7c608/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/fe/d0/90/60/-1/36/f-/41/f9/-9/c9/9-/17/8a/24/4a/d5/d1-manifest.json", - "work_type": "Image", - "id": "fed09060-136f-41f9-9c99-178a244ad5d1", - "title": "S. Maria in Trastevere. det: upper register with Popes and mosaic" - }, - { - "accession_number": "Canary_003", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/2ac97d66-a921-4edb-9999-8d246856c91c/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/iiif3/ad/83/01/81/-b/65/8-/4e/74/-9/04/5-/d0/73/d2/fb/83/0e-manifest.json", - "work_type": "Audio", - "id": "ad830181-b658-4e74-9045-d073d2fb830e", - "title": "Canary Record TEST 2" - } - ], - "pagination": { - "query_url": "https://dcapi.rdc-staging.library.northwestern.edu/api/v2/search?searchToken=N4IgRg9gJgniBcoDOBLAXgUwQFgAwBoQB9JCAVwCcBjLeAbRAEMqalUIA7IjsgWzAwUQhFFGEgUkgGZFejDiikYkAF3EqUKgDZZCKgBZ8wHRii3iA7hAoBrIipgAHLAF1CARzKC4icBAjmvrxkqgh0LgC%2BUYS80BhaSGEgVraJbiBS1nJq8CBQGFKMZFpqhBCOGpyJiFFAA", - "current_page": 15, - "limit": 40, - "offset": 560, - "total_hits": 575, - "total_pages": 15, - "prev_url": "https://dcapi.rdc-staging.library.northwestern.edu/api/v2/search?searchToken=N4IgRg9gJgniBcoDOBLAXgUwQFgAwBoQB9JCAVwCcBjLeAbRAEMqalUIA7IjsgWzAwUQhFFGEgUkgGZFejDiikYkAF3EqUKgDZZCKgBZ8wHRii3iA7hAoBrIipgAHLAF1CARzKC4icBAjmvrxkqgh0LgC%2BUYS80BhaSGEgVraJbiBS1nJq8CBQGFKMZFpqhBCOGpyJiFFAA&page=14" - }, - "info": {} -} diff --git a/cypress/fixtures/search/pagination/page2.json b/cypress/fixtures/search/pagination/page2.json deleted file mode 100644 index af2d8045..00000000 --- a/cypress/fixtures/search/pagination/page2.json +++ /dev/null @@ -1,335 +0,0 @@ -{ - "data": [ - { - "accession_number": "P0036_Aldridge_OF1_F03_001", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/b74385b0-1083-45b6-9838-633ba1927e70/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/15/1c/09/42/-3/4e/9-/49/ae/-8/84/6-/b4/8f/65/26/8f/75-manifest.json", - "work_type": "Image", - "id": "151c0942-34e9-49ae-8846-b48f65268f75", - "title": null - }, - { - "accession_number": "Accession:JR_054_38", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/4485c7e9-8cf4-41f5-9bbf-8db5d32098a3/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/55/e5/5e/e3/-a/68/1-/4f/cf/-b/b7/c-/06/49/37/92/4e/65-manifest.json", - "work_type": "Image", - "id": "55e55ee3-a681-4fcf-bb7c-064937924e65", - "title": "Woman with braid" - }, - { - "accession_number": "0.066396245", - "thumbnail": null, - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/iiif3/04/e7/98/f0/-a/21/d-/41/31/-9/80/8-/cc/86/20/21/a0/24-manifest.json", - "work_type": "Audio", - "id": "04e798f0-a21d-4131-9808-cc862021a024", - "title": null - }, - { - "accession_number": "0.173163484", - "thumbnail": null, - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/iiif3/28/99/99/0b/-d/ee/8-/43/15/-9/7e/2-/0c/38/84/42/94/24-manifest.json", - "work_type": "Video", - "id": "2899990b-dee8-4315-97e2-0c3884429424", - "title": null - }, - { - "accession_number": "0.949040201", - "thumbnail": null, - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/iiif3/f1/40/eb/49/-f/db/a-/48/59/-b/14/d-/3e/01/d5/f4/0e/c0-manifest.json", - "work_type": "Video", - "id": "f140eb49-fdba-4859-b14d-3e01d5f40ec0", - "title": "Canary Record TEST 2" - }, - { - "accession_number": "Accession:JR_115_24", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/890f03fd-aecd-4da8-9a46-b123c8a79255/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/6a/a0/e4/8e/-d/51/d-/48/be/-b/b5/3-/9a/42/c1/e8/f3/11-manifest.json", - "work_type": "Image", - "id": "6aa0e48e-d51d-48be-bb53-9a42c1e8f311", - "title": "Science lecture" - }, - { - "accession_number": "2022_03_24_07", - "thumbnail": null, - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/iiif3/c7/b5/2b/f3/-3/4a/5-/42/a2/-9/85/3-/04/aa/e3/d5/ad/ea-manifest.json", - "work_type": "Video", - "id": "c7b52bf3-34a5-42a2-9853-04aae3d5adea", - "title": null - }, - { - "accession_number": "Voyager:248224", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/e9a7a4b6-e333-42e8-a885-72c4e50dd7e1/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/70/0b/cd/8e/-3/e7/9-/4b/c4/-8/5b/d-/d8/ad/1e/af/5c/42-manifest.json", - "work_type": "Image", - "id": "700bcd8e-3e79-4bc4-85bd-d8ad1eaf5c42", - "title": "Colored plate" - }, - { - "accession_number": "0.254219184", - "thumbnail": null, - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/iiif3/fe/09/bc/be/-6/91/1-/4d/ec/-a/87/4-/be/6d/4c/63/c6/1b-manifest.json", - "work_type": "Audio", - "id": "fe09bcbe-6911-4dec-a874-be6d4c63c61b", - "title": "Canary Record TEST 2" - }, - { - "accession_number": "Voyager:Mff2175", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/517b89e6-db04-499f-abc5-2ece3bc2eb69/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/95/80/a5/83/-0/e0/c-/4e/55/-9/fa/b-/4d/b8/b6/1c/c2/9b-manifest.json", - "work_type": "Image", - "id": "9580a583-0e0c-4e55-9fab-4db8b61cc29b", - "title": "Triumph of Death (after Pieter Brueghel the Elder). landsknechts resisting, Death attacking party of aristocrats" - }, - { - "accession_number": "Voyager:inumckaygh43", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/544ede66-79da-4f91-9ddf-eaa384824881/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/9f/94/1b/7d/-1/02/3-/44/b4/-9/0c/4-/fa/eb/6b/a3/be/cf-manifest.json", - "work_type": "Image", - "id": "9f941b7d-1023-44b4-90c4-faeb6ba3becf", - "title": "Juvenile Delinquency in the Gold Coast" - }, - { - "accession_number": "Voyager:150213", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/6f18f97a-6b81-4888-a115-6d8a9c9d680d/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/ad/9e/05/a5/-0/29/1-/44/dd/-b/47/c-/f2/1e/aa/f7/8b/cb-manifest.json", - "work_type": "Image", - "id": "ad9e05a5-0291-44dd-b47c-f21eaaf78bcb", - "title": "The Little Metropole Cathedral. Exterior" - }, - { - "accession_number": "Accession:313555", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/fd0e1283-e3bb-4131-835f-495a18554c8b/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/d3/8c/41/af/-d/15/5-/46/62/-8/3a/c-/e6/37/8e/5f/f7/5b-manifest.json", - "work_type": "Image", - "id": "d38c41af-d155-4662-83ac-e6378e5ff75b", - "title": "Vairocana with eight bodhisattvas or Vajraraga-Manjusri mandala. Detail: four bodhisattvas above Vairocana's proper left shoulder" - }, - { - "accession_number": "Voyager:305507", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/ddb115eb-a4f0-4709-87be-171ce1a95aa8/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/bd/71/d0/eb/-e/50/9-/45/fd/-9/36/1-/d2/83/89/92/59/36-manifest.json", - "work_type": "Image", - "id": "bd71d0eb-e509-45fd-9361-d28389925936", - "title": "Wall hanging" - }, - { - "accession_number": "Voyager:252924", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/4fce0559-0ea8-4ed5-a33a-1fdd4377bfde/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/03/c0/d4/71/-5/4c/e-/4f/d5/-a/a2/0-/9f/8f/12/db/89/08-manifest.json", - "work_type": "Image", - "id": "03c0d471-54ce-4fd5-aa20-9f8f12db8908", - "title": "Die gluckliche hand. Stage design, scene 1: the Chorus" - }, - { - "accession_number": "Voyager:313234", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/078e5344-e9d2-46f8-8058-21019e565025/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/05/90/9b/83/-f/25/f-/4b/4a/-a/20/b-/97/c4/76/6f/47/03-manifest.json", - "work_type": "Image", - "id": "05909b83-f25f-4b4a-a20b-97c4766f4703", - "title": "Chapelle du Rosaire Vence The garden and the pond" - }, - { - "accession_number": "Voyager:Mfb0052", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/09417625-2c19-4804-9a56-ca0142f39f18/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/09/1e/c2/ed/-7/31/0-/44/99/-b/e8/a-/a5/0e/a9/0e/38/0a-manifest.json", - "work_type": "Image", - "id": "091ec2ed-7310-4499-be8a-a50ea90e380a", - "title": "Place Vendome. NE corner elevation" - }, - { - "accession_number": "322677", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/deb8cce8-e91d-416b-886e-4e632a4a5ede/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/0a/4e/41/de/-b/b1/4-/4c/38/-8/91/8-/9e/3d/7b/eb/dd/4c-manifest.json", - "work_type": "Image", - "id": "0a4e41de-bb14-4c38-8918-9e3d7bebdd4c", - "title": "Kayseri" - }, - { - "accession_number": "Voyager:RL01375", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/39f9fda4-d81f-475f-8263-484ccd5c2a61/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/34/5e/e4/14/-2/b7/a-/43/0a/-b/84/8-/e1/80/0c/2c/56/22-manifest.json", - "work_type": "Image", - "id": "345ee414-2b7a-430a-b848-e1800c2c5622", - "title": "Yungang. Cave 20. Buddha. Detail" - }, - { - "accession_number": "Voyager:Nvd0039", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/7edc5068-9a06-4593-b9a0-9814356b8232/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/0d/93/cd/61/-2/e9/a-/43/d9/-a/a5/b-/3c/24/d7/b4/99/d5-manifest.json", - "work_type": "Image", - "id": "0d93cd61-2e9a-43d9-aa5b-3c24d7b499d5", - "title": "Tomb of Pius VIII Castiglione (b.Cingoli, 253rd Pope, r.1829-30). full figure of St. Peter" - }, - { - "accession_number": "Voyager:32861", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/369880b6-b6c0-46f7-9d0a-b0b37a6d9865/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/10/89/bc/19/-6/aa/a-/42/92/-b/62/f-/88/b1/9d/57/b9/80-manifest.json", - "work_type": "Image", - "id": "1089bc19-6aaa-4292-b62f-88b19d57b980", - "title": "Ekoi headdress mask" - }, - { - "accession_number": "Voyager:Pub0310", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/2646b3e6-68dd-41a2-a1be-ddf53cac7230/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/39/f5/97/31/-9/07/7-/45/b3/-9/c6/a-/48/22/b6/94/e3/11-manifest.json", - "work_type": "Image", - "id": "39f59731-9077-45b3-9c6a-4822b694e311", - "title": "American Center in Paris (1994). interior detail: main lobby at entrance level, view 2" - }, - { - "accession_number": "Voyager:Lff1053", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/a3ec1c0e-4792-450f-b590-54f170ade404/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/17/0a/36/77/-e/33/7-/48/d4/-a/d7/8-/e2/15/1e/ac/b9/e4-manifest.json", - "work_type": "Image", - "id": "170a3677-e337-48d4-ad78-e2151eacb9e4", - "title": "Triumph of Death. cart of skulls and king" - }, - { - "accession_number": "Voyager:141385", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/9fcc206e-077d-4d39-86b2-45175c8ea3ff/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/24/87/4d/c0/-2/59/7-/42/7b/-a/f0/4-/70/4f/7c/c2/e3/18-manifest.json", - "work_type": "Image", - "id": "24874dc0-2597-427b-af04-704f7cc2e318", - "title": "Crouching Aphrodite" - }, - { - "accession_number": "Voyager:154951", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/d707fc90-01b3-4a74-9719-aabe4ad3ed43/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/d3/7d/63/03/-3/eb/9-/48/71/-b/61/f-/3b/36/73/6f/1f/34-manifest.json", - "work_type": "Image", - "id": "d37d6303-3eb9-4871-b61f-3b36736f1f34", - "title": "House near the Farnesina. Wall decorated with trompe-l'oeil architectural motifs" - }, - { - "accession_number": "Voyager:Kgw0014", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/d7756234-56e9-4248-8c97-39872de9fb32/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/2b/36/22/c8/-0/05/c-/45/30/-9/34/8-/cc/24/cd/3a/c0/17-manifest.json", - "work_type": "Image", - "id": "2b3622c8-005c-4530-9348-cc24cd3ac017", - "title": "The Imperial Bursa of St. Stephen. Overall from right front" - }, - { - "accession_number": "Voyager:Lgm0015", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/dcacee74-be1a-45b1-b380-dff473f8f683/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/2c/b0/54/2b/-0/d6/4-/4f/54/-b/07/4-/f4/70/b9/1f/4f/6a-manifest.json", - "work_type": "Image", - "id": "2cb0542b-0d64-4f54-b074-f470b91f4f6a", - "title": "Knight, Death and the Devil.. the devil" - }, - { - "accession_number": "Voyager:Kba0025", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/b49a00d6-a718-44c8-b618-829481d5f474/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/2d/bc/94/80/-2/62/3-/4c/b4/-a/9d/7-/d1/c3/f8/f2/c3/d6-manifest.json", - "work_type": "Image", - "id": "2dbc9480-2623-4cb4-a9d7-d1c3f8f2c3d6", - "title": "Basilica of Holy Blood. det: portrait roundel of countess" - }, - { - "accession_number": "Voyager:211374", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/2cec5f7e-edfa-42db-b981-48e06f973af4/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/2e/73/8c/79/-f/77/2-/45/ae/-8/ee/b-/0c/23/a6/91/f6/8c-manifest.json", - "work_type": "Image", - "id": "2e738c79-f772-45ae-8eeb-0c23a691f68c", - "title": "Forbidden City. Palace of Tranquil Longevity, Pavillion of the Carpenters' Square, side view of the Gallery of the Square Rule" - }, - { - "accession_number": "Voyager:Kfa0269", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/35bdd2d4-8db6-4f13-a223-ae5bdfff3f25/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/2f/01/16/41/-d/a5/f-/45/21/-9/c9/8-/7a/dc/b4/bc/e8/88-manifest.json", - "work_type": "Image", - "id": "2f011641-da5f-4521-9c98-7adcb4bce888", - "title": "Benedictine Abbey and Cloister of Saint Pierre at Moissac. det: W wall of porch: Punishment of Female Unchastity" - }, - { - "accession_number": "Voyager:Lif0869", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/25a3099d-42bf-423f-97de-ed30f575929e/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/2f/84/c4/5b/-3/e6/9-/4c/ae/-b/f2/0-/30/bb/99/45/29/5a-manifest.json", - "work_type": "Image", - "id": "2f84c45b-3e69-4cae-bf20-30bb9945295a", - "title": "Martyrdom of the 10,000. center detail" - }, - { - "accession_number": "Voyager:Mif1727", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/38c9efba-69ca-4308-9cc1-4c15411eb597/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/35/94/63/87/-0/ea/4-/4c/2c/-9/00/c-/61/24/36/82/8b/af-manifest.json", - "work_type": "Image", - "id": "35946387-0ea4-4c2c-900c-612436828baf", - "title": "Diana and Endymion. Diana and the sleeping Endymion" - }, - { - "accession_number": "Voyager:1608", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/09a434c5-4eba-4ee0-8c43-36d59a68af60/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/39/55/fe/ea/-0/d5/6-/43/e0/-b/8d/3-/7a/a8/84/45/fa/2c-manifest.json", - "work_type": "Image", - "id": "3955feea-0d56-43e0-b8d3-7aa88445fa2c", - "title": "Capitol Dome. Interior" - }, - { - "accession_number": "Voyager:242058", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/0cf47633-6e44-4d4f-ba4f-ccb1f930010f/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/41/6d/96/b9/-0/38/b-/40/e8/-9/27/b-/00/41/39/c3/b4/e6-manifest.json", - "work_type": "Image", - "id": "416d96b9-038b-40e8-927b-004139c3b4e6", - "title": "Joliette Quarter, block #8. Exterior: view of windows" - }, - { - "accession_number": "Voyager:Lga0052", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/1a7508b6-2aab-4af2-9bf8-a533e1d74105/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/cb/82/28/06/-f/9e/f-/43/fd/-8/4b/1-/45/b8/c6/8d/bf/b5-manifest.json", - "work_type": "Image", - "id": "cb822806-f9ef-43fd-84b1-45b8c68dbfb5", - "title": "Platz at Tiergartner Gate. view E with Pilatus House, 1489-1520" - }, - { - "accession_number": "Voyager:170068", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/961490ac-0286-486c-b0cf-e20a9963d658/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/4b/f8/92/22/-2/9d/f-/44/f2/-8/8e/e-/c7/c7/ee/4e/17/ed-manifest.json", - "work_type": "Image", - "id": "4bf89222-29df-44f2-88ee-c7c7ee4e17ed", - "title": "Villa Schwob. Exterior" - }, - { - "accession_number": "Voyager:Mff0167", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/ad9f1ea1-966f-461c-b7c4-c07c1e84e67f/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/4e/3e/c3/13/-6/ff/3-/49/e1/-a/20/c-/66/ab/53/81/ce/12-manifest.json", - "work_type": "Image", - "id": "4e3ec313-6ff3-49e1-a20c-66ab5381ce12", - "title": "The Forge of Vulcan. central detail" - }, - { - "accession_number": "Voyager:305257", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/f50206d8-1d15-4490-bfe8-6f8c03f878c6/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/52/f6/03/11/-f/18/e-/4f/b3/-8/cb/f-/ce/d5/7e/ad/86/cf-manifest.json", - "work_type": "Image", - "id": "52f60311-f18e-4fb3-8cbf-ced57ead86cf", - "title": "Lagoon and Fishermen" - }, - { - "accession_number": "Accession:JR_124_39", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/bc06b92c-ab6e-4821-b8e5-f5aa84c7bd2f/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/de/7c/89/5f/-b/b7/b-/46/08/-9/55/e-/4f/a4/71/b6/dc/48-manifest.json", - "work_type": "Image", - "id": "de7c895f-bb7b-4608-955e-4fa471b6dc48", - "title": "Student rental house on Maple Avenue" - }, - { - "accession_number": "Voyager:Lff0316", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/4870017d-529e-4689-8a0a-bbcadeb3eea9/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/53/8f/69/de/-9/b2/e-/42/b0/-8/42/c-/fb/74/ec/dc/5d/79-manifest.json", - "work_type": "Image", - "id": "538f69de-9b2e-42b0-842c-fb74ecdc5d79", - "title": "Market Scene with Christ in the House of Mary and Martha. Still life detail" - } - ], - "pagination": { - "query_url": "https://dcapi.rdc-staging.library.northwestern.edu/api/v2/search?searchToken=N4IgRg9gJgniBcoDOBLAXgUwQFgAwBoQB9JCAVwCcBjLeAbRAEMqalUIA7IjsgWzAwUQhFFGEgUkgGZFejDiikYkAF3EqUKgDZZCKgBZ8wHRii3iA7hAoBrIipgAHLAF1CARzKC4icBAjmvrxkqgh0LgC%2BUYS80BhaSGEgVraJbiBS1nJq8CBQGFKMZFpqhBCOGpyJiFFAA", - "current_page": 2, - "limit": 40, - "offset": 40, - "total_hits": 575, - "total_pages": 15, - "prev_url": "https://dcapi.rdc-staging.library.northwestern.edu/api/v2/search?searchToken=N4IgRg9gJgniBcoDOBLAXgUwQFgAwBoQB9JCAVwCcBjLeAbRAEMqalUIA7IjsgWzAwUQhFFGEgUkgGZFejDiikYkAF3EqUKgDZZCKgBZ8wHRii3iA7hAoBrIipgAHLAF1CARzKC4icBAjmvrxkqgh0LgC%2BUYS80BhaSGEgVraJbiBS1nJq8CBQGFKMZFpqhBCOGpyJiFFAA&page=1", - "next_url": "https://dcapi.rdc-staging.library.northwestern.edu/api/v2/search?searchToken=N4IgRg9gJgniBcoDOBLAXgUwQFgAwBoQB9JCAVwCcBjLeAbRAEMqalUIA7IjsgWzAwUQhFFGEgUkgGZFejDiikYkAF3EqUKgDZZCKgBZ8wHRii3iA7hAoBrIipgAHLAF1CARzKC4icBAjmvrxkqgh0LgC%2BUYS80BhaSGEgVraJbiBS1nJq8CBQGFKMZFpqhBCOGpyJiFFAA&page=3" - }, - "info": {} -} diff --git a/cypress/fixtures/search/pagination/page3.json b/cypress/fixtures/search/pagination/page3.json deleted file mode 100644 index c5fc690d..00000000 --- a/cypress/fixtures/search/pagination/page3.json +++ /dev/null @@ -1,335 +0,0 @@ -{ - "data": [ - { - "accession_number": "Voyager:186795", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/80c8ab64-50ae-437d-9fef-f24efb7865ef/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/55/5e/e0/5a/-8/1b/3-/44/2e/-8/a7/e-/a9/df/e4/b8/28/5a-manifest.json", - "work_type": "Image", - "id": "555ee05a-81b3-442e-8a7e-a9dfe4b8285a", - "title": "Santiago de Compostela Cathedral. Exterior; Puerta de las Platerias" - }, - { - "accession_number": "Accession:JR_150_35", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/97ca95b8-6b12-4c68-83e4-ecea21cabc81/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/5a/b4/51/a5/-2/12/c-/4e/d8/-9/5a/5-/62/6b/d2/de/c0/cb-manifest.json", - "work_type": "Image", - "id": "5ab451a5-212c-4ed8-95a5-626bd2dec0cb", - "title": "Chicago Jazz Musicians -- for film by Chris Vail '71" - }, - { - "accession_number": "Voyager:312796", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/addaf6a7-1262-41d6-be10-dcb9fa100d63/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/5f/d3/d5/28/-8/11/0-/44/12/-b/da/7-/bb/59/16/ed/38/a9-manifest.json", - "work_type": "Image", - "id": "5fd3d528-8110-4412-bda7-bb5916ed38a9", - "title": "Venus & Cupid" - }, - { - "accession_number": "TWA031", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/d20585df-b025-420b-8a59-95a237bcadc7/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/63/c9/bc/60/-6/ac/f-/4a/b1/-b/4d/6-/ce/69/a3/21/cb/e2-manifest.json", - "work_type": "Image", - "id": "63c9bc60-6acf-4ab1-b4d6-ce69a321cbe2", - "title": "Trans World Airlines, Menu: N/A" - }, - { - "accession_number": "Accession:313531", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/d164b89c-10ca-42d3-b201-d584e7175604/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/65/93/89/f3/-2/2e/3-/41/f3/-a/22/e-/dd/99/18/3a/f3/38-manifest.json", - "work_type": "Image", - "id": "659389f3-22e3-41f3-a22e-dd99183af338", - "title": "Green Tārā" - }, - { - "accession_number": "Voyager:166200", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/7b3296c9-5f1e-40ee-8d65-358f0087256c/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/67/34/8c/ce/-9/be/6-/46/e9/-8/29/f-/7f/e8/de/5a/65/11-manifest.json", - "work_type": "Image", - "id": "67348cce-9be6-46e9-829f-7fe8de5a6511", - "title": "Self-Portrait in Florence" - }, - { - "accession_number": "Voyager:RL03103", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/b67020b9-c57e-49e2-b099-44fb70548a25/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/67/5f/a1/49/-9/a9/2-/4d/81/-b/00/1-/3c/ad/32/22/45/79-manifest.json", - "work_type": "Image", - "id": "675fa149-9a92-4d81-b001-3cad32224579", - "title": "Panchen Lama pre-incarnation Manjukirti (Mañjuśrī-kirti or King Rigden Gyalpo), 8th Shambhala king Detail: close-up of painting" - }, - { - "accession_number": "Voyager:Jic0778", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/55f88df6-8d36-4ea1-913c-f3eac09108b7/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/6c/2e/4d/68/-c/55/e-/4f/3b/-9/1a/d-/ae/37/bb/63/ba/39-manifest.json", - "work_type": "Image", - "id": "6c2e4d68-c55e-4f3b-91ad-ae37bb63ba39", - "title": "Satyr Carrying the Child Dionysus on His Left Arm. Total from front right" - }, - { - "accession_number": "Voyager:18113", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/82c5ad3b-304a-40ea-a891-d4d07ca1cde3/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/6e/c9/87/24/-5/f3/c-/43/db/-b/a5/6-/93/41/62/39/d6/63-manifest.json", - "work_type": "Image", - "id": "6ec98724-5f3c-43db-ba56-93416239d663", - "title": "Portrait of Richard Mather" - }, - { - "accession_number": "Voyager:123504", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/76fc354b-edb9-40e1-9baa-ed8b673680f0/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/7c/a4/00/f0/-7/c6/e-/49/07/-a/ff/0-/71/26/a9/f9/85/b3-manifest.json", - "work_type": "Image", - "id": "7ca400f0-7c6e-4907-aff0-7126a9f985b3", - "title": "Corps Student from Nuremberg, Cologne" - }, - { - "accession_number": "Accession:JR_127_39", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/0d5d6980-dd08-4dbf-8150-1de61b08e2aa/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/81/b0/bd/ab/-e/6e/4-/40/ef/-8/50/4-/ef/b9/b4/d2/64/d2-manifest.json", - "work_type": "Image", - "id": "81b0bdab-e6e4-40ef-8504-efb9b4d264d2", - "title": "Puppies Fred and Sailor on frozen lakefront" - }, - { - "accession_number": "Voyager:126371", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/338e8b6e-bf11-4d4f-83db-55a94c565e7c/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/84/c3/e0/78/-9/7e/5-/48/48/-b/82/b-/80/f0/3e/de/a2/b5-manifest.json", - "work_type": "Image", - "id": "84c3e078-97e5-4848-b82b-80f03edea2b5", - "title": "Central area housing plan" - }, - { - "accession_number": "Voyager:TL01260008", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/839f0553-edee-45de-81fd-ffdfbbcab706/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/84/e0/6e/66/-7/a6/7-/4f/d4/-b/15/4-/87/68/83/01/c8/1a-manifest.json", - "work_type": "Image", - "id": "84e06e66-7a67-4fd4-b154-87688301c81a", - "title": "Passengers smoke room looking aft" - }, - { - "accession_number": "Voyager:Uib0011", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/256b29df-6d3a-4b85-9868-8c00ed71a0b3/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/96/94/ef/dd/-2/d8/3-/4d/56/-b/68/4-/31/61/c7/6e/85/df-manifest.json", - "work_type": "Image", - "id": "9694efdd-2d83-4d56-b684-3161c76e85df", - "title": "Via delle Fratta. View S of narrow street w. closed vista" - }, - { - "accession_number": "Voyager:133126", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/24267b2d-80d9-4678-b998-85054f95e29e/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/9d/0b/2a/fa/-a/d0/7-/49/e9/-a/eb/8-/f2/0b/54/a0/18/95-manifest.json", - "work_type": "Image", - "id": "9d0b2afa-ad07-49e9-aeb8-f20b54a01895", - "title": "Saint Vitus Cathedral. Detail: Saint Wenceslas" - }, - { - "accession_number": "Voyager:Lgf0090", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/5431242a-d407-4f4b-b0de-830f0b94681c/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/9f/be/cd/85/-0/d4/d-/45/38/-9/ae/6-/ad/78/f1/d8/25/87-manifest.json", - "work_type": "Image", - "id": "9fbecd85-0d4d-4538-9ae6-ad78f1d82587", - "title": "Mass of St. Gregory" - }, - { - "accession_number": "Voyager:302841", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/8b18545b-bb21-4fdb-b5fc-44814a2a5dc0/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/a2/1b/a3/b6/-1/38/8-/4f/e1/-9/78/7-/50/f6/79/d5/69/53-manifest.json", - "work_type": "Image", - "id": "a21ba3b6-1388-4fe1-9787-50f679d56953", - "title": "Grotto" - }, - { - "accession_number": "Voyager:103699", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/0a5c67a3-65a8-4b6c-98e6-9c400985edb2/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/a2/c9/6a/9a/-3/f3/e-/40/e0/-a/84/b-/8f/26/85/a6/f3/76-manifest.json", - "work_type": "Image", - "id": "a2c96a9a-3f3e-40e0-a84b-8f2685a6f376", - "title": "Aryballos" - }, - { - "accession_number": "Voyager:258502", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/dee22c42-7d6a-4a19-a473-cc3ef5eba844/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/a9/00/08/15/-c/28/5-/46/24/-8/e6/f-/55/60/51/22/1c/d8-manifest.json", - "work_type": "Image", - "id": "a9000815-c285-4624-8e6f-556051221cd8", - "title": "1100 N. Lake Shore Drive apartments. Exterior: facade" - }, - { - "accession_number": "Voyager:287220", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/00a0930a-2288-4ad0-8bbc-155427278d68/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/a9/08/7f/da/-7/5c/9-/4a/84/-a/1a/3-/64/c7/9a/4e/bb/d7-manifest.json", - "work_type": "Image", - "id": "a9087fda-75c9-4a84-a1a3-64c79a4ebbd7", - "title": "Portrait of Anton Francesco Doni" - }, - { - "accession_number": "Voyager:Lif1003", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/60c3d5da-c4ad-426b-a03e-0730cc1b65ba/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/a9/d1/17/cc/-3/af/8-/46/c5/-9/da/2-/d3/c3/a2/54/8c/f3-manifest.json", - "work_type": "Image", - "id": "a9d117cc-3af8-46c5-9da2-d3c3a2548cf3", - "title": "Venus of Urbino. Upper right detail with servants, dog" - }, - { - "accession_number": "Voyager:285707", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/8269c962-5027-4aa4-a4db-489195e04ade/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/ee/c7/1c/78/-c/86/5-/4b/71/-8/84/6-/60/b5/bc/1a/72/1f-manifest.json", - "work_type": "Image", - "id": "eec71c78-c865-4b71-8846-60b5bc1a721f", - "title": "Government River and Oceans North Customs (#1)" - }, - { - "accession_number": "Voyager:Mff1219", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/cb885f11-ceac-43cc-b8ee-add2440d542b/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/b5/b0/32/d9/-4/ee/0-/48/95/-8/c4/c-/69/6e/53/4f/be/28-manifest.json", - "work_type": "Image", - "id": "b5b032d9-4ee0-4895-8c4c-696e534fbe28", - "title": "Fete Champetre (unfinished). central detail" - }, - { - "accession_number": "Voyager:53936", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/c0b6140a-215c-44a3-a478-22899f76a4ae/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/bf/bf/8c/f5/-1/cf/9-/45/88/-a/69/8-/62/44/1a/56/04/76-manifest.json", - "work_type": "Image", - "id": "bfbf8cf5-1cf9-4588-a698-62441a560476", - "title": "Piazza Armerina. Roman villa: plan" - }, - { - "accession_number": "Voyager:Jta1002", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/8e95874f-bdce-4b44-bc7e-d73dd112ebc7/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/c7/72/ee/71/-b/5a/2-/4b/fa/-b/1b/9-/ba/9f/c1/6c/91/83-manifest.json", - "work_type": "Image", - "id": "c772ee71-b5a2-4bfa-b1b9-ba9fc16c9183", - "title": "Temple of Apollo: 4th c. BC, 1st, 2nd & 4th c. AD [under Caligula (37-41), Hadrian (117-138), and Julian the Apostate (361-363), never completed]. General from E, with Pronaos, columns" - }, - { - "accession_number": "Voyager:181297", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/37946b65-5379-4b18-a9d5-14ad19d00b48/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/cb/e9/a7/46/-b/92/5-/43/b4/-b/68/d-/e8/08/d0/48/b2/bc-manifest.json", - "work_type": "Image", - "id": "cbe9a746-b925-43b4-b68d-e808d048b2bc", - "title": "Brooks building. Exterior" - }, - { - "accession_number": "Voyager:115024", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/93d05a28-65fb-4a74-a3d1-be841e852178/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/e9/2e/32/93/-e/8b/7-/4d/cd/-8/97/7-/86/87/d1/26/c1/97-manifest.json", - "work_type": "Image", - "id": "e92e3293-e8b7-4dcd-8977-8687d126c197", - "title": "Montgomery Ward building (altered). Exterior: facade (with Statue of progress)" - }, - { - "accession_number": "Voyager:Mid0411", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/29e1ef95-97cd-4ff8-be7a-612139347f93/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/f1/f5/c0/d0/-a/23/c-/49/9c/-a/6b/c-/e6/20/32/60/6c/c2-manifest.json", - "work_type": "Image", - "id": "f1f5c0d0-a23c-499c-a6bc-e62032606cc2", - "title": "Tomb of Pope Gregory XII Boncompagni (r.1572-85). Det" - }, - { - "accession_number": "Voyager:39039", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/057b361b-b9a3-45ee-b748-f87b83d5e0ec/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/f9/06/98/ee/-0/a1/f-/48/cd/-9/4e/b-/fe/b8/e2/65/60/26-manifest.json", - "work_type": "Image", - "id": "f90698ee-0a1f-48cd-94eb-feb8e2656026", - "title": "Entrance to temple" - }, - { - "accession_number": "Voyager:1497", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/0cc6040f-a715-4a2b-8ac7-dcb28dbfb5d2/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/fd/ab/5c/24/-a/85/4-/4f/0c/-9/e9/f-/47/14/77/2d/74/5a-manifest.json", - "work_type": "Image", - "id": "fdab5c24-a854-4f0c-9e9f-4714772d745a", - "title": "St. Augustine in His Cell" - }, - { - "accession_number": "Voyager:123527", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/1ceaa647-1b1b-4e9d-8e3f-2a1539af3410/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/ff/52/0a/e7/-1/62/1-/4b/59/-9/da/7-/6c/f1/04/50/b7/17-manifest.json", - "work_type": "Image", - "id": "ff520ae7-1621-4b59-9da7-6cf10450b717", - "title": "Undernourished Child of the Tenements" - }, - { - "accession_number": "BFMF_B15_F08_006_016n", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/55c4ff8f-f3fe-46b5-a023-b78d919958de/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/25/01/42/40/-8/cd/a-/4b/d1/-8/20/3-/38/0b/d1/95/de/38-manifest.json", - "work_type": "Image", - "id": "25014240-8cda-4bd1-8203-380bd195de38", - "title": "J.E. Mainer's Mountaineers" - }, - { - "accession_number": "BFMF_B39_F22_011", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/25a9ff7f-6abb-4a12-ae00-6b6bc32619af/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/be/36/69/d7/-4/61/d-/47/1d/-a/ea/d-/f7/0f/e5/ca/2f/d6-manifest.json", - "work_type": "Image", - "id": "be3669d7-461d-471d-aead-f70fe5ca2fd6", - "title": "Letter from Mike Seeger to Barry Olivier" - }, - { - "accession_number": "BFMF_B06_F04_011_001n", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/46ebd0cf-2cfa-441f-a1dc-2a0e0137d0a8/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/43/70/c3/84/-e/5f/6-/4a/2a/-b/2e/f-/9f/6e/ff/1e/72/fe-manifest.json", - "work_type": "Image", - "id": "4370c384-e5f6-4a2a-b2ef-9f6eff1e72fe", - "title": "Jefferson Airplane" - }, - { - "accession_number": "BFMF_B19_F07_003_042n", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/73fad1b2-2858-4eea-80d6-4ccb3f42ad3b/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/45/0e/f3/a0/-9/1d/f-/45/95/-b/54/8-/fe/bc/b7/ab/c5/04-manifest.json", - "work_type": "Image", - "id": "450ef3a0-91df-4595-b548-febcb7abc504", - "title": "Dev Singh, KPFA session" - }, - { - "accession_number": "BFMF_B35_F15_007", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/5924ce28-6876-4fe6-8ef7-d294dcd380cd/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/58/6c/9e/b6/-9/e2/7-/4f/c4/-b/f6/9-/a2/01/a7/05/41/ff-manifest.json", - "work_type": "Image", - "id": "586c9eb6-9e27-4fc4-bf69-a201a70541ff", - "title": "Actor's Workshop clippings" - }, - { - "accession_number": "BFMF_B28_F07_023", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/e675f516-6cb4-4806-8030-ea036540c272/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/ab/f0/e1/e7/-4/b5/6-/40/38/-a/b4/e-/b7/06/3d/e2/ba/32-manifest.json", - "work_type": "Image", - "id": "abf0e1e7-4b56-4038-ab4e-b7063de2ba32", - "title": "Two articles about \"war tax\" protest" - }, - { - "accession_number": "BFMF_B17_F01_028", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/bcc3bf64-47bd-480b-ab3e-d269b2d33687/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/b3/46/b4/b4/-e/12/0-/40/69/-9/aa/6-/15/3d/51/76/28/a4-manifest.json", - "work_type": "Image", - "id": "b346b4b4-e120-4069-9aa6-153d517628a4", - "title": "Pete Seeger, 1966 Berkeley Folk Music Festival" - }, - { - "accession_number": "BFMF_B49_F05_001", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/0aed3de4-8fe1-405e-a929-907fc296b30c/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/d2/b3/98/bc/-6/7d/0-/4b/a6/-b/61/f-/99/c3/91/c4/fa/53-manifest.json", - "work_type": "Image", - "id": "d2b398bc-67d0-4ba6-b61f-99c391c4fa53", - "title": "Fifth Annual Folk Music Festival brochure" - }, - { - "accession_number": "BFMF_B20_F01_010_022n", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/450dc666-7258-4404-8860-f8e73c5690dd/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/ba/34/b5/ed/-8/0a/c-/4d/a5/-8/5c/9-/61/bd/7c/00/d0/86-manifest.json", - "work_type": "Image", - "id": "ba34b5ed-80ac-4da5-85c9-61bd7c00d086", - "title": "Ian and Sylvia, San Francisco State Folk Festival" - } - ], - "pagination": { - "query_url": "https://dcapi.rdc-staging.library.northwestern.edu/api/v2/search?searchToken=N4IgRg9gJgniBcoDOBLAXgUwQFgAwBoQB9JCAVwCcBjLeAbRAEMqalUIA7IjsgWzAwUQhFFGEgUkgGZFejDiikYkAF3EqUKgDZZCKgBZ8wHRii3iA7hAoBrIipgAHLAF1CARzKC4icBAjmvrxkqgh0LgC%2BUYS80BhaSGEgVraJbiBS1nJq8CBQGFKMZFpqhBCOGpyJiFFAA", - "current_page": 3, - "limit": 40, - "offset": 80, - "total_hits": 575, - "total_pages": 15, - "prev_url": "https://dcapi.rdc-staging.library.northwestern.edu/api/v2/search?searchToken=N4IgRg9gJgniBcoDOBLAXgUwQFgAwBoQB9JCAVwCcBjLeAbRAEMqalUIA7IjsgWzAwUQhFFGEgUkgGZFejDiikYkAF3EqUKgDZZCKgBZ8wHRii3iA7hAoBrIipgAHLAF1CARzKC4icBAjmvrxkqgh0LgC%2BUYS80BhaSGEgVraJbiBS1nJq8CBQGFKMZFpqhBCOGpyJiFFAA&page=2", - "next_url": "https://dcapi.rdc-staging.library.northwestern.edu/api/v2/search?searchToken=N4IgRg9gJgniBcoDOBLAXgUwQFgAwBoQB9JCAVwCcBjLeAbRAEMqalUIA7IjsgWzAwUQhFFGEgUkgGZFejDiikYkAF3EqUKgDZZCKgBZ8wHRii3iA7hAoBrIipgAHLAF1CARzKC4icBAjmvrxkqgh0LgC%2BUYS80BhaSGEgVraJbiBS1nJq8CBQGFKMZFpqhBCOGpyJiFFAA&page=4" - }, - "info": {} -} diff --git a/cypress/fixtures/search/response1.js b/cypress/fixtures/search/response1.js deleted file mode 100644 index d50514c9..00000000 --- a/cypress/fixtures/search/response1.js +++ /dev/null @@ -1,64 +0,0 @@ -/** - * This must be a IIFE when using a .js file for a Cypress fixture. - * Or something that Cypress will process via eval() - */ - -/* eslint sort-keys: 0 */ -// prettier-ignore -(() => { - - const numRecordsToCreate = 20; - const data = []; - - /** - * This is a static image in DC Production that we assume will always be available - */ - const thumbnailUrl = - "https://iiif.stack.rdc.library.northwestern.edu/iiif/2/76c26a0a-0454-48d8-a225-9fc26735315b/full/pct:10/0/default.jpg"; - - const awsMockManifestUrl = - "https://yt8thudrak.execute-api.us-east-1.amazonaws.com/manifests"; - - - - /** - * Dynamically build up JSON response data from our testing API endpoint - */ - for (let i = 1; i < numRecordsToCreate; i++) { - const id = i; - let workType = "Image"; - if (id % 5 === 0) { - workType = "Audio"; - } else if (id % 6 === 0) { - workType = "Video"; - } - - data.push({ - accession_number: `accessionNum_${i}`, - thumbnail: thumbnailUrl, - - // This will bypass a staging manifest route, but do we need to mock it? - iiif_manifest: `${awsMockManifestUrl}/${id}`, - - work_type: workType, - id, - title: `${workType} ${i}`, - }); - } - - const response = { - data, - pagination: { - query_url: - "https://pylxu5f2l2.execute-api.us-east-1.amazonaws.com/v2/search?searchToken=N4IgRg9gJgniBcoDOBLAXgUwQFgAwBoQB9JCAVwCcBjLeAbRAEMqalUIA7IjsgWzAwUQhFFGEgUkgGZFejDiikYkAF3EqUKgDZZCKgBZ8wHRii3iA7hAoBrIipgAHLAF1CARzKC4icBAjmvrxkqgh0yCi8jjpEnt4kKhQoHADmCKBQGFKMZFoqRBDOFIwq1gggZYRSKBhaUEhhIBraGAB6AKzijFpa9hgAHmqE3b1UnIkBOlBEWowCWg3DPUSiDW4gcRQ%2BIFL%2BAH4AjAAEAD5HuxAAVCAAvjcudzeEvNC1DfQgVrZrVdZyavAQJlsrkhhVHBpOO9gHcgA", - current_page: 1, - limit: 40, - offset: 0, - total_hits: numRecordsToCreate, - total_pages: 1, - }, - info: {}, - }; - - return response; -})() diff --git a/cypress/fixtures/search/response1.json b/cypress/fixtures/search/response1.json deleted file mode 100644 index 9c14dedc..00000000 --- a/cypress/fixtures/search/response1.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "data": [ - { - "accession_number": "0.680069183", - "thumbnail": "https://iiif.stack.rdc.library.northwestern.edu/iiif/2/76c26a0a-0454-48d8-a225-9fc26735315b/full/pct:10/0/default.jpg", - "iiif_manifest": "https://yt8thudrak.execute-api.us-east-1.amazonaws.com/manifests/1", - "work_type": "Image", - "id": "1", - "title": "It's Gonna Be May (For Brendan)" - }, - { - "accession_number": "Accession:JR_150_35", - "thumbnail": "https://iiif.stack.rdc.library.northwestern.edu/iiif/2/76c26a0a-0454-48d8-a225-9fc26735315b/full/pct:10/0/default.jpg", - "iiif_manifest": "https://yt8thudrak.execute-api.us-east-1.amazonaws.com/manifests/2", - "work_type": "Image", - "id": "2", - "title": "Chicago Jazz Musicians -- for film by Chris Vail '71" - }, - { - "accession_number": "Voyager:58249", - "thumbnail": "https://iiif.stack.rdc.library.northwestern.edu/iiif/2/76c26a0a-0454-48d8-a225-9fc26735315b/full/pct:10/0/default.jpg", - "iiif_manifest": "https://yt8thudrak.execute-api.us-east-1.amazonaws.com/manifests/3", - "work_type": "Image", - "id": "3", - "title": "Staff for Shango" - }, - { - "accession_number": "0.5156926", - "thumbnail": null, - "iiif_manifest": "https://yt8thudrak.execute-api.us-east-1.amazonaws.com/manifests/4", - "work_type": "Audio", - "id": "4", - "title": "It's Gonna Be May (For Brendan)" - }, - { - "accession_number": "2022_03_24_02", - "thumbnail": "https://iiif.stack.rdc.library.northwestern.edu/iiif/2/76c26a0a-0454-48d8-a225-9fc26735315b/full/pct:10/0/default.jpg", - "iiif_manifest": "https://yt8thudrak.execute-api.us-east-1.amazonaws.com/manifests/5", - "work_type": "Video", - "id": "5", - "title": "Ima video" - } - ], - "pagination": { - "query_url": "https://pylxu5f2l2.execute-api.us-east-1.amazonaws.com/v2/search?searchToken=N4IgRg9gJgniBcoDOBLAXgUwQFgAwBoQB9JCAVwCcBjLeAbRAEMqalUIA7IjsgWzAwUQhFFGEgUkgGZFejDiikYkAF3EqUKgDZZCKgBZ8wHRii3iA7hAoBrIipgAHLAF1CARzKC4icBAjmvrxkqgh0yCi8jjpEnt4kKhQoHADmCKBQGFKMZFoqRBDOFIwq1gggZYRSKBhaUEhhIBraGAB6AKzijFpa9hgAHmqE3b1UnIkBOlBEWowCWg3DPUSiDW4gcRQ%2BIFL%2BAH4AjAAEAD5HuxAAVCAAvjcudzeEvNC1DfQgVrZrVdZyavAQJlsrkhhVHBpOO9gHcgA", - "current_page": 1, - "limit": 40, - "offset": 0, - "total_hits": 5, - "total_pages": 1 - }, - "info": {} -} diff --git a/cypress/support/commands.ts b/cypress/support/commands.ts deleted file mode 100644 index 95857aea..00000000 --- a/cypress/support/commands.ts +++ /dev/null @@ -1,37 +0,0 @@ -/// -// *********************************************** -// This example commands.ts shows you how to -// create various custom commands and overwrite -// existing commands. -// -// For more comprehensive examples of custom -// commands please read more here: -// https://on.cypress.io/custom-commands -// *********************************************** -// -// -// -- This is a parent command -- -// Cypress.Commands.add('login', (email, password) => { ... }) -// -// -// -- This is a child command -- -// Cypress.Commands.add('drag', { prevSubject: 'element'}, (subject, options) => { ... }) -// -// -// -- This is a dual command -- -// Cypress.Commands.add('dismiss', { prevSubject: 'optional'}, (subject, options) => { ... }) -// -// -// -- This will overwrite an existing command -- -// Cypress.Commands.overwrite('visit', (originalFn, url, options) => { ... }) -// -// declare global { -// namespace Cypress { -// interface Chainable { -// login(email: string, password: string): Chainable -// drag(subject: string, options?: Partial): Chainable -// dismiss(subject: string, options?: Partial): Chainable -// visit(originalFn: CommandOriginalFn, url: string, options: Partial): Chainable -// } -// } -// } diff --git a/cypress/support/e2e.ts b/cypress/support/e2e.ts deleted file mode 100644 index f80f74f8..00000000 --- a/cypress/support/e2e.ts +++ /dev/null @@ -1,20 +0,0 @@ -// *********************************************************** -// This example support/e2e.ts is processed and -// loaded automatically before your test files. -// -// This is a great place to put global configuration and -// behavior that modifies Cypress. -// -// You can change the location of this file or turn off -// automatically serving support files with the -// 'supportFile' configuration option. -// -// You can read more here: -// https://on.cypress.io/configuration -// *********************************************************** - -// Import commands.js using ES2015 syntax: -import './commands' - -// Alternatively you can use CommonJS syntax: -// require('./commands') \ No newline at end of file diff --git a/cypress/support/index.ts b/cypress/support/index.ts deleted file mode 100644 index 9b1b1906..00000000 --- a/cypress/support/index.ts +++ /dev/null @@ -1,24 +0,0 @@ -/* eslint-disable @typescript-eslint/no-namespace */ - -// in cypress/support/index.ts -// load type definitions that come with Cypress module -/// - -export {}; - -declare global { - namespace Cypress { - interface Chainable { - /** - * Custom command to select DOM element by data-testid attribute. - * @example cy.dataTestId('submit-button') - */ - dataTestId(value: string): Chainable; - } - } -} - -// @ts-ignore -Cypress.Commands.add("dataTestId", (value) => { - return cy.get(`[data-testid=${value}]`); -}); diff --git a/cypress/tsconfig.json b/cypress/tsconfig.json deleted file mode 100644 index 18edb199..00000000 --- a/cypress/tsconfig.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "compilerOptions": { - "target": "es5", - "lib": ["es5", "dom"], - "types": ["cypress", "node"] - }, - "include": ["**/*.ts"] -} diff --git a/jest.config.js b/jest.config.js index 4a3ee711..a2fd960e 100644 --- a/jest.config.js +++ b/jest.config.js @@ -18,6 +18,7 @@ const customJestConfig = { }, setupFilesAfterEnv: ["/jest.setup.js"], testEnvironment: "jest-environment-jsdom", + testPathIgnorePatterns: ["/node_modules/", "/tests/"], }; // createJestConfig is exported this way to ensure that next/jest can load the Next.js config which is async diff --git a/package-lock.json b/package-lock.json index f6088d0c..85f92e52 100644 --- a/package-lock.json +++ b/package-lock.json @@ -42,6 +42,7 @@ "devDependencies": { "@elastic/elasticsearch": "7.17", "@iiif/presentation-3": "^1.1.3", + "@playwright/test": "^1.40.1", "@testing-library/jest-dom": "^6.1.2", "@testing-library/react": "^15.0.2", "@testing-library/user-event": "^14.0.4", @@ -52,7 +53,7 @@ "@types/react-sticky-el": "^1.0.3", "@typescript-eslint/eslint-plugin": "^6.3.0", "babel-jest": "^29.6.2", - "cypress": "^12.4.0", + "dotenv": "^16.4.5", "eslint": "^8.47.0", "eslint-config-next": "^14.1.3", "eslint-config-prettier": "^9.0.0", @@ -64,7 +65,8 @@ "next-router-mock": "^0.9.1-beta.0", "prettier": "^3.0.1", "ts-jest": "^29.0.5", - "typescript": "^5.4.2" + "typescript": "^5.4.2", + "wait-on": "^7.2.0" }, "optionalDependencies": { "fsevents": "^2.3.2" @@ -602,87 +604,6 @@ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "dev": true }, - "node_modules/@colors/colors": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", - "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/@cypress/request": { - "version": "2.88.12", - "resolved": "https://registry.npmjs.org/@cypress/request/-/request-2.88.12.tgz", - "integrity": "sha512-tOn+0mDZxASFM+cuAP9szGUGPI1HwWVSvdzm7V4cCsPdFTx6qMj29CwaQmRAMIEhORIUBFBsYROYJcveK4uOjA==", - "dev": true, - "dependencies": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "http-signature": "~1.3.6", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "performance-now": "^2.1.0", - "qs": "~6.10.3", - "safe-buffer": "^5.1.2", - "tough-cookie": "^4.1.3", - "tunnel-agent": "^0.6.0", - "uuid": "^8.3.2" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/@cypress/request/node_modules/form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dev": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 0.12" - } - }, - "node_modules/@cypress/request/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true, - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/@cypress/xvfb": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@cypress/xvfb/-/xvfb-1.2.4.tgz", - "integrity": "sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q==", - "dev": true, - "dependencies": { - "debug": "^3.1.0", - "lodash.once": "^4.1.1" - } - }, - "node_modules/@cypress/xvfb/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, "node_modules/@discoveryjs/json-ext": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", @@ -863,6 +784,21 @@ "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.1.tgz", "integrity": "sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q==" }, + "node_modules/@hapi/hoek": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", + "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==", + "dev": true + }, + "node_modules/@hapi/topo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", + "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", + "dev": true, + "dependencies": { + "@hapi/hoek": "^9.0.0" + } + }, "node_modules/@honeybadger-io/core": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/@honeybadger-io/core/-/core-5.2.0.tgz", @@ -1052,23 +988,6 @@ "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "node_modules/@isaacs/cliui/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/@isaacs/cliui/node_modules/strip-ansi": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", @@ -1914,9 +1833,9 @@ } }, "node_modules/@next/bundle-analyzer": { - "version": "14.2.1", - "resolved": "https://registry.npmjs.org/@next/bundle-analyzer/-/bundle-analyzer-14.2.1.tgz", - "integrity": "sha512-Qwy3Mu/dfnu4rs2xzCy7gKZlwzZzYtiq/rjPcK/7xq3BHSyLthkHf1NAF8NNfjVTouDwo2KchisHrmAamUNWWw==", + "version": "14.2.3", + "resolved": "https://registry.npmjs.org/@next/bundle-analyzer/-/bundle-analyzer-14.2.3.tgz", + "integrity": "sha512-Z88hbbngMs7njZKI8kTJIlpdLKYfMSLwnsqYe54AP4aLmgL70/Ynx/J201DQ+q2Lr6FxFw1uCeLGImDrHOl2ZA==", "dependencies": { "webpack-bundle-analyzer": "4.10.1" } @@ -1927,18 +1846,18 @@ "integrity": "sha512-Yac/bV5sBGkkEXmAX5FWPS9Mmo2rthrOPRQQNfycJPkjUAUclomCPH7QFVCDQ4Mp2k2K1SSM6m0zrxYrOwtFQw==" }, "node_modules/@next/eslint-plugin-next": { - "version": "14.2.1", - "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-14.2.1.tgz", - "integrity": "sha512-Fp+mthEBjkn8r9qd6o4JgxKp0IDEzW0VYHD8ZC05xS5/lFNwHKuOdr2kVhWG7BQCO9L6eeepshM1Wbs2T+LgSg==", + "version": "14.2.3", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-14.2.3.tgz", + "integrity": "sha512-L3oDricIIjgj1AVnRdRor21gI7mShlSwU/1ZGHmqM3LzHhXXhdkrfeNY5zif25Bi5Dd7fiJHsbhoZCHfXYvlAw==", "dev": true, "dependencies": { "glob": "10.3.10" } }, "node_modules/@next/font": { - "version": "14.2.1", - "resolved": "https://registry.npmjs.org/@next/font/-/font-14.2.1.tgz", - "integrity": "sha512-Ycpo+xb8cGUHhoXaz1+ODE2b278ZoeB5BbPzoHRPpQcm7zwBc/vdBanEQIbCzWIbCmnSWc60g17moJWeWAtfNw==", + "version": "14.2.3", + "resolved": "https://registry.npmjs.org/@next/font/-/font-14.2.3.tgz", + "integrity": "sha512-u35UstQmvl3Yrvv2MOi6RcXMH3xDtmWTXcvkYcC/vCZHLqj/5JQ5UyFRf5saDWxFlZIkEh8HCzwNGoiHIr1/NQ==", "peerDependencies": { "next": "*" } @@ -2131,6 +2050,23 @@ "react-dom": "^16.8 || ^17.0 || ^18.0" } }, + "node_modules/@nulib/use-markdown": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@nulib/use-markdown/-/use-markdown-0.2.1.tgz", + "integrity": "sha512-gez/Hd3nku/MZi1ZOx6huwcMDkBpfuSIQX6gMclpf8N+w8QKvFt1sGPowp19H2aEv8FI9f5ao/9HID5jYeNk3A==", + "dependencies": { + "rehype-raw": "^7.0.0", + "rehype-stringify": "^10.0.0", + "remark-gfm": "^4.0.0", + "remark-parse": "^11.0.0", + "remark-rehype": "^11.1.0", + "unified": "^11.0.4" + }, + "peerDependencies": { + "react": "^18.2.0", + "react-dom": "^18.2.0" + } + }, "node_modules/@pkgjs/parseargs": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", @@ -2141,6 +2077,21 @@ "node": ">=14" } }, + "node_modules/@playwright/test": { + "version": "1.43.1", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.43.1.tgz", + "integrity": "sha512-HgtQzFgNEEo4TE22K/X7sYTYNqEMMTZmFS8kTq6m8hXj+m1D8TgwgIbumHddJa9h4yl4GkKb8/bgAl2+g7eDgA==", + "dev": true, + "dependencies": { + "playwright": "1.43.1" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=16" + } + }, "node_modules/@polka/url": { "version": "1.0.0-next.25", "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.25.tgz", @@ -3404,13 +3355,14 @@ "dev": true }, "node_modules/@samvera/clover-iiif": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/@samvera/clover-iiif/-/clover-iiif-2.7.4.tgz", - "integrity": "sha512-EyRjGxXKMUoe9g4UWT8d1ybZaS71IXzXJOe3jNweWQt/Bgh1kDtTKV40lsRbYhAbtBvHmrkDOuGXN6sbsd8ZXA==", + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/@samvera/clover-iiif/-/clover-iiif-2.8.0.tgz", + "integrity": "sha512-aB3f9x5EnjQnwDB4yR67Wg2INE9PZxRcy8KWS+rRTsMhDTWl4d9yCD991PPQV6h3I+JKb2PpQe4ebQ/TeJCmZA==", "dependencies": { "@iiif/parser": "^1.1.2", "@iiif/vault": "^0.9.22", "@iiif/vault-helpers": "^0.10.0", + "@nulib/use-markdown": "^0.2.1", "@radix-ui/react-aspect-ratio": "^1.0.3", "@radix-ui/react-collapsible": "^1.0.3", "@radix-ui/react-form": "^0.0.3", @@ -3484,6 +3436,27 @@ "react-dom": "^16.13.1 || ^17 || ^18" } }, + "node_modules/@sideway/address": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz", + "integrity": "sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==", + "dev": true, + "dependencies": { + "@hapi/hoek": "^9.0.0" + } + }, + "node_modules/@sideway/formula": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", + "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==", + "dev": true + }, + "node_modules/@sideway/pinpoint": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", + "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==", + "dev": true + }, "node_modules/@sinclair/typebox": { "version": "0.27.8", "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", @@ -3732,9 +3705,9 @@ } }, "node_modules/@testing-library/react": { - "version": "15.0.2", - "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-15.0.2.tgz", - "integrity": "sha512-5mzIpuytB1ctpyywvyaY2TAAUQVCZIGqwiqFQf6u9lvj/SJQepGUzNV18Xpk+NLCaCE2j7CWrZE0tEf9xLZYiQ==", + "version": "15.0.4", + "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-15.0.4.tgz", + "integrity": "sha512-Fw/LM1emOHKfCxv5R0tz+25TOtiMt0o5Np1zJmb4LbSacOagXQX4ooAaHiJfGUMe+OjUk504BX11W+9Z8CvyZA==", "dev": true, "dependencies": { "@babel/runtime": "^7.12.5", @@ -3840,10 +3813,18 @@ "@types/node": "*" } }, + "node_modules/@types/debug": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", + "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", + "dependencies": { + "@types/ms": "*" + } + }, "node_modules/@types/eslint": { - "version": "8.56.9", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.9.tgz", - "integrity": "sha512-W4W3KcqzjJ0sHg2vAq9vfml6OhsJ53TcUjUqfzzZf/EChUtwspszj/S0pzMxnfRcO55/iGq47dscXw71Fxc4Zg==", + "version": "8.56.10", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.10.tgz", + "integrity": "sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==", "peer": true, "dependencies": { "@types/estree": "*", @@ -3902,6 +3883,14 @@ "@types/node": "*" } }, + "node_modules/@types/hast": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", + "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", + "dependencies": { + "@types/unist": "*" + } + }, "node_modules/@types/http-errors": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", @@ -3995,11 +3984,24 @@ "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", "dev": true }, + "node_modules/@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dependencies": { + "@types/unist": "*" + } + }, "node_modules/@types/mime": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==" }, + "node_modules/@types/ms": { + "version": "0.7.34", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz", + "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==" + }, "node_modules/@types/node": { "version": "20.12.7", "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.7.tgz", @@ -4083,18 +4085,6 @@ "@types/send": "*" } }, - "node_modules/@types/sinonjs__fake-timers": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.1.tgz", - "integrity": "sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g==", - "dev": true - }, - "node_modules/@types/sizzle": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.8.tgz", - "integrity": "sha512-0vWLNK2D5MT9dg0iOo8GlKguPAU02QjmZitPEsXRuJXU/OGIOt9vT9Fc26wtYuavLxtO45v9PGleoL9Z0k1LHg==", - "dev": true - }, "node_modules/@types/stack-utils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", @@ -4107,6 +4097,11 @@ "integrity": "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==", "dev": true }, + "node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==" + }, "node_modules/@types/yargs": { "version": "17.0.32", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", @@ -4122,16 +4117,6 @@ "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": "6.21.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz", @@ -4205,7 +4190,6 @@ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.21.0.tgz", "integrity": "sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==", "dev": true, - "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "6.21.0", "@typescript-eslint/types": "6.21.0", @@ -4425,8 +4409,7 @@ "node_modules/@ungap/structured-clone": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", - "dev": true + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==" }, "node_modules/@webassemblyjs/ast": { "version": "1.12.1", @@ -4658,19 +4641,6 @@ "node": ">= 6.0.0" } }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -4695,15 +4665,6 @@ "ajv": "^6.9.1" } }, - "node_modules/ansi-colors": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/ansi-escapes": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", @@ -4753,26 +4714,6 @@ "node": ">= 8" } }, - "node_modules/arch": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", - "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, "node_modules/argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -4970,15 +4911,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/asn1": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", - "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", - "dev": true, - "dependencies": { - "safer-buffer": "~2.1.0" - } - }, "node_modules/assert-plus": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", @@ -4993,35 +4925,11 @@ "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==", "dev": true }, - "node_modules/astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "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/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, - "node_modules/at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" - } - }, "node_modules/available-typed-arrays": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", @@ -5037,21 +4945,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/aws4": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz", - "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==", - "dev": true - }, "node_modules/axe-core": { "version": "4.7.0", "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.7.0.tgz", @@ -5241,53 +5134,21 @@ "@babel/core": "^7.0.0" } }, + "node_modules/bail": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", - "dev": true, - "dependencies": { - "tweetnacl": "^0.14.3" - } - }, - "node_modules/blob-util": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/blob-util/-/blob-util-2.0.2.tgz", - "integrity": "sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ==", - "dev": true - }, - "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/brace-expansion": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", @@ -5361,39 +5222,6 @@ "node-int64": "^0.4.0" } }, - "node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", - "dev": true, - "engines": { - "node": "*" - } - }, "node_modules/buffer-equal-constant-time": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", @@ -5415,15 +5243,6 @@ "node": ">=10.16.0" } }, - "node_modules/cachedir": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.4.0.tgz", - "integrity": "sha512-9EtFOZR8g22CL7BWjJ9BUx1+A/djkofnyW3aOXZORNW2kxoUpx2h+uN2cOqwPmFhnpVmxg+KW2OjOSgChTEvsQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/call-bind": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", @@ -5462,9 +5281,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001610", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001610.tgz", - "integrity": "sha512-QFutAY4NgaelojVMjY63o6XlZyORPaLfyMnsl3HgnWdJUcX6K0oaJymHjH8PT5Gk7sTm8rvC/c5COUQKXqmOMA==", + "version": "1.0.30001612", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001612.tgz", + "integrity": "sha512-lFgnZ07UhaCcsSZgWW0K5j4e69dK1u/ltrL9lTUiFOwNHs12S3UMIEYgBV0Z6C6hRDev7iRnMzzYmKabYdXF9g==", "funding": [ { "type": "opencollective", @@ -5480,11 +5299,14 @@ } ] }, - "node_modules/caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", - "dev": true + "node_modules/ccount": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", + "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, "node_modules/chalk": { "version": "2.4.2", @@ -5509,23 +5331,41 @@ "node": ">=10" } }, - "node_modules/check-more-types": { - "version": "2.24.0", - "resolved": "https://registry.npmjs.org/check-more-types/-/check-more-types-2.24.0.tgz", - "integrity": "sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==", - "dev": true, - "engines": { - "node": ">= 0.8.0" + "node_modules/character-entities": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", + "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "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==", - "peer": true, - "engines": { - "node": ">=6.0" - } + "node_modules/character-entities-html4": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", + "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-legacy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "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==", + "peer": true, + "engines": { + "node": ">=6.0" + } }, "node_modules/ci-info": { "version": "3.9.0", @@ -5553,58 +5393,6 @@ "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz", "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==" }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cli-table3": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.4.tgz", - "integrity": "sha512-Lm3L0p+/npIQWNIiyF/nAn7T5dnOwR3xNTHXYEBFBFVPXzCVNZ5lqEC/1eo/EVfpDsQ1I+TX4ORPQgp+UI0CRw==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0" - }, - "engines": { - "node": "10.* || >= 12.*" - }, - "optionalDependencies": { - "@colors/colors": "1.5.0" - } - }, - "node_modules/cli-truncate": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", - "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", - "dev": true, - "dependencies": { - "slice-ansi": "^3.0.0", - "string-width": "^4.2.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/client-only": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", @@ -5657,6 +5445,26 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "node_modules/cliui/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/cliui/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/cliui/node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", @@ -5705,12 +5513,6 @@ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "dev": true }, - "node_modules/colorette": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", - "dev": true - }, "node_modules/combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -5722,22 +5524,21 @@ "node": ">= 0.8" } }, - "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/comma-separated-tokens": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", + "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/common-tags": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", - "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", - "dev": true, + "node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", "engines": { - "node": ">=4.0.0" + "node": ">= 10" } }, "node_modules/concat-map": { @@ -5898,212 +5699,12 @@ "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", "devOptional": true }, - "node_modules/cypress": { - "version": "12.17.4", - "resolved": "https://registry.npmjs.org/cypress/-/cypress-12.17.4.tgz", - "integrity": "sha512-gAN8Pmns9MA5eCDFSDJXWKUpaL3IDd89N9TtIupjYnzLSmlpVr+ZR+vb4U/qaMp+lB6tBvAmt7504c3Z4RU5KQ==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "@cypress/request": "2.88.12", - "@cypress/xvfb": "^1.2.4", - "@types/node": "^16.18.39", - "@types/sinonjs__fake-timers": "8.1.1", - "@types/sizzle": "^2.3.2", - "arch": "^2.2.0", - "blob-util": "^2.0.2", - "bluebird": "^3.7.2", - "buffer": "^5.6.0", - "cachedir": "^2.3.0", - "chalk": "^4.1.0", - "check-more-types": "^2.24.0", - "cli-cursor": "^3.1.0", - "cli-table3": "~0.6.1", - "commander": "^6.2.1", - "common-tags": "^1.8.0", - "dayjs": "^1.10.4", - "debug": "^4.3.4", - "enquirer": "^2.3.6", - "eventemitter2": "6.4.7", - "execa": "4.1.0", - "executable": "^4.1.1", - "extract-zip": "2.0.1", - "figures": "^3.2.0", - "fs-extra": "^9.1.0", - "getos": "^3.2.1", - "is-ci": "^3.0.0", - "is-installed-globally": "~0.4.0", - "lazy-ass": "^1.6.0", - "listr2": "^3.8.3", - "lodash": "^4.17.21", - "log-symbols": "^4.0.0", - "minimist": "^1.2.8", - "ospath": "^1.2.2", - "pretty-bytes": "^5.6.0", - "process": "^0.11.10", - "proxy-from-env": "1.0.0", - "request-progress": "^3.0.0", - "semver": "^7.5.3", - "supports-color": "^8.1.1", - "tmp": "~0.2.1", - "untildify": "^4.0.0", - "yauzl": "^2.10.0" - }, - "bin": { - "cypress": "bin/cypress" - }, - "engines": { - "node": "^14.0.0 || ^16.0.0 || >=18.0.0" - } - }, - "node_modules/cypress/node_modules/@types/node": { - "version": "16.18.96", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.96.tgz", - "integrity": "sha512-84iSqGXoO+Ha16j8pRZ/L90vDMKX04QTYMTfYeE1WrjWaZXuchBehGUZEpNgx7JnmlrIHdnABmpjrQjhCnNldQ==", - "dev": true - }, - "node_modules/cypress/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/cypress/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/cypress/node_modules/chalk/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cypress/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/cypress/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/cypress/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/cypress/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/cypress/node_modules/proxy-from-env": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz", - "integrity": "sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A==", - "dev": true - }, - "node_modules/cypress/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==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/cypress/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/cypress/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/damerau-levenshtein": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", "dev": true }, - "node_modules/dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", - "dev": true, - "dependencies": { - "assert-plus": "^1.0.0" - }, - "engines": { - "node": ">=0.10" - } - }, "node_modules/data-uri-to-buffer": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", @@ -6177,12 +5778,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/dayjs": { - "version": "1.11.10", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.10.tgz", - "integrity": "sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==", - "dev": true - }, "node_modules/debounce": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", @@ -6192,7 +5787,6 @@ "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, "dependencies": { "ms": "2.1.2" }, @@ -6208,8 +5802,7 @@ "node_modules/debug/node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "node_modules/decimal.js": { "version": "10.4.3", @@ -6217,6 +5810,18 @@ "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==", "dev": true }, + "node_modules/decode-named-character-reference": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz", + "integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==", + "dependencies": { + "character-entities": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/dedent": { "version": "1.5.3", "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.3.tgz", @@ -6291,7 +5896,6 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", - "dev": true, "engines": { "node": ">=6" } @@ -6310,6 +5914,18 @@ "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz", "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==" }, + "node_modules/devlop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", + "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", + "dependencies": { + "dequal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/diff-sequences": { "version": "29.6.3", "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", @@ -6332,15 +5948,15 @@ } }, "node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, "dependencies": { "esutils": "^2.0.2" }, "engines": { - "node": ">=0.10.0" + "node": ">=6.0.0" } }, "node_modules/dom-accessibility-api": { @@ -6413,6 +6029,18 @@ "url": "https://github.com/fb55/domutils?sponsor=1" } }, + "node_modules/dotenv": { + "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://dotenvx.com" + } + }, "node_modules/duplexer": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", @@ -6424,16 +6052,6 @@ "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", "dev": true }, - "node_modules/ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", - "dev": true, - "dependencies": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, "node_modules/ecdsa-sig-formatter": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", @@ -6443,9 +6061,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.738", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.738.tgz", - "integrity": "sha512-lwKft2CLFztD+vEIpesrOtCrko/TFnEJlHFdRhazU7Y/jx5qc4cqsocfVrBg4So4gGe9lvxnbLIoev47WMpg+A==" + "version": "1.4.748", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.748.tgz", + "integrity": "sha512-VWqjOlPZn70UZ8FTKUOkUvBLeTQ0xpty66qV0yJcAGY2/CthI4xyW9aEozRVtuwv3Kpf5xTesmJUcPwuJmgP4A==" }, "node_modules/emittery": { "version": "0.13.1", @@ -6465,15 +6083,6 @@ "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", "dev": true }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "dependencies": { - "once": "^1.4.0" - } - }, "node_modules/enhanced-resolve": { "version": "5.16.0", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.16.0.tgz", @@ -6486,19 +6095,6 @@ "node": ">=10.13.0" } }, - "node_modules/enquirer": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", - "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", - "dev": true, - "dependencies": { - "ansi-colors": "^4.1.1", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8.6" - } - }, "node_modules/entities": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", @@ -6601,14 +6197,14 @@ } }, "node_modules/es-iterator-helpers": { - "version": "1.0.18", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.18.tgz", - "integrity": "sha512-scxAJaewsahbqTYrGKJihhViaM6DDZDDoucfvzNbK0pOren1g/daDQ3IAhzn+1G14rBG7w+i5N+qul60++zlKA==", + "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": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", - "es-abstract": "^1.23.0", + "es-abstract": "^1.23.3", "es-errors": "^1.3.0", "es-set-tostringtag": "^2.0.3", "function-bind": "^1.1.2", @@ -6777,12 +6373,12 @@ } }, "node_modules/eslint-config-next": { - "version": "14.2.1", - "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-14.2.1.tgz", - "integrity": "sha512-BgD0kPCWMlqoItRf3xe9fG0MqwObKfVch+f2ccwDpZiCJA8ghkz2wrASH+bI6nLZzGcOJOpMm1v1Q1euhfpt4Q==", + "version": "14.2.3", + "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-14.2.3.tgz", + "integrity": "sha512-ZkNztm3Q7hjqvB1rRlOX8P9E/cXRL9ajRcs8jufEtwMfTVYRqnmtnaSu57QqHyBlovMuiB8LEzfLBkh5RYV6Fg==", "dev": true, "dependencies": { - "@next/eslint-plugin-next": "14.2.1", + "@next/eslint-plugin-next": "14.2.3", "@rushstack/eslint-patch": "^1.3.3", "@typescript-eslint/parser": "^5.4.2 || ^6.0.0 || 7.0.0 - 7.2.0", "eslint-import-resolver-node": "^0.3.6", @@ -6802,160 +6398,129 @@ } } }, - "node_modules/eslint-config-next/node_modules/@typescript-eslint/parser": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.2.0.tgz", - "integrity": "sha512-5FKsVcHTk6TafQKQbuIVkXq58Fnbkd2wDL4LB7AURN7RUOu1utVP+G8+6u3ZhEroW3DF6hyo3ZEXxgKgp4KeCg==", + "node_modules/eslint-config-prettier": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", + "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", "dev": true, - "dependencies": { - "@typescript-eslint/scope-manager": "7.2.0", - "@typescript-eslint/types": "7.2.0", - "@typescript-eslint/typescript-estree": "7.2.0", - "@typescript-eslint/visitor-keys": "7.2.0", - "debug": "^4.3.4" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "bin": { + "eslint-config-prettier": "bin/cli.js" }, "peerDependencies": { - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "eslint": ">=7.0.0" } }, - "node_modules/eslint-config-next/node_modules/@typescript-eslint/scope-manager": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.2.0.tgz", - "integrity": "sha512-Qh976RbQM/fYtjx9hs4XkayYujB/aPwglw2choHmf3zBjB4qOywWSdt9+KLRdHubGcoSwBnXUH2sR3hkyaERRg==", + "node_modules/eslint-import-resolver-node": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.2.0", - "@typescript-eslint/visitor-keys": "7.2.0" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "debug": "^3.2.7", + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" } }, - "node_modules/eslint-config-next/node_modules/@typescript-eslint/types": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.2.0.tgz", - "integrity": "sha512-XFtUHPI/abFhm4cbCDc5Ykc8npOKBSJePY3a3s+lwumt7XWJuzP5cZcfZ610MIPHjQjNsOLlYK8ASPaNG8UiyA==", + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "dependencies": { + "ms": "^2.1.1" } }, - "node_modules/eslint-config-next/node_modules/@typescript-eslint/typescript-estree": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.2.0.tgz", - "integrity": "sha512-cyxS5WQQCoBwSakpMrvMXuMDEbhOo9bNHHrNcEWis6XHx6KF518tkF1wBvKIn/tpq5ZpUYK7Bdklu8qY0MsFIA==", + "node_modules/eslint-import-resolver-typescript": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.1.tgz", + "integrity": "sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.2.0", - "@typescript-eslint/visitor-keys": "7.2.0", "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "minimatch": "9.0.3", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" + "enhanced-resolve": "^5.12.0", + "eslint-module-utils": "^2.7.4", + "fast-glob": "^3.3.1", + "get-tsconfig": "^4.5.0", + "is-core-module": "^2.11.0", + "is-glob": "^4.0.3" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^14.18.0 || >=16.0.0" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "url": "https://opencollective.com/unts/projects/eslint-import-resolver-ts" }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "peerDependencies": { + "eslint": "*", + "eslint-plugin-import": "*" } }, - "node_modules/eslint-config-next/node_modules/@typescript-eslint/typescript-estree/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/eslint-module-utils": { + "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": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" + "debug": "^3.2.7" }, "engines": { - "node": ">=10" + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } } }, - "node_modules/eslint-config-next/node_modules/@typescript-eslint/visitor-keys": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.2.0.tgz", - "integrity": "sha512-c6EIQRHhcpl6+tO8EMR+kjkkV+ugUNXOmeASA1rlzkd8EPIriavpWoiEz1HR/VLhbVIdhqnV6E7JZm00cBDx2A==", + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.2.0", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "ms": "^2.1.1" } }, - "node_modules/eslint-config-next/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "node_modules/eslint-plugin-cypress": { + "version": "2.15.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-cypress/-/eslint-plugin-cypress-2.15.2.tgz", + "integrity": "sha512-CtcFEQTDKyftpI22FVGpx8bkpKyYXBlNge6zSo0pl5/qJvBAnzaD76Vu2AsP16d6mTj478Ldn2mhgrWV+Xr0vQ==", "dev": true, "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "globals": "^13.20.0" + }, + "peerDependencies": { + "eslint": ">= 3.2.1" } }, - "node_modules/eslint-config-next/node_modules/eslint-import-resolver-typescript": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.1.tgz", - "integrity": "sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==", + "node_modules/eslint-plugin-cypress/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, "dependencies": { - "debug": "^4.3.4", - "enhanced-resolve": "^5.12.0", - "eslint-module-utils": "^2.7.4", - "fast-glob": "^3.3.1", - "get-tsconfig": "^4.5.0", - "is-core-module": "^2.11.0", - "is-glob": "^4.0.3" + "type-fest": "^0.20.2" }, "engines": { - "node": "^14.18.0 || >=16.0.0" + "node": ">=8" }, "funding": { - "url": "https://opencollective.com/unts/projects/eslint-import-resolver-ts" + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint-plugin-cypress/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" }, - "peerDependencies": { - "eslint": "*", - "eslint-plugin-import": "*" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint-config-next/node_modules/eslint-plugin-import": { + "node_modules/eslint-plugin-import": { "version": "2.29.1", "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", @@ -6986,7 +6551,17 @@ "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" } }, - "node_modules/eslint-config-next/node_modules/eslint-plugin-import/node_modules/debug": { + "node_modules/eslint-plugin-import/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { "version": "3.2.7", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", @@ -6995,7 +6570,19 @@ "ms": "^2.1.1" } }, - "node_modules/eslint-config-next/node_modules/eslint-plugin-import/node_modules/minimatch": { + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", @@ -7007,7 +6594,7 @@ "node": "*" } }, - "node_modules/eslint-config-next/node_modules/eslint-plugin-jsx-a11y": { + "node_modules/eslint-plugin-jsx-a11y": { "version": "6.8.0", "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.8.0.tgz", "integrity": "sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA==", @@ -7037,7 +6624,17 @@ "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" } }, - "node_modules/eslint-config-next/node_modules/eslint-plugin-jsx-a11y/node_modules/minimatch": { + "node_modules/eslint-plugin-jsx-a11y/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint-plugin-jsx-a11y/node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", @@ -7049,7 +6646,7 @@ "node": "*" } }, - "node_modules/eslint-config-next/node_modules/eslint-plugin-react": { + "node_modules/eslint-plugin-react": { "version": "7.34.1", "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.34.1.tgz", "integrity": "sha512-N97CxlouPT1AHt8Jn0mhhN2RrADlUAsk1/atcT2KyA/l9Q/E6ll7OIGwNumFmWfZ9skV3XXccYS19h80rHtgkw==", @@ -7081,7 +6678,7 @@ "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" } }, - "node_modules/eslint-config-next/node_modules/eslint-plugin-react-hooks": { + "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==", @@ -7093,31 +6690,41 @@ "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" } }, - "node_modules/eslint-config-next/node_modules/eslint-plugin-react/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "node_modules/eslint-plugin-react/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "dependencies": { - "brace-expansion": "^1.1.7" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint-plugin-react/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" }, "engines": { - "node": "*" + "node": ">=0.10.0" } }, - "node_modules/eslint-config-next/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/eslint-plugin-react/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "dependencies": { - "yallist": "^4.0.0" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=10" + "node": "*" } }, - "node_modules/eslint-config-next/node_modules/resolve": { + "node_modules/eslint-plugin-react/node_modules/resolve": { "version": "2.0.0-next.5", "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", @@ -7134,123 +6741,20 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint-config-next/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/eslint-config-prettier": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", - "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", + "node_modules/eslint-plugin-testing-library": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-testing-library/-/eslint-plugin-testing-library-6.2.2.tgz", + "integrity": "sha512-1E94YOTUDnOjSLyvOwmbVDzQi/WkKm3WVrMXu6SmBr6DN95xTGZmI6HJ/eOkSXh/DlheRsxaPsJvZByDBhWLVQ==", "dev": true, - "bin": { - "eslint-config-prettier": "bin/cli.js" + "dependencies": { + "@typescript-eslint/utils": "^5.58.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0", + "npm": ">=6" }, "peerDependencies": { - "eslint": ">=7.0.0" - } - }, - "node_modules/eslint-import-resolver-node": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", - "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", - "dev": true, - "dependencies": { - "debug": "^3.2.7", - "is-core-module": "^2.13.0", - "resolve": "^1.22.4" - } - }, - "node_modules/eslint-import-resolver-node/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-module-utils": { - "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" - }, - "engines": { - "node": ">=4" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - } - } - }, - "node_modules/eslint-module-utils/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-plugin-cypress": { - "version": "2.15.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-cypress/-/eslint-plugin-cypress-2.15.2.tgz", - "integrity": "sha512-CtcFEQTDKyftpI22FVGpx8bkpKyYXBlNge6zSo0pl5/qJvBAnzaD76Vu2AsP16d6mTj478Ldn2mhgrWV+Xr0vQ==", - "dev": true, - "dependencies": { - "globals": "^13.20.0" - }, - "peerDependencies": { - "eslint": ">= 3.2.1" - } - }, - "node_modules/eslint-plugin-cypress/node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint-plugin-cypress/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint-plugin-testing-library": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-testing-library/-/eslint-plugin-testing-library-6.2.2.tgz", - "integrity": "sha512-1E94YOTUDnOjSLyvOwmbVDzQi/WkKm3WVrMXu6SmBr6DN95xTGZmI6HJ/eOkSXh/DlheRsxaPsJvZByDBhWLVQ==", - "dev": true, - "dependencies": { - "@typescript-eslint/utils": "^5.58.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0", - "npm": ">=6" - }, - "peerDependencies": { - "eslint": "^7.5.0 || ^8.0.0" + "eslint": "^7.5.0 || ^8.0.0" } }, "node_modules/eslint-plugin-testing-library/node_modules/@typescript-eslint/scope-manager": { @@ -7501,18 +7005,6 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "node_modules/eslint/node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/eslint/node_modules/escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", @@ -7713,12 +7205,6 @@ "node": ">=0.10.0" } }, - "node_modules/eventemitter2": { - "version": "6.4.7", - "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.7.tgz", - "integrity": "sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg==", - "dev": true - }, "node_modules/events": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", @@ -7729,19 +7215,19 @@ } }, "node_modules/execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, "dependencies": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", "is-stream": "^2.0.0", "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", "strip-final-newline": "^2.0.0" }, "engines": { @@ -7751,17 +7237,11 @@ "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/executable": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz", - "integrity": "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==", - "dev": true, - "dependencies": { - "pify": "^2.2.0" - }, - "engines": { - "node": ">=4" - } + "node_modules/execa/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true }, "node_modules/exit": { "version": "0.1.2", @@ -7791,33 +7271,12 @@ "node_modules/extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "node_modules/extract-zip": { - "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": { - "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" - } + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" }, "node_modules/extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.4.1.tgz", + "integrity": "sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA==", "engines": [ "node >=0.6.0" ] @@ -7884,15 +7343,6 @@ "bser": "2.1.1" } }, - "node_modules/fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", - "dev": true, - "dependencies": { - "pend": "~1.2.0" - } - }, "node_modules/fetch-blob": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", @@ -7920,21 +7370,6 @@ "resolved": "https://registry.npmjs.org/fetch-retry/-/fetch-retry-5.0.6.tgz", "integrity": "sha512-3yurQZ2hD9VISAhJJP9bpYFNQrHHBXE2JxxjY5aLEcDi46RmAzJE2OC9FAde0yis5ElW0jTTzs0zfg/Cca4XqQ==" }, - "node_modules/figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", @@ -8041,27 +7476,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/foreground-child/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", - "dev": true, - "engines": { - "node": "*" - } - }, "node_modules/form-data": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", @@ -8087,9 +7501,9 @@ } }, "node_modules/framer-motion": { - "version": "11.1.3", - "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-11.1.3.tgz", - "integrity": "sha512-/t74b1WQu+mpZtra6xFSfsRfdTymJjNYgFudVIsUmoOWjznr3x5o9HbrX7Jt9655OCA2Js0W79bMZEKE7owp9w==", + "version": "11.1.7", + "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-11.1.7.tgz", + "integrity": "sha512-cW11Pu53eDAXUEhv5hEiWuIXWhfkbV32PlgVISn7jRdcAiVrJ1S03YQQ0/DzoswGYYwKi4qYmHHjCzAH52eSdQ==", "dependencies": { "tslib": "^2.4.0" }, @@ -8110,21 +7524,6 @@ } } }, - "node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -8235,15 +7634,12 @@ } }, "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==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true, - "dependencies": { - "pump": "^3.0.0" - }, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -8278,24 +7674,6 @@ "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" } }, - "node_modules/getos": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/getos/-/getos-3.2.1.tgz", - "integrity": "sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q==", - "dev": true, - "dependencies": { - "async": "^3.2.0" - } - }, - "node_modules/getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", - "dev": true, - "dependencies": { - "assert-plus": "^1.0.0" - } - }, "node_modules/glob": { "version": "10.3.10", "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", @@ -8335,21 +7713,6 @@ "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" }, - "node_modules/global-dirs": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", - "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==", - "dev": true, - "dependencies": { - "ini": "2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", @@ -8512,44 +7875,177 @@ "node": ">= 0.4" } }, - "node_modules/hls.js": { - "version": "1.5.8", - "resolved": "https://registry.npmjs.org/hls.js/-/hls.js-1.5.8.tgz", - "integrity": "sha512-hJYMPfLhWO7/7+n4f9pn6bOheCGx0WgvVz7k3ouq3Pp1bja48NN+HeCQu3XCGYzqWQF/wo7Sk6dJAyWVJD8ECA==" - }, - "node_modules/hpagent": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/hpagent/-/hpagent-0.1.2.tgz", - "integrity": "sha512-ePqFXHtSQWAFXYmj+JtOTHr84iNrII4/QRlAAPPE+zqnKy4xJo7Ie1Y4kC7AdB+LxLxSTTzBMASsEcy0q8YyvQ==", - "dev": true - }, - "node_modules/html-encoding-sniffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", - "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", - "dev": true, + "node_modules/hast-util-from-parse5": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-8.0.1.tgz", + "integrity": "sha512-Er/Iixbc7IEa7r/XLtuG52zoqn/b3Xng/w6aZQ0xGVxzhw5xUFxcRqdPzP6yFi/4HBYRaifaI5fQ1RH8n0ZeOQ==", "dependencies": { - "whatwg-encoding": "^2.0.0" + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "devlop": "^1.0.0", + "hastscript": "^8.0.0", + "property-information": "^6.0.0", + "vfile": "^6.0.0", + "vfile-location": "^5.0.0", + "web-namespaces": "^2.0.0" }, - "engines": { - "node": ">=12" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==" - }, - "node_modules/html-parse-stringify": { - "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==", - "optional": true, + "node_modules/hast-util-parse-selector": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-4.0.0.tgz", + "integrity": "sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==", "dependencies": { - "void-elements": "3.1.0" + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/htmlparser2": { + "node_modules/hast-util-raw": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-9.0.2.tgz", + "integrity": "sha512-PldBy71wO9Uq1kyaMch9AHIghtQvIwxBUkv823pKmkTM3oV1JxtsTNYdevMxvUHqcnOAuO65JKU2+0NOxc2ksA==", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "@ungap/structured-clone": "^1.0.0", + "hast-util-from-parse5": "^8.0.0", + "hast-util-to-parse5": "^8.0.0", + "html-void-elements": "^3.0.0", + "mdast-util-to-hast": "^13.0.0", + "parse5": "^7.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0", + "web-namespaces": "^2.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-html": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.1.tgz", + "integrity": "sha512-hZOofyZANbyWo+9RP75xIDV/gq+OUKx+T46IlwERnKmfpwp81XBFbT9mi26ws+SJchA4RVUQwIBJpqEOBhMzEQ==", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "ccount": "^2.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-raw": "^9.0.0", + "hast-util-whitespace": "^3.0.0", + "html-void-elements": "^3.0.0", + "mdast-util-to-hast": "^13.0.0", + "property-information": "^6.0.0", + "space-separated-tokens": "^2.0.0", + "stringify-entities": "^4.0.0", + "zwitch": "^2.0.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-parse5": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-8.0.0.tgz", + "integrity": "sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==", + "dependencies": { + "@types/hast": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "devlop": "^1.0.0", + "property-information": "^6.0.0", + "space-separated-tokens": "^2.0.0", + "web-namespaces": "^2.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-whitespace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", + "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hastscript": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-8.0.0.tgz", + "integrity": "sha512-dMOtzCEd3ABUeSIISmrETiKuyydk1w0pa+gE/uormcTpSYuaNJPbX1NU3JLyscSLjwAQM8bWMhhIlnCqnRvDTw==", + "dependencies": { + "@types/hast": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-parse-selector": "^4.0.0", + "property-information": "^6.0.0", + "space-separated-tokens": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hls.js": { + "version": "1.5.8", + "resolved": "https://registry.npmjs.org/hls.js/-/hls.js-1.5.8.tgz", + "integrity": "sha512-hJYMPfLhWO7/7+n4f9pn6bOheCGx0WgvVz7k3ouq3Pp1bja48NN+HeCQu3XCGYzqWQF/wo7Sk6dJAyWVJD8ECA==" + }, + "node_modules/hpagent": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/hpagent/-/hpagent-0.1.2.tgz", + "integrity": "sha512-ePqFXHtSQWAFXYmj+JtOTHr84iNrII4/QRlAAPPE+zqnKy4xJo7Ie1Y4kC7AdB+LxLxSTTzBMASsEcy0q8YyvQ==", + "dev": true + }, + "node_modules/html-encoding-sniffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", + "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", + "dev": true, + "dependencies": { + "whatwg-encoding": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==" + }, + "node_modules/html-parse-stringify": { + "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==", + "optional": true, + "dependencies": { + "void-elements": "3.1.0" + } + }, + "node_modules/html-void-elements": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz", + "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/htmlparser2": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", @@ -8581,20 +8077,6 @@ "node": ">= 6" } }, - "node_modules/http-signature": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.3.6.tgz", - "integrity": "sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw==", - "dev": true, - "dependencies": { - "assert-plus": "^1.0.0", - "jsprim": "^2.0.2", - "sshpk": "^1.14.1" - }, - "engines": { - "node": ">=0.10" - } - }, "node_modules/https-proxy-agent": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", @@ -8609,12 +8091,12 @@ } }, "node_modules/human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true, "engines": { - "node": ">=8.12.0" + "node": ">=10.17.0" } }, "node_modules/husky": { @@ -8668,26 +8150,6 @@ "node": ">=0.10.0" } }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, "node_modules/ignore": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", @@ -8775,15 +8237,6 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, - "node_modules/ini": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", - "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, "node_modules/internal-slot": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", @@ -8883,18 +8336,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-ci": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", - "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", - "dev": true, - "dependencies": { - "ci-info": "^3.2.0" - }, - "bin": { - "is-ci": "bin.js" - } - }, "node_modules/is-core-module": { "version": "2.13.1", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", @@ -9003,22 +8444,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-installed-globally": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", - "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", - "dev": true, - "dependencies": { - "global-dirs": "^3.0.0", - "is-path-inside": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/is-map": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", @@ -9076,6 +8501,17 @@ "node": ">=8" } }, + "node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-plain-object": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", @@ -9190,24 +8626,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", - "dev": true - }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/is-weakmap": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", @@ -9307,12 +8725,6 @@ "webidl-conversions": "^3.0.0" } }, - "node_modules/isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", - "dev": true - }, "node_modules/istanbul-lib-coverage": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", @@ -9471,50 +8883,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-changed-files/node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/jest-changed-files/node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-changed-files/node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true, - "engines": { - "node": ">=10.17.0" - } - }, "node_modules/jest-circus": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", @@ -11451,6 +10819,19 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, + "node_modules/joi": { + "version": "17.13.0", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.13.0.tgz", + "integrity": "sha512-9qcrTyoBmFZRNHeVP4edKqIUEgFzq7MHvTNSDuHSqkpOPtiBkgNgcmTSqmiw1kw9tdKaiddvIDv/eCJDxmqWCA==", + "dev": true, + "dependencies": { + "@hapi/hoek": "^9.3.0", + "@hapi/topo": "^5.1.0", + "@sideway/address": "^4.1.5", + "@sideway/formula": "^3.0.1", + "@sideway/pinpoint": "^2.0.0" + } + }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -11469,12 +10850,6 @@ "js-yaml": "bin/js-yaml.js" } }, - "node_modules/jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", - "dev": true - }, "node_modules/jsdom": { "version": "20.0.3", "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-20.0.3.tgz", @@ -11543,12 +10918,6 @@ "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" }, - "node_modules/json-schema": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", - "dev": true - }, "node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -11560,12 +10929,6 @@ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "dev": true }, - "node_modules/json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", - "dev": true - }, "node_modules/json5": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", @@ -11578,18 +10941,6 @@ "node": ">=6" } }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, "node_modules/jsonp": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/jsonp/-/jsonp-0.2.1.tgz", @@ -11662,35 +11013,6 @@ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, - "node_modules/jsprim": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz", - "integrity": "sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==", - "dev": true, - "engines": [ - "node >=0.6.0" - ], - "dependencies": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.4.0", - "verror": "1.10.0" - } - }, - "node_modules/jsprim/node_modules/verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", - "dev": true, - "engines": [ - "node >=0.6.0" - ], - "dependencies": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, "node_modules/jsx-ast-utils": { "version": "3.3.5", "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", @@ -11761,15 +11083,6 @@ "node": ">=0.10" } }, - "node_modules/lazy-ass": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.6.0.tgz", - "integrity": "sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw==", - "dev": true, - "engines": { - "node": "> 0.8" - } - }, "node_modules/leven": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", @@ -11798,99 +11111,22 @@ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", "dev": true }, - "node_modules/listr2": { - "version": "3.14.0", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.14.0.tgz", - "integrity": "sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==", + "node_modules/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "peer": true, + "engines": { + "node": ">=6.11.5" + } + }, + "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": { - "cli-truncate": "^2.1.0", - "colorette": "^2.0.16", - "log-update": "^4.0.0", - "p-map": "^4.0.0", - "rfdc": "^1.3.0", - "rxjs": "^7.5.1", - "through": "^2.3.8", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "enquirer": ">= 2.3.0 < 3" - }, - "peerDependenciesMeta": { - "enquirer": { - "optional": true - } - } - }, - "node_modules/listr2/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/listr2/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/listr2/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/listr2/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/loader-runner": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", - "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", - "peer": true, - "engines": { - "node": ">=6.11.5" - } - }, - "node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" + "p-locate": "^4.1.0" }, "engines": { "node": ">=8" @@ -11964,172 +11200,13 @@ "resolved": "https://registry.npmjs.org/lodash.reduce/-/lodash.reduce-4.6.0.tgz", "integrity": "sha512-6raRe2vxCYBhpBu+B+TtNGUzah+hQjVdu3E17wfusjyrXBka2nBS8OH/gjVZ5PvHOhWmIZTYri09Z6n/QfnNMw==" }, - "node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-symbols/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/log-symbols/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/log-symbols/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/log-symbols/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/log-symbols/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/log-symbols/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/log-update": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", - "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", - "dev": true, - "dependencies": { - "ansi-escapes": "^4.3.0", - "cli-cursor": "^3.1.0", - "slice-ansi": "^4.0.0", - "wrap-ansi": "^6.2.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-update/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/log-update/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/log-update/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/log-update/node_modules/slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, + "node_modules/longest-streak": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", + "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/log-update/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, "node_modules/loose-envify": { @@ -12203,40 +11280,792 @@ "node": ">=10" } }, - "node_modules/make-dir/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/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true + "node_modules/make-dir/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/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dev": true, + "dependencies": { + "tmpl": "1.0.5" + } + }, + "node_modules/markdown-table": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.3.tgz", + "integrity": "sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/mdast-util-find-and-replace": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.1.tgz", + "integrity": "sha512-SG21kZHGC3XRTSUhtofZkBzZTJNM5ecCi0SK2IMKmSXR8vO3peL+kb1O0z7Zl83jKtutG4k5Wv/W7V3/YHvzPA==", + "dependencies": { + "@types/mdast": "^4.0.0", + "escape-string-regexp": "^5.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-find-and-replace/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mdast-util-from-markdown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.0.tgz", + "integrity": "sha512-n7MTOr/z+8NAX/wmhhDji8O3bRvPTV/U0oTCaZJkjhPSKTPhS3xufVhKGF8s1pJ7Ox4QgoIU7KHseh09S+9rTA==", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark": "^4.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.0.0.tgz", + "integrity": "sha512-dgQEX5Amaq+DuUqf26jJqSK9qgixgd6rYDHAv4aTBuA92cTknZlKpPfa86Z/s8Dj8xsAQpFfBmPUHWJBWqS4Bw==", + "dependencies": { + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-gfm-autolink-literal": "^2.0.0", + "mdast-util-gfm-footnote": "^2.0.0", + "mdast-util-gfm-strikethrough": "^2.0.0", + "mdast-util-gfm-table": "^2.0.0", + "mdast-util-gfm-task-list-item": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-autolink-literal": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.0.tgz", + "integrity": "sha512-FyzMsduZZHSc3i0Px3PQcBT4WJY/X/RCtEJKuybiC6sjPqLv7h1yqAkmILZtuxMSsUyaLUWNp71+vQH2zqp5cg==", + "dependencies": { + "@types/mdast": "^4.0.0", + "ccount": "^2.0.0", + "devlop": "^1.0.0", + "mdast-util-find-and-replace": "^3.0.0", + "micromark-util-character": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-footnote": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.0.0.tgz", + "integrity": "sha512-5jOT2boTSVkMnQ7LTrd6n/18kqwjmuYqo7JUPe+tRCY6O7dAuTFMtTPauYYrMPpox9hlN0uOx/FL8XvEfG9/mQ==", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.1.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-strikethrough": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz", + "integrity": "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-table": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz", + "integrity": "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "markdown-table": "^3.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-task-list-item": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz", + "integrity": "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-phrasing": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz", + "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==", + "dependencies": { + "@types/mdast": "^4.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-hast": { + "version": "13.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.1.0.tgz", + "integrity": "sha512-/e2l/6+OdGp/FB+ctrJ9Avz71AN/GRH3oi/3KAx/kMnoUsD6q0woXlDT8lLEeViVKE7oZxE7RXzvO3T8kF2/sA==", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@ungap/structured-clone": "^1.0.0", + "devlop": "^1.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "trim-lines": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-markdown": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.0.tgz", + "integrity": "sha512-SR2VnIEdVNCJbP6y7kVTJgPLifdr8WEU440fQec7qHoHOUz/oJ2jmNRqdDQ3rbiStOXb2mCDGTuwsK5OPUgYlQ==", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "longest-streak": "^3.0.0", + "mdast-util-phrasing": "^4.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark-util-decode-string": "^2.0.0", + "unist-util-visit": "^5.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", + "dependencies": { + "@types/mdast": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromark": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.0.tgz", + "integrity": "sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-core-commonmark": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.1.tgz", + "integrity": "sha512-CUQyKr1e///ZODyD1U3xit6zXwy1a8q2a1S1HKtIlmgvurrEpaw/Y9y6KSIbF8P59cn/NjzHyO+Q2fAyYLQrAA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-destination": "^2.0.0", + "micromark-factory-label": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-factory-title": "^2.0.0", + "micromark-factory-whitespace": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-html-tag-name": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-gfm": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz", + "integrity": "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==", + "dependencies": { + "micromark-extension-gfm-autolink-literal": "^2.0.0", + "micromark-extension-gfm-footnote": "^2.0.0", + "micromark-extension-gfm-strikethrough": "^2.0.0", + "micromark-extension-gfm-table": "^2.0.0", + "micromark-extension-gfm-tagfilter": "^2.0.0", + "micromark-extension-gfm-task-list-item": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-autolink-literal": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.0.0.tgz", + "integrity": "sha512-rTHfnpt/Q7dEAK1Y5ii0W8bhfJlVJFnJMHIPisfPK3gpVNuOP0VnRl96+YJ3RYWV/P4gFeQoGKNlT3RhuvpqAg==", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-footnote": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.0.0.tgz", + "integrity": "sha512-6Rzu0CYRKDv3BfLAUnZsSlzx3ak6HAoI85KTiijuKIz5UxZxbUI+pD6oHgw+6UtQuiRwnGRhzMmPRv4smcz0fg==", + "dependencies": { + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-strikethrough": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.0.0.tgz", + "integrity": "sha512-c3BR1ClMp5fxxmwP6AoOY2fXO9U8uFMKs4ADD66ahLTNcwzSCyRVU4k7LPV5Nxo/VJiR4TdzxRQY2v3qIUceCw==", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-table": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.0.0.tgz", + "integrity": "sha512-PoHlhypg1ItIucOaHmKE8fbin3vTLpDOUg8KAr8gRCF1MOZI9Nquq2i/44wFvviM4WuxJzc3demT8Y3dkfvYrw==", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-tagfilter": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz", + "integrity": "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==", + "dependencies": { + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-task-list-item": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.0.1.tgz", + "integrity": "sha512-cY5PzGcnULaN5O7T+cOzfMoHjBW7j+T9D2sucA5d/KbsBTPcYdebm9zUd9zzdgJGCwahV+/W78Z3nbulBYVbTw==", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-factory-destination": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.0.tgz", + "integrity": "sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-label": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.0.tgz", + "integrity": "sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-space": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", + "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-title": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.0.tgz", + "integrity": "sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-whitespace": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.0.tgz", + "integrity": "sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-character": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", + "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-chunked": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.0.tgz", + "integrity": "sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-classify-character": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.0.tgz", + "integrity": "sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-combine-extensions": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.0.tgz", + "integrity": "sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-chunked": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-numeric-character-reference": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.1.tgz", + "integrity": "sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.0.tgz", + "integrity": "sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-encode": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.0.tgz", + "integrity": "sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromark-util-html-tag-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.0.tgz", + "integrity": "sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromark-util-normalize-identifier": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.0.tgz", + "integrity": "sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-resolve-all": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.0.tgz", + "integrity": "sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-sanitize-uri": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.0.tgz", + "integrity": "sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } }, - "node_modules/makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", - "dev": true, + "node_modules/micromark-util-subtokenize": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.1.tgz", + "integrity": "sha512-jZNtiFl/1aY73yS3UGQkutD0UbhTt68qnRpw2Pifmz5wV9h8gOVsN70v+Lq/f1rKaU/W8pxRe8y8Q9FX1AOe1Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "tmpl": "1.0.5" + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/merge-stream": { + "node_modules/micromark-util-symbol": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", + "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "engines": { - "node": ">= 8" - } + "node_modules/micromark-util-types": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", + "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] }, "node_modules/micromatch": { "version": "4.0.5", @@ -12483,14 +12312,6 @@ "node": ">= 8.16.0" } }, - "node_modules/node-webvtt/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "engines": { - "node": ">= 10" - } - }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -12513,9 +12334,9 @@ } }, "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.9", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.9.tgz", + "integrity": "sha512-2f3F0SEEer8bBu0dsNCFF50N0cTThV1nWFYcEYFZttdW0lDAoybv9cQoK7X7/68Z89S7FoRrVjP1LPX4XRf9vg==", "dev": true }, "node_modules/object-assign": { @@ -12697,12 +12518,6 @@ "node": ">= 0.8.0" } }, - "node_modules/ospath": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/ospath/-/ospath-1.2.2.tgz", - "integrity": "sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA==", - "dev": true - }, "node_modules/p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", @@ -12745,21 +12560,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", @@ -12814,7 +12614,6 @@ "version": "7.1.2", "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", - "dev": true, "dependencies": { "entities": "^4.4.0" }, @@ -12889,18 +12688,6 @@ "node": ">=8" } }, - "node_modules/pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", - "dev": true - }, - "node_modules/performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", - "dev": true - }, "node_modules/picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", @@ -12918,15 +12705,6 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/pirates": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", @@ -12948,6 +12726,50 @@ "node": ">=8" } }, + "node_modules/playwright": { + "version": "1.43.1", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.43.1.tgz", + "integrity": "sha512-V7SoH0ai2kNt1Md9E3Gwas5B9m8KR2GVvwZnAI6Pg0m3sh7UvgiYhRrhsziCmqMJNouPckiOhk8T+9bSAK0VIA==", + "dev": true, + "dependencies": { + "playwright-core": "1.43.1" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=16" + }, + "optionalDependencies": { + "fsevents": "2.3.2" + } + }, + "node_modules/playwright-core": { + "version": "1.43.1", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.43.1.tgz", + "integrity": "sha512-EI36Mto2Vrx6VF7rm708qSnesVQKbxEWvPrfA1IPY6HgczBplDx7ENtx+K2n4kJ41sLLkuGfmb0ZLSSXlDhqPg==", + "dev": true, + "bin": { + "playwright-core": "cli.js" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/playwright/node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, "node_modules/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", @@ -13008,18 +12830,6 @@ "url": "https://github.com/prettier/prettier?sponsor=1" } }, - "node_modules/pretty-bytes": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", - "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/pretty-format": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", @@ -13046,15 +12856,6 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", - "dev": true, - "engines": { - "node": ">= 0.6.0" - } - }, "node_modules/prompts": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", @@ -13085,6 +12886,15 @@ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", "dev": true }, + "node_modules/property-information": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.5.0.tgz", + "integrity": "sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", @@ -13096,16 +12906,6 @@ "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", "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/punycode": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", @@ -13130,21 +12930,6 @@ } ] }, - "node_modules/qs": { - "version": "6.10.4", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.4.tgz", - "integrity": "sha512-OQiU+C+Ds5qiH91qh/mg0w+8nwQuLjM4F4M/PbmhDOoYehPh+Fb0bDjtR1sOvy7YKxvj28Y/M0PhP5uVX0kB+g==", - "dev": true, - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/querystringify": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", @@ -13405,13 +13190,94 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/request-progress": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz", - "integrity": "sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg==", - "dev": true, + "node_modules/rehype-raw": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/rehype-raw/-/rehype-raw-7.0.0.tgz", + "integrity": "sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-raw": "^9.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-stringify": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/rehype-stringify/-/rehype-stringify-10.0.0.tgz", + "integrity": "sha512-1TX1i048LooI9QoecrXy7nGFFbFSufxVRAfc6Y9YMRAi56l+oB0zP51mLSV312uRuvVLPV1opSlJmslozR1XHQ==", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-to-html": "^9.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-gfm": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-4.0.0.tgz", + "integrity": "sha512-U92vJgBPkbw4Zfu/IiW2oTZLSL3Zpv+uI7My2eq8JxKgqraFdU8YUGicEJCEgSbeaG+QDFqIcwwfMTOEelPxuA==", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-gfm": "^3.0.0", + "micromark-extension-gfm": "^3.0.0", + "remark-parse": "^11.0.0", + "remark-stringify": "^11.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-parse": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz", + "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-rehype": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.0.tgz", + "integrity": "sha512-z3tJrAs2kIs1AqIIy6pzHmAHlF1hWQ+OdY4/hv+Wxe35EhyLKcajL33iUEn3ScxtFox9nUvRufR/Zre8Q08H/g==", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "mdast-util-to-hast": "^13.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-stringify": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-11.0.0.tgz", + "integrity": "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==", "dependencies": { - "throttleit": "^1.0.0" + "@types/mdast": "^4.0.0", + "mdast-util-to-markdown": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, "node_modules/require-directory": { @@ -13485,19 +13351,6 @@ "node": ">=10" } }, - "node_modules/restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", @@ -13508,12 +13361,6 @@ "node": ">=0.10.0" } }, - "node_modules/rfdc": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.1.tgz", - "integrity": "sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==", - "dev": true - }, "node_modules/rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -13821,10 +13668,16 @@ } }, "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } }, "node_modules/sirv": { "version": "2.0.4", @@ -13854,53 +13707,6 @@ "node": ">=8" } }, - "node_modules/slice-ansi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", - "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/slice-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/slice-ansi/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/slice-ansi/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -13927,37 +13733,21 @@ "source-map": "^0.6.0" } }, + "node_modules/space-separated-tokens": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", + "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", "dev": true }, - "node_modules/sshpk": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", - "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==", - "dev": true, - "dependencies": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - }, - "bin": { - "sshpk-conv": "bin/sshpk-conv", - "sshpk-sign": "bin/sshpk-sign", - "sshpk-verify": "bin/sshpk-verify" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/ssr-window": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/ssr-window/-/ssr-window-4.0.2.tgz", @@ -14025,17 +13815,20 @@ } }, "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" }, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/string-width-cjs": { @@ -14059,11 +13852,32 @@ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, - "node_modules/string-width/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "node_modules/string-width/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/string-width/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } }, "node_modules/string.prototype.matchall": { "version": "4.0.11", @@ -14140,6 +13954,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/stringify-entities": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz", + "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==", + "dependencies": { + "character-entities-html4": "^2.0.0", + "character-entities-legacy": "^3.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -14300,9 +14127,9 @@ } }, "node_modules/terser": { - "version": "5.30.3", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.30.3.tgz", - "integrity": "sha512-STdUgOUx8rLbMGO9IOwHLpCqolkDITFFQSMYYwKE1N2lY6MVSaeoi10z/EhWxRc6ybqoVmKSkhKYH/XUpl7vSA==", + "version": "5.30.4", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.30.4.tgz", + "integrity": "sha512-xRdd0v64a8mFK9bnsKVdoNP9GQIKUAaJPTaqEQDL4w/J8WaW4sWXXoMZ+6SimPkfT5bElreXf8m9HnmPc3E1BQ==", "peer": true, "dependencies": { "@jridgewell/source-map": "^0.3.3", @@ -14467,35 +14294,11 @@ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, - "node_modules/throttleit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.1.tgz", - "integrity": "sha512-vDZpf9Chs9mAdfY046mcPt8fg5QSZr37hEH4TXYBnDF+izxgrbRGUAAaBvIk/fJm9aOFCGFd1EsNg5AZCbnQCQ==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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/tiny-invariant": { "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==" }, - "node_modules/tmp": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", - "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", - "dev": true, - "engines": { - "node": ">=14.14" - } - }, "node_modules/tmpl": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", @@ -14546,15 +14349,6 @@ "node": ">=6" } }, - "node_modules/tough-cookie/node_modules/universalify": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", - "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" - } - }, "node_modules/tr46": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", @@ -14567,6 +14361,24 @@ "node": ">=12" } }, + "node_modules/trim-lines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", + "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/trough": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz", + "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/ts-api-utils": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", @@ -14714,24 +14526,6 @@ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", - "dev": true - }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -14879,22 +14673,94 @@ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" }, - "node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "dev": true, - "engines": { - "node": ">= 10.0.0" + "node_modules/unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/untildify": { + "node_modules/unist-util-stringify-position": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", - "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", + "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", "dev": true, "engines": { - "node": ">=8" + "node": ">= 4.0.0" } }, "node_modules/update-browserslist-db": { @@ -15037,6 +14903,46 @@ "node": ">=0.6.0" } }, + "node_modules/vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-location": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-5.0.2.tgz", + "integrity": "sha512-NXPYyxyBSH7zB5U6+3uDdd6Nybz6o6/od9rk8bp9H8GR3L+cm/fC0uUTbqBmUTnMCUDslAGBOIKNfvvb+gGlDg==", + "dependencies": { + "@types/unist": "^3.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/void-elements": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", @@ -15058,6 +14964,25 @@ "node": ">=14" } }, + "node_modules/wait-on": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-7.2.0.tgz", + "integrity": "sha512-wCQcHkRazgjG5XoAq9jbTMLpNIjoSlZslrJ2+N9MxDsGEv1HnFoVjOCexL0ESva7Y9cu350j+DWADdk54s4AFQ==", + "dev": true, + "dependencies": { + "axios": "^1.6.1", + "joi": "^17.11.0", + "lodash": "^4.17.21", + "minimist": "^1.2.8", + "rxjs": "^7.8.1" + }, + "bin": { + "wait-on": "bin/wait-on" + }, + "engines": { + "node": ">=12.0.0" + } + }, "node_modules/walker": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", @@ -15079,6 +15004,15 @@ "node": ">=10.13.0" } }, + "node_modules/web-namespaces": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz", + "integrity": "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/web-streams-polyfill": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", @@ -15169,14 +15103,6 @@ "node": ">= 10.13.0" } }, - "node_modules/webpack-bundle-analyzer/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "engines": { - "node": ">= 10" - } - }, "node_modules/webpack-bundle-analyzer/node_modules/escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", @@ -15453,6 +15379,26 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/wrap-ansi/node_modules/ansi-regex": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", @@ -15477,23 +15423,6 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/wrap-ansi/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/wrap-ansi/node_modules/strip-ansi": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", @@ -15528,6 +15457,12 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, + "node_modules/write-file-atomic/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, "node_modules/ws": { "version": "8.16.0", "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz", @@ -15606,14 +15541,24 @@ "node": ">=12" } }, - "node_modules/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "node_modules/yargs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/yargs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "dependencies": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" } }, "node_modules/yocto-queue": { @@ -15627,6 +15572,15 @@ "funding": { "url": "https://github.com/sponsors/sindresorhus" } + }, + "node_modules/zwitch": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", + "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } } } } diff --git a/package.json b/package.json index 531bb428..5afdef5c 100644 --- a/package.json +++ b/package.json @@ -4,17 +4,17 @@ "scripts": { "analyze": "ANALYZE=true npm run build", "build": "next build", - "cypress:open": "NEXT_PUBLIC_DCAPI_ENDPOINT=https://dc-test-api.rdc-staging.library.northwestern.edu/api/v2 cypress open", "dev": "node server.js", "dev:test-env": "NEXT_PUBLIC_DCAPI_ENDPOINT=https://dc-test-api.rdc-staging.library.northwestern.edu/api/v2 npm run dev", "export": "next build && next export", "lint": "next lint", "ts-lint": "tsc --noEmit --incremental --watch", "ts-lint-commit-hook": "tsc --noEmit", - "start": "next start", + "start": "NEXT_PUBLIC_DCAPI_ENDPOINT=https://dc-test-api.rdc-staging.library.northwestern.edu/api/v2 next start", "prepare": "husky install", "test": "jest --watch", - "test:ci": "jest" + "test:ci": "jest", + "test:playwright": "playwright test" }, "dependencies": { "@honeybadger-io/js": "^5.1.1", @@ -53,6 +53,7 @@ "devDependencies": { "@elastic/elasticsearch": "7.17", "@iiif/presentation-3": "^1.1.3", + "@playwright/test": "^1.40.1", "@testing-library/jest-dom": "^6.1.2", "@testing-library/react": "^15.0.2", "@testing-library/user-event": "^14.0.4", @@ -63,7 +64,7 @@ "@types/react-sticky-el": "^1.0.3", "@typescript-eslint/eslint-plugin": "^6.3.0", "babel-jest": "^29.6.2", - "cypress": "^12.4.0", + "dotenv": "^16.4.5", "eslint": "^8.47.0", "eslint-config-next": "^14.1.3", "eslint-config-prettier": "^9.0.0", @@ -75,7 +76,8 @@ "next-router-mock": "^0.9.1-beta.0", "prettier": "^3.0.1", "ts-jest": "^29.0.5", - "typescript": "^5.4.2" + "typescript": "^5.4.2", + "wait-on": "^7.2.0" }, "optionalDependencies": { "fsevents": "^2.3.2" diff --git a/playwright-report/index.html b/playwright-report/index.html index 8c8d57f1..7b16de04 100644 --- a/playwright-report/index.html +++ b/playwright-report/index.html @@ -7,7 +7,7 @@ Playwright Test Report - -
- \ No newline at end of file +window.playwrightReportBase64 = "data:application/zip;base64,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"; \ No newline at end of file diff --git a/playwright.config.ts b/playwright.config.ts new file mode 100644 index 00000000..e079a636 --- /dev/null +++ b/playwright.config.ts @@ -0,0 +1,81 @@ +/* eslint sort-keys: "off" */ + +import { defineConfig, devices } from "@playwright/test"; + +/* eslint-disable @typescript-eslint/no-var-requires */ +require("dotenv").config(); + +const PORT = process.env.PORT || 3000; +const BASE_URL = + process.env.BASE_URL || `https://devbox.library.northwestern.edu:${PORT}`; + +export default defineConfig({ + testDir: "./tests", + fullyParallel: false, + + /* Increase locator timeout past default 5s */ + expect: { + timeout: 10 * 1000, + }, + /* Fail the build on CI if you accidentally left test.only in the source code. */ + forbidOnly: !!process.env.CI, + reporter: "html", + /* Retry on CI only */ + retries: process.env.CI ? 2 : 0, + /* Opt out of parallel tests on CI. */ + workers: process.env.CI ? 2 : 2, + /* Increase the default timeout to 10 seconds. */ + timeout: 10000, + + use: { + baseURL: BASE_URL, + /* Collect trace when retrying the failed test. */ + trace: "on-first-retry", + }, + + /* Configure projects for major browsers */ + projects: [ + { + name: "chromium", + use: { ...devices["Desktop Chrome"] }, + }, + + { + name: "firefox", + use: { ...devices["Desktop Firefox"], ignoreHTTPSErrors: true }, + }, + + { + name: "webkit", + use: { ...devices["Desktop Safari"] }, + }, + + /* Test against mobile viewports. */ + // { + // name: 'Mobile Chrome', + // use: { ...devices['Pixel 5'] }, + // }, + // { + // name: 'Mobile Safari', + // use: { ...devices['iPhone 12'] }, + // }, + + /* Test against branded browsers. */ + // { + // name: 'Microsoft Edge', + // use: { ...devices['Desktop Edge'], channel: 'msedge' }, + // }, + // { + // name: 'Google Chrome', + // use: { ...devices['Desktop Chrome'], channel: 'chrome' }, + // }, + ], + + /* Run your local dev server before starting the tests */ + // webServer: { + // command: "npm run dev:ci", + // url: BASE_URL, + // timeout: 30 * 1000, + // reuseExistingServer: !process.env.CI, + // }, +}); diff --git a/tests/fixtures/open-graph.ts b/tests/fixtures/open-graph.ts new file mode 100644 index 00000000..7aaafa27 --- /dev/null +++ b/tests/fixtures/open-graph.ts @@ -0,0 +1,86 @@ +import { type Locator, type Page, expect } from "@playwright/test"; + +export class OpenGraphPage { + defaultTitle: string = + "Digital Collections - Northwestern University Libraries"; + + defaultDescription: string = + "Explore digital resources from the Northwestern University Library collections – including letters, photographs, diaries, maps, and audiovisual materials - as well as licensed art historical images for teaching and reference."; + + dcUrl: string = "https://digitalcollections.library.northwestern.edu"; + + iiifImageServerUrl: string = `https://iiif.stack.rdc.library.northwestern.edu/iiif/2/`; + + readonly metaDescription: Locator; + readonly metaTitle: Locator; + readonly ogDescription: Locator; + readonly ogSiteName: Locator; + readonly ogImage: Locator; + readonly ogUrl: Locator; + + constructor( + public readonly page: Page, + public readonly route: string + ) { + this.metaDescription = page.locator('meta[name="description"]'); + this.metaTitle = page.locator('meta[property="og:title"]'); + this.ogDescription = page.locator('meta[property="og:description"]').nth(0); + this.ogImage = page.locator('meta[property="og:image"]'); + this.ogSiteName = page.locator('meta[property="og:site_name"]'); + this.ogUrl = page.locator('meta[property="og:url"]'); + this.route = route; + } + + async goto() { + await this.page.goto(this.route); + } + + async hasDefaultDescription() { + await expect(this.metaDescription).toHaveAttribute( + "content", + this.defaultDescription + ); + } + + async hasDefaultOGDescription() { + await expect(this.ogDescription).toHaveAttribute( + "content", + this.defaultDescription + ); + } + + async hasDefaultOGImage() { + await expect(this.ogImage).toHaveAttribute( + "content", + `${this.iiifImageServerUrl}999a8522-aa7a-4c49-a4a1-25165be91b05/full/461,/0/default.jpg` + ); + } + + async hasOGDescription(description: string) { + await expect(this.ogDescription).toHaveAttribute("content", description); + } + + async hasOGImage(uri: string) { + await expect(this.ogImage).toHaveAttribute("content", uri); + } + + async hasOGUrl(route: string) { + const params = route ? `/${route}` : ""; + await expect(this.ogUrl).toHaveAttribute( + "content", + `${this.dcUrl}${params}` + ); + } + + async hasMetaDescription(description: string) { + await expect(this.metaDescription).toHaveAttribute("content", description); + } + + async hasMetaTitle(title: string | null) { + await expect(this.metaTitle).toHaveAttribute("content", title || ""); + } + + async hasOGSiteName() { + await expect(this.ogSiteName).toHaveAttribute("content", this.defaultTitle); + } +} diff --git a/tests/fixtures/search-page.ts b/tests/fixtures/search-page.ts new file mode 100644 index 00000000..8ce27be4 --- /dev/null +++ b/tests/fixtures/search-page.ts @@ -0,0 +1,44 @@ +import { type Page, expect } from "@playwright/test"; + +export class SearchPage { + readonly DEFAULT_PAGINATION_SIZE = 40; + readonly TOTAL_RESULTS = 205; + + readonly route: string = "/search"; + + constructor(public readonly page: Page) {} + + async goto() { + await this.page.goto(this.route); + } + + getPaginationResults = (totalCount: number) => + totalCount > this.DEFAULT_PAGINATION_SIZE + ? this.DEFAULT_PAGINATION_SIZE + : totalCount; + + async verifyGridItemCount(totalCount = 0) { + const paginationResultsCount = this.getPaginationResults(totalCount); + await expect(this.page.getByTestId(`grid-item`)).toHaveCount( + paginationResultsCount + ); + } + + async verifyTopResultsCount(count: number) { + await expect(this.page.getByTestId(`results-count`)).toContainText( + `${count} results` + ); + } + + async verifyTotalsResultDisplay({ + count, + total, + }: { + count: number; + total: number; + }) { + await expect(this.page.getByTestId("results")).toHaveText( + `Showing 1 to ${count} of ${total} results` + ); + } +} diff --git a/tests/fixtures/work-page.ts b/tests/fixtures/work-page.ts new file mode 100644 index 00000000..72308ca3 --- /dev/null +++ b/tests/fixtures/work-page.ts @@ -0,0 +1,7 @@ +import { type Page } from "@playwright/test"; + +export class WorkPage { + readonly route: string = "/items"; + + constructor(public readonly page: Page) {} +} diff --git a/tests/fixtures/works/canary-work.ts b/tests/fixtures/works/canary-work.ts new file mode 100644 index 00000000..47902cf4 --- /dev/null +++ b/tests/fixtures/works/canary-work.ts @@ -0,0 +1,398 @@ +/* eslint-disable sort-keys */ + +import { Work } from "@nulib/dcapi-types"; + +type WorkExtended = Work & { + canonical_link: string; + related_material: string[]; +}; + +export const canaryWork: WorkExtended = { + abstract: ["Updated description!!!"], + accession_number: "TEST_canary_002", + alternate_title: ["This is an alternative title"], + api_link: + "https://dc-test-api.rdc-staging.library.northwestern.edu/api/v2/works/cb8a19a7-3dec-47f3-80c0-12872ae61f8f", + api_model: "Work", + ark: "ark:/81985/n2x34qh35", + batch_ids: [ + "20ebb42e-93a5-4e47-bfcb-f3491f319b48", + "512ae70f-13db-46cb-ad5b-bd768302d919", + "59c46d06-a2be-4b25-9dc5-ceb1671bf1b8", + ], + box_name: ["The name of a box"], + box_number: ["88"], + canonical_link: + "https://dc.library.northwestern.edu/items/cb8a19a7-3dec-47f3-80c0-12872ae61f8f", + caption: ["Beebo"], + catalog_key: ["MS-1984-1982-1989"], + collection: { + description: "A private collection for Meadow test records", + id: "820fc328-a333-430b-a974-ac6218a1ffcd", + title: "TEST Canary Records", + }, + contributor: [ + { + facet: + "http://id.loc.gov/authorities/names/n91114928|ctg|Metallica (Musical group) (Cartographer)", + id: "http://id.loc.gov/authorities/names/n91114928", + label: "Metallica (Musical group)", + label_with_role: "Metallica (Musical group) (Cartographer)", + role: "Cartographer", + variants: [], + }, + { + facet: + "http://id.worldcat.org/fast/1717972|act|Schober, Franz von, 1796-1882 (Actor)", + id: "http://id.worldcat.org/fast/1717972", + label: "Schober, Franz von, 1796-1882", + label_with_role: "Schober, Franz von, 1796-1882 (Actor)", + role: "Actor", + variants: [], + }, + ], + create_date: "2022-08-02T18:52:31.503448Z", + creator: [ + { + facet: + "http://id.loc.gov/authorities/names/no2011059409||Dessa (Vocalist)", + id: "http://id.loc.gov/authorities/names/no2011059409", + label: "Dessa (Vocalist)", + variants: [ + "Dessa, 1981-", + "Wander, Dessa, 1981-", + "Dessa Darling", + "Wander, Margret", + ], + }, + ], + csv_metadata_update_jobs: ["6eef2d27-dc36-4470-b461-820ae199b835"], + cultural_context: ["Test Context"], + date_created: ["August 1906 to December 1910", "1958"], + description: [ + "This is a private record for RepoDev testing on production", + "Test", + ], + file_sets: [ + { + accession_number: "TEST_canary_002_001", + description: "access tif", + duration: null, + height: 3024, + id: "39a418a3-1ec7-4ef6-ae0c-0227c5aa2355", + label: "access tif", + mime_type: "image/tiff", + original_filename: "Squirrel.tif", + poster_offset: null, + rank: 0, + representative_image_url: + "https://dc-test-iiif.rdc-staging.library.northwestern.edu/iiif/2/39a418a3-1ec7-4ef6-ae0c-0227c5aa2355", + role: "Access", + streaming_url: null, + webvtt: null, + width: 4032, + }, + { + accession_number: "TEST_canary_002_006", + description: "access jpg", + duration: null, + height: 4032, + id: "a59dc417-d313-4286-88d4-1c80916b82c6", + label: "access jpg", + mime_type: "image/jpeg", + original_filename: "PXL_20211213_211133857.jpg", + poster_offset: null, + rank: 1073741824, + representative_image_url: + "https://dc-test-iiif.rdc-staging.library.northwestern.edu/iiif/2/a59dc417-d313-4286-88d4-1c80916b82c6", + role: "Access", + streaming_url: null, + webvtt: null, + width: 3024, + }, + { + accession_number: "KETCHUM_CCC", + description: "Ketchum, 1974", + duration: null, + height: 4438, + id: "c285fdc6-d7ee-4a94-a548-2c80e22584da", + label: "Cocktail Construction Chart", + mime_type: "image/jpeg", + original_filename: "cocktail_construction_chart_1974.jpg", + poster_offset: null, + rank: 1610612736, + representative_image_url: + "https://dc-test-iiif.rdc-staging.library.northwestern.edu/iiif/2/c285fdc6-d7ee-4a94-a548-2c80e22584da", + role: "Access", + streaming_url: null, + webvtt: null, + width: 6494, + }, + { + accession_number: "TEST_canary_002_002", + description: "preservation bmp", + duration: null, + height: 862, + id: "b60fc7a7-8f13-407e-8b69-9a030b01daae", + label: "preservation bmp", + mime_type: "image/bmp", + original_filename: "Angela_and_Lisa_Redd.bmp", + poster_offset: null, + rank: 0, + representative_image_url: null, + role: "Preservation", + streaming_url: null, + webvtt: null, + width: 640, + }, + { + accession_number: "TEST_canary_002_004", + description: "preservation tif", + duration: null, + height: 4032, + id: "258f7218-2f42-4293-8a18-a0aa5e1484f0", + label: "preservation tif", + mime_type: "image/tiff", + original_filename: "distillery.tif", + poster_offset: null, + rank: 1073741824, + representative_image_url: null, + role: "Preservation", + streaming_url: null, + webvtt: null, + width: 3024, + }, + { + accession_number: "TEST_canary_002_005", + description: "preservation jpg", + duration: null, + height: 4032, + id: "4c7b9949-9cb1-4da2-83bd-04d9dd6d0c4f", + label: "preservation jpg", + mime_type: "image/jpeg", + original_filename: "PXL_20211213_211133857.jpg", + poster_offset: null, + rank: 1610612736, + representative_image_url: null, + role: "Preservation", + streaming_url: null, + webvtt: null, + width: 3024, + }, + { + accession_number: "TEST_canary_002_003", + description: "auxiliary png", + duration: null, + height: 4000, + id: "e2dfbed2-b125-486a-b33f-ddeff349f887", + label: "auxiliary png", + mime_type: "image/jpeg", + original_filename: "CoopersHawk.png", + poster_offset: null, + rank: 0, + representative_image_url: + "https://dc-test-iiif.rdc-staging.library.northwestern.edu/iiif/2/e2dfbed2-b125-486a-b33f-ddeff349f887", + role: "Auxiliary", + streaming_url: null, + webvtt: null, + width: 6000, + }, + ], + folder_name: ["Blue folder"], + folder_number: ["88"], + genre: [ + { + facet: "http://vocab.getty.edu/aat/300435283||stencil prints", + id: "http://vocab.getty.edu/aat/300435283", + label: "stencil prints", + variants: [], + }, + ], + id: "cb8a19a7-3dec-47f3-80c0-12872ae61f8f", + identifier: ["555"], + iiif_manifest: + "https://dc-test-api.rdc-staging.library.northwestern.edu/api/v2/works/cb8a19a7-3dec-47f3-80c0-12872ae61f8f?as=iiif", + indexed_at: "2023-03-15T21:45:34.246257", + ingest_project: { + id: "e98ca38d-7677-43f8-bc30-f36f92eded0a", + title: "golive_smoketest", + }, + ingest_sheet: { + id: "3999f185-ec7a-4cd9-a219-02aa4cb54ceb", + title: "TEST_CanaryRecords_prod.csv", + }, + keywords: ["leaves"], + language: [ + { + facet: "http://id.loc.gov/vocabulary/languages/crh||Crimean Tatar", + id: "http://id.loc.gov/vocabulary/languages/crh", + label: "Crimean Tatar", + variants: [], + }, + ], + legacy_identifier: ["555"], + library_unit: "University Main Library", + license: { + id: "http://www.europeana.eu/portal/rights/rr-r.html", + label: "All rights reserved", + }, + location: [ + { + facet: "https://sws.geonames.org/4999069/||Leland Township", + id: "https://sws.geonames.org/4999069/", + label: "Leland Township", + variants: [], + }, + ], + modified_date: "2022-12-05T15:52:58.347463Z", + notes: [ + { + note: "Here are some notes", + type: "General Note", + }, + { + note: "Awards type", + type: "Awards", + }, + { + note: "Biographical note", + type: "Bibliographical/Historical Note", + }, + { + note: "creation production credits", + type: "Creation/Production Credits", + }, + { + note: "Language note", + type: "Lanugage Note", + }, + { + note: "Local Note", + type: "Local Note", + }, + { + note: "Performers", + type: "Performers", + }, + { + note: "Statement of Responsibility", + type: "Statement of Responsibility", + }, + { + note: "Venue/event date", + type: "Venue/Event Date", + }, + ], + physical_description_material: ["Acrylic paint on cement block"], + physical_description_size: ["16 x 24 inches"], + preservation_level: "Level 1", + project: { + cycle: "2022", + desc: "This is a description", + manager: "Nicole Finzer", + name: "Test", + proposer: "Carolyn Caizzi", + task_number: "P0000", + }, + provenance: [ + "Artist; sold to Mr. Blank in 1955; sold to Lancelot in 2017; gifted to Northwestern University in 2019", + ], + published: true, + publisher: ["Northwestern University Press"], + related_material: ["See Also: related material"], + related_url: [ + { + label: "Finding Aid", + url: "https://findingaids.library.northwestern.edu/", + }, + { + label: "Resource Guide", + url: "https://www.wbez.org/", + }, + { + label: "Related Information", + url: "https://www.nationalgeographic.com/animals/mammals/facts/squirrels", + }, + { + label: "Hathi Trust", + url: "https://www.hathitrust.org/", + }, + ], + representative_file_set: { + aspect_ratio: 0.75, + id: "a59dc417-d313-4286-88d4-1c80916b82c6", + url: "https://dc-test-iiif.rdc-staging.library.northwestern.edu/iiif/2/a59dc417-d313-4286-88d4-1c80916b82c6", + }, + rights_holder: ["Artist"], + rights_statement: { + id: "http://rightsstatements.org/vocab/InC-EDU/1.0/", + label: "In Copyright - Educational Use Permitted", + }, + scope_and_contents: ["I promise there is scope and content"], + series: ["Canaries and How to Care for Them"], + source: ["Mars"], + status: "Done", + style_period: [ + { + facet: + "http://vocab.getty.edu/aat/300018478||Qing (dynastic styles and periods)", + id: "http://vocab.getty.edu/aat/300018478", + label: "Qing (dynastic styles and periods)", + variants: [], + }, + ], + subject: [ + { + facet: + "http://id.worldcat.org/fast/1902713|TOPICAL|Cats on postage stamps (Topical)", + id: "http://id.worldcat.org/fast/1902713", + label: "Cats on postage stamps", + label_with_role: "Cats on postage stamps (Topical)", + role: "Topical", + variants: [], + }, + { + facet: + "info:nul/6cba23b5-a91a-4c13-8398-54967b329d48|TOPICAL|Test Record Canary (Topical)", + id: "info:nul/6cba23b5-a91a-4c13-8398-54967b329d48", + label: "Test Record Canary", + label_with_role: "Test Record Canary (Topical)", + role: "Topical", + variants: [], + }, + { + facet: + "http://vocab.getty.edu/tgn/2000971|GEOGRAPHICAL|Leelanau (Geographical)", + id: "http://vocab.getty.edu/tgn/2000971", + label: "Leelanau", + label_with_role: "Leelanau (Geographical)", + role: "Geographical", + variants: [], + }, + { + facet: + "http://id.worldcat.org/fast/1204587|GEOGRAPHICAL|Michigan--Ann Arbor (Geographical)", + id: "http://id.worldcat.org/fast/1204587", + label: "Michigan--Ann Arbor", + label_with_role: "Michigan--Ann Arbor (Geographical)", + role: "Geographical", + variants: [], + }, + ], + table_of_contents: ["1. cats; 2. dogs"], + technique: [ + { + facet: + "http://vocab.getty.edu/aat/300053228||drypoint (printing process)", + id: "http://vocab.getty.edu/aat/300053228", + label: "drypoint (printing process)", + variants: [], + }, + ], + terms_of_use: "Terms ", + thumbnail: + "https://dc-test-api.rdc-staging.library.northwestern.edu/api/v2/works/cb8a19a7-3dec-47f3-80c0-12872ae61f8f/thumbnail", + title: "Canary Record TEST 3", + visibility: "Public", + work_type: "Image", +}; diff --git a/tests/home.spec.ts b/tests/home.spec.ts new file mode 100644 index 00000000..0c533c84 --- /dev/null +++ b/tests/home.spec.ts @@ -0,0 +1,24 @@ +import { OpenGraphPage } from "./fixtures/open-graph"; +import { test } from "@playwright/test"; + +const ogTest = test.extend<{ openGraphPage: OpenGraphPage }>({ + openGraphPage: async ({ page }, use) => { + const openGraphPage = new OpenGraphPage(page, "/"); + await openGraphPage.goto(); + await use(openGraphPage); + }, +}); + +ogTest( + "has Homepage Open Graph Data and meta title and description", + async ({ openGraphPage }) => { + await openGraphPage.hasOGSiteName(); + await openGraphPage.hasMetaTitle( + "Digital Collections - Northwestern University Libraries" + ); + await openGraphPage.hasDefaultDescription(); + await openGraphPage.hasDefaultOGDescription(); + await openGraphPage.hasOGUrl(""); + await openGraphPage.hasDefaultOGImage(); + } +); diff --git a/tests/layout.spec.ts b/tests/layout.spec.ts new file mode 100644 index 00000000..193efe1e --- /dev/null +++ b/tests/layout.spec.ts @@ -0,0 +1,44 @@ +import { expect, test } from "@playwright/test"; + +test("top header renders logo and links", async ({ page }) => { + await page.goto("/"); + + // Renders the Northwestern logo + await expect(page.getByTestId("northwestern-logo")).toBeVisible(); + + // Renders the main navigation links + const navEl = page.getByTestId("super-nav"); + + await expect( + navEl.getByRole("link", { exact: true, name: "Libraries" }) + ).toHaveAttribute("href", "https://www.library.northwestern.edu/"); + + await expect( + navEl.getByRole("link", { exact: true, name: "About" }) + ).toHaveAttribute("href", "/about"); + + await expect( + navEl.getByRole("link", { exact: true, name: "Contact" }) + ).toHaveAttribute("href", "/contact"); + + await expect(navEl.getByRole("link", { name: "Sign in" })).toBeVisible(); +}); + +test("footer renders", async ({ page }) => { + await page.goto("/"); + + const footerEl = page.getByTestId("footer"); + + // This component is coming from NUL Design System; not necessary to test everything in it + await expect(footerEl).toBeVisible(); + await expect( + footerEl.getByAltText("Northwestern University logo") + ).toBeVisible(); + + // Display NUL ethics message + await expect( + page.getByText( + "Northwestern University Libraries is dedicated to the fair and ethical" + ) + ).toBeVisible(); +}); diff --git a/tests/search.spec.ts b/tests/search.spec.ts new file mode 100644 index 00000000..41a394e7 --- /dev/null +++ b/tests/search.spec.ts @@ -0,0 +1,506 @@ +import { test as base, expect } from "@playwright/test"; + +import { OpenGraphPage } from "@/tests/fixtures/open-graph"; +import { SearchPage } from "@/tests/fixtures/search-page"; + +type SearchPageFixtures = { + openGraphPage: OpenGraphPage; + searchPage: SearchPage; +}; + +const TOTAL_RESULTS = 205; + +/** Set up Fixtures for the test. Super handy */ +// https://playwright.dev/docs/test-fixtures +const test = base.extend({ + // A common fixture to help with Open Graph data + openGraphPage: async ({ page }, use) => { + const openGraphPage = new OpenGraphPage(page, "/search"); + await openGraphPage.goto(); + await use(openGraphPage); + }, + // A fixture to help with the Search Page shared functionality + searchPage: async ({ page }, use) => { + const searchPage = new SearchPage(page); + await searchPage.goto(); + await use(searchPage); + }, +}); + +test.describe("Search page component", () => { + test.beforeEach(async ({ page }) => { + await page.goto("/search"); + }); + + test("renders Open Graph data and meta title and description", async ({ + openGraphPage, + }) => { + await openGraphPage.hasOGSiteName(); + await openGraphPage.hasMetaTitle("Search"); + await openGraphPage.hasDefaultDescription(); + await openGraphPage.hasDefaultOGDescription(); + await openGraphPage.hasOGUrl("search"); + await openGraphPage.hasDefaultOGImage(); + await openGraphPage.hasDefaultOGDescription(); + }); + + test("renders the global search bar and fires off successful searches", async ({ + page, + searchPage, + }) => { + const searches = [ + { + expectedResultCount: 5, + term: "Obama", + }, + { + expectedResultCount: 35, + term: "Illinois", + }, + { + expectedResultCount: 8, + term: "Berkeley", + }, + ]; + + const searchInput = page.getByPlaceholder("Search by keyword or phrase,"); + const searchBtn = page.getByTestId("submit-button"); + + await searchPage.verifyTopResultsCount(TOTAL_RESULTS); + await searchPage.verifyGridItemCount(TOTAL_RESULTS); + + // Test "Obama" search term + await searchInput.fill(searches[0].term); + await searchBtn.click(); + + await expect(page).toHaveURL(`/search?q=${searches[0].term}`); + await searchPage.verifyTopResultsCount(searches[0].expectedResultCount); + await expect(searchInput).toHaveValue(searches[0].term); + + const search1 = searchPage.getPaginationResults( + searches[0].expectedResultCount + ); + + await searchPage.verifyTopResultsCount(searches[0].expectedResultCount); + await searchPage.verifyTotalsResultDisplay({ + count: search1, + total: search1, + }); + + // Test "Illinois" search term + await searchInput.fill(searches[1].term); + await searchBtn.click(); + + await expect(page).toHaveURL(`/search?q=${searches[1].term}`); + await searchPage.verifyTopResultsCount(searches[1].expectedResultCount); + await expect(searchInput).toHaveValue(searches[1].term); + + const search2 = searchPage.getPaginationResults( + searches[1].expectedResultCount + ); + + await searchPage.verifyTopResultsCount(searches[1].expectedResultCount); + await searchPage.verifyTotalsResultDisplay({ + count: search2, + total: search2, + }); + + // Reset the search + await page.getByRole("button", { name: "Clear" }).click(); + await expect(page).toHaveURL(/\/search/); + + // Verify original counts are back in place + await searchPage.verifyTopResultsCount(TOTAL_RESULTS); + await searchPage.verifyGridItemCount(TOTAL_RESULTS); + }); + + test("renders Facet filter buttons above the grid correctly", async ({ + page, + searchPage, + }) => { + const facetInlineComponent = page.getByTestId("facet-inline-component"); + const allBtn = facetInlineComponent.getByLabel("All"); + const imageBtn = facetInlineComponent.getByLabel("Image"); + const audioBtn = facetInlineComponent.getByLabel("Audio"); + const videoBtn = facetInlineComponent.getByLabel("Video"); + const clearAllBtn = page.getByRole("button", { + name: "Clear All", + }); + const publicWorksToggle = page.getByLabel("Public works only"); + const facetUserComponent = page + .getByTestId("facet-user-component") + .locator("span"); + + const IMAGE_COUNT = 152; + const AUDIO_COUNT = 25; + const VIDEO_COUNT = 28; + const PUBLIC_WORKS_COUNT = 179; + + // Work Type facet button checks + await expect(allBtn).toHaveAttribute("aria-checked", "true"); + await expect(imageBtn).toHaveAttribute("aria-checked", "false"); + + // Select Image facet + await imageBtn.click(); + await expect(imageBtn).toHaveAttribute("aria-checked", "true"); + await expect(allBtn).toHaveAttribute("aria-checked", "false"); + await searchPage.verifyTopResultsCount(IMAGE_COUNT); + await searchPage.verifyGridItemCount(IMAGE_COUNT); + + // Select Audio facet + await audioBtn.click(); + await expect(audioBtn).toHaveAttribute("aria-checked", "true"); + await expect(imageBtn).toHaveAttribute("aria-checked", "false"); + await searchPage.verifyTopResultsCount(AUDIO_COUNT); + await searchPage.verifyGridItemCount(AUDIO_COUNT); + + // Select Video facet + await videoBtn.click(); + await expect(videoBtn).toHaveAttribute("aria-checked", "true"); + await expect(audioBtn).toHaveAttribute("aria-checked", "false"); + await searchPage.verifyTopResultsCount(VIDEO_COUNT); + await searchPage.verifyGridItemCount(VIDEO_COUNT); + + // Toggle Public Works + await allBtn.click(); + await publicWorksToggle.click(); + + await searchPage.verifyTopResultsCount(PUBLIC_WORKS_COUNT); + await searchPage.verifyGridItemCount(PUBLIC_WORKS_COUNT); + + // Test Filter Facet Toggle UI + await clearAllBtn.click(); + await expect(facetUserComponent).not.toBeVisible(); + + await imageBtn.click(); + await expect(facetUserComponent).toBeVisible(); + await expect(facetUserComponent).toContainText("1"); + + await publicWorksToggle.click(); + await expect(facetUserComponent).toContainText("2"); + }); + + test("renders the Filter modal and a general run through of interactions within", async ({ + page, + }) => { + const filterBtn = page.getByRole("button", { name: "Filter Filter" }); + const filterModalHeading = page.getByRole("heading", { name: "Filter" }); + const filterModalBody = page.getByTestId("facets-group-list"); + + await filterBtn.click(); + + // Test Filter Modal UI, default layout and interactions + await expect(filterModalHeading).toBeInViewport(); + await page.getByRole("banner").getByTestId("facets-filter-close").click(); + await page.getByRole("button", { name: "Filter Filter" }).click(); + await page.getByRole("button", { name: "Clear All" }).click(); + await page.getByText("Cancel").click(); + await page.getByRole("button", { name: "Filter Filter" }).click(); + await page + .getByTestId("facets-submit") + .getByTestId("submit-button") + .click(); + + expect(filterModalHeading).not.toBeVisible(); + + // Test facets; Subject and Descriptive defaults open on load + await filterBtn.click(); + await expect( + filterModalBody.getByRole("button", { name: "Subject and Descriptive" }) + ).toBeVisible(); + + // Test Genre facet + await page.getByRole("tab", { name: "Genre" }).click(); + await page.getByRole("heading", { name: "Genre" }).click(); + + // Test Language facet + await page.getByRole("tab", { name: "Language" }).click(); + await page.getByRole("heading", { name: "Language" }).click(); + await page.locator("li").filter({ hasText: "English(84)" }).click(); + await page.locator("li").filter({ hasText: "French(11)" }).click(); + + // Test Style Period facet + await page.getByRole("tab", { name: "Style Period" }).click(); + await page.getByRole("heading", { name: "Style Period" }).click(); + await page.getByPlaceholder("Find Style Period").click(); + await page.getByText("Qing (dynastic styles and").click(); + await page + .getByTestId("facet-options") + .getByLabel("Qing (dynastic styles and") + .click(); + + // Test Subject facet + await page.getByRole("tab", { name: "Subject" }).click(); + await page + .getByTestId("facet-multi-component") + .getByRole("heading", { name: "Subject" }) + .click(); + await page.getByPlaceholder("Find Subject").click(); + await page + .getByText("Northwestern University (Evanston, Ill.)(21)") + .click(); + await page + .getByLabel("Northwestern University (Evanston, Ill.)(22)") + .click(); + + // Test Technique facet + await page.getByRole("tab", { name: "Technique" }).click(); + await page.getByRole("heading", { name: "Technique" }).click(); + await page.getByPlaceholder("Find Technique").click(); + await page + .locator("li") + .filter({ hasText: "photomechanical processes(6)" }) + .click(); + await page.getByLabel("photomechanical processes(6)").click(); + + // Test Work Type facet + await page.getByRole("tab", { name: "Work Type" }).click(); + await page.getByRole("heading", { name: "Work Type" }).click(); + await page.getByPlaceholder("Find Work Type").click(); + await page.getByTestId("facet-options").click(); + + // Close modal + await page.getByRole("banner").getByTestId("facets-filter-close").click(); + + // Reopen modal + await filterBtn.click(); + + // Check Collection and Location Group facets + await page.getByRole("button", { name: "Collection and Location" }).click(); + await page.getByRole("tab", { name: "Collection" }).click(); + await page + .getByTestId("facet-multi-component") + .getByRole("heading", { name: "Collection" }) + .click(); + await page.getByPlaceholder("Find Collection").click(); + await page + .locator("li") + .filter({ hasText: "Collection of Carl Smith(14)" }) + .click(); + await page + .locator("li") + .filter({ hasText: "Chicago Chamber Musicians" }) + .click(); + await page + .getByTestId("facet-options") + .getByLabel("Chicago Chamber Musicians") + .click(); + await page.getByRole("tab", { name: "Series" }).click(); + await page.getByRole("heading", { name: "Series" }).click(); + await page.getByPlaceholder("Find Series").click(); + await page.getByRole("tab", { name: "Box Number" }).click(); + await page.getByRole("heading", { name: "Box Number" }).click(); + await page.getByPlaceholder("Find Box Number").click(); + + // Activate a facet + await page.getByLabel("(16)").click(); + await page.getByRole("heading", { name: "Preview Results" }).click(); + + // Currently selected (uncommitted) facets display in modal header + const userFacet = page.getByTestId("facet-user-value-component"); + await expect(userFacet).toContainText("1"); + await expect(userFacet).toContainText("Box Number"); + + // Remove facet + await userFacet.click(); + + // Verify currently selected user facet is removed from the modal header + expect(userFacet).not.toBeVisible(); + + // Toggle the facet again + await page.getByLabel("(16)").click(); + + // Submit button shows number of results + const modalSubmitBtn = page + .getByTestId("facets-submit") + .getByTestId("submit-button"); + await expect(modalSubmitBtn).toHaveText("View Results (16)"); + await modalSubmitBtn.click(); + + // Main search page matches result count + await expect(page.getByTestId("results-count")).toHaveText("16 results"); + }); + + test("Filter modal facets will update Preview Results when facets are turned on/off", async ({ + page, + }) => { + const filterBtn = page.getByRole("button", { name: "Filter Filter" }); + const previewItems = page.getByTestId("facets-filter-preview-item"); + const facetOptions = page.getByTestId("facet-options"); + const userFacetsRow = page.getByTestId("facet-user-component"); + const userFacetButtons = userFacetsRow.getByTestId( + "facet-user-value-component" + ); + + await filterBtn.click(); + + // Default Preview Results display + await expect(previewItems).toHaveCount(5); + expect(previewItems.nth(0)).toContainText("Dracula"); + expect(previewItems.nth(1)).toContainText("Portrait of Justine Cordwell."); + expect(userFacetsRow).toHaveCount(0); + + // Activate a facet + await page.getByLabel("African American college students").click(); + + // Preview Items update + await expect(previewItems.nth(0)).toContainText( + "Protest photographs, c. 1969-1970" + ); + await expect(previewItems.nth(1)).toContainText( + "Ronald E. Pitts. Cleveland" + ); + + // User selected facets update + await expect(userFacetButtons).toHaveCount(1); + await expect( + userFacetsRow.getByLabel("Remove African American") + ).toBeVisible(); + + // Test the facet count (12) is included in the facet label and its checked + await expect( + facetOptions.getByText("African American college students(12)") + ).toBeVisible(); + await expect( + facetOptions.getByLabel("African American college students") + ).toBeChecked(); + + // Activating a second facet + await facetOptions.getByLabel("Choirs (Music)").click(); + + // Preview Items update + await expect(previewItems).toHaveCount(2); + await expect(previewItems.nth(0)).toContainText( + "Ronald E. Pitts. Cleveland" + ); + await expect(previewItems.nth(1)).toContainText( + "Audition for the Northwestern Community Ensemble" + ); + + // User facets update + await expect(userFacetButtons).toHaveCount(2); + await expect( + userFacetsRow.getByLabel("Remove Choirs (Music)") + ).toBeVisible(); + await expect( + userFacetsRow.getByLabel("Remove African American") + ).toBeVisible(); + + // Test the facet count (2) is included in the facet label and its checked + await expect( + facetOptions.getByText("African American college students(2)") + ).toBeVisible(); + await expect(facetOptions.getByLabel("Choirs (Music)")).toBeChecked(); + }); + + test("Filter modal cancel buttons do not make changes to the search results", async ({ + page, + }) => { + const filterBtn = page.getByRole("button", { name: "Filter Filter" }); + const facetOptions = page.getByTestId("facet-options"); + const submitBtn = page + .getByTestId("facets-submit") + .getByTestId("submit-button"); + const resultsCount = page.getByTestId("results-count"); + + await filterBtn.click(); + + // Activating a facet updates uncommitted count within modal + await page.getByRole("tab", { name: "Language" }).click(); + await facetOptions.getByLabel("French").check(); + await expect(submitBtn).toHaveText("View Results (11)"); + + // Canceling returns the default number of total results + await page.getByText("Cancel").click(); + await expect(resultsCount).toHaveText(`${TOTAL_RESULTS} results`); + + await filterBtn.click(); + + // Try another facet from a different group + await page.getByRole("button", { name: "Collection and Location" }).click(); + await page.getByRole("tab", { name: "Collection" }).click(); + await facetOptions.getByLabel("Map and Atlas Collection").check(); + await expect(submitBtn).toHaveText("View Results (6)"); + + await page.getByRole("banner").getByTestId("facets-filter-close").click(); + await expect(resultsCount).toHaveText(`${TOTAL_RESULTS} results`); + }); + + test("renders correct pagination", async ({ page, searchPage }) => { + function buildResultsString({ page }: { page: number }) { + const start = paginationResultsCount * (page - 1) + 1; + const end = start + paginationResultsCount - 1; + const refinedEnd = end > TOTAL_RESULTS ? TOTAL_RESULTS : end; + return `Showing ${start} to ${refinedEnd} of ${TOTAL_RESULTS} results`; + } + + const nextBtn = page.getByRole("button", { name: "Next" }); + const prevBtn = page.getByRole("button", { name: "Previous" }); + const startBtn = page.getByRole("button", { name: "Start" }); + const paginationResultsCount = + searchPage.getPaginationResults(TOTAL_RESULTS); + + await searchPage.verifyGridItemCount(TOTAL_RESULTS); + await searchPage.verifyTopResultsCount(TOTAL_RESULTS); + + await expect(prevBtn).not.toBeVisible(); + await expect(startBtn).not.toBeVisible(); + + // Click to page 2 + await nextBtn.click(); + await searchPage.verifyGridItemCount( + TOTAL_RESULTS - paginationResultsCount + ); + await expect(page.getByTestId("results")).toHaveText( + buildResultsString({ page: 2 }) + ); + await expect(prevBtn).toBeVisible(); + await expect(startBtn).not.toBeVisible(); + + // URL updates + await expect(page).toHaveURL(new RegExp(`/search\\?page=2`)); + + // Click to page 3 + await nextBtn.click(); + await searchPage.verifyGridItemCount( + TOTAL_RESULTS - paginationResultsCount * 2 + ); + await expect(page.getByTestId("results")).toHaveText( + buildResultsString({ page: 3 }) + ); + expect(prevBtn).toBeVisible(); + expect(startBtn).toBeVisible(); + + await expect(page).toHaveURL(`/search?page=3`); + + // Click previous going back to page 2 + await prevBtn.click(); + await searchPage.verifyGridItemCount( + TOTAL_RESULTS - paginationResultsCount + ); + await expect(page.getByTestId("results")).toHaveText( + buildResultsString({ page: 2 }) + ); + await expect(page).toHaveURL(`/search?page=2`); + + // Go to end of results + await page.goto("/search?page=6"); + await searchPage.verifyGridItemCount(5); + await expect(page.getByTestId("results")).toHaveText( + buildResultsString({ page: 6 }) + ); + await expect(nextBtn).not.toBeVisible(); + }); + + test("renders Work results which link to the Work page", async ({ page }) => { + await page.getByLabel("Public works only").click(); + await page.getByRole("link", { name: "Ajal-e Moallaq Image" }).click(); + await expect(page).toHaveURL("items/5a2dcade-0071-48c3-b29b-755293e862c4"); + + await page.goto("/search"); + await page.getByLabel("Public works only").click(); + + await page.getByRole("link", { name: "Cadbury Eggs Cars Image" }).click(); + await expect(page).toHaveURL("items/944cc66c-dcf9-4ac5-8d0d-ec48a699a0fe"); + }); +}); diff --git a/tests/work.spec.ts b/tests/work.spec.ts new file mode 100644 index 00000000..13de3752 --- /dev/null +++ b/tests/work.spec.ts @@ -0,0 +1,541 @@ +import { test as base, expect } from "@playwright/test"; + +import { OpenGraphPage } from "@/tests/fixtures/open-graph"; +import { WorkPage } from "@/tests/fixtures/work-page"; +import { canaryWork } from "./fixtures/works/canary-work"; + +type WorkPageFixtures = { + openGraphPage: OpenGraphPage; + workPage: WorkPage; +}; + +const CANARY_WORK_ID = "cb8a19a7-3dec-47f3-80c0-12872ae61f8f"; + +const test = base.extend({ + // A common fixture to help with Open Graph data + openGraphPage: async ({ page }, use) => { + const openGraphPage = new OpenGraphPage(page, `/items/${CANARY_WORK_ID}`); + await openGraphPage.goto(); + await use(openGraphPage); + }, + // A fixture to help with the Search Page shared functionality + workPage: async ({ page }, use) => { + const workPage = new WorkPage(page); + await use(workPage); + }, +}); + +test.describe("Work page component", async () => { + test.beforeEach(async ({ page }) => { + await page.goto(`/items/${CANARY_WORK_ID}`); + }); + + test("renders Open Graph data and meta title and description", async ({ + openGraphPage, + }) => { + await openGraphPage.hasMetaTitle(canaryWork.title); + await openGraphPage.hasMetaDescription(canaryWork.description.join(" ")); + await openGraphPage.hasOGDescription( + `${canaryWork.description.join(" ")} - ${canaryWork.terms_of_use}` + ); + await openGraphPage.hasOGSiteName(); + await openGraphPage.hasOGUrl(`items/${canaryWork.id}`); + await openGraphPage.hasOGImage( + `https://dc-test-iiif.rdc-staging.library.northwestern.edu/iiif/2/a59dc417-d313-4286-88d4-1c80916b82c6/full/1200,630/0/default.jpg` + ); + }); + + test("renders the Work top level metadata", async ({ page }) => { + const metadataEl = page.getByTestId("metadata"); + + await page.getByRole("button", { name: "Dismiss" }).click(); + + await expect(page.getByTestId("title")).toContainText( + canaryWork.title || "" + ); + await expect(page.getByTestId("summary")).toContainText( + canaryWork.description.join(", ") || "" + ); + + await expect(metadataEl.getByText("Alternate Title")).toBeVisible(); + await expect( + metadataEl.getByText("This is an alternative title") + ).toBeVisible(); + await expect(metadataEl.getByText("Abstract")).toBeVisible(); + await expect(metadataEl.getByText("Updated description!!!")).toBeVisible(); + await expect(metadataEl.getByText("Caption")).toBeVisible(); + await expect(metadataEl.getByText("Beebo")).toBeVisible(); + await expect(metadataEl.getByText("Contributor")).toBeVisible(); + await expect( + metadataEl.getByText("Metallica (Musical group) (Cartographer)") + ).toBeVisible(); + await expect(metadataEl.getByText("Creator")).toBeVisible(); + await expect(metadataEl.getByText("Dessa (Vocalist)")).toBeVisible(); + await expect(metadataEl.getByText("Cultural Context")).toBeVisible(); + await expect(metadataEl.getByText("Test Context")).toBeVisible(); + await expect(metadataEl.getByText("Date", { exact: true })).toBeVisible(); + await expect( + metadataEl.getByText("August 1906 to December 1910") + ).toBeVisible(); + await expect(metadataEl.getByText("1958")).toBeVisible(); + await expect(metadataEl.getByText("Department")).toBeVisible(); + await expect( + metadataEl.getByText("University (MAIN) Library") + ).toBeVisible(); + await expect(metadataEl.getByText("Dimensions")).toBeVisible(); + await expect(metadataEl.getByText("16 x 24 inches")).toBeVisible(); + await expect(metadataEl.getByText("Genre")).toBeVisible(); + + // Click to show more + await page.getByRole("button", { name: "Show More" }).click(); + + await expect(metadataEl.getByText("stencil prints")).toBeVisible(); + await expect( + metadataEl.getByText("Language", { exact: true }) + ).toBeVisible(); + await expect(metadataEl.getByText("Crimean Tatar")).toBeVisible(); + await expect(metadataEl.getByText("Location")).toBeVisible(); + await expect(metadataEl.getByText("Leland Township")).toBeVisible(); + await expect( + metadataEl.getByText("Materials", { exact: true }) + ).toBeVisible(); + await expect( + metadataEl.getByText("Acrylic paint on cement block") + ).toBeVisible(); + await expect(metadataEl.getByText("Notes", { exact: true })).toBeVisible(); + await expect( + metadataEl.getByText("Here are some notes (General Note)", { + exact: true, + }) + ).toBeVisible(); + await expect(metadataEl.getByText("Awards type (Awards)")).toBeVisible(); + await expect(metadataEl.getByText("Biographical note (")).toBeVisible(); + await expect( + metadataEl.getByText("creation production credits (") + ).toBeVisible(); + await expect(metadataEl.getByText("Provenance")).toBeVisible(); + await expect( + metadataEl.getByText("Artist; sold to Mr. Blank in") + ).toBeVisible(); + await expect(metadataEl.getByText("Publisher")).toBeVisible(); + await expect( + metadataEl.getByText("Northwestern University Press") + ).toBeVisible(); + await expect( + metadataEl.getByText("Related Material", { exact: true }) + ).toBeVisible(); + await expect( + metadataEl.getByText("See Also: related material") + ).toBeVisible(); + await expect(metadataEl.getByText("Related URL")).toBeVisible(); + await expect(metadataEl.getByText("Finding Aid")).toBeVisible(); + await expect(metadataEl.getByText("Research Guide")).toBeVisible(); + await expect(metadataEl.getByText("Rights Holder")).toBeVisible(); + await expect(metadataEl.getByText("Artist", { exact: true })).toBeVisible(); + await expect(metadataEl.getByText("Rights Statement")).toBeVisible(); + await expect( + metadataEl.getByText("In Copyright - Educational") + ).toBeVisible(); + await expect(metadataEl.getByText("Scope and Contents")).toBeVisible(); + await expect( + metadataEl.getByText("I promise there is scope and") + ).toBeVisible(); + await expect(metadataEl.getByText("Series")).toBeVisible(); + await expect( + metadataEl.getByText("Canaries and How to Care for") + ).toBeVisible(); + await expect(metadataEl.getByText("Source")).toBeVisible(); + await expect(metadataEl.getByText("Mars")).toBeVisible(); + await expect(metadataEl.getByText("Style Period")).toBeVisible(); + await expect( + metadataEl.getByText("Qing (dynastic styles and") + ).toBeVisible(); + await expect(metadataEl.getByText("Subject")).toBeVisible(); + await expect(metadataEl.getByText("Cats on postage stamps")).toBeVisible(); + await expect(metadataEl.getByText("Test Record Canary")).toBeVisible(); + await expect(metadataEl.getByText("Table of Contents")).toBeVisible(); + await expect(metadataEl.getByText("cats; 2. dogs")).toBeVisible(); + await expect(metadataEl.getByText("Technique")).toBeVisible(); + await expect( + metadataEl.getByText("drypoint (printing process)") + ).toBeVisible(); + await expect(page.getByText("Attribution")).toContainText("Attribution"); + await expect(page.getByText("Courtesy of Northwestern")).toBeVisible(); + + // Shows the collection + const collectionsCard = page.getByTestId("card-wrapper").locator("a"); + await expect( + collectionsCard.getByAltText("TEST Canary Records") + ).toHaveAttribute( + "src", + `https://dc-test-api.rdc-staging.library.northwestern.edu/api/v2/collections/820fc328-a333-430b-a974-ac6218a1ffcd/thumbnail?aspect=square` + ); + const figCaption = collectionsCard.locator("figcaption"); + await expect(figCaption).toContainText("TEST Canary Records"); + await expect(figCaption.getByTestId("work-count-total")).toContainText( + "3 Works" + ); + const workCountTypes = figCaption.getByTestId("work-count-type"); + await expect(workCountTypes.nth(0)).toContainText("1"); + await expect(workCountTypes.nth(1)).toContainText("1"); + await expect(workCountTypes.nth(2)).toContainText("1"); + }); + + test("renders the Explore Further section Clover sliders", async ({ + page, + }) => { + await page.getByRole("button", { name: "Dismiss" }).click(); + const relatedItems = page.getByTestId("related-items"); + + await expect( + page.getByRole("heading", { name: "Explore Further" }) + ).toBeVisible(); + + // Collection Slider + await page + .getByTestId("related-items") + .locator("a") + .filter({ hasText: "TEST Canary Records" }) + .click(); + + expect(page.url()).toBe( + "https://dc.library.northwestern.edu/search?q=collection.id%3A%22820fc328-a333-430b-a974-ac6218a1ffcd%22" + ); + + await page.goBack(); + + // View all button + await page.getByLabel("TEST Canary Records").nth(1).click(); + + expect(page.url()).toBe( + "https://dc.library.northwestern.edu/search?q=collection.id%3A%22820fc328-a333-430b-a974-ac6218a1ffcd%22" + ); + + await page.goBack(); + + // Test the Collection carousel + const collectionsSliderItems = relatedItems + .locator(".swiper-wrapper") + .nth(0); + await expect( + collectionsSliderItems.filter({ hasText: "Canary Record TEST 3" }) + ).toBeVisible(); + await expect( + collectionsSliderItems.filter({ hasText: "Image" }) + ).toBeVisible(); + await expect( + collectionsSliderItems.filter({ hasText: "Canary Record TEST 2" }) + ).toBeVisible(); + await expect( + collectionsSliderItems.filter({ hasText: "Video" }) + ).toBeVisible(); + await expect( + collectionsSliderItems.filter({ hasText: "Canary Record TEST 1" }) + ).toBeVisible(); + await expect( + collectionsSliderItems.filter({ hasText: "Audio" }) + ).toBeVisible(); + + // More Like This slider + await page + .getByTestId("related-items") + .locator("a") + .filter({ hasText: "More Like This" }) + .click(); + + expect(page.url()).toBe( + "https://dc.library.northwestern.edu/search?similar=cb8a19a7-3dec-47f3-80c0-12872ae61f8f" + ); + + await page.goBack(); + + // TODO: Something is wrong with the More Like This slider + + // // Test the More Like This carousel + // const moreLikeThisSliderItems = relatedItems + // .locator(".swiper-wrapper") + // .nth(1); + + // // Test the More Like This carousel has 10 items + // await expect(moreLikeThisSliderItems.locator(".swiper-slide")).toHaveCount( + // 11 + // ); + + // // Slider navigation + // await expect( + // relatedItems.getByRole("button", { name: "previous item" }) + // ).toBeDisabled(); + + // await page.getByRole("button", { name: "next item" }).click(); + // // expect prev button to be enabled + // await expect( + // relatedItems.getByRole("button", { name: "previous item" }) + // ).toBeEnabled(); + // // expect next button to be disabled + // await expect( + // relatedItems.getByRole("button", { name: "next item" }) + // ).toBeDisabled(); + + // Test the Subject carousels exist. But they'll be random so can't really test the content + const subject1SliderItems = relatedItems.locator(".swiper-wrapper").nth(2); + const subject2SliderItems = relatedItems.locator(".swiper-wrapper").nth(3); + + await expect(subject1SliderItems).toBeVisible(); + await expect(subject2SliderItems).toBeVisible(); + }); + + test("renders the Find this item and Cite this item modal windows", async ({ + page, + }) => { + const today = new Date().toDateString(); + + await page.getByRole("button", { name: "Dismiss" }).click(); + + /** + * Find this item + */ + await page.getByRole("button", { name: "Find this item" }).click(); + await page.getByRole("heading", { name: "Find this item" }).click(); + await page + .getByTestId("actions-dialog-aside") + .getByRole("img", { name: "Canary Record TEST" }) + .click(); + await page + .getByTestId("actions-dialog-aside") + .getByText("Canary Record TEST") + .click(); + await page.getByTestId("actions-dialog-aside").getByText("Image").click(); + await page.getByText("Accession").click(); + await page.getByText("TEST_canary_002").click(); + await page.getByText("Box Name").click(); + await page.getByText("The name of a box").click(); + await page.getByText("Box Number").click(); + await page.getByText("88").nth(1).click(); + await page.getByText("Folder Name").click(); + await page.getByText("Blue folder").click(); + await page.getByText("Folder Number").click(); + await page.getByText("88").nth(2).click(); + await page.getByText("NUsearch").click(); + await page.getByRole("link", { name: "MS-1984-1982-" }).click(); + + expect(page.url()).toBe( + "https://search.library.northwestern.edu/discovery/search?vid=01NWU_INST%3ANULVNEW&institution=01NWU&field=any&query=any%2Ccontains%2CMS-1984-1982-1989&query=&search_scope=MyInst_and_CI" + ); + + await page.goBack(); + + /** + * Cite this item + */ + const citeDialog = page.getByRole("dialog").getByTestId("metadata"); + + await page.getByRole("button", { name: "Cite this item" }).click(); + await expect( + page.getByRole("heading", { name: "Cite this item" }) + ).toBeVisible(); + + // Aside info + await expect( + page + .getByTestId("actions-dialog-aside") + .getByRole("img", { name: "Canary Record TEST" }) + ).toBeVisible(); + await expect( + page.getByTestId("actions-dialog-aside").getByText("Canary Record TEST") + ).toBeVisible(); + await expect( + page.getByTestId("actions-dialog-aside").getByText("Image") + ).toBeVisible(); + + // Main data + await expect(citeDialog.getByText("Title", { exact: true })).toBeVisible(); + await expect( + citeDialog.getByText("Canary Record TEST 3 | Copy") + ).toBeVisible(); + await citeDialog + .locator("dd") + .filter({ hasText: "Canary Record TEST 3 | Copy" }) + .getByRole("button") + .click(); + + await expect(citeDialog.getByText("Use Statement")).toBeVisible(); + await expect(citeDialog.getByText("Terms | Copy")).toBeVisible(); + + await expect(citeDialog.getByText("Ark", { exact: true })).toBeVisible(); + await expect( + citeDialog.getByText("ark:/81985/n2x34qh35 | Copy") + ).toBeVisible(); + + await expect(citeDialog.getByText("APA Format")).toBeVisible(); + await expect( + citeDialog.getByText( + `University (MAIN) Library, Northwestern University Libraries. (${today}` + ) + ).toBeVisible(); + + await expect(citeDialog.getByText("Chicago/Turabian Format")).toBeVisible(); + await expect( + citeDialog.getByText("University (MAIN) Library,").nth(1) + ).toBeVisible(); + + await expect(citeDialog.getByText("MLA Format")).toBeVisible(); + await expect( + citeDialog.getByText( + `University (MAIN) Library, Northwestern University Libraries. "Canary Record TEST 3", TEST Canary Records ${today}.` + ) + ).toBeVisible(); + + await expect(citeDialog.getByText("Wiki Citation")).toBeVisible(); + await expect( + citeDialog.getByText("{{cite web |") + ).toBeVisible(); + + // Verify the copy button is present on all items + const copyButtons = citeDialog + .locator("button") + .filter({ hasText: "Copy" }); + await expect(copyButtons).toHaveCount(7); + await copyButtons.nth(0).click(); + + // TODO: This fails in headless tests for some reason + //await expect(copyButtons.nth(0).locator("> span")).toHaveText("Copied"); + + await page.getByTestId("facets-filter-close").click(); + }); + + test("Download and share dialog renders all content", async ({ page }) => { + await page.getByRole("button", { name: "Dismiss" }).click(); + await page.getByRole("button", { name: "Download and share" }).click(); + + const dialog = page.getByRole("dialog"); + + await expect( + dialog.getByRole("heading", { name: "Download this item" }) + ).toBeVisible(); + + // Aside info + await expect( + dialog.getByRole("img", { name: "Canary Record TEST" }) + ).toBeVisible(); + await expect(dialog.getByText("Image", { exact: true })).toBeVisible(); + await expect( + dialog.getByRole("button", { name: "Logo Facebook" }) + ).toBeVisible(); + await expect( + dialog.getByRole("button", { name: "Logo Twitter" }) + ).toBeVisible(); + await expect( + dialog.getByRole("button", { name: "Logo Pinterest" }) + ).toBeVisible(); + + // IIIF Manifest + await expect( + dialog.getByRole("heading", { name: "IIIF Manifest" }) + ).toBeVisible(); + await expect( + dialog.getByRole("link", { name: "https://dc-test-api.rdc-" }) + ).toBeVisible(); + await dialog.getByRole("button", { name: "Copy Manifest Link" }).click(); + + //TODO: This fails in headless tests for some reason + //await expect(dialog.getByText("Copied")).toBeVisible(); + + await expect( + dialog.getByRole("link", { name: "What is IIIF?" }) + ).toHaveAttribute("href", "https://iiif.io/get-started/why-iiif/"); + await expect( + dialog.getByRole("link", { name: "View in Mirador" }) + ).toHaveAttribute( + "href", + "https://projectmirador.org/embed/?iiif-content=https://dc-test-api.rdc-staging.library.northwestern.edu/api/v2/works/cb8a19a7-3dec-47f3-80c0-12872ae61f8f?as=iiif" + ); + + // Embed Viewer + const embedViewer = dialog.getByTestId("preview-embed-viewer"); + + await expect( + dialog.getByRole("heading", { name: "Embed Viewer" }) + ).toBeVisible(); + await expect(dialog.getByTestId("embed-html")).toContainText( + `/embedded-viewer/https%3A%2F%2Fdc-test-api.rdc-staging.library.northwestern.edu%2Fapi%2Fv2%2Fworks%2Fcb8a19a7-3dec-47f3-80c0-12872ae61f8f%3Fas%3Diiif" title="Canary Record TEST 3" width="100%" height="800">` + ); + await expect(dialog.getByText("Preview")).toBeVisible(); + await expect( + embedViewer.filter({ hasText: "Canary Record TEST 3" }) + ).toBeVisible(); + await expect(embedViewer.locator("span").nth(1)).toHaveAttribute( + "style", + `background-image: url(\"https://dc-test-api.rdc-staging.library.northwestern.edu/api/v2/works/cb8a19a7-3dec-47f3-80c0-12872ae61f8f/thumbnail\");` + ); + + await page.getByRole("button", { exact: true, name: "Copy" }).click(); + + await page.locator('select[name="show-title"]').selectOption("false"); + await expect(embedViewer.getByText("Canary Record TEST 3")).toBeHidden(); + + await expect(page.getByTestId("preview-info-panel")).not.toBeVisible(); + await page + .locator('select[name="show-info-panel"]') + .selectOption("show initially open"); + await expect(page.getByTestId("preview-info-panel")).toBeVisible(); + + // Download and Embed Images + const downloadEmbedItems = dialog.getByTestId("download-embed-items"); + + // Image thumbnails + await expect( + dialog.getByRole("heading", { name: "Download and Embed" }) + ).toBeVisible(); + await expect( + downloadEmbedItems.getByRole("img", { name: "access tif" }) + ).toBeVisible(); + await expect( + downloadEmbedItems.getByRole("img", { name: "access jpg" }) + ).toBeVisible(); + await expect( + downloadEmbedItems.getByRole("img", { + name: "Cocktail Construction Chart", + }) + ).toBeVisible(); + await expect( + downloadEmbedItems.getByRole("img", { name: "auxiliary png" }) + ).toBeVisible(); + + await expect(downloadEmbedItems.getByText("access tif")).toBeVisible(); + await expect(downloadEmbedItems.getByText("access jpg")).toBeVisible(); + await expect( + downloadEmbedItems.getByText("Cocktail Construction Chart") + ).toBeVisible(); + await expect(downloadEmbedItems.getByText("auxiliary png")).toBeVisible(); + + await expect( + downloadEmbedItems.getByRole("button", { name: "Download JPG" }) + ).toHaveCount(4); + await expect(downloadEmbedItems.getByText("Embed HTML")).toHaveCount(4); + await expect( + downloadEmbedItems.getByRole("button", { name: "Copy IIIF" }) + ).toHaveCount(4); + + // Toggle Embed HTML + const embedHtml = downloadEmbedItems.getByText( + `Northwestern Libraries Digital Collections Fileset image for 39a418a3-1ec7-4ef6-ae0c-0227c5aa2355` + ); + + await expect(embedHtml).toBeHidden(); + await downloadEmbedItems.getByText("Embed HTML").nth(0).click(); + await expect(embedHtml).toBeVisible(); + + await expect( + downloadEmbedItems.getByText("Copy 3000px - 100%1800px - 50") + ).toBeVisible(); + + await downloadEmbedItems.getByRole("combobox").nth(0).selectOption("900"); + await downloadEmbedItems.getByRole("combobox").nth(1).selectOption("gray"); + + await expect( + downloadEmbedItems.getByText( + `Northwestern Libraries Digital Collections Fileset image for 39a418a3-1ec7-4ef6-ae0c-0227c5aa2355` + ) + ).toBeVisible(); + }); +}); diff --git a/tsconfig.json b/tsconfig.json index e6e8420f..cb3b00bd 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,30 +1,54 @@ { "compilerOptions": { - "target": "ES6", - "lib": ["dom", "dom.iterable", "esnext"], "allowJs": true, - "skipLibCheck": true, - "strict": true, - "forceConsistentCasingInFileNames": true, - "noEmit": true, + "baseUrl": ".", "esModuleInterop": true, - "module": "esnext", - "moduleResolution": "node", - "resolveJsonModule": true, + "forceConsistentCasingInFileNames": true, + "incremental": true, "isolatedModules": true, "jsx": "preserve", - "incremental": true, - "baseUrl": ".", + "lib": [ + "dom", + "dom.iterable", + "esnext" + ], + "module": "esnext", + "moduleResolution": "node", + "noEmit": true, "paths": { - "@/*": ["*"], - "@/components/*": ["components/*"], - "@/context/*": ["context/*"], - "@/lib/*": ["lib/*"], - "@/mocks/*": ["mocks/*"], - "@/pages/*": ["pages/*"], - "@/styles/*": ["styles/*"] - } + "@/*": [ + "*" + ], + "@/components/*": [ + "components/*" + ], + "@/context/*": [ + "context/*" + ], + "@/lib/*": [ + "lib/*" + ], + "@/mocks/*": [ + "mocks/*" + ], + "@/pages/*": [ + "pages/*" + ], + "@/styles/*": [ + "styles/*" + ] + }, + "resolveJsonModule": true, + "skipLibCheck": true, + "strict": true, + "target": "ES6", + "types": ["jest"] }, + "exclude": [ + "node_modules", + "cypress", + "./cypress.config.ts" + ], "include": [ "next-env.d.ts", "**/*.ts", @@ -33,6 +57,5 @@ "**/*.jsx", "**/*.mjs", "types.d.ts" - ], - "exclude": ["node_modules", "cypress", "./cypress.config.ts"] -} + ] +} \ No newline at end of file