diff --git a/.github/workflows/docker-publish.yml b/.github/workflows/docker-publish.yml index 6c313659..4d0894e4 100644 --- a/.github/workflows/docker-publish.yml +++ b/.github/workflows/docker-publish.yml @@ -40,7 +40,7 @@ jobs: # https://github.com/docker/login-action - name: Log into registry ${{ env.REGISTRY }} if: github.event_name != 'pull_request' - uses: docker/login-action@a9794064588be971151ec5e7144cb535bcb56e36 + uses: docker/login-action@553b6f090f15b58451081ce157ff1929a266131d with: registry: ${{ env.REGISTRY }} username: ${{ github.actor }} @@ -50,14 +50,14 @@ jobs: # https://github.com/docker/metadata-action - name: Extract Docker metadata id: meta - uses: docker/metadata-action@35e9aff4f5d665b5aa8a8f2adffaf8a1b5f49cc0 + uses: docker/metadata-action@0f8c876bafbf5dbce05c36682ec68e9a0274a48a with: images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} # Build and push Docker image with Buildx (don't push on PR) # https://github.com/docker/build-push-action - name: Build and push Docker image - uses: docker/build-push-action@4fad532b9fdbfb80f436784834374a1c11834153 + uses: docker/build-push-action@9311bf5263ae5b36f3ec67aff768790c6e2344ad with: context: . push: ${{ github.event_name != 'pull_request' }} diff --git a/.github/workflows/jest-coverage.yml b/.github/workflows/jest-coverage.yml index c54aacd7..4198621c 100644 --- a/.github/workflows/jest-coverage.yml +++ b/.github/workflows/jest-coverage.yml @@ -17,7 +17,7 @@ jobs: if: "!contains(github.event.head_commit.message, '[skip ci]')" steps: - uses: actions/checkout@v3 - - uses: pnpm/action-setup@v2.2.4 + - uses: pnpm/action-setup@v2.4.0 with: version: latest - uses: ArtiomTr/jest-coverage-report-action@v2 diff --git a/.github/workflows/node.js.yml b/.github/workflows/node.js.yml index a705eb11..52aca7af 100644 --- a/.github/workflows/node.js.yml +++ b/.github/workflows/node.js.yml @@ -22,7 +22,7 @@ jobs: name: Node ${{ matrix.node }} sample steps: - uses: actions/checkout@v3 - - uses: pnpm/action-setup@v2.2.4 + - uses: pnpm/action-setup@v2.4.0 with: version: latest - name: Use Node.js ${{ matrix.node-version }} diff --git a/CHANGELOG.md b/CHANGELOG.md index 655a6ecf..190da1a6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,15 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +## [1.7.0](https://github.com/djdembeck/audnexus/compare/v1.6.0...v1.7.0) (2023-08-19) + + +### Features + +* **helper:** :sparkles: remove links, emails, and handles from descriptions ([e80819d](https://github.com/djdembeck/audnexus/commit/e80819dbfd069c5ac6581d669a1979a4b3695935)) +* **schema:** :sparkles: add `copyright` and `isbn` fields ([d9bf840](https://github.com/djdembeck/audnexus/commit/d9bf840ffe58a89ce2e931234f2c88bdd885600e)) +* **schema:** :sparkles: use `adult` data from audible in form of `isAdult` ([feec8d8](https://github.com/djdembeck/audnexus/commit/feec8d80916eeee48cf65598f8d3838ed7d6f414)) + ## [1.6.0](https://github.com/djdembeck/audnexus/compare/v1.5.0...v1.6.0) (2023-07-30) diff --git a/README.md b/README.md index ea7dd75f..d272f38f 100644 --- a/README.md +++ b/README.md @@ -86,7 +86,7 @@ Pre-rendered HTML documentation is also included in docs/index.html. HTML can be re-generated from the spec, using: ``` -redoc-cli build docs/spec/audnexus.yaml -o docs/index.html +pnpm run build-docs ``` ## 🚀 Deployment diff --git a/docker-compose.yml b/docker-compose.yml index 60ddbf61..47d27680 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,19 +1,19 @@ -version: '3.7' +version: "3.7" services: node-server: image: ghcr.io/laxamentumtech/audnexus:develop restart: always environment: - - ADP_TOKEN=${NODE_ADP_TOKEN} - - MAX_REQUESTS=${NODE_MAX_REQUESTS} - - MONGODB_URI=${NODE_MONGODB_URI} - - PRIVATE_KEY=${NODE_PRIVATE_KEY} - - REDIS_URL=${NODE_REDIS_URL} - - UPDATE_INTERVAL=${NODE_UPDATE_INTERVAL} - - UPDATE_THRESHOLD=${NODE_UPDATE_THRESHOLD} + ADP_TOKEN: ${NODE_ADP_TOKEN} + MAX_REQUESTS: ${NODE_MAX_REQUESTS:-300} + MONGODB_URI: ${NODE_MONGODB_URI:-mongodb://mongo:27017/audnexus} + PRIVATE_KEY: ${NODE_PRIVATE_KEY} + REDIS_URL: ${NODE_REDIS_URL:-redis://redis:6379} + UPDATE_INTERVAL: ${NODE_UPDATE_INTERVAL:-30} + UPDATE_THRESHOLD: ${NODE_UPDATE_THRESHOLD:-7} ports: - - '3000:3000' + - "3000:3000" depends_on: - mongo - redis @@ -22,12 +22,12 @@ services: - internal deploy: labels: - - 'traefik.enable=true' - - 'traefik.docker.network=traefik-overlay' - - 'traefik.http.routers.node-server.rule=Host(`${TRAEFIK_DOMAIN}`)' - - 'traefik.http.routers.node-server.entrypoints=websecure' - - 'traefik.http.routers.redirs.entrypoints=websecure' - - 'traefik.http.services.node-server.loadbalancer.server.port=3000' + - "traefik.enable=true" + - "traefik.docker.network=traefik-overlay" + - "traefik.http.routers.node-server.rule=Host(`${TRAEFIK_DOMAIN}`)" + - "traefik.http.routers.node-server.entrypoints=websecure" + - "traefik.http.routers.redirs.entrypoints=websecure" + - "traefik.http.services.node-server.loadbalancer.server.port=3000" replicas: 15 mongo: @@ -48,15 +48,15 @@ services: image: traefik:v3.0 restart: always command: - - '--providers.docker=true' - - '--entryPoints.websecure.address=:443' - - '--providers.docker.exposedbydefault=false' - - '--entrypoints.websecure.http.tls=true' - - '--certificatesresolvers.myresolver.acme.tlschallenge=true' - - '--certificatesresolvers.myresolver.acme.email=${TRAEFIK_EMAIL}' - - '--certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json' + - "--providers.docker=true" + - "--entryPoints.websecure.address=:443" + - "--providers.docker.exposedbydefault=false" + - "--entrypoints.websecure.http.tls=true" + - "--certificatesresolvers.myresolver.acme.tlschallenge=true" + - "--certificatesresolvers.myresolver.acme.email=${TRAEFIK_EMAIL}" + - "--certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json" ports: - - '443:443' + - "443:443" volumes: - /mnt/docker/letsencrypt:/letsencrypt - /var/run/docker.sock:/var/run/docker.sock:ro diff --git a/docs/index.html b/docs/index.html index 784b6e9e..d0ec2fcd 100644 --- a/docs/index.html +++ b/docs/index.html @@ -12,2168 +12,363 @@ margin: 0; } - -

Audnexus (1.4.0)

Download OpenAPI specification:Download

License: GPL v3

Aggegate audiobook data

-

Authors

Author functions

-

Find authors by name

Returns a list of authors, based on search query provided

-
query Parameters
name
required
string

Name to search with

-
region
string
Default: "us"
Enum: "au" "ca" "de" "es" "fr" "in" "it" "jp" "us" "uk"

Region code

-

Responses

Response samples

Content type
[
  • {
    }
]

Find author by ID

Returns a single author

-
path Parameters
ASIN
required
string

ID of author to return

-
query Parameters
update
string
Enum: "0" "1"

Have server check for updated data upstream

-
region
string
Default: "us"
Enum: "au" "ca" "de" "es" "fr" "in" "it" "jp" "us" "uk"

Region code

-

Responses

Response samples

Content type
{
  • "asin": "B00G0WYW92",
  • "description": "ANDY WEIR built a two-decade career as a software engineer until the success of his first published novel, The Martian, allowed him to live out his dream of writing full-time. He is a lifelong space nerd and a devoted hobbyist of such subjects as relativistic physics, orbital mechanics, and the history of manned spaceflight. He also mixes a mean cocktail. He lives in California.",
  • "genres": [
    ],
  • "name": "Andy Weir",
  • "region": "us",
  • "similar": [
    ]
}

Deletes a author

Deletes a single author

-
path Parameters
ASIN
required
string

Author id to delete

-
query Parameters
region
string
Default: "us"
Enum: "au" "ca" "de" "es" "fr" "in" "it" "jp" "us" "uk"

Region code

-

Responses

Response samples

Content type
application/json
{
  • "message": "string"
}

Books

Book functions

-

Find book by ID

Returns a single book

-
path Parameters
ASIN
required
string

ID of book to return

-
query Parameters
seedAuthors
number
Enum: 0 1

Whether to seed authors of book

-
update
number
Enum: 0 1

Have server check for updated data upstream

-
region
string
Default: "us"
Enum: "au" "ca" "de" "es" "fr" "in" "it" "jp" "us" "uk"

Region code

-

Responses

Response samples

Content type
{
  • "asin": "B08G9PRS1K",
  • "authors": [
    ],
  • "description": "Ryland Grace is the sole survivor on a desperate, last-chance mission - and if he fails, humanity and the Earth itself will perish. Except that right now, he doesn't know that. He can't even remember his own name, let alone the nature of his assignment or how to complete it....",
  • "formatType": "unabridged",
  • "genres": [
    ],
  • "language": "english",
  • "narrators": [
    ],
  • "publisherName": "Audible Studios",
  • "rating": "4.9",
  • "region": "us",
  • "releaseDate": "2021-05-04T00:00:00.000Z",
  • "runtimeLengthMin": 970,
  • "summary": "<p><b>Winner of the 2022 Audie Awards Audiobook of the Year.</b></p> <p><b>Number-One Audible and</b><b><i> New York Times</i></b><b> Audio Best Seller</b></p> <p><b>A lone astronaut must save the earth from disaster in this incredible new science-based thriller from the number-one </b><b><i>New York Times</i></b><b> best-selling author of </b><b><i>The Martian</i></b><b>.</b></p> <p>Ryland Grace is the sole survivor on a desperate, last-chance mission - and if he fails, humanity and the Earth itself will perish.</p> <p>Except that right now, he doesn't know that. He can't even remember his own name, let alone the nature of his assignment or how to complete it.</p> <p>All he knows is that he's been asleep for a very, very long time. And he's just been awakened to find himself millions of miles from home, with nothing but two corpses for company.</p> <p>His crewmates dead, his memories fuzzily returning, he realizes that an impossible task now confronts him. Alone on this tiny ship that's been cobbled together by every government and space agency on the planet and hurled into the depths of space, it's up to him to conquer an extinction-level threat to our species.</p> <p>And thanks to an unexpected ally, he just might have a chance.</p> <p>Part scientific mystery, part dazzling interstellar journey, <i>Project Hail Mary</i> is a tale of discovery, speculation, and survival to rival <i>The Martian</i> - while taking us to places it never dreamed of going.</p> <p>PLEASE NOTE: To accommodate this audio edition, some changes to the original text have been made with the approval of author Andy Weir.</p>",
  • "title": "Project Hail Mary"
}

Deletes a book

Deletes a single book

-
path Parameters
ASIN
required
string

Book id to delete

-
query Parameters
region
string
Default: "us"
Enum: "au" "ca" "de" "es" "fr" "in" "it" "jp" "us" "uk"

Region code

-

Responses

Response samples

Content type
application/json
{
  • "message": "string"
}

Chapters

Chapter functions

-

Find chapters by ASIN

Returns a single book's chapters

-
path Parameters
ASIN
required
string

ID of book to return

-
query Parameters
update
number
Enum: 0 1

Have server check for updated data upstream

-
region
string
Default: "us"
Enum: "au" "ca" "de" "es" "fr" "in" "it" "jp" "us" "uk"

Region code

-

Responses

Response samples

Content type
{
  • "asin": "B08G9PRS1K",
  • "brandIntroDurationMs": 2043,
  • "brandOutroDurationMs": 5061,
  • "chapters": [
    ],
  • "isAccurate": true,
  • "region": "us",
  • "runtimeLengthMs": 58252995,
  • "runtimeLengthSec": 58253
}

Delete chapters by ASIN

Deletes a single book's chapters

-
path Parameters
ASIN
required
string

Audible.com ID

-
query Parameters
region
string
Default: "us"
Enum: "au" "ca" "de" "es" "fr" "in" "it" "jp" "us" "uk"

Region code

-

Responses

Response samples

Content type
application/json
{
  • "message": "string"
}

Search

Search functions

-

Find authors by name

Returns a list of authors, based on search query provided

-
query Parameters
name
required
string

Name to search with

-
region
string
Default: "us"
Enum: "au" "ca" "de" "es" "fr" "in" "it" "jp" "us" "uk"

Region code

-

Responses

Response samples

Content type
[
  • {
    }
]
- + " fill="currentColor">

Audnexus (1.7.0)

Download OpenAPI specification:Download

License: GPL v3

Aggegate audiobook data

+

Authors

Author functions

+

Find authors by name

Returns a list of authors, based on search query provided

+
query Parameters
name
required
string

Name to search with

+
region
string
Default: "us"
Enum: "au" "ca" "de" "es" "fr" "in" "it" "jp" "us" "uk"

Region code

+

Responses

Response samples

Content type
[
  • {
    }
]

Find author by ID

Returns a single author

+
path Parameters
ASIN
required
string

ID of author to return

+
query Parameters
update
string
Enum: "0" "1"

Have server check for updated data upstream

+
region
string
Default: "us"
Enum: "au" "ca" "de" "es" "fr" "in" "it" "jp" "us" "uk"

Region code

+

Responses

Response samples

Content type
{
  • "asin": "B00G0WYW92",
  • "description": "ANDY WEIR built a two-decade career as a software engineer until the success of his first published novel, The Martian, allowed him to live out his dream of writing full-time. He is a lifelong space nerd and a devoted hobbyist of such subjects as relativistic physics, orbital mechanics, and the history of manned spaceflight. He also mixes a mean cocktail. He lives in California.",
  • "genres": [
    ],
  • "name": "Andy Weir",
  • "region": "us",
  • "similar": [
    ]
}

Deletes a author

Deletes a single author

+
path Parameters
ASIN
required
string

Author id to delete

+
query Parameters
region
string
Default: "us"
Enum: "au" "ca" "de" "es" "fr" "in" "it" "jp" "us" "uk"

Region code

+

Responses

Response samples

Content type
application/json
{
  • "message": "string"
}

Books

Book functions

+

Find book by ID

Returns a single book

+
path Parameters
ASIN
required
string

ID of book to return

+
query Parameters
seedAuthors
number
Enum: 0 1

Whether to seed authors of book

+
update
number
Enum: 0 1

Have server check for updated data upstream

+
region
string
Default: "us"
Enum: "au" "ca" "de" "es" "fr" "in" "it" "jp" "us" "uk"

Region code

+

Responses

Response samples

Content type
{
  • "asin": "B08G9PRS1K",
  • "authors": [
    ],
  • "copyright": 2021,
  • "description": "Ryland Grace is the sole survivor on a desperate, last-chance mission - and if he fails, humanity and the Earth itself will perish. Except that right now, he doesn't know that. He can't even remember his own name, let alone the nature of his assignment or how to complete it....",
  • "formatType": "unabridged",
  • "genres": [
    ],
  • "isAdult": false,
  • "isbn": "9781603935470",
  • "language": "english",
  • "narrators": [
    ],
  • "publisherName": "Audible Studios",
  • "rating": "4.9",
  • "region": "us",
  • "releaseDate": "2021-05-04T00:00:00.000Z",
  • "runtimeLengthMin": 970,
  • "summary": "<p><b><i>Winner of the 2022 Audie Awards' Audiobook of the Year</i></b></p> <p><b><i>Number-One Audible and </i></b><b>New York Times</b><b><i> Audio Best Seller</i></b></p> <p><b><i>More than one million audiobooks sold</i></b></p> <p><b>A lone astronaut must save the earth from disaster in this incredible new science-based thriller from the number-one </b><b><i>New York Times</i></b><b> best-selling author of </b><b><i>The Martian</i></b><b>.</b></p> <p>Ryland Grace is the sole survivor on a desperate, last-chance mission - and if he fails, humanity and the Earth itself will perish.</p> <p>Except that right now, he doesn't know that. He can't even remember his own name, let alone the nature of his assignment or how to complete it.</p> <p>All he knows is that he's been asleep for a very, very long time. And he's just been awakened to find himself millions of miles from home, with nothing but two corpses for company.</p> <p>His crewmates dead, his memories fuzzily returning, he realizes that an impossible task now confronts him. Alone on this tiny ship that's been cobbled together by every government and space agency on the planet and hurled into the depths of space, it's up to him to conquer an extinction-level threat to our species.</p> <p>And thanks to an unexpected ally, he just might have a chance.</p> <p>Part scientific mystery, part dazzling interstellar journey, <i>Project Hail Mary</i> is a tale of discovery, speculation, and survival to rival <i>The Martian</i> - while taking us to places it never dreamed of going.</p> <p>PLEASE NOTE: To accommodate this audio edition, some changes to the original text have been made with the approval of author Andy Weir.</p>",
  • "title": "Project Hail Mary"
}

Deletes a book

Deletes a single book

+
path Parameters
ASIN
required
string

Book id to delete

+
query Parameters
region
string
Default: "us"
Enum: "au" "ca" "de" "es" "fr" "in" "it" "jp" "us" "uk"

Region code

+

Responses

Response samples

Content type
application/json
{
  • "message": "string"
}

Chapters

Chapter functions

+

Find chapters by ASIN

Returns a single book's chapters

+
path Parameters
ASIN
required
string

ID of book to return

+
query Parameters
update
number
Enum: 0 1

Have server check for updated data upstream

+
region
string
Default: "us"
Enum: "au" "ca" "de" "es" "fr" "in" "it" "jp" "us" "uk"

Region code

+

Responses

Response samples

Content type
{
  • "asin": "B08G9PRS1K",
  • "brandIntroDurationMs": 2043,
  • "brandOutroDurationMs": 5061,
  • "chapters": [
    ],
  • "isAccurate": true,
  • "region": "us",
  • "runtimeLengthMs": 58252995,
  • "runtimeLengthSec": 58253
}

Delete chapters by ASIN

Deletes a single book's chapters

+
path Parameters
ASIN
required
string

Audible.com ID

+
query Parameters
region
string
Default: "us"
Enum: "au" "ca" "de" "es" "fr" "in" "it" "jp" "us" "uk"

Region code

+

Responses

Response samples

Content type
application/json
{
  • "message": "string"
}

Search

Search functions

+

Find authors by name

Returns a list of authors, based on search query provided

+
query Parameters
name
required
string

Name to search with

+
region
string
Default: "us"
Enum: "au" "ca" "de" "es" "fr" "in" "it" "jp" "us" "uk"

Region code

+

Responses

Response samples

Content type
[
  • {
    }
]
+ - \ No newline at end of file + diff --git a/docs/spec/audnexus.yaml b/docs/spec/audnexus.yaml index 78704d2c..92141f9c 100644 --- a/docs/spec/audnexus.yaml +++ b/docs/spec/audnexus.yaml @@ -7,7 +7,7 @@ info: license: name: GPL v3 url: "https://www.gnu.org/licenses/gpl-3.0.en.html" - version: 1.4.0 + version: 1.7.0 externalDocs: description: Find out more about Audnexus url: "https://github.com/djdembeck/audnexus" @@ -87,8 +87,9 @@ paths: value: asin: B08G9PRS1K authors: - - name: Andy Weir - asin: B00G0WYW92 + - asin: B00G0WYW92 + name: Andy Weir + copyright: 2021 description: "Ryland Grace is the sole survivor on a desperate, last-chance mission - and if he fails, humanity and the Earth itself will perish. Except that right now, he doesn't know that. He can't even remember his own name, let alone the nature of his assignment or how to complete it...." formatType: unabridged genres: @@ -108,6 +109,8 @@ paths: name: Space Opera type: tag image: "https://m.media-amazon.com/images/I/91vS2L5YfEL.jpg" + isAdult: false + isbn: "9781603935470" language: english narrators: - name: Ray Porter @@ -116,7 +119,7 @@ paths: region: us releaseDate: "2021-05-04T00:00:00.000Z" runtimeLengthMin: 970 - summary: "

Winner of the 2022 Audie Awards Audiobook of the Year.

Number-One Audible and New York Times Audio Best Seller

A lone astronaut must save the earth from disaster in this incredible new science-based thriller from the number-one New York Times best-selling author of The Martian.

Ryland Grace is the sole survivor on a desperate, last-chance mission - and if he fails, humanity and the Earth itself will perish.

Except that right now, he doesn't know that. He can't even remember his own name, let alone the nature of his assignment or how to complete it.

All he knows is that he's been asleep for a very, very long time. And he's just been awakened to find himself millions of miles from home, with nothing but two corpses for company.

His crewmates dead, his memories fuzzily returning, he realizes that an impossible task now confronts him. Alone on this tiny ship that's been cobbled together by every government and space agency on the planet and hurled into the depths of space, it's up to him to conquer an extinction-level threat to our species.

And thanks to an unexpected ally, he just might have a chance.

Part scientific mystery, part dazzling interstellar journey, Project Hail Mary is a tale of discovery, speculation, and survival to rival The Martian - while taking us to places it never dreamed of going.

PLEASE NOTE: To accommodate this audio edition, some changes to the original text have been made with the approval of author Andy Weir.

" + summary: "

Winner of the 2022 Audie Awards' Audiobook of the Year

Number-One Audible and New York Times Audio Best Seller

More than one million audiobooks sold

A lone astronaut must save the earth from disaster in this incredible new science-based thriller from the number-one New York Times best-selling author of The Martian.

Ryland Grace is the sole survivor on a desperate, last-chance mission - and if he fails, humanity and the Earth itself will perish.

Except that right now, he doesn't know that. He can't even remember his own name, let alone the nature of his assignment or how to complete it.

All he knows is that he's been asleep for a very, very long time. And he's just been awakened to find himself millions of miles from home, with nothing but two corpses for company.

His crewmates dead, his memories fuzzily returning, he realizes that an impossible task now confronts him. Alone on this tiny ship that's been cobbled together by every government and space agency on the planet and hurled into the depths of space, it's up to him to conquer an extinction-level threat to our species.

And thanks to an unexpected ally, he just might have a chance.

Part scientific mystery, part dazzling interstellar journey, Project Hail Mary is a tale of discovery, speculation, and survival to rival The Martian - while taking us to places it never dreamed of going.

PLEASE NOTE: To accommodate this audio edition, some changes to the original text have been made with the approval of author Andy Weir.

" title: Project Hail Mary application/xml: schema: @@ -892,6 +895,10 @@ components: type: array items: $ref: "#/components/schemas/Person" + copyright: + type: integer + minimum: 4 + maximum: 4 description: type: string formatType: @@ -903,6 +910,10 @@ components: image: type: string format: uri + isAdult: + type: boolean + isbn: + type: string language: type: string narrators: diff --git a/package.json b/package.json index b7fde48c..8cd9a0cb 100644 --- a/package.json +++ b/package.json @@ -1,17 +1,18 @@ { "name": "audnexus", - "version": "1.6.0", + "version": "1.7.0", "description": "An API for aggregating audiobook data", "repository": { "type": "git", "url": "https://github.com/djdembeck/audnexus" }, "scripts": { + "build-docs": "redocly build-docs docs/spec/audnexus.yaml -o docs/index.html", "build-ts": "tsc", "build": "pnpm run build-ts", "debug": "pnpm run build && pnpm run watch-debug", - "format": "prettier --config .prettierrc --ignore-path .gitignore --write --plugin-search-dir=. 'src/**/*.ts'", - "lint": "prettier --config .prettierrc --ignore-path .gitignore --check --plugin-search-dir=. 'src/**/*.ts' && tsc --noEmit && eslint \"**/*.{js,ts}\" --quiet --fix", + "format": "prettier --config .prettierrc --ignore-path .gitignore --write 'src/**/*.ts'", + "lint": "prettier --config .prettierrc --ignore-path .gitignore --check 'src/**/*.ts' && tsc --noEmit && eslint \"**/*.{js,ts}\" --quiet --fix --ignore-path .gitignore", "preinstall": "npx only-allow pnpm", "release": "standard-version", "serve-debug": "nodemon --inspect dist/server.js", @@ -35,37 +36,37 @@ "axios": "^1.2.4", "cheerio": "1.0.0-rc.12", "domhandler": "5.0.3", - "fastify": "4.20.0", + "fastify": "4.21.0", "html-to-text": "9.0.5", - "jest-mock-extended": "3.0.4", + "jest-mock-extended": "3.0.5", "jsrsasign": "^10.8.6", "lodash": "4.17.21", "module-alias": "2.2.3", "moment": "^2.29.4", "mongodb": "5.7.0", - "papr": "13.1.0", + "papr": "14.0.0", "toad-scheduler": "^3.0.0", "typescript": "5.1.6", "zod": "^3.20.6" }, "devDependencies": { "@jest/types": "29.6.1", + "@redocly/cli": "^1.0.2", "@types/html-to-text": "9.0.1", "@types/jest": "29.5.3", "@types/jsrsasign": "10.5.8", - "@types/lodash": "4.14.195", - "@types/node": "18.16.19", - "@typescript-eslint/eslint-plugin": "5.38.1", - "@typescript-eslint/parser": "5.38.1", + "@types/lodash": "4.14.197", + "@types/node": "18.17.5", + "@typescript-eslint/eslint-plugin": "6.3.0", + "@typescript-eslint/parser": "6.3.0", "concurrently": "8.2.0", - "eslint": "8.24.0", - "eslint-config-prettier": "8.5.0", - "eslint-plugin-jest": "27.0.4", + "eslint": "8.46.0", + "eslint-config-prettier": "9.0.0", + "eslint-plugin-jest": "27.2.3", "eslint-plugin-simple-import-sort": "10.0.0", - "jest": "29.6.1", - "nodemon": "2.0.22", - "prettier": "2.8.8", - "redoc-cli": "^0.13.21", + "jest": "29.6.2", + "nodemon": "3.0.1", + "prettier": "3.0.1", "standard-version": "9.5.0", "ts-jest": "29.1.1", "ts-node": "10.9.1" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index edd5a7b9..e24067d1 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -19,7 +19,7 @@ dependencies: version: 6.1.1 '@fastify/schedule': specifier: ^4.1.1 - version: 4.1.1(fastify@4.20.0)(toad-scheduler@3.0.0) + version: 4.1.1(fastify@4.21.0)(toad-scheduler@3.0.0) axios: specifier: ^1.2.4 version: 1.2.4 @@ -30,14 +30,14 @@ dependencies: specifier: 5.0.3 version: 5.0.3 fastify: - specifier: 4.20.0 - version: 4.20.0 + specifier: 4.21.0 + version: 4.21.0 html-to-text: specifier: 9.0.5 version: 9.0.5 jest-mock-extended: - specifier: 3.0.4 - version: 3.0.4(jest@29.6.1)(typescript@5.1.6) + specifier: 3.0.5 + version: 3.0.5(jest@29.6.2)(typescript@5.1.6) jsrsasign: specifier: ^10.8.6 version: 10.8.6 @@ -54,8 +54,8 @@ dependencies: specifier: 5.7.0 version: 5.7.0 papr: - specifier: 13.1.0 - version: 13.1.0(mongodb@5.7.0) + specifier: 14.0.0 + version: 14.0.0(mongodb@5.7.0) toad-scheduler: specifier: ^3.0.0 version: 3.0.0 @@ -70,6 +70,9 @@ devDependencies: '@jest/types': specifier: 29.6.1 version: 29.6.1 + '@redocly/cli': + specifier: ^1.0.2 + version: 1.0.2(@babel/core@7.22.10)(core-js@3.32.1)(react-is@18.2.0)(webpack@5.88.2) '@types/html-to-text': specifier: 9.0.1 version: 9.0.1 @@ -80,53 +83,50 @@ devDependencies: specifier: 10.5.8 version: 10.5.8 '@types/lodash': - specifier: 4.14.195 - version: 4.14.195 + specifier: 4.14.197 + version: 4.14.197 '@types/node': - specifier: 18.16.19 - version: 18.16.19 + specifier: 18.17.5 + version: 18.17.5 '@typescript-eslint/eslint-plugin': - specifier: 5.38.1 - version: 5.38.1(@typescript-eslint/parser@5.38.1)(eslint@8.24.0)(typescript@5.1.6) + specifier: 6.3.0 + version: 6.3.0(@typescript-eslint/parser@6.3.0)(eslint@8.46.0)(typescript@5.1.6) '@typescript-eslint/parser': - specifier: 5.38.1 - version: 5.38.1(eslint@8.24.0)(typescript@5.1.6) + specifier: 6.3.0 + version: 6.3.0(eslint@8.46.0)(typescript@5.1.6) concurrently: specifier: 8.2.0 version: 8.2.0 eslint: - specifier: 8.24.0 - version: 8.24.0 + specifier: 8.46.0 + version: 8.46.0 eslint-config-prettier: - specifier: 8.5.0 - version: 8.5.0(eslint@8.24.0) + specifier: 9.0.0 + version: 9.0.0(eslint@8.46.0) eslint-plugin-jest: - specifier: 27.0.4 - version: 27.0.4(@typescript-eslint/eslint-plugin@5.38.1)(eslint@8.24.0)(jest@29.6.1)(typescript@5.1.6) + specifier: 27.2.3 + version: 27.2.3(@typescript-eslint/eslint-plugin@6.3.0)(eslint@8.46.0)(jest@29.6.2)(typescript@5.1.6) eslint-plugin-simple-import-sort: specifier: 10.0.0 - version: 10.0.0(eslint@8.24.0) + version: 10.0.0(eslint@8.46.0) jest: - specifier: 29.6.1 - version: 29.6.1(@types/node@18.16.19)(ts-node@10.9.1) + specifier: 29.6.2 + version: 29.6.2(@types/node@18.17.5)(ts-node@10.9.1) nodemon: - specifier: 2.0.22 - version: 2.0.22 + specifier: 3.0.1 + version: 3.0.1 prettier: - specifier: 2.8.8 - version: 2.8.8 - redoc-cli: - specifier: ^0.13.21 - version: 0.13.21(@babel/core@7.22.9)(core-js@3.31.1)(react-is@18.2.0)(webpack@5.88.2) + specifier: 3.0.1 + version: 3.0.1 standard-version: specifier: 9.5.0 version: 9.5.0 ts-jest: specifier: 29.1.1 - version: 29.1.1(@babel/core@7.22.9)(@jest/types@29.6.1)(jest@29.6.1)(typescript@5.1.6) + version: 29.1.1(@babel/core@7.22.10)(@jest/types@29.6.1)(jest@29.6.2)(typescript@5.1.6) ts-node: specifier: 10.9.1 - version: 10.9.1(@types/node@18.16.19)(typescript@5.1.6) + version: 10.9.1(@types/node@18.17.5)(typescript@5.1.6) packages: @@ -140,32 +140,33 @@ packages: engines: {node: '>=6.0.0'} dependencies: '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.18 + '@jridgewell/trace-mapping': 0.3.19 - /@babel/code-frame@7.22.5: - resolution: {integrity: sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==} + /@babel/code-frame@7.22.10: + resolution: {integrity: sha512-/KKIMG4UEL35WmI9OlvMhurwtytjvXoFcGNrOvyG9zIzA8YmPjVtIZUf7b05+TPO7G7/GEmLHDaoCgACHl9hhA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/highlight': 7.22.5 + '@babel/highlight': 7.22.10 + chalk: 2.4.2 /@babel/compat-data@7.22.9: resolution: {integrity: sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==} engines: {node: '>=6.9.0'} - /@babel/core@7.22.9: - resolution: {integrity: sha512-G2EgeufBcYw27U4hhoIwFcgc1XU7TlXJ3mv04oOv1WCuo900U/anZSPzEqNjwdjgffkk2Gs0AN0dW1CKVLcG7w==} + /@babel/core@7.22.10: + resolution: {integrity: sha512-fTmqbbUBAwCcre6zPzNngvsI0aNrPZe77AeqvDxWM9Nm+04RrJ3CAmGHA9f7lJQY6ZMhRztNemy4uslDxTX4Qw==} engines: {node: '>=6.9.0'} dependencies: '@ampproject/remapping': 2.2.1 - '@babel/code-frame': 7.22.5 - '@babel/generator': 7.22.9 - '@babel/helper-compilation-targets': 7.22.9(@babel/core@7.22.9) - '@babel/helper-module-transforms': 7.22.9(@babel/core@7.22.9) - '@babel/helpers': 7.22.6 - '@babel/parser': 7.22.7 + '@babel/code-frame': 7.22.10 + '@babel/generator': 7.22.10 + '@babel/helper-compilation-targets': 7.22.10 + '@babel/helper-module-transforms': 7.22.9(@babel/core@7.22.10) + '@babel/helpers': 7.22.10 + '@babel/parser': 7.22.10 '@babel/template': 7.22.5 - '@babel/traverse': 7.22.8(supports-color@5.5.0) - '@babel/types': 7.22.5 + '@babel/traverse': 7.22.10(supports-color@5.5.0) + '@babel/types': 7.22.10 convert-source-map: 1.9.0 debug: 4.3.4(supports-color@5.5.0) gensync: 1.0.0-beta.2 @@ -174,32 +175,29 @@ packages: transitivePeerDependencies: - supports-color - /@babel/generator@7.22.9: - resolution: {integrity: sha512-KtLMbmicyuK2Ak/FTCJVbDnkN1SlT8/kceFTiuDiiRUUSMnHMidxSCdG4ndkTOHHpoomWe/4xkvHkEOncwjYIw==} + /@babel/generator@7.22.10: + resolution: {integrity: sha512-79KIf7YiWjjdZ81JnLujDRApWtl7BxTqWD88+FFdQEIOG8LJ0etDOM7CXuIgGJa55sGOwZVwuEsaLEm0PJ5/+A==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.22.5 + '@babel/types': 7.22.10 '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.18 + '@jridgewell/trace-mapping': 0.3.19 jsesc: 2.5.2 /@babel/helper-annotate-as-pure@7.22.5: resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.22.5 + '@babel/types': 7.22.10 dev: true - /@babel/helper-compilation-targets@7.22.9(@babel/core@7.22.9): - resolution: {integrity: sha512-7qYrNM6HjpnPHJbopxmb8hSPoZ0gsX8IvUS32JGVoy+pU9e5N0nLr1VjJoR6kA4d9dmGLxNYOjeB8sUDal2WMw==} + /@babel/helper-compilation-targets@7.22.10: + resolution: {integrity: sha512-JMSwHD4J7SLod0idLq5PKgI+6g/hLD/iuWBq08ZX49xE14VpVEojJ5rHWptpirV2j020MvypRLAXAO50igCJ5Q==} engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 dependencies: '@babel/compat-data': 7.22.9 - '@babel/core': 7.22.9 '@babel/helper-validator-option': 7.22.5 - browserslist: 4.21.9 + browserslist: 4.21.10 lru-cache: 5.1.1 semver: 6.3.1 @@ -212,27 +210,27 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/template': 7.22.5 - '@babel/types': 7.22.5 + '@babel/types': 7.22.10 /@babel/helper-hoist-variables@7.22.5: resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.22.5 + '@babel/types': 7.22.10 /@babel/helper-module-imports@7.22.5: resolution: {integrity: sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.22.5 + '@babel/types': 7.22.10 - /@babel/helper-module-transforms@7.22.9(@babel/core@7.22.9): + /@babel/helper-module-transforms@7.22.9(@babel/core@7.22.10): resolution: {integrity: sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.22.9 + '@babel/core': 7.22.10 '@babel/helper-environment-visitor': 7.22.5 '@babel/helper-module-imports': 7.22.5 '@babel/helper-simple-access': 7.22.5 @@ -247,13 +245,13 @@ packages: resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.22.5 + '@babel/types': 7.22.10 /@babel/helper-split-export-declaration@7.22.6: resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.22.5 + '@babel/types': 7.22.10 /@babel/helper-string-parser@7.22.5: resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==} @@ -267,180 +265,180 @@ packages: resolution: {integrity: sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==} engines: {node: '>=6.9.0'} - /@babel/helpers@7.22.6: - resolution: {integrity: sha512-YjDs6y/fVOYFV8hAf1rxd1QvR9wJe1pDBZ2AREKq/SDayfPzgk0PBnVuTCE5X1acEpMMNOVUqoe+OwiZGJ+OaA==} + /@babel/helpers@7.22.10: + resolution: {integrity: sha512-a41J4NW8HyZa1I1vAndrraTlPZ/eZoga2ZgS7fEr0tZJGVU4xqdE80CEm0CcNjha5EZ8fTBYLKHF0kqDUuAwQw==} engines: {node: '>=6.9.0'} dependencies: '@babel/template': 7.22.5 - '@babel/traverse': 7.22.8(supports-color@5.5.0) - '@babel/types': 7.22.5 + '@babel/traverse': 7.22.10(supports-color@5.5.0) + '@babel/types': 7.22.10 transitivePeerDependencies: - supports-color - /@babel/highlight@7.22.5: - resolution: {integrity: sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==} + /@babel/highlight@7.22.10: + resolution: {integrity: sha512-78aUtVcT7MUscr0K5mIEnkwxPE0MaxkR5RxRwuHaQ+JuU5AmTPhY+do2mdzVTnIJJpyBglql2pehuBIWHug+WQ==} engines: {node: '>=6.9.0'} dependencies: '@babel/helper-validator-identifier': 7.22.5 chalk: 2.4.2 js-tokens: 4.0.0 - /@babel/parser@7.22.7: - resolution: {integrity: sha512-7NF8pOkHP5o2vpmGgNGcfAeCvOYhGLyA3Z4eBQkT1RJlWu47n63bCs93QfJ2hIAFCil7L5P2IWhs1oToVgrL0Q==} + /@babel/parser@7.22.10: + resolution: {integrity: sha512-lNbdGsQb9ekfsnjFGhEiF4hfFqGgfOP3H3d27re3n+CGhNuTSUEQdfWk556sTLNTloczcdM5TYF2LhzmDQKyvQ==} engines: {node: '>=6.0.0'} hasBin: true dependencies: - '@babel/types': 7.22.5 + '@babel/types': 7.22.10 - /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.22.9): + /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.22.10): resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.9 + '@babel/core': 7.22.10 '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.22.9): + /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.22.10): resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.9 + '@babel/core': 7.22.10 '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.22.9): + /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.22.10): resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.9 + '@babel/core': 7.22.10 '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.22.9): + /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.22.10): resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.9 + '@babel/core': 7.22.10 '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.22.9): + /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.22.10): resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.9 + '@babel/core': 7.22.10 '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-syntax-jsx@7.22.5(@babel/core@7.22.9): + /@babel/plugin-syntax-jsx@7.22.5(@babel/core@7.22.10): resolution: {integrity: sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.9 + '@babel/core': 7.22.10 '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.22.9): + /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.22.10): resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.9 + '@babel/core': 7.22.10 '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.22.9): + /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.22.10): resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.9 + '@babel/core': 7.22.10 '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.22.9): + /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.22.10): resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.9 + '@babel/core': 7.22.10 '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.22.9): + /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.22.10): resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.9 + '@babel/core': 7.22.10 '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.22.9): + /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.22.10): resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.9 + '@babel/core': 7.22.10 '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.22.9): + /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.22.10): resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.9 + '@babel/core': 7.22.10 '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.22.9): + /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.22.10): resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.9 + '@babel/core': 7.22.10 '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-syntax-typescript@7.22.5(@babel/core@7.22.9): + /@babel/plugin-syntax-typescript@7.22.5(@babel/core@7.22.10): resolution: {integrity: sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.9 + '@babel/core': 7.22.10 '@babel/helper-plugin-utils': 7.22.5 - /@babel/runtime@7.22.6: - resolution: {integrity: sha512-wDb5pWm4WDdF6LFUde3Jl8WzPA+3ZbxYqkC6xAXuD3irdEHN1k0NfTRrJD8ZD378SJ61miMLCqIOXYhd8x+AJQ==} + /@babel/runtime@7.22.10: + resolution: {integrity: sha512-21t/fkKLMZI4pqP2wlmsQAWnYW1PDyKyyUV4vCi+B25ydmdaYTKXPwCj0BzSUnZf4seIiYvSA3jcZ3gdsMFkLQ==} engines: {node: '>=6.9.0'} dependencies: - regenerator-runtime: 0.13.11 + regenerator-runtime: 0.14.0 dev: true /@babel/template@7.22.5: resolution: {integrity: sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.22.5 - '@babel/parser': 7.22.7 - '@babel/types': 7.22.5 + '@babel/code-frame': 7.22.10 + '@babel/parser': 7.22.10 + '@babel/types': 7.22.10 - /@babel/traverse@7.22.8(supports-color@5.5.0): - resolution: {integrity: sha512-y6LPR+wpM2I3qJrsheCTwhIinzkETbplIgPBbwvqPKc+uljeA5gP+3nP8irdYt1mjQaDnlIcG+dw8OjAco4GXw==} + /@babel/traverse@7.22.10(supports-color@5.5.0): + resolution: {integrity: sha512-Q/urqV4pRByiNNpb/f5OSv28ZlGJiFiiTh+GAHktbIrkPhPbl90+uW6SmpoLyZqutrg9AEaEf3Q/ZBRHBXgxig==} engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.22.5 - '@babel/generator': 7.22.9 + '@babel/code-frame': 7.22.10 + '@babel/generator': 7.22.10 '@babel/helper-environment-visitor': 7.22.5 '@babel/helper-function-name': 7.22.5 '@babel/helper-hoist-variables': 7.22.5 '@babel/helper-split-export-declaration': 7.22.6 - '@babel/parser': 7.22.7 - '@babel/types': 7.22.5 + '@babel/parser': 7.22.10 + '@babel/types': 7.22.10 debug: 4.3.4(supports-color@5.5.0) globals: 11.12.0 transitivePeerDependencies: - supports-color - /@babel/types@7.22.5: - resolution: {integrity: sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==} + /@babel/types@7.22.10: + resolution: {integrity: sha512-obaoigiLrlDZ7TUQln/8m4mSqIW2QFeOrCQc9r+xsaHGNoplVNYlRVpsfE8Vj35GEm2ZH4ZhrNYogs/3fj85kg==} engines: {node: '>=6.9.0'} dependencies: '@babel/helper-string-parser': 7.22.5 @@ -474,24 +472,29 @@ packages: resolution: {integrity: sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==} dev: true - /@eslint-community/eslint-utils@4.4.0(eslint@8.24.0): + /@eslint-community/eslint-utils@4.4.0(eslint@8.46.0): resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 dependencies: - eslint: 8.24.0 - eslint-visitor-keys: 3.4.1 + eslint: 8.46.0 + eslint-visitor-keys: 3.4.3 dev: true - /@eslint/eslintrc@1.4.1: - resolution: {integrity: sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==} + /@eslint-community/regexpp@4.6.2: + resolution: {integrity: sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + dev: true + + /@eslint/eslintrc@2.1.2: + resolution: {integrity: sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: ajv: 6.12.6 debug: 4.3.4(supports-color@5.5.0) espree: 9.6.1 - globals: 13.20.0 + globals: 13.21.0 ignore: 5.2.4 import-fresh: 3.3.0 js-yaml: 4.1.0 @@ -501,8 +504,13 @@ packages: - supports-color dev: true - /@exodus/schemasafe@1.0.1: - resolution: {integrity: sha512-PQdbF8dGd4LnbwBlcc4ML8RKYdplm+e9sUeWBTr4zgF13/Shiuov9XznvM4T8cb1CfyKK21yTUkuAIIh/DAH/g==} + /@eslint/js@8.47.0: + resolution: {integrity: sha512-P6omY1zv5MItm93kLM8s2vr1HICJH8v0dvddDhysbIuZ+vcjOHg5Zbkf1mTkcmi2JA9oBG2anOkRnW8WJTS8Og==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + + /@exodus/schemasafe@1.2.3: + resolution: {integrity: sha512-hmdFF4vVyvXosVdCCnZPCfrgwNPA79y3K5l0QzlKFcK5Qd3nkM9oGKcQYCTnTRWJXIV5SUMkkTFIEIdDFtxQPQ==} dev: true /@fastify/ajv-compiler@3.5.0: @@ -531,7 +539,7 @@ packages: /@fastify/fast-json-stringify-compiler@4.3.0: resolution: {integrity: sha512-aZAXGYo6m22Fk1zZzEUKBvut/CIIQe/BapEORnxiD5Qr0kPHqqI69NtEMCme74h+at72sPhbkb4ZrLd1W3KRLA==} dependencies: - fast-json-stringify: 5.7.0 + fast-json-stringify: 5.8.0 dev: false /@fastify/helmet@11.0.0: @@ -558,19 +566,19 @@ packages: - supports-color dev: false - /@fastify/schedule@4.1.1(fastify@4.20.0)(toad-scheduler@3.0.0): + /@fastify/schedule@4.1.1(fastify@4.21.0)(toad-scheduler@3.0.0): resolution: {integrity: sha512-riIh+eumfpoDDpNqMqzHdzYofWVhaHJYxH69OMQyVzGUJikF5luvr4LMx/uxedE1VJfmHJCUjBuMVcPLB7KsZg==} peerDependencies: fastify: ^4.0.0 toad-scheduler: '>= 2.0.0 < 4' dependencies: - fastify: 4.20.0 + fastify: 4.21.0 fastify-plugin: 4.5.1 toad-scheduler: 3.0.0 dev: false - /@humanwhocodes/config-array@0.10.7: - resolution: {integrity: sha512-MDl6D6sBsaV452/QSdX+4CXIjZhIcI0PELsxUjk4U828yd58vk3bTIvk/6w5FY+4hIy9sLW0sfrV7K7Kc++j/w==} + /@humanwhocodes/config-array@0.11.10: + resolution: {integrity: sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==} engines: {node: '>=10.10.0'} dependencies: '@humanwhocodes/object-schema': 1.2.1 @@ -580,10 +588,6 @@ packages: - supports-color dev: true - /@humanwhocodes/gitignore-to-minimatch@1.0.2: - resolution: {integrity: sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==} - dev: true - /@humanwhocodes/module-importer@1.0.1: resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} engines: {node: '>=12.22'} @@ -616,19 +620,19 @@ packages: resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} engines: {node: '>=8'} - /@jest/console@29.6.1: - resolution: {integrity: sha512-Aj772AYgwTSr5w8qnyoJ0eDYvN6bMsH3ORH1ivMotrInHLKdUz6BDlaEXHdM6kODaBIkNIyQGzsMvRdOv7VG7Q==} + /@jest/console@29.6.2: + resolution: {integrity: sha512-0N0yZof5hi44HAR2pPS+ikJ3nzKNoZdVu8FffRf3wy47I7Dm7etk/3KetMdRUqzVd16V4O2m2ISpNTbnIuqy1w==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.1 - '@types/node': 18.16.19 + '@types/node': 18.17.5 chalk: 4.1.2 - jest-message-util: 29.6.1 - jest-util: 29.6.1 + jest-message-util: 29.6.2 + jest-util: 29.6.2 slash: 3.0.0 - /@jest/core@29.6.1(ts-node@10.9.1): - resolution: {integrity: sha512-CcowHypRSm5oYQ1obz1wfvkjZZ2qoQlrKKvlfPwh5jUXVU12TWr2qMeH8chLMuTFzHh5a1g2yaqlqDICbr+ukQ==} + /@jest/core@29.6.2(ts-node@10.9.1): + resolution: {integrity: sha512-Oj+5B+sDMiMWLhPFF+4/DvHOf+U10rgvCLGPHP8Xlsy/7QxS51aU/eBngudHlJXnaWD5EohAgJ4js+T6pa+zOg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 @@ -636,86 +640,87 @@ packages: node-notifier: optional: true dependencies: - '@jest/console': 29.6.1 - '@jest/reporters': 29.6.1 - '@jest/test-result': 29.6.1 - '@jest/transform': 29.6.1 + '@jest/console': 29.6.2 + '@jest/reporters': 29.6.2 + '@jest/test-result': 29.6.2 + '@jest/transform': 29.6.2 '@jest/types': 29.6.1 - '@types/node': 18.16.19 + '@types/node': 18.17.5 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 3.8.0 exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.5.0 - jest-config: 29.6.1(@types/node@18.16.19)(ts-node@10.9.1) - jest-haste-map: 29.6.1 - jest-message-util: 29.6.1 + jest-config: 29.6.2(@types/node@18.17.5)(ts-node@10.9.1) + jest-haste-map: 29.6.2 + jest-message-util: 29.6.2 jest-regex-util: 29.4.3 - jest-resolve: 29.6.1 - jest-resolve-dependencies: 29.6.1 - jest-runner: 29.6.1 - jest-runtime: 29.6.1 - jest-snapshot: 29.6.1 - jest-util: 29.6.1 - jest-validate: 29.6.1 - jest-watcher: 29.6.1 + jest-resolve: 29.6.2 + jest-resolve-dependencies: 29.6.2 + jest-runner: 29.6.2 + jest-runtime: 29.6.2 + jest-snapshot: 29.6.2 + jest-util: 29.6.2 + jest-validate: 29.6.2 + jest-watcher: 29.6.2 micromatch: 4.0.5 - pretty-format: 29.6.1 + pretty-format: 29.6.2 slash: 3.0.0 strip-ansi: 6.0.1 transitivePeerDependencies: + - babel-plugin-macros - supports-color - ts-node - /@jest/environment@29.6.1: - resolution: {integrity: sha512-RMMXx4ws+Gbvw3DfLSuo2cfQlK7IwGbpuEWXCqyYDcqYTI+9Ju3a5hDnXaxjNsa6uKh9PQF2v+qg+RLe63tz5A==} + /@jest/environment@29.6.2: + resolution: {integrity: sha512-AEcW43C7huGd/vogTddNNTDRpO6vQ2zaQNrttvWV18ArBx9Z56h7BIsXkNFJVOO4/kblWEQz30ckw0+L3izc+Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/fake-timers': 29.6.1 + '@jest/fake-timers': 29.6.2 '@jest/types': 29.6.1 - '@types/node': 18.16.19 - jest-mock: 29.6.1 + '@types/node': 18.17.5 + jest-mock: 29.6.2 - /@jest/expect-utils@29.6.1: - resolution: {integrity: sha512-o319vIf5pEMx0LmzSxxkYYxo4wrRLKHq9dP1yJU7FoPTB0LfAKSz8SWD6D/6U3v/O52t9cF5t+MeJiRsfk7zMw==} + /@jest/expect-utils@29.6.2: + resolution: {integrity: sha512-6zIhM8go3RV2IG4aIZaZbxwpOzz3ZiM23oxAlkquOIole+G6TrbeXnykxWYlqF7kz2HlBjdKtca20x9atkEQYg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: jest-get-type: 29.4.3 - /@jest/expect@29.6.1: - resolution: {integrity: sha512-N5xlPrAYaRNyFgVf2s9Uyyvr795jnB6rObuPx4QFvNJz8aAjpZUDfO4bh5G/xuplMID8PrnuF1+SfSyDxhsgYg==} + /@jest/expect@29.6.2: + resolution: {integrity: sha512-m6DrEJxVKjkELTVAztTLyS/7C92Y2b0VYqmDROYKLLALHn8T/04yPs70NADUYPrV3ruI+H3J0iUIuhkjp7vkfg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - expect: 29.6.1 - jest-snapshot: 29.6.1 + expect: 29.6.2 + jest-snapshot: 29.6.2 transitivePeerDependencies: - supports-color - /@jest/fake-timers@29.6.1: - resolution: {integrity: sha512-RdgHgbXyosCDMVYmj7lLpUwXA4c69vcNzhrt69dJJdf8azUrpRh3ckFCaTPNjsEeRi27Cig0oKDGxy5j7hOgHg==} + /@jest/fake-timers@29.6.2: + resolution: {integrity: sha512-euZDmIlWjm1Z0lJ1D0f7a0/y5Kh/koLFMUBE5SUYWrmy8oNhJpbTBDAP6CxKnadcMLDoDf4waRYCe35cH6G6PA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.1 '@sinonjs/fake-timers': 10.3.0 - '@types/node': 18.16.19 - jest-message-util: 29.6.1 - jest-mock: 29.6.1 - jest-util: 29.6.1 + '@types/node': 18.17.5 + jest-message-util: 29.6.2 + jest-mock: 29.6.2 + jest-util: 29.6.2 - /@jest/globals@29.6.1: - resolution: {integrity: sha512-2VjpaGy78JY9n9370H8zGRCFbYVWwjY6RdDMhoJHa1sYfwe6XM/azGN0SjY8kk7BOZApIejQ1BFPyH7FPG0w3A==} + /@jest/globals@29.6.2: + resolution: {integrity: sha512-cjuJmNDjs6aMijCmSa1g2TNG4Lby/AeU7/02VtpW+SLcZXzOLK2GpN2nLqcFjmhy3B3AoPeQVx7BnyOf681bAw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/environment': 29.6.1 - '@jest/expect': 29.6.1 + '@jest/environment': 29.6.2 + '@jest/expect': 29.6.2 '@jest/types': 29.6.1 - jest-mock: 29.6.1 + jest-mock: 29.6.2 transitivePeerDependencies: - supports-color - /@jest/reporters@29.6.1: - resolution: {integrity: sha512-9zuaI9QKr9JnoZtFQlw4GREQbxgmNYXU6QuWtmuODvk5nvPUeBYapVR/VYMyi2WSx3jXTLJTJji8rN6+Cm4+FA==} + /@jest/reporters@29.6.2: + resolution: {integrity: sha512-sWtijrvIav8LgfJZlrGCdN0nP2EWbakglJY49J1Y5QihcQLfy7ovyxxjJBRXMNltgt4uPtEcFmIMbVshEDfFWw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 @@ -724,12 +729,12 @@ packages: optional: true dependencies: '@bcoe/v8-coverage': 0.2.3 - '@jest/console': 29.6.1 - '@jest/test-result': 29.6.1 - '@jest/transform': 29.6.1 + '@jest/console': 29.6.2 + '@jest/test-result': 29.6.2 + '@jest/transform': 29.6.2 '@jest/types': 29.6.1 - '@jridgewell/trace-mapping': 0.3.18 - '@types/node': 18.16.19 + '@jridgewell/trace-mapping': 0.3.19 + '@types/node': 18.17.5 chalk: 4.1.2 collect-v8-coverage: 1.0.2 exit: 0.1.2 @@ -737,12 +742,12 @@ packages: graceful-fs: 4.2.11 istanbul-lib-coverage: 3.2.0 istanbul-lib-instrument: 5.2.1 - istanbul-lib-report: 3.0.0 + istanbul-lib-report: 3.0.1 istanbul-lib-source-maps: 4.0.1 - istanbul-reports: 3.1.5 - jest-message-util: 29.6.1 - jest-util: 29.6.1 - jest-worker: 29.6.1 + istanbul-reports: 3.1.6 + jest-message-util: 29.6.2 + jest-util: 29.6.2 + jest-worker: 29.6.2 slash: 3.0.0 string-length: 4.0.2 strip-ansi: 6.0.1 @@ -760,43 +765,43 @@ packages: resolution: {integrity: sha512-oA+I2SHHQGxDCZpbrsCQSoMLb3Bz547JnM+jUr9qEbuw0vQlWZfpPS7CO9J7XiwKicEz9OFn/IYoLkkiUD7bzA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jridgewell/trace-mapping': 0.3.18 + '@jridgewell/trace-mapping': 0.3.19 callsites: 3.1.0 graceful-fs: 4.2.11 - /@jest/test-result@29.6.1: - resolution: {integrity: sha512-Ynr13ZRcpX6INak0TPUukU8GWRfm/vAytE3JbJNGAvINySWYdfE7dGZMbk36oVuK4CigpbhMn8eg1dixZ7ZJOw==} + /@jest/test-result@29.6.2: + resolution: {integrity: sha512-3VKFXzcV42EYhMCsJQURptSqnyjqCGbtLuX5Xxb6Pm6gUf1wIRIl+mandIRGJyWKgNKYF9cnstti6Ls5ekduqw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/console': 29.6.1 + '@jest/console': 29.6.2 '@jest/types': 29.6.1 '@types/istanbul-lib-coverage': 2.0.4 collect-v8-coverage: 1.0.2 - /@jest/test-sequencer@29.6.1: - resolution: {integrity: sha512-oBkC36PCDf/wb6dWeQIhaviU0l5u6VCsXa119yqdUosYAt7/FbQU2M2UoziO3igj/HBDEgp57ONQ3fm0v9uyyg==} + /@jest/test-sequencer@29.6.2: + resolution: {integrity: sha512-GVYi6PfPwVejO7slw6IDO0qKVum5jtrJ3KoLGbgBWyr2qr4GaxFV6su+ZAjdTX75Sr1DkMFRk09r2ZVa+wtCGw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/test-result': 29.6.1 + '@jest/test-result': 29.6.2 graceful-fs: 4.2.11 - jest-haste-map: 29.6.1 + jest-haste-map: 29.6.2 slash: 3.0.0 - /@jest/transform@29.6.1: - resolution: {integrity: sha512-URnTneIU3ZjRSaf906cvf6Hpox3hIeJXRnz3VDSw5/X93gR8ycdfSIEy19FlVx8NFmpN7fe3Gb1xF+NjXaQLWg==} + /@jest/transform@29.6.2: + resolution: {integrity: sha512-ZqCqEISr58Ce3U+buNFJYUktLJZOggfyvR+bZMaiV1e8B1SIvJbwZMrYz3gx/KAPn9EXmOmN+uB08yLCjWkQQg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/core': 7.22.9 + '@babel/core': 7.22.10 '@jest/types': 29.6.1 - '@jridgewell/trace-mapping': 0.3.18 + '@jridgewell/trace-mapping': 0.3.19 babel-plugin-istanbul: 6.1.1 chalk: 4.1.2 convert-source-map: 2.0.0 fast-json-stable-stringify: 2.1.0 graceful-fs: 4.2.11 - jest-haste-map: 29.6.1 + jest-haste-map: 29.6.2 jest-regex-util: 29.4.3 - jest-util: 29.6.1 + jest-util: 29.6.2 micromatch: 4.0.5 pirates: 4.0.6 slash: 3.0.0 @@ -811,7 +816,7 @@ packages: '@jest/schemas': 29.6.0 '@types/istanbul-lib-coverage': 2.0.4 '@types/istanbul-reports': 3.0.1 - '@types/node': 18.16.19 + '@types/node': 18.17.5 '@types/yargs': 17.0.24 chalk: 4.1.2 @@ -821,11 +826,7 @@ packages: dependencies: '@jridgewell/set-array': 1.1.2 '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping': 0.3.18 - - /@jridgewell/resolve-uri@3.1.0: - resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} - engines: {node: '>=6.0.0'} + '@jridgewell/trace-mapping': 0.3.19 /@jridgewell/resolve-uri@3.1.1: resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} @@ -839,20 +840,17 @@ packages: resolution: {integrity: sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==} dependencies: '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.18 + '@jridgewell/trace-mapping': 0.3.19 dev: true - /@jridgewell/sourcemap-codec@1.4.14: - resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} - /@jridgewell/sourcemap-codec@1.4.15: resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} - /@jridgewell/trace-mapping@0.3.18: - resolution: {integrity: sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==} + /@jridgewell/trace-mapping@0.3.19: + resolution: {integrity: sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==} dependencies: - '@jridgewell/resolve-uri': 3.1.0 - '@jridgewell/sourcemap-codec': 1.4.14 + '@jridgewell/resolve-uri': 3.1.1 + '@jridgewell/sourcemap-codec': 1.4.15 /@jridgewell/trace-mapping@0.3.9: resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} @@ -890,8 +888,41 @@ packages: uri-js: 4.4.1 dev: true - /@redocly/openapi-core@1.0.0-rc.3: - resolution: {integrity: sha512-CaCl4pg5ZCBbDYoDzpCDJ+8sL/PH9SNdqq+dKPo+KKRQeHtEozT8Gzppt7wOLkcjvFFSk11ukPFGcE/2+931Ng==} + /@redocly/cli@1.0.2(@babel/core@7.22.10)(core-js@3.32.1)(react-is@18.2.0)(webpack@5.88.2): + resolution: {integrity: sha512-IWuo5V2ZKSdvQMgNx05PHBlv1YvqJH3/nX52qslooEtqsvOaCUnZIm/aCd1zw2EW5Ub2+VLb51LqMt6mDF/9vQ==} + engines: {node: '>=12.0.0'} + hasBin: true + dependencies: + '@redocly/openapi-core': 1.0.2 + assert-node-version: 1.0.3 + chokidar: 3.5.3 + colorette: 1.4.0 + glob: 7.2.3 + glob-promise: 3.4.0(glob@7.2.3) + handlebars: 4.7.8 + mobx: 6.10.0 + portfinder: 1.0.32 + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) + redoc: 2.0.0(core-js@3.32.1)(mobx@6.10.0)(react-dom@17.0.2)(react@17.0.2)(styled-components@5.3.11)(webpack@5.88.2) + semver: 7.5.4 + simple-websocket: 9.1.0 + styled-components: 5.3.11(@babel/core@7.22.10)(react-dom@17.0.2)(react-is@18.2.0)(react@17.0.2) + yargs: 17.0.1 + transitivePeerDependencies: + - '@babel/core' + - bufferutil + - core-js + - encoding + - react-is + - react-native + - supports-color + - utf-8-validate + - webpack + dev: true + + /@redocly/openapi-core@1.0.2: + resolution: {integrity: sha512-53dzhmG2bsi/8rcAAgBKk9ZLMR035VHgN7oSM3+BM4UAIoNBg6lMC/ChHSf9zO+GrX5qtuWVPqHhjjMti3SAlQ==} engines: {node: '>=12.0.0'} dependencies: '@redocly/ajv': 8.11.0 @@ -901,7 +932,7 @@ packages: js-yaml: 4.1.0 lodash.isequal: 4.5.0 minimatch: 5.1.6 - node-fetch: 2.6.12 + node-fetch: 2.6.13 pluralize: 8.0.0 yaml-ast-parser: 0.0.43 transitivePeerDependencies: @@ -943,8 +974,8 @@ packages: /@types/babel__core@7.20.1: resolution: {integrity: sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw==} dependencies: - '@babel/parser': 7.22.7 - '@babel/types': 7.22.5 + '@babel/parser': 7.22.10 + '@babel/types': 7.22.10 '@types/babel__generator': 7.6.4 '@types/babel__template': 7.4.1 '@types/babel__traverse': 7.20.1 @@ -952,28 +983,28 @@ packages: /@types/babel__generator@7.6.4: resolution: {integrity: sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==} dependencies: - '@babel/types': 7.22.5 + '@babel/types': 7.22.10 /@types/babel__template@7.4.1: resolution: {integrity: sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==} dependencies: - '@babel/parser': 7.22.7 - '@babel/types': 7.22.5 + '@babel/parser': 7.22.10 + '@babel/types': 7.22.10 /@types/babel__traverse@7.20.1: resolution: {integrity: sha512-MitHFXnhtgwsGZWtT68URpOvLN4EREih1u3QtQiN4VdAxWKRVvGCSvw/Qth0M0Qq3pJpnGOu5JaM/ydK7OGbqg==} dependencies: - '@babel/types': 7.22.5 + '@babel/types': 7.22.10 /@types/eslint-scope@3.7.4: resolution: {integrity: sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==} dependencies: - '@types/eslint': 8.44.0 + '@types/eslint': 8.44.2 '@types/estree': 1.0.1 dev: true - /@types/eslint@8.44.0: - resolution: {integrity: sha512-gsF+c/0XOguWgaOgvFs+xnnRqt9GwgTvIks36WpE6ueeI4KCEHHd8K/CKHqhOqrJKsYH8m27kRzQEvWXAwXUTw==} + /@types/eslint@8.44.2: + resolution: {integrity: sha512-sdPRb9K6iL5XZOmBubg8yiFp5yS/JdUDQsq5e6h95km91MCYMuvp7mh1fjPEYUhvHepKpZOjnEaMBR4PxjWDzg==} dependencies: '@types/estree': 1.0.1 '@types/json-schema': 7.0.12 @@ -983,10 +1014,17 @@ packages: resolution: {integrity: sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==} dev: true + /@types/glob@8.1.0: + resolution: {integrity: sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w==} + dependencies: + '@types/minimatch': 5.1.2 + '@types/node': 18.17.5 + dev: true + /@types/graceful-fs@4.1.6: resolution: {integrity: sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==} dependencies: - '@types/node': 18.16.19 + '@types/node': 18.17.5 /@types/html-to-text@9.0.1: resolution: {integrity: sha512-sHu702QGb0SP2F0Zt+CxdCmGZIZ0gEaaCjqOh/V4iba1wTxPVntEPOM/vHm5bel08TILhB3+OxUTkDJWnr/zHQ==} @@ -1008,8 +1046,8 @@ packages: /@types/jest@29.5.3: resolution: {integrity: sha512-1Nq7YrO/vJE/FYnqYyw0FS8LdrjExSgIiHyKg7xPpn+yi8Q4huZryKnkJatN1ZRH89Kw2v33/8ZMB7DuZeSLlA==} dependencies: - expect: 29.6.1 - pretty-format: 29.6.1 + expect: 29.6.2 + pretty-format: 29.6.2 dev: true /@types/json-schema@7.0.12: @@ -1020,8 +1058,12 @@ packages: resolution: {integrity: sha512-1oZ3TbarAhKtKUpyrCIqXpbx3ZAfoSulleJs6/UzzyYty0ut+kjRX7zHLAaHwVIuw8CBjIymwW4J2LK944HoHQ==} dev: true - /@types/lodash@4.14.195: - resolution: {integrity: sha512-Hwx9EUgdwf2GLarOjQp5ZH8ZmblzcbTBC2wtQWNKARBSxM9ezRIAUpeDTgoQRAFB0+8CNWXVA9+MaSOzOF3nPg==} + /@types/lodash@4.14.197: + resolution: {integrity: sha512-BMVOiWs0uNxHVlHBgzTIqJYmj+PgCo4euloGF+5m4okL3rEYzM2EEv78mw8zWSMM57dM7kVIgJ2QDvwHSoCI5g==} + dev: true + + /@types/minimatch@5.1.2: + resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==} dev: true /@types/minimist@1.2.2: @@ -1032,16 +1074,13 @@ packages: resolution: {integrity: sha512-uq7O52wvo2Lggsx1x21tKZgqkJpvwCseBBPtX/nKQfpVlEsLOb11zZ1CRsWUKvJF0+lzuA9jwvA7Pr2Wt7i3xw==} dev: true - /@types/node@18.16.19: - resolution: {integrity: sha512-IXl7o+R9iti9eBW4Wg2hx1xQDig183jj7YLn8F7udNceyfkbn1ZxmzZXuak20gR40D7pIkIY1kYGx5VIGbaHKA==} + /@types/node@18.17.5: + resolution: {integrity: sha512-xNbS75FxH6P4UXTPUJp/zNPq6/xsfdJKussCWNOnz4aULWIRwMgP1LgaB5RiBnMX1DPCYenuqGZfnIAx5mbFLA==} /@types/normalize-package-data@2.4.1: resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} dev: true - /@types/prettier@2.7.3: - resolution: {integrity: sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==} - /@types/semver@7.5.0: resolution: {integrity: sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==} dev: true @@ -1056,7 +1095,7 @@ packages: /@types/whatwg-url@8.2.2: resolution: {integrity: sha512-FtQu10RWgn3D9U4aazdwIE2yzphmTJREDqNdODHrbrZmmMqI0vMheC/6NE/J1Yveaj8H+ela+YwWTjq5PGmuhA==} dependencies: - '@types/node': 18.16.19 + '@types/node': 18.17.5 '@types/webidl-conversions': 7.0.0 dev: false @@ -1068,60 +1107,57 @@ packages: dependencies: '@types/yargs-parser': 21.0.0 - /@typescript-eslint/eslint-plugin@5.38.1(@typescript-eslint/parser@5.38.1)(eslint@8.24.0)(typescript@5.1.6): - resolution: {integrity: sha512-ky7EFzPhqz3XlhS7vPOoMDaQnQMn+9o5ICR9CPr/6bw8HrFkzhMSxuA3gRfiJVvs7geYrSeawGJjZoZQKCOglQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@typescript-eslint/eslint-plugin@6.3.0(@typescript-eslint/parser@6.3.0)(eslint@8.46.0)(typescript@5.1.6): + resolution: {integrity: sha512-IZYjYZ0ifGSLZbwMqIip/nOamFiWJ9AH+T/GYNZBWkVcyNQOFGtSMoWV7RvY4poYCMZ/4lHzNl796WOSNxmk8A==} + engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: - '@typescript-eslint/parser': ^5.0.0 - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha + eslint: ^7.0.0 || ^8.0.0 typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: - '@typescript-eslint/parser': 5.38.1(eslint@8.24.0)(typescript@5.1.6) - '@typescript-eslint/scope-manager': 5.38.1 - '@typescript-eslint/type-utils': 5.38.1(eslint@8.24.0)(typescript@5.1.6) - '@typescript-eslint/utils': 5.38.1(eslint@8.24.0)(typescript@5.1.6) + '@eslint-community/regexpp': 4.6.2 + '@typescript-eslint/parser': 6.3.0(eslint@8.46.0)(typescript@5.1.6) + '@typescript-eslint/scope-manager': 6.3.0 + '@typescript-eslint/type-utils': 6.3.0(eslint@8.46.0)(typescript@5.1.6) + '@typescript-eslint/utils': 6.3.0(eslint@8.46.0)(typescript@5.1.6) + '@typescript-eslint/visitor-keys': 6.3.0 debug: 4.3.4(supports-color@5.5.0) - eslint: 8.24.0 + eslint: 8.46.0 + graphemer: 1.4.0 ignore: 5.2.4 - regexpp: 3.2.0 + natural-compare: 1.4.0 + natural-compare-lite: 1.4.0 semver: 7.5.4 - tsutils: 3.21.0(typescript@5.1.6) + ts-api-utils: 1.0.1(typescript@5.1.6) typescript: 5.1.6 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/parser@5.38.1(eslint@8.24.0)(typescript@5.1.6): - resolution: {integrity: sha512-LDqxZBVFFQnQRz9rUZJhLmox+Ep5kdUmLatLQnCRR6523YV+XhRjfYzStQ4MheFA8kMAfUlclHSbu+RKdRwQKw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@typescript-eslint/parser@6.3.0(eslint@8.46.0)(typescript@5.1.6): + resolution: {integrity: sha512-ibP+y2Gr6p0qsUkhs7InMdXrwldjxZw66wpcQq9/PzAroM45wdwyu81T+7RibNCh8oc0AgrsyCwJByncY0Ongg==} + engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + eslint: ^7.0.0 || ^8.0.0 typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 5.38.1 - '@typescript-eslint/types': 5.38.1 - '@typescript-eslint/typescript-estree': 5.38.1(typescript@5.1.6) + '@typescript-eslint/scope-manager': 6.3.0 + '@typescript-eslint/types': 6.3.0 + '@typescript-eslint/typescript-estree': 6.3.0(typescript@5.1.6) + '@typescript-eslint/visitor-keys': 6.3.0 debug: 4.3.4(supports-color@5.5.0) - eslint: 8.24.0 + eslint: 8.46.0 typescript: 5.1.6 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/scope-manager@5.38.1: - resolution: {integrity: sha512-BfRDq5RidVU3RbqApKmS7RFMtkyWMM50qWnDAkKgQiezRtLKsoyRKIvz1Ok5ilRWeD9IuHvaidaLxvGx/2eqTQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - '@typescript-eslint/types': 5.38.1 - '@typescript-eslint/visitor-keys': 5.38.1 - dev: true - /@typescript-eslint/scope-manager@5.62.0: resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -1130,38 +1166,46 @@ packages: '@typescript-eslint/visitor-keys': 5.62.0 dev: true - /@typescript-eslint/type-utils@5.38.1(eslint@8.24.0)(typescript@5.1.6): - resolution: {integrity: sha512-UU3j43TM66gYtzo15ivK2ZFoDFKKP0k03MItzLdq0zV92CeGCXRfXlfQX5ILdd4/DSpHkSjIgLLLh1NtkOJOAw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@typescript-eslint/scope-manager@6.3.0: + resolution: {integrity: sha512-WlNFgBEuGu74ahrXzgefiz/QlVb+qg8KDTpknKwR7hMH+lQygWyx0CQFoUmMn1zDkQjTBBIn75IxtWss77iBIQ==} + engines: {node: ^16.0.0 || >=18.0.0} + dependencies: + '@typescript-eslint/types': 6.3.0 + '@typescript-eslint/visitor-keys': 6.3.0 + dev: true + + /@typescript-eslint/type-utils@6.3.0(eslint@8.46.0)(typescript@5.1.6): + resolution: {integrity: sha512-7Oj+1ox1T2Yc8PKpBvOKWhoI/4rWFd1j7FA/rPE0lbBPXTKjdbtC+7Ev0SeBjEKkIhKWVeZSP+mR7y1Db1CdfQ==} + engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: - eslint: '*' + eslint: ^7.0.0 || ^8.0.0 typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 5.38.1(typescript@5.1.6) - '@typescript-eslint/utils': 5.38.1(eslint@8.24.0)(typescript@5.1.6) + '@typescript-eslint/typescript-estree': 6.3.0(typescript@5.1.6) + '@typescript-eslint/utils': 6.3.0(eslint@8.46.0)(typescript@5.1.6) debug: 4.3.4(supports-color@5.5.0) - eslint: 8.24.0 - tsutils: 3.21.0(typescript@5.1.6) + eslint: 8.46.0 + ts-api-utils: 1.0.1(typescript@5.1.6) typescript: 5.1.6 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/types@5.38.1: - resolution: {integrity: sha512-QTW1iHq1Tffp9lNfbfPm4WJabbvpyaehQ0SrvVK2yfV79SytD9XDVxqiPvdrv2LK7DGSFo91TB2FgWanbJAZXg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true - /@typescript-eslint/types@5.62.0: resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /@typescript-eslint/typescript-estree@5.38.1(typescript@5.1.6): - resolution: {integrity: sha512-99b5e/Enoe8fKMLdSuwrfH/C0EIbpUWmeEKHmQlGZb8msY33qn1KlkFww0z26o5Omx7EVjzVDCWEfrfCDHfE7g==} + /@typescript-eslint/types@6.3.0: + resolution: {integrity: sha512-K6TZOvfVyc7MO9j60MkRNWyFSf86IbOatTKGrpTQnzarDZPYPVy0oe3myTMq7VjhfsUAbNUW8I5s+2lZvtx1gg==} + engines: {node: ^16.0.0 || >=18.0.0} + dev: true + + /@typescript-eslint/typescript-estree@5.62.0(typescript@5.1.6): + resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: typescript: '*' @@ -1169,8 +1213,8 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': 5.38.1 - '@typescript-eslint/visitor-keys': 5.38.1 + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/visitor-keys': 5.62.0 debug: 4.3.4(supports-color@5.5.0) globby: 11.1.0 is-glob: 4.0.3 @@ -1181,79 +1225,80 @@ packages: - supports-color dev: true - /@typescript-eslint/typescript-estree@5.62.0(typescript@5.1.6): - resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@typescript-eslint/typescript-estree@6.3.0(typescript@5.1.6): + resolution: {integrity: sha512-Xh4NVDaC4eYKY4O3QGPuQNp5NxBAlEvNQYOqJquR2MePNxO11E5K3t5x4M4Mx53IZvtpW+mBxIT0s274fLUocg==} + engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/visitor-keys': 5.62.0 + '@typescript-eslint/types': 6.3.0 + '@typescript-eslint/visitor-keys': 6.3.0 debug: 4.3.4(supports-color@5.5.0) globby: 11.1.0 is-glob: 4.0.3 semver: 7.5.4 - tsutils: 3.21.0(typescript@5.1.6) + ts-api-utils: 1.0.1(typescript@5.1.6) typescript: 5.1.6 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/utils@5.38.1(eslint@8.24.0)(typescript@5.1.6): - resolution: {integrity: sha512-oIuUiVxPBsndrN81oP8tXnFa/+EcZ03qLqPDfSZ5xIJVm7A9V0rlkQwwBOAGtrdN70ZKDlKv+l1BeT4eSFxwXA==} + /@typescript-eslint/utils@5.62.0(eslint@8.46.0)(typescript@5.1.6): + resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.46.0) '@types/json-schema': 7.0.12 - '@typescript-eslint/scope-manager': 5.38.1 - '@typescript-eslint/types': 5.38.1 - '@typescript-eslint/typescript-estree': 5.38.1(typescript@5.1.6) - eslint: 8.24.0 + '@types/semver': 7.5.0 + '@typescript-eslint/scope-manager': 5.62.0 + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.1.6) + eslint: 8.46.0 eslint-scope: 5.1.1 - eslint-utils: 3.0.0(eslint@8.24.0) + semver: 7.5.4 transitivePeerDependencies: - supports-color - typescript dev: true - /@typescript-eslint/utils@5.62.0(eslint@8.24.0)(typescript@5.1.6): - resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@typescript-eslint/utils@6.3.0(eslint@8.46.0)(typescript@5.1.6): + resolution: {integrity: sha512-hLLg3BZE07XHnpzglNBG8P/IXq/ZVXraEbgY7FM0Cnc1ehM8RMdn9mat3LubJ3KBeYXXPxV1nugWbQPjGeJk6Q==} + engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + eslint: ^7.0.0 || ^8.0.0 dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.24.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.46.0) '@types/json-schema': 7.0.12 '@types/semver': 7.5.0 - '@typescript-eslint/scope-manager': 5.62.0 - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.1.6) - eslint: 8.24.0 - eslint-scope: 5.1.1 + '@typescript-eslint/scope-manager': 6.3.0 + '@typescript-eslint/types': 6.3.0 + '@typescript-eslint/typescript-estree': 6.3.0(typescript@5.1.6) + eslint: 8.46.0 semver: 7.5.4 transitivePeerDependencies: - supports-color - typescript dev: true - /@typescript-eslint/visitor-keys@5.38.1: - resolution: {integrity: sha512-bSHr1rRxXt54+j2n4k54p4fj8AHJ49VDWtjpImOpzQj4qjAiOpPni+V1Tyajh19Api1i844F757cur8wH3YvOA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - '@typescript-eslint/types': 5.38.1 - eslint-visitor-keys: 3.4.1 - dev: true - /@typescript-eslint/visitor-keys@5.62.0: resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: '@typescript-eslint/types': 5.62.0 - eslint-visitor-keys: 3.4.1 + eslint-visitor-keys: 3.4.3 + dev: true + + /@typescript-eslint/visitor-keys@6.3.0: + resolution: {integrity: sha512-kEhRRj7HnvaSjux1J9+7dBen15CdWmDnwrpyiHsFX6Qx2iW5LOBUgNefOFeh2PjWPlNwN8TOn6+4eBU3J/gupw==} + engines: {node: ^16.0.0 || >=18.0.0} + dependencies: + '@typescript-eslint/types': 6.3.0 + eslint-visitor-keys: 3.4.3 dev: true /@webassemblyjs/ast@1.11.6: @@ -1459,12 +1504,6 @@ packages: uri-js: 4.4.1 dev: false - /ansi-align@3.0.1: - resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==} - dependencies: - string-width: 4.2.3 - dev: true - /ansi-escapes@4.3.2: resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} engines: {node: '>=8'} @@ -1528,20 +1567,18 @@ packages: engines: {node: '>=0.10.0'} dev: true - /asn1.js@5.4.1: - resolution: {integrity: sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==} + /assert-node-version@1.0.3: + resolution: {integrity: sha512-XcKBGJ1t0RrCcus9dQX57FER4PTEz/+Tee2jj+EdFIGyw5j8hwDNXZzgRYLQ916twVjSuA47adrZsSxLbpEX9A==} + engines: {node: '>=0.10.0'} dependencies: - bn.js: 4.12.0 - inherits: 2.0.4 - minimalistic-assert: 1.0.1 - safer-buffer: 2.1.2 + expected-node-version: 1.0.2 + semver: 5.7.2 dev: true - /assert@1.5.0: - resolution: {integrity: sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==} + /async@2.6.4: + resolution: {integrity: sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==} dependencies: - object-assign: 4.1.1 - util: 0.10.3 + lodash: 4.17.21 dev: true /asynckit@0.4.0: @@ -1573,17 +1610,17 @@ packages: - debug dev: false - /babel-jest@29.6.1(@babel/core@7.22.9): - resolution: {integrity: sha512-qu+3bdPEQC6KZSPz+4Fyjbga5OODNcp49j6GKzG1EKbkfyJBxEYGVUmVGpwCSeGouG52R4EgYMLb6p9YeEEQ4A==} + /babel-jest@29.6.2(@babel/core@7.22.10): + resolution: {integrity: sha512-BYCzImLos6J3BH/+HvUCHG1dTf2MzmAB4jaVxHV+29RZLjR29XuYTmsf2sdDwkrb+FczkGo3kOhE7ga6sI0P4A==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@babel/core': ^7.8.0 dependencies: - '@babel/core': 7.22.9 - '@jest/transform': 29.6.1 + '@babel/core': 7.22.10 + '@jest/transform': 29.6.2 '@types/babel__core': 7.20.1 babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 29.5.0(@babel/core@7.22.9) + babel-preset-jest: 29.5.0(@babel/core@7.22.10) chalk: 4.1.2 graceful-fs: 4.2.11 slash: 3.0.0 @@ -1607,91 +1644,70 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@babel/template': 7.22.5 - '@babel/types': 7.22.5 + '@babel/types': 7.22.10 '@types/babel__core': 7.20.1 '@types/babel__traverse': 7.20.1 - /babel-plugin-styled-components@2.1.4(@babel/core@7.22.9)(styled-components@5.3.11): + /babel-plugin-styled-components@2.1.4(@babel/core@7.22.10)(styled-components@5.3.11): resolution: {integrity: sha512-Xgp9g+A/cG47sUyRwwYxGM4bR/jDRg5N6it/8+HxCnbT5XNKSKDT9xm4oag/osgqjC2It/vH0yXsomOG6k558g==} peerDependencies: styled-components: '>= 2' dependencies: '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-module-imports': 7.22.5 - '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.22.10) lodash: 4.17.21 picomatch: 2.3.1 - styled-components: 5.3.11(@babel/core@7.22.9)(react-dom@17.0.2)(react-is@18.2.0)(react@17.0.2) + styled-components: 5.3.11(@babel/core@7.22.10)(react-dom@17.0.2)(react-is@18.2.0)(react@17.0.2) transitivePeerDependencies: - '@babel/core' dev: true - /babel-preset-current-node-syntax@1.0.1(@babel/core@7.22.9): + /babel-preset-current-node-syntax@1.0.1(@babel/core@7.22.10): resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.22.9 - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.22.9) - '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.22.9) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.22.9) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.22.9) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.22.9) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.22.9) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.22.9) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.22.9) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.22.9) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.22.9) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.22.9) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.22.9) - - /babel-preset-jest@29.5.0(@babel/core@7.22.9): + '@babel/core': 7.22.10 + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.22.10) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.22.10) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.22.10) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.22.10) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.22.10) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.22.10) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.22.10) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.22.10) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.22.10) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.22.10) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.22.10) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.22.10) + + /babel-preset-jest@29.5.0(@babel/core@7.22.10): resolution: {integrity: sha512-JOMloxOqdiBSxMAzjRaH023/vvcaSaec49zvg+2LmNsktC7ei39LTJGw02J+9uUtTZUq6xbLyJ4dxe9sSmIuAg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.22.9 + '@babel/core': 7.22.10 babel-plugin-jest-hoist: 29.5.0 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.22.9) + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.22.10) /balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} /base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + dev: false /binary-extensions@2.2.0: resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} engines: {node: '>=8'} dev: true - /bn.js@4.12.0: - resolution: {integrity: sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==} - dev: true - - /bn.js@5.2.1: - resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==} - dev: true - /boolbase@1.0.0: resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} dev: false - /boxen@5.1.2: - resolution: {integrity: sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==} - engines: {node: '>=10'} - dependencies: - ansi-align: 3.0.1 - camelcase: 6.3.0 - chalk: 4.1.2 - cli-boxes: 2.2.1 - string-width: 4.2.3 - type-fest: 0.20.2 - widest-line: 3.1.0 - wrap-ansi: 7.0.0 - dev: true - /brace-expansion@1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} dependencies: @@ -1710,74 +1726,15 @@ packages: dependencies: fill-range: 7.0.1 - /brorand@1.1.0: - resolution: {integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==} - dev: true - - /browserify-aes@1.2.0: - resolution: {integrity: sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==} - dependencies: - buffer-xor: 1.0.3 - cipher-base: 1.0.4 - create-hash: 1.2.0 - evp_bytestokey: 1.0.3 - inherits: 2.0.4 - safe-buffer: 5.2.1 - dev: true - - /browserify-cipher@1.0.1: - resolution: {integrity: sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==} - dependencies: - browserify-aes: 1.2.0 - browserify-des: 1.0.2 - evp_bytestokey: 1.0.3 - dev: true - - /browserify-des@1.0.2: - resolution: {integrity: sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==} - dependencies: - cipher-base: 1.0.4 - des.js: 1.1.0 - inherits: 2.0.4 - safe-buffer: 5.2.1 - dev: true - - /browserify-rsa@4.1.0: - resolution: {integrity: sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==} - dependencies: - bn.js: 5.2.1 - randombytes: 2.1.0 - dev: true - - /browserify-sign@4.2.1: - resolution: {integrity: sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==} - dependencies: - bn.js: 5.2.1 - browserify-rsa: 4.1.0 - create-hash: 1.2.0 - create-hmac: 1.1.7 - elliptic: 6.5.4 - inherits: 2.0.4 - parse-asn1: 5.1.6 - readable-stream: 3.6.2 - safe-buffer: 5.2.1 - dev: true - - /browserify-zlib@0.2.0: - resolution: {integrity: sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==} - dependencies: - pako: 1.0.11 - dev: true - - /browserslist@4.21.9: - resolution: {integrity: sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==} + /browserslist@4.21.10: + resolution: {integrity: sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001517 - electron-to-chromium: 1.4.468 + caniuse-lite: 1.0.30001520 + electron-to-chromium: 1.4.490 node-releases: 2.0.13 - update-browserslist-db: 1.0.11(browserslist@4.21.9) + update-browserslist-db: 1.0.11(browserslist@4.21.10) /bs-logger@0.2.6: resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==} @@ -1799,18 +1756,6 @@ packages: /buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - /buffer-xor@1.0.3: - resolution: {integrity: sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==} - dev: true - - /buffer@4.9.2: - resolution: {integrity: sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==} - dependencies: - base64-js: 1.5.1 - ieee754: 1.2.1 - isarray: 1.0.0 - dev: true - /buffer@6.0.3: resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} dependencies: @@ -1818,17 +1763,6 @@ packages: ieee754: 1.2.1 dev: false - /builtin-status-codes@3.0.0: - resolution: {integrity: sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==} - dev: true - - /call-bind@1.0.2: - resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} - dependencies: - function-bind: 1.1.1 - get-intrinsic: 1.2.1 - dev: true - /call-me-maybe@1.0.2: resolution: {integrity: sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==} dev: true @@ -1858,8 +1792,8 @@ packages: resolution: {integrity: sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==} dev: true - /caniuse-lite@1.0.30001517: - resolution: {integrity: sha512-Vdhm5S11DaFVLlyiKu4hiUTkpZu+y1KA/rZZqVQfOD5YdDT/eQKlkt7NaE0WGOFgX32diqt9MiP9CAiFeRklaA==} + /caniuse-lite@1.0.30001520: + resolution: {integrity: sha512-tahF5O9EiiTzwTUqAeFjIZbn4Dnqxzz7ktrgGlMYNLH43Ul26IgTMH/zvL3DG0lZxBYnlT04axvInszUsZULdA==} /chalk@2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} @@ -1928,13 +1862,6 @@ packages: resolution: {integrity: sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==} engines: {node: '>=8'} - /cipher-base@1.0.4: - resolution: {integrity: sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==} - dependencies: - inherits: 2.0.4 - safe-buffer: 5.2.1 - dev: true - /cjs-module-lexer@1.2.3: resolution: {integrity: sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==} @@ -1942,11 +1869,6 @@ packages: resolution: {integrity: sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw==} dev: true - /cli-boxes@2.2.1: - resolution: {integrity: sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==} - engines: {node: '>=6'} - dev: true - /cliui@7.0.4: resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} dependencies: @@ -2048,14 +1970,6 @@ packages: yargs: 17.7.2 dev: true - /console-browserify@1.2.0: - resolution: {integrity: sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==} - dev: true - - /constants-browserify@1.0.0: - resolution: {integrity: sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==} - dev: true - /conventional-changelog-angular@5.0.13: resolution: {integrity: sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==} engines: {node: '>=10'} @@ -2159,7 +2073,7 @@ packages: dependencies: conventional-commits-filter: 2.0.7 dateformat: 3.0.3 - handlebars: 4.7.7 + handlebars: 4.7.8 json-stringify-safe: 5.0.1 lodash: 4.17.21 meow: 8.1.2 @@ -2232,8 +2146,8 @@ packages: engines: {node: '>= 0.6'} dev: false - /core-js@3.31.1: - resolution: {integrity: sha512-2sKLtfq1eFST7l7v62zaqXacPc7uG8ZAya8ogijLhTtaKNcpzpB4TMoTw2Si+8GYKRwFPMMtUT0263QFWFfqyQ==} + /core-js@3.32.1: + resolution: {integrity: sha512-lqufgNn9NLnESg5mQeYsxQP5w7wrViSj0jr/kv6ECQiByzQkrn1MKvV0L3acttpDqfQrHLwr2KCMgX5b8X+lyQ==} requiresBuild: true dev: true @@ -2241,34 +2155,6 @@ packages: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} dev: true - /create-ecdh@4.0.4: - resolution: {integrity: sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==} - dependencies: - bn.js: 4.12.0 - elliptic: 6.5.4 - dev: true - - /create-hash@1.2.0: - resolution: {integrity: sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==} - dependencies: - cipher-base: 1.0.4 - inherits: 2.0.4 - md5.js: 1.3.5 - ripemd160: 2.0.2 - sha.js: 2.4.11 - dev: true - - /create-hmac@1.1.7: - resolution: {integrity: sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==} - dependencies: - cipher-base: 1.0.4 - create-hash: 1.2.0 - inherits: 2.0.4 - ripemd160: 2.0.2 - safe-buffer: 5.2.1 - sha.js: 2.4.11 - dev: true - /create-require@1.1.1: resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} @@ -2280,22 +2166,6 @@ packages: shebang-command: 2.0.0 which: 2.0.2 - /crypto-browserify@3.12.0: - resolution: {integrity: sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==} - dependencies: - browserify-cipher: 1.0.1 - browserify-sign: 4.2.1 - create-ecdh: 4.0.4 - create-hash: 1.2.0 - create-hmac: 1.1.7 - diffie-hellman: 5.0.3 - inherits: 2.0.4 - pbkdf2: 3.1.2 - public-encrypt: 4.0.3 - randombytes: 2.1.0 - randomfill: 1.0.4 - dev: true - /css-color-keywords@1.0.0: resolution: {integrity: sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==} engines: {node: '>=4'} @@ -2333,7 +2203,7 @@ packages: resolution: {integrity: sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==} engines: {node: '>=0.11'} dependencies: - '@babel/runtime': 7.22.6 + '@babel/runtime': 7.22.10 dev: true /dateformat@3.0.3: @@ -2381,8 +2251,13 @@ packages: resolution: {integrity: sha512-m8FnyHXV1QX+S1cl+KPFDIl6NMkxtKsy6+U/aYyjrOqWMuwAwYWu7ePqrsUHtDR5Y8Yk2pi/KIDSgF+vT4cPOQ==} dev: true - /dedent@0.7.0: - resolution: {integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==} + /dedent@1.5.1: + resolution: {integrity: sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==} + peerDependencies: + babel-plugin-macros: ^3.1.0 + peerDependenciesMeta: + babel-plugin-macros: + optional: true /deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} @@ -2402,13 +2277,6 @@ packages: engines: {node: '>=0.10'} dev: false - /des.js@1.1.0: - resolution: {integrity: sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==} - dependencies: - inherits: 2.0.4 - minimalistic-assert: 1.0.1 - dev: true - /detect-indent@6.1.0: resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} engines: {node: '>=8'} @@ -2426,14 +2294,6 @@ packages: resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} engines: {node: '>=0.3.1'} - /diffie-hellman@5.0.3: - resolution: {integrity: sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==} - dependencies: - bn.js: 4.12.0 - miller-rabin: 4.0.1 - randombytes: 2.1.0 - dev: true - /dir-glob@3.0.1: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} @@ -2456,11 +2316,6 @@ packages: entities: 4.5.0 dev: false - /domain-browser@1.2.0: - resolution: {integrity: sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==} - engines: {node: '>=0.4', npm: '>=1.2'} - dev: true - /domelementtype@2.3.0: resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} dev: false @@ -2499,20 +2354,8 @@ packages: minimatch: 3.1.2 dev: true - /electron-to-chromium@1.4.468: - resolution: {integrity: sha512-6M1qyhaJOt7rQtNti1lBA0GwclPH+oKCmsra/hkcWs5INLxfXXD/dtdnaKUYQu/pjOBP/8Osoe4mAcNvvzoFag==} - - /elliptic@6.5.4: - resolution: {integrity: sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==} - dependencies: - bn.js: 4.12.0 - brorand: 1.1.0 - hash.js: 1.1.7 - hmac-drbg: 1.0.1 - inherits: 2.0.4 - minimalistic-assert: 1.0.1 - minimalistic-crypto-utils: 1.0.1 - dev: true + /electron-to-chromium@1.4.490: + resolution: {integrity: sha512-6s7NVJz+sATdYnIwhdshx/N/9O6rvMxmhVoDSDFdj6iA45gHR8EQje70+RYsF4GeB+k0IeNSBnP7yG9ZXJFr7A==} /emittery@0.13.1: resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} @@ -2564,20 +2407,20 @@ packages: engines: {node: '>=10'} dev: true - /eslint-config-prettier@8.5.0(eslint@8.24.0): - resolution: {integrity: sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==} + /eslint-config-prettier@9.0.0(eslint@8.46.0): + resolution: {integrity: sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==} hasBin: true peerDependencies: eslint: '>=7.0.0' dependencies: - eslint: 8.24.0 + eslint: 8.46.0 dev: true - /eslint-plugin-jest@27.0.4(@typescript-eslint/eslint-plugin@5.38.1)(eslint@8.24.0)(jest@29.6.1)(typescript@5.1.6): - resolution: {integrity: sha512-BuvY78pHMpMJ6Cio7sKg6jrqEcnRYPUc4Nlihku4vKx3FjlmMINSX4vcYokZIe+8TKcyr1aI5Kq7vYwgJNdQSA==} + /eslint-plugin-jest@27.2.3(@typescript-eslint/eslint-plugin@6.3.0)(eslint@8.46.0)(jest@29.6.2)(typescript@5.1.6): + resolution: {integrity: sha512-sRLlSCpICzWuje66Gl9zvdF6mwD5X86I4u55hJyFBsxYOsBCmT5+kSUjf+fkFWVMMgpzNEupjW8WzUqi83hJAQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: - '@typescript-eslint/eslint-plugin': ^5.0.0 + '@typescript-eslint/eslint-plugin': ^5.0.0 || ^6.0.0 eslint: ^7.0.0 || ^8.0.0 jest: '*' peerDependenciesMeta: @@ -2586,21 +2429,21 @@ packages: jest: optional: true dependencies: - '@typescript-eslint/eslint-plugin': 5.38.1(@typescript-eslint/parser@5.38.1)(eslint@8.24.0)(typescript@5.1.6) - '@typescript-eslint/utils': 5.62.0(eslint@8.24.0)(typescript@5.1.6) - eslint: 8.24.0 - jest: 29.6.1(@types/node@18.16.19)(ts-node@10.9.1) + '@typescript-eslint/eslint-plugin': 6.3.0(@typescript-eslint/parser@6.3.0)(eslint@8.46.0)(typescript@5.1.6) + '@typescript-eslint/utils': 5.62.0(eslint@8.46.0)(typescript@5.1.6) + eslint: 8.46.0 + jest: 29.6.2(@types/node@18.17.5)(ts-node@10.9.1) transitivePeerDependencies: - supports-color - typescript dev: true - /eslint-plugin-simple-import-sort@10.0.0(eslint@8.24.0): + /eslint-plugin-simple-import-sort@10.0.0(eslint@8.46.0): resolution: {integrity: sha512-AeTvO9UCMSNzIHRkg8S6c3RPy5YEwKWSQPx3DYghLedo2ZQxowPFLGDN1AZ2evfg6r6mjBSZSLxLFsWSu3acsw==} peerDependencies: eslint: '>=5.0.0' dependencies: - eslint: 8.24.0 + eslint: 8.46.0 dev: true /eslint-scope@5.1.1: @@ -2611,52 +2454,39 @@ packages: estraverse: 4.3.0 dev: true - /eslint-scope@7.2.1: - resolution: {integrity: sha512-CvefSOsDdaYYvxChovdrPo/ZGt8d5lrJWleAc1diXRKhHGiTYEI26cvo8Kle/wGnsizoCJjK73FMg1/IkIwiNA==} + /eslint-scope@7.2.2: + resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: esrecurse: 4.3.0 estraverse: 5.3.0 dev: true - /eslint-utils@3.0.0(eslint@8.24.0): - resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} - engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} - peerDependencies: - eslint: '>=5' - dependencies: - eslint: 8.24.0 - eslint-visitor-keys: 2.1.0 - dev: true - - /eslint-visitor-keys@2.1.0: - resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} - engines: {node: '>=10'} - dev: true - - /eslint-visitor-keys@3.4.1: - resolution: {integrity: sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==} + /eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /eslint@8.24.0: - resolution: {integrity: sha512-dWFaPhGhTAiPcCgm3f6LI2MBWbogMnTJzFBbhXVRQDJPkr9pGZvVjlVfXd+vyDcWPA2Ic9L2AXPIQM0+vk/cSQ==} + /eslint@8.46.0: + resolution: {integrity: sha512-cIO74PvbW0qU8e0mIvk5IV3ToWdCq5FYG6gWPHHkx6gNdjlbAYvtfHmlCMXxjcoVaIdwy/IAt3+mDkZkfvb2Dg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} hasBin: true dependencies: - '@eslint/eslintrc': 1.4.1 - '@humanwhocodes/config-array': 0.10.7 - '@humanwhocodes/gitignore-to-minimatch': 1.0.2 + '@eslint-community/eslint-utils': 4.4.0(eslint@8.46.0) + '@eslint-community/regexpp': 4.6.2 + '@eslint/eslintrc': 2.1.2 + '@eslint/js': 8.47.0 + '@humanwhocodes/config-array': 0.11.10 '@humanwhocodes/module-importer': 1.0.1 + '@nodelib/fs.walk': 1.2.8 ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 debug: 4.3.4(supports-color@5.5.0) doctrine: 3.0.0 escape-string-regexp: 4.0.0 - eslint-scope: 7.2.1 - eslint-utils: 3.0.0(eslint@8.24.0) - eslint-visitor-keys: 3.4.1 + eslint-scope: 7.2.2 + eslint-visitor-keys: 3.4.3 espree: 9.6.1 esquery: 1.5.0 esutils: 2.0.3 @@ -2664,14 +2494,12 @@ packages: file-entry-cache: 6.0.1 find-up: 5.0.0 glob-parent: 6.0.2 - globals: 13.20.0 - globby: 11.1.0 - grapheme-splitter: 1.0.4 + globals: 13.21.0 + graphemer: 1.4.0 ignore: 5.2.4 - import-fresh: 3.3.0 imurmurhash: 0.1.4 is-glob: 4.0.3 - js-sdsl: 4.4.2 + is-path-inside: 3.0.3 js-yaml: 4.1.0 json-stable-stringify-without-jsonify: 1.0.1 levn: 0.4.1 @@ -2679,9 +2507,7 @@ packages: minimatch: 3.1.2 natural-compare: 1.4.0 optionator: 0.9.3 - regexpp: 3.2.0 strip-ansi: 6.0.1 - strip-json-comments: 3.1.1 text-table: 0.2.0 transitivePeerDependencies: - supports-color @@ -2693,7 +2519,7 @@ packages: dependencies: acorn: 8.10.0 acorn-jsx: 5.3.2(acorn@8.10.0) - eslint-visitor-keys: 3.4.1 + eslint-visitor-keys: 3.4.3 dev: true /esprima@4.0.1: @@ -2743,13 +2569,6 @@ packages: resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} engines: {node: '>=0.8.x'} - /evp_bytestokey@1.0.3: - resolution: {integrity: sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==} - dependencies: - md5.js: 1.3.5 - safe-buffer: 5.2.1 - dev: true - /execa@5.1.1: resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} engines: {node: '>=10'} @@ -2768,16 +2587,21 @@ packages: resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} engines: {node: '>= 0.8.0'} - /expect@29.6.1: - resolution: {integrity: sha512-XEdDLonERCU1n9uR56/Stx9OqojaLAQtZf9PrCHH9Hl8YXiEIka3H4NXJ3NOIBmQJTg7+j7buh34PMHfJujc8g==} + /expect@29.6.2: + resolution: {integrity: sha512-iAErsLxJ8C+S02QbLAwgSGSezLQK+XXRDt8IuFXFpwCNw2ECmzZSmjKcCaFVp5VRMk+WAvz6h6jokzEzBFZEuA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/expect-utils': 29.6.1 - '@types/node': 18.16.19 + '@jest/expect-utils': 29.6.2 + '@types/node': 18.17.5 jest-get-type: 29.4.3 - jest-matcher-utils: 29.6.1 - jest-message-util: 29.6.1 - jest-util: 29.6.1 + jest-matcher-utils: 29.6.2 + jest-message-util: 29.6.2 + jest-util: 29.6.2 + + /expected-node-version@1.0.2: + resolution: {integrity: sha512-OSaCdgF02srujDqJz1JWGpqk8Rq3uNYHLmtpBHJrZN3BvuMvzijJMqRVxZN1qLJtKVwjXhmOp+lfsRUqx8n54w==} + engines: {node: '>=0.10.0'} + dev: true /fast-content-type-parse@1.0.0: resolution: {integrity: sha512-Xbc4XcysUXcsP5aHUU7Nq3OwvHq97C+WnbkeIefpeYLX+ryzFJlU6OStFJhs6Ol0LkUGpcK+wL0JwfM+FCU5IA==} @@ -2804,8 +2628,8 @@ packages: /fast-json-stable-stringify@2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - /fast-json-stringify@5.7.0: - resolution: {integrity: sha512-sBVPTgnAZseLu1Qgj6lUbQ0HfjFhZWXAmpZ5AaSGkyLh5gAXBga/uPJjQPHpDFjC9adWIpdOcCLSDTgrZ7snoQ==} + /fast-json-stringify@5.8.0: + resolution: {integrity: sha512-VVwK8CFMSALIvt14U8AvrSzQAwN/0vaVRiFFUVlpnXSnDGrSkOAO5MtzyN8oQNjLd5AqTW5OZRgyjoNuAuR3jQ==} dependencies: '@fastify/deepmerge': 1.3.0 ajv: 8.12.0 @@ -2825,8 +2649,8 @@ packages: fast-decode-uri-component: 1.0.1 dev: false - /fast-redact@3.2.0: - resolution: {integrity: sha512-zaTadChr+NekyzallAMXATXLOR8MNx3zqpZ0MUF2aGf4EathnG0f32VLODNlY8IuGY3HoRO2L6/6fSzNsLaHIw==} + /fast-redact@3.3.0: + resolution: {integrity: sha512-6T5V1QK1u4oF+ATxs1lWUmlEk6P2T9HqJG3e2DnHOdVgZy2rFJBoEnrIedcTXlkAHU/zKC+7KETJ+KGGKwxgMQ==} engines: {node: '>=6'} dev: false @@ -2842,8 +2666,8 @@ packages: resolution: {integrity: sha512-stRHYGeuqpEZTL1Ef0Ovr2ltazUT9g844X5z/zEBFLG8RYlpDiOCIG+ATvYEp+/zmc7sN29mcIMp8gvYplYPIQ==} dev: false - /fastify@4.20.0: - resolution: {integrity: sha512-zWWi5KGAb1YZ6fyrnFnA1CA1EZHkGM6YuELgB3QpS3l4lLRy14W1cc16b4KGPH/zQ98WCSdS+T41JkHY3eq1oA==} + /fastify@4.21.0: + resolution: {integrity: sha512-tsu4bcwE4HetxqW8prA5fbC9bKHMYDp7jGEDWyzK1l90a3uOaLoIcQbdGcWeODNLVJviQnzh1wvIjTZE3MJFEg==} dependencies: '@fastify/ajv-compiler': 3.5.0 '@fastify/error': 3.3.0 @@ -2851,10 +2675,10 @@ packages: abstract-logging: 2.0.1 avvio: 8.2.1 fast-content-type-parse: 1.0.0 - fast-json-stringify: 5.7.0 + fast-json-stringify: 5.8.0 find-my-way: 7.6.2 light-my-request: 5.10.0 - pino: 8.14.1 + pino: 8.15.0 process-warning: 2.2.0 proxy-addr: 2.0.7 rfdc: 1.3.0 @@ -2994,15 +2818,6 @@ packages: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} - /get-intrinsic@1.2.1: - resolution: {integrity: sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==} - dependencies: - function-bind: 1.1.1 - has: 1.0.3 - has-proto: 1.0.1 - has-symbols: 1.0.3 - dev: true - /get-package-type@0.1.0: resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} engines: {node: '>=8.0.0'} @@ -3071,6 +2886,16 @@ packages: is-glob: 4.0.3 dev: true + /glob-promise@3.4.0(glob@7.2.3): + resolution: {integrity: sha512-q08RJ6O+eJn+dVanerAndJwIcumgbDdYiUT7zFQl3Wm1xD6fBKtah7H8ZJChj4wP+8C+QfeVy8xautR7rdmKEw==} + engines: {node: '>=4'} + peerDependencies: + glob: '*' + dependencies: + '@types/glob': 8.1.0 + glob: 7.2.3 + dev: true + /glob-to-regexp@0.4.1: resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} dev: true @@ -3089,8 +2914,8 @@ packages: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} engines: {node: '>=4'} - /globals@13.20.0: - resolution: {integrity: sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==} + /globals@13.21.0: + resolution: {integrity: sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==} engines: {node: '>=8'} dependencies: type-fest: 0.20.2 @@ -3111,12 +2936,12 @@ packages: /graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - /grapheme-splitter@1.0.4: - resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==} + /graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} dev: true - /handlebars@4.7.7: - resolution: {integrity: sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==} + /handlebars@4.7.8: + resolution: {integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==} engines: {node: '>=0.4.7'} hasBin: true dependencies: @@ -3141,51 +2966,17 @@ packages: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} - /has-proto@1.0.1: - resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} - engines: {node: '>= 0.4'} - dev: true - - /has-symbols@1.0.3: - resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} - engines: {node: '>= 0.4'} - dev: true - /has@1.0.3: resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} engines: {node: '>= 0.4.0'} dependencies: function-bind: 1.1.1 - /hash-base@3.1.0: - resolution: {integrity: sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==} - engines: {node: '>=4'} - dependencies: - inherits: 2.0.4 - readable-stream: 3.6.2 - safe-buffer: 5.2.1 - dev: true - - /hash.js@1.1.7: - resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==} - dependencies: - inherits: 2.0.4 - minimalistic-assert: 1.0.1 - dev: true - /helmet@7.0.0: resolution: {integrity: sha512-MsIgYmdBh460ZZ8cJC81q4XJknjG567wzEmv46WOBblDb6TUd3z8/GhgmsM9pn8g2B80tAJ4m5/d3Bi1KrSUBQ==} engines: {node: '>=16.0.0'} dev: false - /hmac-drbg@1.0.1: - resolution: {integrity: sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==} - dependencies: - hash.js: 1.1.7 - minimalistic-assert: 1.0.1 - minimalistic-crypto-utils: 1.0.1 - dev: true - /hoist-non-react-statics@3.3.2: resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} dependencies: @@ -3230,16 +3021,13 @@ packages: resolution: {integrity: sha512-EC2utToWl4RKfs5zd36Mxq7nzHHBuomZboI0yYL6Y0RmBgT7Sgkq4rQ0ezFTYoIsSs7Tm9SJe+o2FcAg6GBhGA==} dev: true - /https-browserify@1.0.0: - resolution: {integrity: sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==} - dev: true - /human-signals@2.1.0: resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} engines: {node: '>=10.17.0'} /ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + dev: false /ignore-by-default@1.0.1: resolution: {integrity: sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==} @@ -3281,14 +3069,6 @@ packages: once: 1.4.0 wrappy: 1.0.2 - /inherits@2.0.1: - resolution: {integrity: sha512-8nWq2nLTAwd02jTqJExUYFSD/fKq6VH9Y/oG2accc/kdI0V98Bag8d5a4gi3XHz73rDWa2PvTtvcWYquKqSENA==} - dev: true - - /inherits@2.0.3: - resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==} - dev: true - /inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} @@ -3332,8 +3112,8 @@ packages: binary-extensions: 2.2.0 dev: true - /is-core-module@2.12.1: - resolution: {integrity: sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==} + /is-core-module@2.13.0: + resolution: {integrity: sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==} dependencies: has: 1.0.3 @@ -3366,6 +3146,11 @@ packages: engines: {node: '>=8'} dev: true + /is-path-inside@3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} + dev: true + /is-plain-obj@1.1.0: resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} engines: {node: '>=0.10.0'} @@ -3397,20 +3182,20 @@ packages: resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} engines: {node: '>=8'} dependencies: - '@babel/core': 7.22.9 - '@babel/parser': 7.22.7 + '@babel/core': 7.22.10 + '@babel/parser': 7.22.10 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.0 semver: 6.3.1 transitivePeerDependencies: - supports-color - /istanbul-lib-report@3.0.0: - resolution: {integrity: sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==} - engines: {node: '>=8'} + /istanbul-lib-report@3.0.1: + resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} + engines: {node: '>=10'} dependencies: istanbul-lib-coverage: 3.2.0 - make-dir: 3.1.0 + make-dir: 4.0.0 supports-color: 7.2.0 /istanbul-lib-source-maps@4.0.1: @@ -3423,12 +3208,12 @@ packages: transitivePeerDependencies: - supports-color - /istanbul-reports@3.1.5: - resolution: {integrity: sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==} + /istanbul-reports@3.1.6: + resolution: {integrity: sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==} engines: {node: '>=8'} dependencies: html-escaper: 2.0.2 - istanbul-lib-report: 3.0.0 + istanbul-lib-report: 3.0.1 /jest-changed-files@29.5.0: resolution: {integrity: sha512-IFG34IUMUaNBIxjQXF/iu7g6EcdMrGRRxaUSw92I/2g2YC6vCdTltl4nHvt7Ci5nSJwXIkCu8Ka1DKF+X7Z1Ag==} @@ -3437,35 +3222,36 @@ packages: execa: 5.1.1 p-limit: 3.1.0 - /jest-circus@29.6.1: - resolution: {integrity: sha512-tPbYLEiBU4MYAL2XoZme/bgfUeotpDBd81lgHLCbDZZFaGmECk0b+/xejPFtmiBP87GgP/y4jplcRpbH+fgCzQ==} + /jest-circus@29.6.2: + resolution: {integrity: sha512-G9mN+KOYIUe2sB9kpJkO9Bk18J4dTDArNFPwoZ7WKHKel55eKIS/u2bLthxgojwlf9NLCVQfgzM/WsOVvoC6Fw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/environment': 29.6.1 - '@jest/expect': 29.6.1 - '@jest/test-result': 29.6.1 + '@jest/environment': 29.6.2 + '@jest/expect': 29.6.2 + '@jest/test-result': 29.6.2 '@jest/types': 29.6.1 - '@types/node': 18.16.19 + '@types/node': 18.17.5 chalk: 4.1.2 co: 4.6.0 - dedent: 0.7.0 + dedent: 1.5.1 is-generator-fn: 2.1.0 - jest-each: 29.6.1 - jest-matcher-utils: 29.6.1 - jest-message-util: 29.6.1 - jest-runtime: 29.6.1 - jest-snapshot: 29.6.1 - jest-util: 29.6.1 + jest-each: 29.6.2 + jest-matcher-utils: 29.6.2 + jest-message-util: 29.6.2 + jest-runtime: 29.6.2 + jest-snapshot: 29.6.2 + jest-util: 29.6.2 p-limit: 3.1.0 - pretty-format: 29.6.1 + pretty-format: 29.6.2 pure-rand: 6.0.2 slash: 3.0.0 stack-utils: 2.0.6 transitivePeerDependencies: + - babel-plugin-macros - supports-color - /jest-cli@29.6.1(@types/node@18.16.19)(ts-node@10.9.1): - resolution: {integrity: sha512-607dSgTA4ODIN6go9w6xY3EYkyPFGicx51a69H7yfvt7lN53xNswEVLovq+E77VsTRi5fWprLH0yl4DJgE8Ing==} + /jest-cli@29.6.2(@types/node@18.17.5)(ts-node@10.9.1): + resolution: {integrity: sha512-TT6O247v6dCEX2UGHGyflMpxhnrL0DNqP2fRTKYm3nJJpCTfXX3GCMQPGFjXDoj0i5/Blp3jriKXFgdfmbYB6Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true peerDependencies: @@ -3474,25 +3260,26 @@ packages: node-notifier: optional: true dependencies: - '@jest/core': 29.6.1(ts-node@10.9.1) - '@jest/test-result': 29.6.1 + '@jest/core': 29.6.2(ts-node@10.9.1) + '@jest/test-result': 29.6.2 '@jest/types': 29.6.1 chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 import-local: 3.1.0 - jest-config: 29.6.1(@types/node@18.16.19)(ts-node@10.9.1) - jest-util: 29.6.1 - jest-validate: 29.6.1 + jest-config: 29.6.2(@types/node@18.17.5)(ts-node@10.9.1) + jest-util: 29.6.2 + jest-validate: 29.6.2 prompts: 2.4.2 yargs: 17.7.2 transitivePeerDependencies: - '@types/node' + - babel-plugin-macros - supports-color - ts-node - /jest-config@29.6.1(@types/node@18.16.19)(ts-node@10.9.1): - resolution: {integrity: sha512-XdjYV2fy2xYixUiV2Wc54t3Z4oxYPAELUzWnV6+mcbq0rh742X2p52pii5A3oeRzYjLnQxCsZmp0qpI6klE2cQ==} + /jest-config@29.6.2(@types/node@18.17.5)(ts-node@10.9.1): + resolution: {integrity: sha512-VxwFOC8gkiJbuodG9CPtMRjBUNZEHxwfQXmIudSTzFWxaci3Qub1ddTRbFNQlD/zUeaifLndh/eDccFX4wCMQw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@types/node': '*' @@ -3503,41 +3290,42 @@ packages: ts-node: optional: true dependencies: - '@babel/core': 7.22.9 - '@jest/test-sequencer': 29.6.1 + '@babel/core': 7.22.10 + '@jest/test-sequencer': 29.6.2 '@jest/types': 29.6.1 - '@types/node': 18.16.19 - babel-jest: 29.6.1(@babel/core@7.22.9) + '@types/node': 18.17.5 + babel-jest: 29.6.2(@babel/core@7.22.10) chalk: 4.1.2 ci-info: 3.8.0 deepmerge: 4.3.1 glob: 7.2.3 graceful-fs: 4.2.11 - jest-circus: 29.6.1 - jest-environment-node: 29.6.1 + jest-circus: 29.6.2 + jest-environment-node: 29.6.2 jest-get-type: 29.4.3 jest-regex-util: 29.4.3 - jest-resolve: 29.6.1 - jest-runner: 29.6.1 - jest-util: 29.6.1 - jest-validate: 29.6.1 + jest-resolve: 29.6.2 + jest-runner: 29.6.2 + jest-util: 29.6.2 + jest-validate: 29.6.2 micromatch: 4.0.5 parse-json: 5.2.0 - pretty-format: 29.6.1 + pretty-format: 29.6.2 slash: 3.0.0 strip-json-comments: 3.1.1 - ts-node: 10.9.1(@types/node@18.16.19)(typescript@5.1.6) + ts-node: 10.9.1(@types/node@18.17.5)(typescript@5.1.6) transitivePeerDependencies: + - babel-plugin-macros - supports-color - /jest-diff@29.6.1: - resolution: {integrity: sha512-FsNCvinvl8oVxpNLttNQX7FAq7vR+gMDGj90tiP7siWw1UdakWUGqrylpsYrpvj908IYckm5Y0Q7azNAozU1Kg==} + /jest-diff@29.6.2: + resolution: {integrity: sha512-t+ST7CB9GX5F2xKwhwCf0TAR17uNDiaPTZnVymP9lw0lssa9vG+AFyDZoeIHStU3WowFFwT+ky+er0WVl2yGhA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: chalk: 4.1.2 diff-sequences: 29.4.3 jest-get-type: 29.4.3 - pretty-format: 29.6.1 + pretty-format: 29.6.2 /jest-docblock@29.4.3: resolution: {integrity: sha512-fzdTftThczeSD9nZ3fzA/4KkHtnmllawWrXO69vtI+L9WjEIuXWs4AmyME7lN5hU7dB0sHhuPfcKofRsUb/2Fg==} @@ -3545,99 +3333,99 @@ packages: dependencies: detect-newline: 3.1.0 - /jest-each@29.6.1: - resolution: {integrity: sha512-n5eoj5eiTHpKQCAVcNTT7DRqeUmJ01hsAL0Q1SMiBHcBcvTKDELixQOGMCpqhbIuTcfC4kMfSnpmDqRgRJcLNQ==} + /jest-each@29.6.2: + resolution: {integrity: sha512-MsrsqA0Ia99cIpABBc3izS1ZYoYfhIy0NNWqPSE0YXbQjwchyt6B1HD2khzyPe1WiJA7hbxXy77ZoUQxn8UlSw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.1 chalk: 4.1.2 jest-get-type: 29.4.3 - jest-util: 29.6.1 - pretty-format: 29.6.1 + jest-util: 29.6.2 + pretty-format: 29.6.2 - /jest-environment-node@29.6.1: - resolution: {integrity: sha512-ZNIfAiE+foBog24W+2caIldl4Irh8Lx1PUhg/GZ0odM1d/h2qORAsejiFc7zb+SEmYPn1yDZzEDSU5PmDkmVLQ==} + /jest-environment-node@29.6.2: + resolution: {integrity: sha512-YGdFeZ3T9a+/612c5mTQIllvWkddPbYcN2v95ZH24oWMbGA4GGS2XdIF92QMhUhvrjjuQWYgUGW2zawOyH63MQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/environment': 29.6.1 - '@jest/fake-timers': 29.6.1 + '@jest/environment': 29.6.2 + '@jest/fake-timers': 29.6.2 '@jest/types': 29.6.1 - '@types/node': 18.16.19 - jest-mock: 29.6.1 - jest-util: 29.6.1 + '@types/node': 18.17.5 + jest-mock: 29.6.2 + jest-util: 29.6.2 /jest-get-type@29.4.3: resolution: {integrity: sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - /jest-haste-map@29.6.1: - resolution: {integrity: sha512-0m7f9PZXxOCk1gRACiVgX85knUKPKLPg4oRCjLoqIm9brTHXaorMA0JpmtmVkQiT8nmXyIVoZd/nnH1cfC33ig==} + /jest-haste-map@29.6.2: + resolution: {integrity: sha512-+51XleTDAAysvU8rT6AnS1ZJ+WHVNqhj1k6nTvN2PYP+HjU3kqlaKQ1Lnw3NYW3bm2r8vq82X0Z1nDDHZMzHVA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.1 '@types/graceful-fs': 4.1.6 - '@types/node': 18.16.19 + '@types/node': 18.17.5 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 jest-regex-util: 29.4.3 - jest-util: 29.6.1 - jest-worker: 29.6.1 + jest-util: 29.6.2 + jest-worker: 29.6.2 micromatch: 4.0.5 walker: 1.0.8 optionalDependencies: fsevents: 2.3.2 - /jest-leak-detector@29.6.1: - resolution: {integrity: sha512-OrxMNyZirpOEwkF3UHnIkAiZbtkBWiye+hhBweCHkVbCgyEy71Mwbb5zgeTNYWJBi1qgDVfPC1IwO9dVEeTLwQ==} + /jest-leak-detector@29.6.2: + resolution: {integrity: sha512-aNqYhfp5uYEO3tdWMb2bfWv6f0b4I0LOxVRpnRLAeque2uqOVVMLh6khnTcE2qJ5wAKop0HcreM1btoysD6bPQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: jest-get-type: 29.4.3 - pretty-format: 29.6.1 + pretty-format: 29.6.2 - /jest-matcher-utils@29.6.1: - resolution: {integrity: sha512-SLaztw9d2mfQQKHmJXKM0HCbl2PPVld/t9Xa6P9sgiExijviSp7TnZZpw2Fpt+OI3nwUO/slJbOfzfUMKKC5QA==} + /jest-matcher-utils@29.6.2: + resolution: {integrity: sha512-4LiAk3hSSobtomeIAzFTe+N8kL6z0JtF3n6I4fg29iIW7tt99R7ZcIFW34QkX+DuVrf+CUe6wuVOpm7ZKFJzZQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: chalk: 4.1.2 - jest-diff: 29.6.1 + jest-diff: 29.6.2 jest-get-type: 29.4.3 - pretty-format: 29.6.1 + pretty-format: 29.6.2 - /jest-message-util@29.6.1: - resolution: {integrity: sha512-KoAW2zAmNSd3Gk88uJ56qXUWbFk787QKmjjJVOjtGFmmGSZgDBrlIL4AfQw1xyMYPNVD7dNInfIbur9B2rd/wQ==} + /jest-message-util@29.6.2: + resolution: {integrity: sha512-vnIGYEjoPSuRqV8W9t+Wow95SDp6KPX2Uf7EoeG9G99J2OVh7OSwpS4B6J0NfpEIpfkBNHlBZpA2rblEuEFhZQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/code-frame': 7.22.5 + '@babel/code-frame': 7.22.10 '@jest/types': 29.6.1 '@types/stack-utils': 2.0.1 chalk: 4.1.2 graceful-fs: 4.2.11 micromatch: 4.0.5 - pretty-format: 29.6.1 + pretty-format: 29.6.2 slash: 3.0.0 stack-utils: 2.0.6 - /jest-mock-extended@3.0.4(jest@29.6.1)(typescript@5.1.6): - resolution: {integrity: sha512-2ynEZ7IEJNrhrgshklDMhrOdnmW4Nt+PhkyRqZxRgpwMo7JjmFWMzyp0+eSyk+H9KK1QjXI5xTZIw6x7cVDcRg==} + /jest-mock-extended@3.0.5(jest@29.6.2)(typescript@5.1.6): + resolution: {integrity: sha512-/eHdaNPUAXe7f65gHH5urc8SbRVWjYxBqmCgax2uqOBJy8UUcCBMN1upj1eZ8y/i+IqpyEm4Kq0VKss/GCCTdw==} peerDependencies: jest: ^24.0.0 || ^25.0.0 || ^26.0.0 || ^27.0.0 || ^28.0.0 || ^29.0.0 typescript: ^3.0.0 || ^4.0.0 || ^5.0.0 dependencies: - jest: 29.6.1(@types/node@18.16.19)(ts-node@10.9.1) + jest: 29.6.2(@types/node@18.17.5)(ts-node@10.9.1) ts-essentials: 7.0.3(typescript@5.1.6) typescript: 5.1.6 dev: false - /jest-mock@29.6.1: - resolution: {integrity: sha512-brovyV9HBkjXAEdRooaTQK42n8usKoSRR3gihzUpYeV/vwqgSoNfrksO7UfSACnPmxasO/8TmHM3w9Hp3G1dgw==} + /jest-mock@29.6.2: + resolution: {integrity: sha512-hoSv3lb3byzdKfwqCuT6uTscan471GUECqgNYykg6ob0yiAw3zYc7OrPnI9Qv8Wwoa4lC7AZ9hyS4AiIx5U2zg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.1 - '@types/node': 18.16.19 - jest-util: 29.6.1 + '@types/node': 18.17.5 + jest-util: 29.6.2 - /jest-pnp-resolver@1.2.3(jest-resolve@29.6.1): + /jest-pnp-resolver@1.2.3(jest-resolve@29.6.2): resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} engines: {node: '>=6'} peerDependencies: @@ -3646,133 +3434,132 @@ packages: jest-resolve: optional: true dependencies: - jest-resolve: 29.6.1 + jest-resolve: 29.6.2 /jest-regex-util@29.4.3: resolution: {integrity: sha512-O4FglZaMmWXbGHSQInfXewIsd1LMn9p3ZXB/6r4FOkyhX2/iP/soMG98jGvk/A3HAN78+5VWcBGO0BJAPRh4kg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - /jest-resolve-dependencies@29.6.1: - resolution: {integrity: sha512-BbFvxLXtcldaFOhNMXmHRWx1nXQO5LoXiKSGQcA1LxxirYceZT6ch8KTE1bK3X31TNG/JbkI7OkS/ABexVahiw==} + /jest-resolve-dependencies@29.6.2: + resolution: {integrity: sha512-LGqjDWxg2fuQQm7ypDxduLu/m4+4Lb4gczc13v51VMZbVP5tSBILqVx8qfWcsdP8f0G7aIqByIALDB0R93yL+w==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: jest-regex-util: 29.4.3 - jest-snapshot: 29.6.1 + jest-snapshot: 29.6.2 transitivePeerDependencies: - supports-color - /jest-resolve@29.6.1: - resolution: {integrity: sha512-AeRkyS8g37UyJiP9w3mmI/VXU/q8l/IH52vj/cDAyScDcemRbSBhfX/NMYIGilQgSVwsjxrCHf3XJu4f+lxCMg==} + /jest-resolve@29.6.2: + resolution: {integrity: sha512-G/iQUvZWI5e3SMFssc4ug4dH0aZiZpsDq9o1PtXTV1210Ztyb2+w+ZgQkB3iOiC5SmAEzJBOHWz6Hvrd+QnNPw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: chalk: 4.1.2 graceful-fs: 4.2.11 - jest-haste-map: 29.6.1 - jest-pnp-resolver: 1.2.3(jest-resolve@29.6.1) - jest-util: 29.6.1 - jest-validate: 29.6.1 - resolve: 1.22.2 + jest-haste-map: 29.6.2 + jest-pnp-resolver: 1.2.3(jest-resolve@29.6.2) + jest-util: 29.6.2 + jest-validate: 29.6.2 + resolve: 1.22.4 resolve.exports: 2.0.2 slash: 3.0.0 - /jest-runner@29.6.1: - resolution: {integrity: sha512-tw0wb2Q9yhjAQ2w8rHRDxteryyIck7gIzQE4Reu3JuOBpGp96xWgF0nY8MDdejzrLCZKDcp8JlZrBN/EtkQvPQ==} + /jest-runner@29.6.2: + resolution: {integrity: sha512-wXOT/a0EspYgfMiYHxwGLPCZfC0c38MivAlb2lMEAlwHINKemrttu1uSbcGbfDV31sFaPWnWJPmb2qXM8pqZ4w==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/console': 29.6.1 - '@jest/environment': 29.6.1 - '@jest/test-result': 29.6.1 - '@jest/transform': 29.6.1 + '@jest/console': 29.6.2 + '@jest/environment': 29.6.2 + '@jest/test-result': 29.6.2 + '@jest/transform': 29.6.2 '@jest/types': 29.6.1 - '@types/node': 18.16.19 + '@types/node': 18.17.5 chalk: 4.1.2 emittery: 0.13.1 graceful-fs: 4.2.11 jest-docblock: 29.4.3 - jest-environment-node: 29.6.1 - jest-haste-map: 29.6.1 - jest-leak-detector: 29.6.1 - jest-message-util: 29.6.1 - jest-resolve: 29.6.1 - jest-runtime: 29.6.1 - jest-util: 29.6.1 - jest-watcher: 29.6.1 - jest-worker: 29.6.1 + jest-environment-node: 29.6.2 + jest-haste-map: 29.6.2 + jest-leak-detector: 29.6.2 + jest-message-util: 29.6.2 + jest-resolve: 29.6.2 + jest-runtime: 29.6.2 + jest-util: 29.6.2 + jest-watcher: 29.6.2 + jest-worker: 29.6.2 p-limit: 3.1.0 source-map-support: 0.5.13 transitivePeerDependencies: - supports-color - /jest-runtime@29.6.1: - resolution: {integrity: sha512-D6/AYOA+Lhs5e5il8+5pSLemjtJezUr+8zx+Sn8xlmOux3XOqx4d8l/2udBea8CRPqqrzhsKUsN/gBDE/IcaPQ==} + /jest-runtime@29.6.2: + resolution: {integrity: sha512-2X9dqK768KufGJyIeLmIzToDmsN0m7Iek8QNxRSI/2+iPFYHF0jTwlO3ftn7gdKd98G/VQw9XJCk77rbTGZnJg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/environment': 29.6.1 - '@jest/fake-timers': 29.6.1 - '@jest/globals': 29.6.1 + '@jest/environment': 29.6.2 + '@jest/fake-timers': 29.6.2 + '@jest/globals': 29.6.2 '@jest/source-map': 29.6.0 - '@jest/test-result': 29.6.1 - '@jest/transform': 29.6.1 + '@jest/test-result': 29.6.2 + '@jest/transform': 29.6.2 '@jest/types': 29.6.1 - '@types/node': 18.16.19 + '@types/node': 18.17.5 chalk: 4.1.2 cjs-module-lexer: 1.2.3 collect-v8-coverage: 1.0.2 glob: 7.2.3 graceful-fs: 4.2.11 - jest-haste-map: 29.6.1 - jest-message-util: 29.6.1 - jest-mock: 29.6.1 + jest-haste-map: 29.6.2 + jest-message-util: 29.6.2 + jest-mock: 29.6.2 jest-regex-util: 29.4.3 - jest-resolve: 29.6.1 - jest-snapshot: 29.6.1 - jest-util: 29.6.1 + jest-resolve: 29.6.2 + jest-snapshot: 29.6.2 + jest-util: 29.6.2 slash: 3.0.0 strip-bom: 4.0.0 transitivePeerDependencies: - supports-color - /jest-snapshot@29.6.1: - resolution: {integrity: sha512-G4UQE1QQ6OaCgfY+A0uR1W2AY0tGXUPQpoUClhWHq1Xdnx1H6JOrC2nH5lqnOEqaDgbHFgIwZ7bNq24HpB180A==} + /jest-snapshot@29.6.2: + resolution: {integrity: sha512-1OdjqvqmRdGNvWXr/YZHuyhh5DeaLp1p/F8Tht/MrMw4Kr1Uu/j4lRG+iKl1DAqUJDWxtQBMk41Lnf/JETYBRA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/core': 7.22.9 - '@babel/generator': 7.22.9 - '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-syntax-typescript': 7.22.5(@babel/core@7.22.9) - '@babel/types': 7.22.5 - '@jest/expect-utils': 29.6.1 - '@jest/transform': 29.6.1 + '@babel/core': 7.22.10 + '@babel/generator': 7.22.10 + '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.22.10) + '@babel/plugin-syntax-typescript': 7.22.5(@babel/core@7.22.10) + '@babel/types': 7.22.10 + '@jest/expect-utils': 29.6.2 + '@jest/transform': 29.6.2 '@jest/types': 29.6.1 - '@types/prettier': 2.7.3 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.22.9) + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.22.10) chalk: 4.1.2 - expect: 29.6.1 + expect: 29.6.2 graceful-fs: 4.2.11 - jest-diff: 29.6.1 + jest-diff: 29.6.2 jest-get-type: 29.4.3 - jest-matcher-utils: 29.6.1 - jest-message-util: 29.6.1 - jest-util: 29.6.1 + jest-matcher-utils: 29.6.2 + jest-message-util: 29.6.2 + jest-util: 29.6.2 natural-compare: 1.4.0 - pretty-format: 29.6.1 + pretty-format: 29.6.2 semver: 7.5.4 transitivePeerDependencies: - supports-color - /jest-util@29.6.1: - resolution: {integrity: sha512-NRFCcjc+/uO3ijUVyNOQJluf8PtGCe/W6cix36+M3cTFgiYqFOOW5MgN4JOOcvbUhcKTYVd1CvHz/LWi8d16Mg==} + /jest-util@29.6.2: + resolution: {integrity: sha512-3eX1qb6L88lJNCFlEADKOkjpXJQyZRiavX1INZ4tRnrBVr2COd3RgcTLyUiEXMNBlDU/cgYq6taUS0fExrWW4w==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.1 - '@types/node': 18.16.19 + '@types/node': 18.17.5 chalk: 4.1.2 ci-info: 3.8.0 graceful-fs: 4.2.11 picomatch: 2.3.1 - /jest-validate@29.6.1: - resolution: {integrity: sha512-r3Ds69/0KCN4vx4sYAbGL1EVpZ7MSS0vLmd3gV78O+NAx3PDQQukRU5hNHPXlyqCgFY8XUk7EuTMLugh0KzahA==} + /jest-validate@29.6.2: + resolution: {integrity: sha512-vGz0yMN5fUFRRbpJDPwxMpgSXW1LDKROHfBopAvDcmD6s+B/s8WJrwi+4bfH4SdInBA5C3P3BI19dBtKzx1Arg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.1 @@ -3780,41 +3567,41 @@ packages: chalk: 4.1.2 jest-get-type: 29.4.3 leven: 3.1.0 - pretty-format: 29.6.1 + pretty-format: 29.6.2 - /jest-watcher@29.6.1: - resolution: {integrity: sha512-d4wpjWTS7HEZPaaj8m36QiaP856JthRZkrgcIY/7ISoUWPIillrXM23WPboZVLbiwZBt4/qn2Jke84Sla6JhFA==} + /jest-watcher@29.6.2: + resolution: {integrity: sha512-GZitlqkMkhkefjfN/p3SJjrDaxPflqxEAv3/ik10OirZqJGYH5rPiIsgVcfof0Tdqg3shQGdEIxDBx+B4tuLzA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/test-result': 29.6.1 + '@jest/test-result': 29.6.2 '@jest/types': 29.6.1 - '@types/node': 18.16.19 + '@types/node': 18.17.5 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 - jest-util: 29.6.1 + jest-util: 29.6.2 string-length: 4.0.2 /jest-worker@27.5.1: resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} engines: {node: '>= 10.13.0'} dependencies: - '@types/node': 18.16.19 + '@types/node': 18.17.5 merge-stream: 2.0.0 supports-color: 8.1.1 dev: true - /jest-worker@29.6.1: - resolution: {integrity: sha512-U+Wrbca7S8ZAxAe9L6nb6g8kPdia5hj32Puu5iOqBCMTMWFHXuK6dOV2IFrpedbTV8fjMFLdWNttQTBL6u2MRA==} + /jest-worker@29.6.2: + resolution: {integrity: sha512-l3ccBOabTdkng8I/ORCkADz4eSMKejTYv1vB/Z83UiubqhC1oQ5Li6dWCyqOIvSifGjUBxuvxvlm6KGK2DtuAQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@types/node': 18.16.19 - jest-util: 29.6.1 + '@types/node': 18.17.5 + jest-util: 29.6.2 merge-stream: 2.0.0 supports-color: 8.1.1 - /jest@29.6.1(@types/node@18.16.19)(ts-node@10.9.1): - resolution: {integrity: sha512-Nirw5B4nn69rVUZtemCQhwxOBhm0nsp3hmtF4rzCeWD7BkjAXRIji7xWQfnTNbz9g0aVsBX6aZK3n+23LM6uDw==} + /jest@29.6.2(@types/node@18.17.5)(ts-node@10.9.1): + resolution: {integrity: sha512-8eQg2mqFbaP7CwfsTpCxQ+sHzw1WuNWL5UUvjnWP4hx2riGz9fPSzYOaU5q8/GqWn1TfgZIVTqYJygbGbWAANg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true peerDependencies: @@ -3823,12 +3610,13 @@ packages: node-notifier: optional: true dependencies: - '@jest/core': 29.6.1(ts-node@10.9.1) + '@jest/core': 29.6.2(ts-node@10.9.1) '@jest/types': 29.6.1 import-local: 3.1.0 - jest-cli: 29.6.1(@types/node@18.16.19)(ts-node@10.9.1) + jest-cli: 29.6.2(@types/node@18.17.5)(ts-node@10.9.1) transitivePeerDependencies: - '@types/node' + - babel-plugin-macros - supports-color - ts-node @@ -3837,10 +3625,6 @@ packages: engines: {node: '>=0.10.0'} dev: true - /js-sdsl@4.4.2: - resolution: {integrity: sha512-dwXFwByc/ajSV6m5bcKAPwe4yDDF6D614pxmIi5odytzxRlwqF6nwoiCek80Ixc7Cvma5awClxrzFtxCQvcM8w==} - dev: true - /js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -4034,11 +3818,11 @@ packages: resolution: {integrity: sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==} dev: true - /make-dir@3.1.0: - resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} - engines: {node: '>=8'} + /make-dir@4.0.0: + resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} + engines: {node: '>=10'} dependencies: - semver: 6.3.1 + semver: 7.5.4 /make-error@1.3.6: resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} @@ -4068,14 +3852,6 @@ packages: hasBin: true dev: true - /md5.js@1.3.5: - resolution: {integrity: sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==} - dependencies: - hash-base: 3.1.0 - inherits: 2.0.4 - safe-buffer: 5.2.1 - dev: true - /memory-pager@1.5.0: resolution: {integrity: sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==} requiresBuild: true @@ -4114,14 +3890,6 @@ packages: braces: 3.0.2 picomatch: 2.3.1 - /miller-rabin@4.0.1: - resolution: {integrity: sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==} - hasBin: true - dependencies: - bn.js: 4.12.0 - brorand: 1.1.0 - dev: true - /mime-db@1.52.0: resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} engines: {node: '>= 0.6'} @@ -4141,14 +3909,6 @@ packages: engines: {node: '>=4'} dev: true - /minimalistic-assert@1.0.1: - resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} - dev: true - - /minimalistic-crypto-utils@1.0.1: - resolution: {integrity: sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==} - dev: true - /minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} dependencies: @@ -4174,10 +3934,11 @@ packages: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} dev: true - /mkdirp@1.0.4: - resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} - engines: {node: '>=10'} + /mkdirp@0.5.6: + resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} hasBin: true + dependencies: + minimist: 1.2.8 dev: true /mnemonist@0.39.5: @@ -4281,6 +4042,10 @@ packages: /ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + /natural-compare-lite@1.4.0: + resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} + dev: true + /natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} @@ -4295,8 +4060,8 @@ packages: http2-client: 1.3.5 dev: true - /node-fetch@2.6.12: - resolution: {integrity: sha512-C/fGU2E8ToujUivIO0H+tpQ6HWo4eEmchoPIoXtxCrVghxdKq+QOHqEZW7tuP3KlV3bC8FRMO5nMCC7Zm1VP6g==} + /node-fetch@2.6.13: + resolution: {integrity: sha512-StxNAxh15zr77QvvkmveSQ8uCQ4+v5FkvNTj0OESmiHu+VRi/gXArXtkWMElOsOUNLtUEvI4yS+rdtOHZTwlQA==} engines: {node: 4.x || >=6.0.0} peerDependencies: encoding: ^0.1.0 @@ -4310,34 +4075,6 @@ packages: /node-int64@0.4.0: resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} - /node-libs-browser@2.2.1: - resolution: {integrity: sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==} - dependencies: - assert: 1.5.0 - browserify-zlib: 0.2.0 - buffer: 4.9.2 - console-browserify: 1.2.0 - constants-browserify: 1.0.0 - crypto-browserify: 3.12.0 - domain-browser: 1.2.0 - events: 3.3.0 - https-browserify: 1.0.0 - os-browserify: 0.3.0 - path-browserify: 0.0.1 - process: 0.11.10 - punycode: 1.4.1 - querystring-es3: 0.2.1 - readable-stream: 2.3.8 - stream-browserify: 2.0.2 - stream-http: 2.8.3 - string_decoder: 1.3.0 - timers-browserify: 2.0.12 - tty-browserify: 0.0.0 - url: 0.11.1 - util: 0.11.1 - vm-browserify: 1.1.2 - dev: true - /node-readfiles@0.2.0: resolution: {integrity: sha512-SU00ZarexNlE4Rjdm83vglt5Y9yiQ+XI1XpflWlb7q7UTN1JUItm69xMeiQCTxtTfnzt+83T8Cx+vI2ED++VDA==} dependencies: @@ -4347,9 +4084,9 @@ packages: /node-releases@2.0.13: resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==} - /nodemon@2.0.22: - resolution: {integrity: sha512-B8YqaKMmyuCO7BowF1Z1/mkPqLk6cs/l63Ojtd6otKjMx47Dq1utxfRxcavH1I7VSaL8n5BUaoutadnsX3AAVQ==} - engines: {node: '>=8.10.0'} + /nodemon@3.0.1: + resolution: {integrity: sha512-g9AZ7HmkhQkqXkRc20w+ZfQ73cHLbE8hnPbtaFbFtCumZsjyMhKk9LajQ07U5Ux28lvFjZ5X7HvWR1xzU8jHVw==} + engines: {node: '>=10'} hasBin: true dependencies: chokidar: 3.5.3 @@ -4357,8 +4094,8 @@ packages: ignore-by-default: 1.0.1 minimatch: 3.1.2 pstree.remy: 1.1.8 - semver: 5.7.2 - simple-update-notifier: 1.1.0 + semver: 7.5.4 + simple-update-notifier: 2.0.0 supports-color: 5.5.0 touch: 3.1.0 undefsafe: 2.0.5 @@ -4375,7 +4112,7 @@ packages: resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} dependencies: hosted-git-info: 2.8.9 - resolve: 1.22.2 + resolve: 1.22.4 semver: 5.7.2 validate-npm-package-license: 3.0.4 dev: true @@ -4385,7 +4122,7 @@ packages: engines: {node: '>=10'} dependencies: hosted-git-info: 4.1.0 - is-core-module: 2.12.1 + is-core-module: 2.13.0 semver: 7.5.4 validate-npm-package-license: 3.0.4 dev: true @@ -4415,7 +4152,7 @@ packages: /oas-linter@3.2.2: resolution: {integrity: sha512-KEGjPDVoU5K6swgo9hJVA/qYGlwfbFx+Kg2QB/kd7rzV5N8N5Mg6PlsoCMohVnQmo+pzJap/F610qTodKzecGQ==} dependencies: - '@exodus/schemasafe': 1.0.1 + '@exodus/schemasafe': 1.2.3 should: 13.2.3 yaml: 1.10.2 dev: true @@ -4453,10 +4190,6 @@ packages: engines: {node: '>=0.10.0'} dev: true - /object-inspect@1.12.3: - resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==} - dev: true - /obliterator@2.0.4: resolution: {integrity: sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==} dev: false @@ -4495,10 +4228,6 @@ packages: type-check: 0.4.0 dev: true - /os-browserify@0.3.0: - resolution: {integrity: sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==} - dev: true - /p-limit@1.3.0: resolution: {integrity: sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==} engines: {node: '>=4'} @@ -4554,13 +4283,9 @@ packages: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} - /pako@1.0.11: - resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} - dev: true - - /papr@13.1.0(mongodb@5.7.0): - resolution: {integrity: sha512-EI5LZMrD1PULnnXo1zw4Xr93Y2SxPYRwMDCPImH9EjPSBwJ7XpTnXhl1GQ/zW28he8VR/ogEj//ZAV1+Nj9Ufw==} - engines: {node: ^14.0.0 || >=15.0.0} + /papr@14.0.0(mongodb@5.7.0): + resolution: {integrity: sha512-y/nFJinQpxAPWhc5hXEmmxIUPE4YwZj9pmPRDlgC21jTI0oXXfhzoe4ABPopr+rtQysO8yhIruIbZRRsHDOvOw==} + engines: {node: '>=16.0.0'} peerDependencies: mongodb: ^5.0.0 dependencies: @@ -4574,16 +4299,6 @@ packages: callsites: 3.1.0 dev: true - /parse-asn1@5.1.6: - resolution: {integrity: sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==} - dependencies: - asn1.js: 5.4.1 - browserify-aes: 1.2.0 - evp_bytestokey: 1.0.3 - pbkdf2: 3.1.2 - safe-buffer: 5.2.1 - dev: true - /parse-json@4.0.0: resolution: {integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==} engines: {node: '>=4'} @@ -4596,7 +4311,7 @@ packages: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} dependencies: - '@babel/code-frame': 7.22.5 + '@babel/code-frame': 7.22.10 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 @@ -4621,10 +4336,6 @@ packages: peberminta: 0.9.0 dev: false - /path-browserify@0.0.1: - resolution: {integrity: sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==} - dev: true - /path-browserify@1.0.1: resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} dev: true @@ -4661,17 +4372,6 @@ packages: engines: {node: '>=8'} dev: true - /pbkdf2@3.1.2: - resolution: {integrity: sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==} - engines: {node: '>=0.12'} - dependencies: - create-hash: 1.2.0 - create-hmac: 1.1.7 - ripemd160: 2.0.2 - safe-buffer: 5.2.1 - sha.js: 2.4.11 - dev: true - /peberminta@0.9.0: resolution: {integrity: sha512-XIxfHpEuSJbITd1H3EeQwpcZbTLHc+VVr8ANI9t5sit565tsI4/xK3KWTUFE2e6QiangUkh3B0jihzmGnNrRsQ==} dev: false @@ -4708,12 +4408,12 @@ packages: resolution: {integrity: sha512-cHjPPsE+vhj/tnhCy/wiMh3M3z3h/j15zHQX+S9GkTBgqJuTuJzYJ4gUyACLhDaJ7kk9ba9iRDmbH2tJU03OiA==} dev: false - /pino@8.14.1: - resolution: {integrity: sha512-8LYNv7BKWXSfS+k6oEc6occy5La+q2sPwU3q2ljTX5AZk7v+5kND2o5W794FyRaqha6DJajmkNRsWtPpFyMUdw==} + /pino@8.15.0: + resolution: {integrity: sha512-olUADJByk4twxccmAxb1RiGKOSvddHugCV3wkqjyv+3Sooa2KLrmXrKEWOKi0XPCLasRR5jBXxioE1jxUa4KzQ==} hasBin: true dependencies: atomic-sleep: 1.0.0 - fast-redact: 3.2.0 + fast-redact: 3.3.0 on-exit-leak-free: 2.1.0 pino-abstract-transport: 1.0.0 pino-std-serializers: 6.2.2 @@ -4722,7 +4422,7 @@ packages: real-require: 0.2.0 safe-stable-stringify: 2.4.3 sonic-boom: 3.3.0 - thread-stream: 2.3.0 + thread-stream: 2.4.0 dev: false /pirates@4.0.6: @@ -4744,7 +4444,18 @@ packages: resolution: {integrity: sha512-Sz2Lkdxz6F2Pgnpi9U5Ng/WdWAUZxmHrNPoVlm3aAemxoy2Qy7LGjQg4uf8qKelDAUW94F4np3iH2YPf2qefcQ==} engines: {node: '>=10'} dependencies: - '@babel/runtime': 7.22.6 + '@babel/runtime': 7.22.10 + dev: true + + /portfinder@1.0.32: + resolution: {integrity: sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==} + engines: {node: '>= 0.12.0'} + dependencies: + async: 2.6.4 + debug: 3.2.7(supports-color@5.5.0) + mkdirp: 0.5.6 + transitivePeerDependencies: + - supports-color dev: true /postcss-value-parser@4.2.0: @@ -4756,14 +4467,14 @@ packages: engines: {node: '>= 0.8.0'} dev: true - /prettier@2.8.8: - resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} - engines: {node: '>=10.13.0'} + /prettier@3.0.1: + resolution: {integrity: sha512-fcOWSnnpCrovBsmFZIGIy9UqK2FaI7Hqax+DIO0A9UxeVoY4iweyaFjS5TavZN97Hfehph0nhsZnjlVKzEQSrQ==} + engines: {node: '>=14'} hasBin: true dev: true - /pretty-format@29.6.1: - resolution: {integrity: sha512-7jRj+yXO0W7e4/tSJKoR7HRIHLPPjtNaUGG2xxKQnGvPNRkgWcQ0AZX6P4KBRJN4FcTBWb3sa7DVUJmocYuoog==} + /pretty-format@29.6.2: + resolution: {integrity: sha512-1q0oC8eRveTg5nnBEWMXAU2qpv65Gnuf2eCQzSjxpWFkPaPARwqZZDGuNE0zPAZfTCHzIk3A8dIjwlQKKLphyg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/schemas': 29.6.0 @@ -4786,6 +4497,7 @@ packages: /process@0.11.10: resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} engines: {node: '>= 0.6.0'} + dev: false /prompts@2.4.2: resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} @@ -4818,21 +4530,6 @@ packages: resolution: {integrity: sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==} dev: true - /public-encrypt@4.0.3: - resolution: {integrity: sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==} - dependencies: - bn.js: 4.12.0 - browserify-rsa: 4.1.0 - create-hash: 1.2.0 - parse-asn1: 5.1.6 - randombytes: 2.1.0 - safe-buffer: 5.2.1 - dev: true - - /punycode@1.4.1: - resolution: {integrity: sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==} - dev: true - /punycode@2.3.0: resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} engines: {node: '>=6'} @@ -4845,18 +4542,6 @@ packages: engines: {node: '>=0.6.0', teleport: '>=0.2.0'} dev: true - /qs@6.11.2: - resolution: {integrity: sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==} - engines: {node: '>=0.6'} - dependencies: - side-channel: 1.0.4 - dev: true - - /querystring-es3@0.2.1: - resolution: {integrity: sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==} - engines: {node: '>=0.4.x'} - dev: true - /queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} dev: true @@ -4876,13 +4561,6 @@ packages: safe-buffer: 5.2.1 dev: true - /randomfill@1.0.4: - resolution: {integrity: sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==} - dependencies: - randombytes: 2.1.0 - safe-buffer: 5.2.1 - dev: true - /react-dom@17.0.2(react@17.0.2): resolution: {integrity: sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==} peerDependencies: @@ -5019,32 +4697,7 @@ packages: redis-errors: 1.2.0 dev: false - /redoc-cli@0.13.21(@babel/core@7.22.9)(core-js@3.31.1)(react-is@18.2.0)(webpack@5.88.2): - resolution: {integrity: sha512-pjuPf0HkKqo9qtoHxMK4x5dhC/lJ08O0hO0rJISbSRCf19bPBjQ5lb2mHRu9j6vypTMltyaLtFIfVNveuyF5fQ==} - engines: {node: '>=12.0.0'} - hasBin: true - dependencies: - boxen: 5.1.2 - chokidar: 3.5.3 - handlebars: 4.7.7 - mkdirp: 1.0.4 - mobx: 6.10.0 - node-libs-browser: 2.2.1 - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) - redoc: 2.0.0(core-js@3.31.1)(mobx@6.10.0)(react-dom@17.0.2)(react@17.0.2)(styled-components@5.3.11)(webpack@5.88.2) - styled-components: 5.3.11(@babel/core@7.22.9)(react-dom@17.0.2)(react-is@18.2.0)(react@17.0.2) - yargs: 17.7.2 - transitivePeerDependencies: - - '@babel/core' - - core-js - - encoding - - react-is - - react-native - - webpack - dev: true - - /redoc@2.0.0(core-js@3.31.1)(mobx@6.10.0)(react-dom@17.0.2)(react@17.0.2)(styled-components@5.3.11)(webpack@5.88.2): + /redoc@2.0.0(core-js@3.32.1)(mobx@6.10.0)(react-dom@17.0.2)(react@17.0.2)(styled-components@5.3.11)(webpack@5.88.2): resolution: {integrity: sha512-rU8iLdAkT89ywOkYk66Mr+IofqaMASlRvTew0dJvopCORMIPUcPMxjlJbJNC6wsn2vvMnpUFLQ/0ISDWn9BWag==} engines: {node: '>=6.9', npm: '>=3.0.0'} peerDependencies: @@ -5054,9 +4707,9 @@ packages: react-dom: ^16.8.4 || ^17.0.0 styled-components: ^4.1.1 || ^5.1.1 dependencies: - '@redocly/openapi-core': 1.0.0-rc.3 + '@redocly/openapi-core': 1.0.2 classnames: 2.3.2 - core-js: 3.31.1 + core-js: 3.32.1 decko: 1.2.0 dompurify: 2.4.7 eventemitter3: 4.0.7 @@ -5078,7 +4731,7 @@ packages: slugify: 1.4.7 stickyfill: 1.1.1 style-loader: 3.3.3(webpack@5.88.2) - styled-components: 5.3.11(@babel/core@7.22.9)(react-dom@17.0.2)(react-is@18.2.0)(react@17.0.2) + styled-components: 5.3.11(@babel/core@7.22.10)(react-dom@17.0.2)(react-is@18.2.0)(react@17.0.2) swagger2openapi: 7.0.8 url-template: 2.0.8 transitivePeerDependencies: @@ -5091,13 +4744,8 @@ packages: resolution: {integrity: sha512-OVede/NQE13xBQ+ob5CKd5KyeJYU2YInb1bmV4nRoOfquZPkAkxuOXicSe1PvqIuZZ4kD13sPKBbR7UFDmli6w==} dev: true - /regenerator-runtime@0.13.11: - resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} - dev: true - - /regexpp@3.2.0: - resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==} - engines: {node: '>=8'} + /regenerator-runtime@0.14.0: + resolution: {integrity: sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==} dev: true /require-directory@2.1.1: @@ -5127,11 +4775,11 @@ packages: resolution: {integrity: sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==} engines: {node: '>=10'} - /resolve@1.22.2: - resolution: {integrity: sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==} + /resolve@1.22.4: + resolution: {integrity: sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==} hasBin: true dependencies: - is-core-module: 2.12.1 + is-core-module: 2.13.0 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 @@ -5155,13 +4803,6 @@ packages: glob: 7.2.3 dev: true - /ripemd160@2.0.2: - resolution: {integrity: sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==} - dependencies: - hash-base: 3.1.0 - inherits: 2.0.4 - dev: true - /run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} dependencies: @@ -5171,7 +4812,7 @@ packages: /rxjs@7.8.1: resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} dependencies: - tslib: 2.6.0 + tslib: 2.6.1 dev: true /safe-buffer@5.1.2: @@ -5192,10 +4833,6 @@ packages: engines: {node: '>=10'} dev: false - /safer-buffer@2.1.2: - resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - dev: true - /saslprep@1.0.3: resolution: {integrity: sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==} engines: {node: '>=6'} @@ -5240,11 +4877,6 @@ packages: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true - /semver@7.0.0: - resolution: {integrity: sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==} - hasBin: true - dev: true - /semver@7.5.4: resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} engines: {node: '>=10'} @@ -5262,18 +4894,6 @@ packages: resolution: {integrity: sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==} dev: false - /setimmediate@1.0.5: - resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} - dev: true - - /sha.js@2.4.11: - resolution: {integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==} - hasBin: true - dependencies: - inherits: 2.0.4 - safe-buffer: 5.2.1 - dev: true - /shallowequal@1.1.0: resolution: {integrity: sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==} dev: true @@ -5330,22 +4950,28 @@ packages: should-util: 1.0.1 dev: true - /side-channel@1.0.4: - resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} - dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.2.1 - object-inspect: 1.12.3 - dev: true - /signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - /simple-update-notifier@1.1.0: - resolution: {integrity: sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg==} - engines: {node: '>=8.10.0'} + /simple-update-notifier@2.0.0: + resolution: {integrity: sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==} + engines: {node: '>=10'} + dependencies: + semver: 7.5.4 + dev: true + + /simple-websocket@9.1.0: + resolution: {integrity: sha512-8MJPnjRN6A8UCp1I+H/dSFyjwJhp6wta4hsVRhjf8w9qBHRzxYt14RaOcjvQnhD1N4yKOddEjflwMnQM4VtXjQ==} dependencies: - semver: 7.0.0 + debug: 4.3.4(supports-color@5.5.0) + queue-microtask: 1.2.3 + randombytes: 2.1.0 + readable-stream: 3.6.2 + ws: 7.5.9 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate dev: true /sisteransi@1.0.5: @@ -5485,23 +5111,6 @@ packages: resolution: {integrity: sha512-GCp7vHAfpao+Qh/3Flh9DXEJ/qSi0KJwJw6zYlZOtRYXWUIpMM6mC2rIep/dK8RQqwW0KxGJIllmjPIBOGN8AA==} dev: true - /stream-browserify@2.0.2: - resolution: {integrity: sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==} - dependencies: - inherits: 2.0.4 - readable-stream: 2.3.8 - dev: true - - /stream-http@2.8.3: - resolution: {integrity: sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==} - dependencies: - builtin-status-codes: 3.0.0 - inherits: 2.0.4 - readable-stream: 2.3.8 - to-arraybuffer: 1.0.1 - xtend: 4.0.2 - dev: true - /string-length@4.0.2: resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} engines: {node: '>=10'} @@ -5572,7 +5181,7 @@ packages: webpack: 5.88.2 dev: true - /styled-components@5.3.11(@babel/core@7.22.9)(react-dom@17.0.2)(react-is@18.2.0)(react@17.0.2): + /styled-components@5.3.11(@babel/core@7.22.10)(react-dom@17.0.2)(react-is@18.2.0)(react@17.0.2): resolution: {integrity: sha512-uuzIIfnVkagcVHv9nE0VPlHPSCmXIUGKfJ42LNjxCCTDTL5sgnJ8Z7GZBq0EnLYGln77tPpEpExt2+qa+cZqSw==} engines: {node: '>=10'} peerDependencies: @@ -5581,11 +5190,11 @@ packages: react-is: '>= 16.8.0' dependencies: '@babel/helper-module-imports': 7.22.5 - '@babel/traverse': 7.22.8(supports-color@5.5.0) + '@babel/traverse': 7.22.10(supports-color@5.5.0) '@emotion/is-prop-valid': 1.2.1 '@emotion/stylis': 0.8.5 '@emotion/unitless': 0.7.5 - babel-plugin-styled-components: 2.1.4(@babel/core@7.22.9)(styled-components@5.3.11) + babel-plugin-styled-components: 2.1.4(@babel/core@7.22.10)(styled-components@5.3.11) css-to-react-native: 3.2.0 hoist-non-react-statics: 3.3.2 react: 17.0.2 @@ -5624,7 +5233,7 @@ packages: hasBin: true dependencies: call-me-maybe: 1.0.2 - node-fetch: 2.6.12 + node-fetch: 2.6.13 node-fetch-h2: 2.3.0 node-readfiles: 0.2.0 oas-kit-common: 1.0.8 @@ -5659,7 +5268,7 @@ packages: uglify-js: optional: true dependencies: - '@jridgewell/trace-mapping': 0.3.18 + '@jridgewell/trace-mapping': 0.3.19 jest-worker: 27.5.1 schema-utils: 3.3.0 serialize-javascript: 6.0.1 @@ -5695,8 +5304,8 @@ packages: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} dev: true - /thread-stream@2.3.0: - resolution: {integrity: sha512-kaDqm1DET9pp3NXwR8382WHbnpXnRkN9xGN9dQt3B2+dmXiW8X1SOwmFOxAErEQ47ObhZ96J6yhZNXuyCOL7KA==} + /thread-stream@2.4.0: + resolution: {integrity: sha512-xZYtOtmnA63zj04Q+F9bdEay5r47bvpo1CaNqsKi7TpoJHcotUez8Fkfo2RJWpW91lnnaApdpRbVwCWsy+ifcw==} dependencies: real-require: 0.2.0 dev: false @@ -5718,13 +5327,6 @@ packages: resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} dev: true - /timers-browserify@2.0.12: - resolution: {integrity: sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==} - engines: {node: '>=0.6.0'} - dependencies: - setimmediate: 1.0.5 - dev: true - /tiny-lru@11.0.1: resolution: {integrity: sha512-iNgFugVuQgBKrqeO/mpiTTgmBsTP0WL6yeuLfLs/Ctf0pI/ixGqIRm8sDCwMcXGe9WWvt2sGXI5mNqZbValmJg==} engines: {node: '>=12'} @@ -5733,10 +5335,6 @@ packages: /tmpl@1.0.5: resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} - /to-arraybuffer@1.0.1: - resolution: {integrity: sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA==} - dev: true - /to-fast-properties@2.0.0: resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} engines: {node: '>=4'} @@ -5779,6 +5377,15 @@ packages: engines: {node: '>=8'} dev: true + /ts-api-utils@1.0.1(typescript@5.1.6): + resolution: {integrity: sha512-lC/RGlPmwdrIBFTX59wwNzqh7aR2otPNPR/5brHZm/XKFYKsfqxihXUe9pU3JI+3vGkl+vyCoNNnPhJn3aLK1A==} + engines: {node: '>=16.13.0'} + peerDependencies: + typescript: '>=4.2.0' + dependencies: + typescript: 5.1.6 + dev: true + /ts-essentials@7.0.3(typescript@5.1.6): resolution: {integrity: sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ==} peerDependencies: @@ -5787,7 +5394,7 @@ packages: typescript: 5.1.6 dev: false - /ts-jest@29.1.1(@babel/core@7.22.9)(@jest/types@29.6.1)(jest@29.6.1)(typescript@5.1.6): + /ts-jest@29.1.1(@babel/core@7.22.10)(@jest/types@29.6.1)(jest@29.6.2)(typescript@5.1.6): resolution: {integrity: sha512-D6xjnnbP17cC85nliwGiL+tpoKN0StpgE0TeOjXQTU6MVCfsB4v7aW05CgQ/1OywGb0x/oy9hHFnN+sczTiRaA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -5808,12 +5415,12 @@ packages: esbuild: optional: true dependencies: - '@babel/core': 7.22.9 + '@babel/core': 7.22.10 '@jest/types': 29.6.1 bs-logger: 0.2.6 fast-json-stable-stringify: 2.1.0 - jest: 29.6.1(@types/node@18.16.19)(ts-node@10.9.1) - jest-util: 29.6.1 + jest: 29.6.2(@types/node@18.17.5)(ts-node@10.9.1) + jest-util: 29.6.2 json5: 2.2.3 lodash.memoize: 4.1.2 make-error: 1.3.6 @@ -5822,7 +5429,7 @@ packages: yargs-parser: 21.1.1 dev: true - /ts-node@10.9.1(@types/node@18.16.19)(typescript@5.1.6): + /ts-node@10.9.1(@types/node@18.17.5)(typescript@5.1.6): resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} hasBin: true peerDependencies: @@ -5841,7 +5448,7 @@ packages: '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 18.16.19 + '@types/node': 18.17.5 acorn: 8.10.0 acorn-walk: 8.2.0 arg: 4.1.3 @@ -5856,8 +5463,8 @@ packages: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} dev: true - /tslib@2.6.0: - resolution: {integrity: sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA==} + /tslib@2.6.1: + resolution: {integrity: sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==} dev: true /tsutils@3.21.0(typescript@5.1.6): @@ -5870,10 +5477,6 @@ packages: typescript: 5.1.6 dev: true - /tty-browserify@0.0.0: - resolution: {integrity: sha512-JVa5ijo+j/sOoHGjw0sxw734b1LhBkQ3bvUGNdxnVXDCX81Yx7TFgnZygxrIIWn23hbfTaMYLwRmAxFyDuFmIw==} - dev: true - /type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} @@ -5930,13 +5533,13 @@ packages: resolution: {integrity: sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==} dev: true - /update-browserslist-db@1.0.11(browserslist@4.21.9): + /update-browserslist-db@1.0.11(browserslist@4.21.10): resolution: {integrity: sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' dependencies: - browserslist: 4.21.9 + browserslist: 4.21.10 escalade: 3.1.1 picocolors: 1.0.0 @@ -5949,29 +5552,10 @@ packages: resolution: {integrity: sha512-XdVKMF4SJ0nP/O7XIPB0JwAEuT9lDIYnNsK8yGVe43y0AWoKeJNdv3ZNWh7ksJ6KqQFjOO6ox/VEitLnaVNufw==} dev: true - /url@0.11.1: - resolution: {integrity: sha512-rWS3H04/+mzzJkv0eZ7vEDGiQbgquI1fGfOad6zKvgYQi1SzMmhl7c/DdRGxhaWrVH6z0qWITo8rpnxK/RfEhA==} - dependencies: - punycode: 1.4.1 - qs: 6.11.2 - dev: true - /util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} dev: true - /util@0.10.3: - resolution: {integrity: sha512-5KiHfsmkqacuKjkRkdV7SsfDJ2EGiPsK92s2MhNSY0craxjTdKTtqKsJaCWp4LW33ZZ0OPUv1WO/TFvNQRiQxQ==} - dependencies: - inherits: 2.0.1 - dev: true - - /util@0.11.1: - resolution: {integrity: sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==} - dependencies: - inherits: 2.0.3 - dev: true - /v8-compile-cache-lib@3.0.1: resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} @@ -5979,7 +5563,7 @@ packages: resolution: {integrity: sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==} engines: {node: '>=10.12.0'} dependencies: - '@jridgewell/trace-mapping': 0.3.18 + '@jridgewell/trace-mapping': 0.3.19 '@types/istanbul-lib-coverage': 2.0.4 convert-source-map: 1.9.0 @@ -5990,10 +5574,6 @@ packages: spdx-expression-parse: 3.0.1 dev: true - /vm-browserify@1.1.2: - resolution: {integrity: sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==} - dev: true - /walker@1.0.8: resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} dependencies: @@ -6038,7 +5618,7 @@ packages: '@webassemblyjs/wasm-parser': 1.11.6 acorn: 8.10.0 acorn-import-assertions: 1.9.0(acorn@8.10.0) - browserslist: 4.21.9 + browserslist: 4.21.10 chrome-trace-event: 1.0.3 enhanced-resolve: 5.15.0 es-module-lexer: 1.3.0 @@ -6083,13 +5663,6 @@ packages: dependencies: isexe: 2.0.0 - /widest-line@3.1.0: - resolution: {integrity: sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==} - engines: {node: '>=8'} - dependencies: - string-width: 4.2.3 - dev: true - /wordwrap@1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} dev: true @@ -6112,6 +5685,19 @@ packages: imurmurhash: 0.1.4 signal-exit: 3.0.7 + /ws@7.5.9: + resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==} + engines: {node: '>=8.3.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dev: true + /xtend@4.0.2: resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} engines: {node: '>=0.4'} @@ -6158,6 +5744,19 @@ packages: yargs-parser: 20.2.9 dev: true + /yargs@17.0.1: + resolution: {integrity: sha512-xBBulfCc8Y6gLFcrPvtqKz9hz8SO0l1Ni8GgDekvBX2ro0HRQImDGnikfc33cgzcYUSncapnNcZDjVFIH3f6KQ==} + engines: {node: '>=12'} + dependencies: + cliui: 7.0.4 + escalade: 3.1.1 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 20.2.9 + dev: true + /yargs@17.7.2: resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} engines: {node: '>=12'} diff --git a/renovate.json b/renovate.json index 9dc3a06d..929b91f5 100644 --- a/renovate.json +++ b/renovate.json @@ -18,13 +18,6 @@ "matchUpdateTypes": ["minor", "digest", "patch", "pin"], "automerge": true, "automergeType": "branch" - }, - { - "matchPackagePatterns": ["eslint"], - "groupName": "eslint", - "schedule": ["before 2am on monday"], - "automerge": true, - "automergeType": "branch" } ], "rebaseWhen": "auto", diff --git a/src/config/models/Book.ts b/src/config/models/Book.ts index 0040f70a..edfd2c52 100644 --- a/src/config/models/Book.ts +++ b/src/config/models/Book.ts @@ -13,6 +13,7 @@ const bookSchema = schema( }), { required: true } ), + copyright: types.number(), description: types.string({ required: true }), formatType: types.string({ required: true }), genres: types.array( @@ -23,6 +24,8 @@ const bookSchema = schema( }) ), image: types.string(), + isAdult: types.boolean({ required: true }), + isbn: types.string(), language: types.string({ required: true }), narrators: types.array( types.object({ @@ -55,6 +58,8 @@ const bookSchema = schema( }, { defaults: { + isAdult: false, + isbn: '', region: 'us' }, timestamps: true diff --git a/src/config/types.ts b/src/config/types.ts index 84dae5ef..6a1d4f7e 100644 --- a/src/config/types.ts +++ b/src/config/types.ts @@ -85,10 +85,13 @@ export type ApiNarratorOnBook = z.infer export const ApiBookSchema = z.object({ asin: AsinSchema, authors: z.array(ApiAuthorOnBookSchema), + copyright: z.number().int().optional(), description: z.string(), formatType: z.string(), genres: z.array(ApiGenreSchema).optional(), image: z.string().url().optional(), + isAdult: z.boolean().default(false), + isbn: z.string().optional(), language: z.string(), narrators: z.array(ApiNarratorOnBookSchema).optional(), publisherName: z.string(), @@ -163,20 +166,30 @@ const baseShape = z.object({ available_codecs: z.array(AudibleCodecSchema).optional(), category_ladders: z.array(AudibleCategoriesSchema), content_type: z.string(), + copyright: z.string(), + date_first_available: z.string().optional(), editorial_reviews: z.array(z.string()).optional(), + extended_product_description: z.string().optional(), format_type: z.string(), has_children: z.boolean(), is_adult_product: z.boolean(), is_listenable: z.boolean(), + is_pdf_url_available: z.boolean().optional(), is_purchasability_suppressed: z.boolean(), + isbn: z.string().optional(), issue_date: z.string(), language: z.string(), + merchandising_description: z.string().optional(), merchandising_summary: z.string(), narrators: z.array(ApiNarratorOnBookSchema).optional(), product_images: z.record(z.string(), z.string().url()).optional(), + platinum_keywords: z.array(z.string()).optional(), + product_site_launch_date: z.string().datetime().optional(), publisher_name: z.string(), publisher_summary: z.string(), rating: AudibleRatingSchema, + // Audible passes this as a string, but it's a boolean in the string + read_along_support: z.coerce.boolean().optional(), release_date: z.string(), runtime_length_min: z.number().or(z.literal(0)).optional(), sku: z.string().optional(), diff --git a/src/helpers/authors/audible/ScrapeHelper.ts b/src/helpers/authors/audible/ScrapeHelper.ts index 3715579c..eeaf845c 100644 --- a/src/helpers/authors/audible/ScrapeHelper.ts +++ b/src/helpers/authors/audible/ScrapeHelper.ts @@ -2,6 +2,7 @@ import * as cheerio from 'cheerio' import { htmlToText } from 'html-to-text' import { ApiAuthorOnBook, ApiAuthorProfile, ApiAuthorProfileSchema } from '#config/types' +import cleanupDescription from '#helpers/utils/cleanupDescription' import fetch from '#helpers/utils/fetchPlus' import SharedHelper from '#helpers/utils/shared' import { @@ -130,7 +131,7 @@ class ScrapeHelper { } // Description - const description = this.getDescription(dom) + const description = cleanupDescription(this.getDescription(dom)) // Genres const genres = this.helper.collectGenres( this.asin, diff --git a/src/helpers/books/audible/ApiHelper.ts b/src/helpers/books/audible/ApiHelper.ts index c25a572d..af5015ce 100644 --- a/src/helpers/books/audible/ApiHelper.ts +++ b/src/helpers/books/audible/ApiHelper.ts @@ -16,6 +16,7 @@ import { AudibleSeries, AudibleSeriesSchema } from '#config/types' +import cleanupDescription from '#helpers/utils/cleanupDescription' import fetch from '#helpers/utils/fetchPlus' import SharedHelper from '#helpers/utils/shared' import { @@ -41,13 +42,15 @@ class ApiHelper { const baseDomain = 'https://api.audible' const regionTLD = regions[region].tld const baseUrl = '1.0/catalog/products' + // Last item is intentionally image_sizes const paramArr = [ 'category_ladders', 'contributors', + 'media', + 'product_attrs', 'product_desc', + 'product_details', 'product_extended_attrs', - 'product_attrs', - 'media', 'rating', 'series', 'image_sizes=500,1024' @@ -84,6 +87,23 @@ class ApiHelper { return ApiGenreSchema.safeParse(genre).success } + getCopyrightYear() { + if (!this.audibleResponse) throw new Error(ErrorMessageNoData(this.asin, 'ApiHelper')) + const regex = /(?:©|\(c\)|copyright\b)\s*(\d{4})/iu + const copyright = this.audibleResponse.copyright + const match = regex.exec(copyright) + + // find the lowest year in the string + if (match) { + try { + const years = match[1].split('-').map(Number) + return Math.min(...years) + } catch (error) { + return undefined + } + } + } + /** * Find the parent categories (genres) of the given category array * @param {AudibleCategory[]} categories array of categories to check @@ -269,14 +289,19 @@ class ApiHelper { } return authorJson }), - description: htmlToText(this.audibleResponse['merchandising_summary'], { - wordwrap: false - }).trim(), + copyright: this.getCopyrightYear(), + description: cleanupDescription( + htmlToText(this.audibleResponse['merchandising_summary'], { + wordwrap: false + }) + ).trim(), formatType: this.audibleResponse.format_type, ...(this.categories && { genres: [...this.getGenres(), ...this.getTags()] }), image: this.getHighResImage(), + isAdult: this.audibleResponse.is_adult_product, + isbn: this.audibleResponse.isbn ?? '', language: this.audibleResponse.language, narrators: this.audibleResponse.narrators?.map((person: ApiNarratorOnBook) => { diff --git a/src/helpers/utils/cleanupDescription.ts b/src/helpers/utils/cleanupDescription.ts new file mode 100644 index 00000000..bb316dae --- /dev/null +++ b/src/helpers/utils/cleanupDescription.ts @@ -0,0 +1,14 @@ +// regex to remove any emails +const emailRegex = /([a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-Z0-9_-]+)/g + +// Regex to remove any twitter handles +const twitterRegex = /(^|[^@\w])@(\w{1,15})\b/g + +// Regex to remove any urls (with or without http(s)) +const urlRegex = /((https?:\/\/)?[\w-]+(\.[\w-]+)+\.?(:\d+)?(\/\S*)?)/gm + +const cleanupDescription = (description: string): string => { + return description.replace(emailRegex, '').replace(twitterRegex, '').replace(urlRegex, '').trim() +} + +export default cleanupDescription diff --git a/tests/audible/authors/scrape.test.ts b/tests/audible/authors/scrape.test.ts index 416f3465..655f2995 100644 --- a/tests/audible/authors/scrape.test.ts +++ b/tests/audible/authors/scrape.test.ts @@ -15,7 +15,7 @@ describe('Audible Author HTML', () => { asin = 'B00G0WYW92' helper = new ScrapeHelper(asin, 'us') response = await helper.process() - }) + }, 10000) it('returned the correct asin', () => { expect(response.asin).toEqual(authorParsedB00G0WYW92.asin) @@ -51,7 +51,7 @@ describe('Audible Author HTML', () => { asin = 'B0034NFIOI' helper = new ScrapeHelper(asin, 'us') response = await helper.process() - }) + }, 10000) it('returned the correct asin', () => { expect(response.asin).toEqual(authorParsedB0034NFIOI.asin) diff --git a/tests/audible/books/api.test.ts b/tests/audible/books/api.test.ts index 2a5e137c..4a48a54f 100644 --- a/tests/audible/books/api.test.ts +++ b/tests/audible/books/api.test.ts @@ -9,6 +9,14 @@ import { setupMinimalParsed, setupMinimalResponse } from '#tests/datasets/audible/books/api' +import { + B08C6YJ1LScopyright, + B08C6YJ1LSdescription, + B08C6YJ1LSimage, + B017V4IM1Gcopyright, + B017V4IM1Gdescription, + B017V4IM1Gimage +} from '#tests/datasets/audible/books/stitch' let asin: string let helper: ApiHelper @@ -25,7 +33,7 @@ describe('Audible API', () => { response = fetched.product // Make an object with the same keys as the response minimalResponse = setupMinimalResponse(response) - }) + }, 10000) it('returned the correct data', () => { expect(minimalResponse).toEqual(minimalB08G9PRS1K) @@ -41,7 +49,7 @@ describe('Audible API', () => { response = fetched.product // Make an object with the same keys as the response minimalResponse = setupMinimalResponse(response) - }) + }, 10000) it('returned the correct data', () => { expect(minimalResponse).toEqual(minimalB08C6YJ1LS) @@ -58,11 +66,14 @@ describe('Audible API', () => { if (!parsed.genres) throw new Error('Parsed is undefined') response = parsed // Make an object with the same keys as the response - const description = - "James Patterson's Detective Billy Harney is back, this time investigating murders in a notorious Chicago drug ring, which will lead him, his sister, and his new partner through a dangerous web of corrupt politicians, vengeful billionaires, and violent dark web conspiracies...." - const image = 'https://m.media-amazon.com/images/I/91H9ynKGNwL.jpg' - minimalParsed = setupMinimalParsed(B08C6YJ1LS.product, description, image, parsed.genres) - }) + minimalParsed = setupMinimalParsed( + B08C6YJ1LS.product, + B08C6YJ1LScopyright, + B08C6YJ1LSdescription, + B08C6YJ1LSimage, + parsed.genres + ) + }, 10000) it('returned the correct data', () => { expect(response).toEqual(minimalParsed) @@ -79,11 +90,14 @@ describe('Audible API', () => { if (!parsed.genres) throw new Error('Parsed is undefined') response = parsed // Make an object with the same keys as the response - const description = - 'Harry Potter has never even heard of Hogwarts when the letters start dropping on the doormat at number four, Privet Drive. Addressed in green ink on yellowish parchment with a purple seal, they are swiftly confiscated by his grisly aunt and uncle....' - const image = 'https://m.media-amazon.com/images/I/91eopoUCjLL.jpg' - minimalParsed = setupMinimalParsed(B017V4IM1G.product, description, image, parsed.genres) - }) + minimalParsed = setupMinimalParsed( + B017V4IM1G.product, + B017V4IM1Gcopyright, + B017V4IM1Gdescription, + B017V4IM1Gimage, + parsed.genres + ) + }, 10000) it('returned the correct data', () => { expect(response).toEqual(minimalParsed) diff --git a/tests/audible/books/chapter.test.ts b/tests/audible/books/chapter.test.ts index 26e65f31..9501be77 100644 --- a/tests/audible/books/chapter.test.ts +++ b/tests/audible/books/chapter.test.ts @@ -18,7 +18,7 @@ describe('Audible API', () => { const fetched = await helper.fetchChapter() if (!fetched) throw new Error('Parsed is undefined') response = fetched - }) + }, 10000) it('returned the correct data', () => { expect(response).toEqual(chapterResponseB017V4IM1G) @@ -35,7 +35,7 @@ describe('Audible API', () => { const parsed = await helper.parseResponse(fetched) if (!parsed) throw new Error('Parsed is undefined') response = parsed - }) + }, 10000) it('returned the correct data', () => { expect(response).toEqual(chapterParsed1721358595) @@ -50,7 +50,7 @@ describe('Audible API', () => { const fetched = await helper.fetchChapter() const parsed = await helper.parseResponse(fetched) response = parsed - }) + }, 10000) it('returned undefined', () => { expect(response).toBeUndefined() diff --git a/tests/audible/books/scrape.test.ts b/tests/audible/books/scrape.test.ts index da1dd28c..33f28b28 100644 --- a/tests/audible/books/scrape.test.ts +++ b/tests/audible/books/scrape.test.ts @@ -21,7 +21,7 @@ describe('Audible HTML', () => { const parsed = await helper.parseResponse(fetched) if (!parsed) throw new Error('Parsed is undefined') response = parsed - }) + }, 10000) it('returned the correct data', () => { expect(response).toEqual(parsedB08G9PRS1K) @@ -37,7 +37,7 @@ describe('Audible HTML', () => { const parsed = await helper.parseResponse(fetched) if (!parsed) throw new Error('Parsed is undefined') response = parsed - }) + }, 10000) it('returned the correct data', () => { expect(response).toEqual(parsedB017V4IM1G) @@ -54,7 +54,7 @@ describe('Audible HTML', () => { const parsed = await helper.parseResponse(fetched) if (!parsed) throw new Error('Parsed is undefined') response = parsed - }) + }, 10000) it('returned the correct data', () => { expect(response).toEqual(parsedB08C6YJ1LS) @@ -69,7 +69,7 @@ describe('Audible HTML', () => { helper = new ScrapeHelper(asin, 'us') const fetched = await helper.fetchBook() response = fetched - }) + }, 10000) it('returned undefined', () => { expect(response).toBeUndefined() @@ -84,7 +84,7 @@ describe('Audible HTML', () => { const fetched = await helper.fetchBook() const parsed = await helper.parseResponse(fetched) response = parsed - }) + }, 10000) it('returned undefined', () => { expect(response).toBeUndefined() diff --git a/tests/audible/books/stitch.test.ts b/tests/audible/books/stitch.test.ts index 1e828dfd..0bb1fa3c 100644 --- a/tests/audible/books/stitch.test.ts +++ b/tests/audible/books/stitch.test.ts @@ -28,7 +28,7 @@ describe('Audible API and HTML Parsing', () => { // Set variables chapters = chapterData response = newBook - }) + }, 10000) it('returned the correct data', () => { expect(response).toEqual(combinedB017V4IM1G) @@ -51,7 +51,7 @@ describe('Audible API and HTML Parsing', () => { // Set variables chapters = chapterData response = newBook - }) + }, 10000) it('returned the correct data', () => { expect(response).toEqual(combinedB08C6YJ1LS) @@ -74,7 +74,7 @@ describe('Audible API and HTML Parsing', () => { // Set variables chapters = chapterData response = newBook - }) + }, 10000) it('returned the correct data', () => { expect(response).toEqual(minimalB0036I54I6) diff --git a/tests/datasets/audible/books/api.ts b/tests/datasets/audible/books/api.ts index 06556121..18f4d06b 100644 --- a/tests/datasets/audible/books/api.ts +++ b/tests/datasets/audible/books/api.ts @@ -11,8 +11,11 @@ export interface MinimalResponse { asin: string authors: AudibleProduct['product']['authors'] category_ladders: AudibleProduct['product']['category_ladders'] + copyright: AudibleProduct['product']['copyright'] merchandising_summary: AudibleProduct['product']['merchandising_summary'] format_type: AudibleProduct['product']['format_type'] + isbn: AudibleProduct['product']['isbn'] + is_adult_product: AudibleProduct['product']['is_adult_product'] language: AudibleProduct['product']['language'] narrators: AudibleProduct['product']['narrators'] product_images: AudibleProduct['product']['product_images'] @@ -25,6 +28,7 @@ export interface MinimalResponse { export function setupMinimalParsed( response: AudibleProduct['product'], + copyright: number, description: string, image: string, genres: ApiGenre[] @@ -51,9 +55,12 @@ export function setupMinimalParsed( return ApiBookSchema.parse({ asin: response.asin, authors: response.authors, + copyright, description, formatType: response.format_type, genres, + isbn: response.isbn ?? '', + isAdult: response.is_adult_product, language: response.language, narrators: response.narrators, image, @@ -78,6 +85,9 @@ export function setupMinimalResponse(response: AudibleProduct['product']): Minim asin: response.asin, authors: response.authors, category_ladders: response.category_ladders, + copyright: response.copyright, + is_adult_product: response.is_adult_product, + isbn: response.isbn, merchandising_summary: response.merchandising_summary, format_type: response.format_type, language: response.language, @@ -94,7 +104,13 @@ export function setupMinimalResponse(response: AudibleProduct['product']): Minim export const B08G9PRS1K = AudibleProductSchema.parse({ product: { asin: 'B08G9PRS1K', - authors: [{ asin: 'B00G0WYW92', name: 'Andy Weir' }], + asset_details: [], + authors: [ + { + asin: 'B00G0WYW92', + name: 'Andy Weir' + } + ], available_codecs: [ { enhanced_codec: 'LC_64_44100_stereo', @@ -120,7 +136,12 @@ export const B08G9PRS1K = AudibleProductSchema.parse({ is_kindle_enhanced: true, name: 'aax_44_128' }, - { enhanced_codec: 'format4', format: 'Format4', is_kindle_enhanced: false, name: 'format4' }, + { + enhanced_codec: 'format4', + format: 'Format4', + is_kindle_enhanced: false, + name: 'format4' + }, { enhanced_codec: 'mp44464', format: 'Enhanced', @@ -145,89 +166,143 @@ export const B08G9PRS1K = AudibleProductSchema.parse({ is_kindle_enhanced: true, name: 'mp4_22_32' }, - { enhanced_codec: 'aax', format: 'Enhanced', is_kindle_enhanced: false, name: 'aax' } + { + enhanced_codec: 'aax', + format: 'Enhanced', + is_kindle_enhanced: false, + name: 'aax' + } ], category_ladders: [ { ladder: [ - { id: '18580606011', name: 'Science Fiction & Fantasy' }, - { id: '18580628011', name: 'Science Fiction' }, - { id: '18580629011', name: 'Adventure' } + { + id: '18580606011', + name: 'Science Fiction & Fantasy' + }, + { + id: '18580628011', + name: 'Science Fiction' + }, + { + id: '18580629011', + name: 'Adventure' + } ], root: 'Genres' }, { ladder: [ - { id: '18580606011', name: 'Science Fiction & Fantasy' }, - { id: '18580628011', name: 'Science Fiction' }, - { id: '18580639011', name: 'Hard Science Fiction' } + { + id: '18580606011', + name: 'Science Fiction & Fantasy' + }, + { + id: '18580628011', + name: 'Science Fiction' + }, + { + id: '18580639011', + name: 'Hard Science Fiction' + } ], root: 'Genres' }, { ladder: [ - { id: '18580606011', name: 'Science Fiction & Fantasy' }, - { id: '18580628011', name: 'Science Fiction' }, - { id: '18580645011', name: 'Space Opera' } + { + id: '18580606011', + name: 'Science Fiction & Fantasy' + }, + { + id: '18580628011', + name: 'Science Fiction' + }, + { + id: '18580645011', + name: 'Space Opera' + } ], root: 'Genres' } ], content_delivery_type: 'MultiPartBook', content_type: 'Product', + copyright: '©2021 Andy Weir (P)2021 Audible Studios', + date_first_available: '2021-05-04', + extended_product_description: + "

Ryland Grace is the sole survivor on a desperate, last-chance mission - and if he fails, humanity and the Earth itself will perish. Except that right now, he doesn't know that. He can't even remember his own name, let alone the nature of his assignment or how to complete it. All he knows is that he's been asleep for a very, very long time. And he's just been awakened to find himself millions of miles from home, with nothing but two corpses for company.

", format_type: 'unabridged', has_children: true, is_adult_product: false, is_listenable: true, + is_pdf_url_available: false, is_purchasability_suppressed: false, + is_vvab: false, + isbn: '9781603935470', issue_date: '2021-05-04', language: 'english', + merchandising_description: '', merchandising_summary: "

Ryland Grace is the sole survivor on a desperate, last-chance mission - and if he fails, humanity and the Earth itself will perish. Except that right now, he doesn't know that. He can't even remember his own name, let alone the nature of his assignment or how to complete it....

", - narrators: [{ name: 'Ray Porter' }], + narrators: [ + { + name: 'Ray Porter' + } + ], + platinum_keywords: [ + 'Science_Fiction_Fantasy/Science_Fiction', + 'Science_Fiction_Fantasy', + 'Science_Fiction_Fantasy/Science_Fiction/Adventure', + 'Science_Fiction_Fantasy/Science_Fiction/High_Tech', + 'Sci-Fi_Fantasy/Space_Opera' + ], product_images: { - '500': 'https://m.media-amazon.com/images/I/51b6fvQr1-L._SL500_.jpg', - '1024': 'https://m.media-amazon.com/images/I/91vS2L5YfEL._SL1024_.jpg' + '1024': 'https://m.media-amazon.com/images/I/91vS2L5YfEL._SL1024_.jpg', + '500': 'https://m.media-amazon.com/images/I/51b6fvQr1-L._SL500_.jpg' }, + product_site_launch_date: '2020-08-19T19:32:00Z', + publication_datetime: '2021-05-04T07:00:00Z', publisher_name: 'Audible Studios', publisher_summary: "

Winner of the 2022 Audie Awards' Audiobook of the Year

Number-One Audible and New York Times Audio Best Seller

More than one million audiobooks sold

A lone astronaut must save the earth from disaster in this incredible new science-based thriller from the number-one New York Times best-selling author of The Martian.

Ryland Grace is the sole survivor on a desperate, last-chance mission - and if he fails, humanity and the Earth itself will perish.

Except that right now, he doesn't know that. He can't even remember his own name, let alone the nature of his assignment or how to complete it.

All he knows is that he's been asleep for a very, very long time. And he's just been awakened to find himself millions of miles from home, with nothing but two corpses for company.

His crewmates dead, his memories fuzzily returning, he realizes that an impossible task now confronts him. Alone on this tiny ship that's been cobbled together by every government and space agency on the planet and hurled into the depths of space, it's up to him to conquer an extinction-level threat to our species.

And thanks to an unexpected ally, he just might have a chance.

Part scientific mystery, part dazzling interstellar journey, Project Hail Mary is a tale of discovery, speculation, and survival to rival The Martian - while taking us to places it never dreamed of going.

PLEASE NOTE: To accommodate this audio edition, some changes to the original text have been made with the approval of author Andy Weir.

", rating: { - num_reviews: 13224, + num_reviews: 18832, overall_distribution: { - average_rating: 4.864404509607733, + average_rating: 4.865184063594208, display_average_rating: '4.9', - display_stars: 5, - num_five_star_ratings: 113014, - num_four_star_ratings: 11464, - num_one_star_ratings: 217, - num_ratings: 126929, - num_three_star_ratings: 1823, - num_two_star_ratings: 411 + display_stars: 5.0, + num_five_star_ratings: 141378, + num_four_star_ratings: 14019, + num_one_star_ratings: 288, + num_ratings: 158505, + num_three_star_ratings: 2262, + num_two_star_ratings: 558 }, performance_distribution: { - average_rating: 4.924969534696119, + average_rating: 4.925095004491121, display_average_rating: '4.9', - display_stars: 5, - num_five_star_ratings: 109467, - num_four_star_ratings: 5838, - num_one_star_ratings: 141, - num_ratings: 116526, - num_three_star_ratings: 899, - num_two_star_ratings: 181 + display_stars: 5.0, + num_five_star_ratings: 136044, + num_four_star_ratings: 7138, + num_one_star_ratings: 185, + num_ratings: 144730, + num_three_star_ratings: 1126, + num_two_star_ratings: 237 }, story_distribution: { - average_rating: 4.837987815911696, + average_rating: 4.840342079527248, display_average_rating: '4.8', - display_stars: 5, - num_five_star_ratings: 100979, - num_four_star_ratings: 12307, - num_one_star_ratings: 237, - num_ratings: 116053, - num_three_star_ratings: 2043, - num_two_star_ratings: 487 + display_stars: 5.0, + num_five_star_ratings: 125817, + num_four_star_ratings: 14956, + num_one_star_ratings: 318, + num_ratings: 144177, + num_three_star_ratings: 2467, + num_two_star_ratings: 619 } }, + read_along_support: 'true', release_date: '2021-05-04', runtime_length_min: 970, sku: 'BK_ADBL_051843', @@ -248,8 +323,10 @@ export const B08G9PRS1K = AudibleProductSchema.parse({ 'contributors', 'series', 'rating', + 'category_ladders', 'media', - 'product_attrs' + 'product_attrs', + 'product_details' ] }) @@ -258,13 +335,28 @@ export const minimalB08G9PRS1K: MinimalResponse = setupMinimalResponse(B08G9PRS1 export const B08C6YJ1LS = AudibleProductSchema.parse({ product: { asin: 'B08C6YJ1LS', + asset_details: [], authors: [ - { asin: 'B000APZGGS', name: 'James Patterson' }, - { asin: 'B09MXLL1JR', name: 'Aaron Tracy' }, - { asin: 'B07R2F2DXH', name: 'Ryan Silbert' } + { + asin: 'B000APZGGS', + name: 'James Patterson' + }, + { + asin: 'B09MXLL1JR', + name: 'Aaron Tracy' + }, + { + asin: 'B07R2F2DXH', + name: 'Ryan Silbert' + } ], available_codecs: [ - { enhanced_codec: 'format4', format: 'Format4', is_kindle_enhanced: false, name: 'format4' }, + { + enhanced_codec: 'LC_64_44100_stereo', + format: 'Enhanced', + is_kindle_enhanced: true, + name: 'aax_44_64' + }, { enhanced_codec: 'LC_128_44100_stereo', format: 'Enhanced', @@ -272,10 +364,10 @@ export const B08C6YJ1LS = AudibleProductSchema.parse({ name: 'aax_44_128' }, { - enhanced_codec: 'LC_64_44100_stereo', + enhanced_codec: 'mp444128', format: 'Enhanced', is_kindle_enhanced: true, - name: 'aax_44_64' + name: 'mp4_44_128' }, { enhanced_codec: 'mp44464', @@ -284,86 +376,122 @@ export const B08C6YJ1LS = AudibleProductSchema.parse({ name: 'mp4_44_64' }, { - enhanced_codec: 'mp444128', + enhanced_codec: 'aax', format: 'Enhanced', - is_kindle_enhanced: true, - name: 'mp4_44_128' - }, - { enhanced_codec: 'aax', format: 'Enhanced', is_kindle_enhanced: false, name: 'aax' } + is_kindle_enhanced: false, + name: 'aax' + } ], category_ladders: [ { ladder: [ - { id: '18574597011', name: 'Mystery, Thriller & Suspense' }, - { id: '18574621011', name: 'Thriller & Suspense' }, - { id: '18574623011', name: 'Crime Thrillers' } + { + id: '18574597011', + name: 'Mystery, Thriller & Suspense' + }, + { + id: '18574621011', + name: 'Thriller & Suspense' + }, + { + id: '18574623011', + name: 'Crime Thrillers' + } ], root: 'Genres' } ], content_delivery_type: 'SinglePartBook', content_type: 'Show', + copyright: + '©2020 James Patterson, Friendly Heights, Inc., and Origin Story Entertainment, LLC (P)2020 Audible Originals, LLC.', + date_first_available: '2021-03-11', + extended_product_description: + "

In The Coldest Case: A Black Book Audio Drama, homicide detective Billy Harney sends his new partner, Kate, deep undercover in a notorious Chicago drug ring. When several members of the ring soon turn up dead, Billy abruptly pulls Kate out, blowing her cover. Kate’s informant inside the gang quickly disappears. As does the ring’s black book.... When Billy can’t find the informant, he wonders if Kate is secretly harboring her, since the two grew close during Kate's weeks undercover.

", format_type: 'original_recording', has_children: false, is_adult_product: false, is_listenable: true, + is_pdf_url_available: false, is_purchasability_suppressed: false, + is_vvab: false, + isbn: '9781603934619', issue_date: '2021-03-11', language: 'english', + merchandising_description: '', merchandising_summary: "

James Patterson's Detective Billy Harney is back, this time investigating murders in a notorious Chicago drug ring, which will lead him, his sister, and his new partner through a dangerous web of corrupt politicians, vengeful billionaires, and violent dark web conspiracies....   

", narrators: [ - { name: 'Aaron Paul' }, - { name: 'Krysten Ritter' }, - { name: 'Nathalie Emmanuel' }, - { name: 'Beau Bridges' }, - { asin: 'B0C9MBTDV9', name: 'full cast' } + { + name: 'Aaron Paul' + }, + { + name: 'Krysten Ritter' + }, + { + name: 'Nathalie Emmanuel' + }, + { + name: 'Beau Bridges' + }, + { + asin: 'B0C9MBTDV9', + name: 'full cast' + } + ], + platinum_keywords: [ + 'Mysteries_Thrillers/Crime', + 'Mysteries_Thrillers/Suspense', + 'Mysteries_Thrillers/Mysteries' ], product_images: { - '500': 'https://m.media-amazon.com/images/I/51SteOEMD8L._SL500_.jpg', - '1024': 'https://m.media-amazon.com/images/I/91H9ynKGNwL._SL1024_.jpg' + '1024': 'https://m.media-amazon.com/images/I/91H9ynKGNwL._SL1024_.jpg', + '500': 'https://m.media-amazon.com/images/I/51SteOEMD8L._SL500_.jpg' }, + product_site_launch_date: '2020-07-01T21:11:00Z', program_participation: 'Audible Original', + publication_datetime: '2021-03-11T08:00:00Z', publication_name: 'A Billy Harney Thriller', publisher_name: 'Audible Originals', publisher_summary: "

Please note: This audio drama is for mature audiences only. It contains strong language, violence, and sexual content. Discretion is advised. 

James Patterson's Detective Billy Harney is back, this time investigating murders in a notorious Chicago drug ring, which will lead him, his sister, and his new partner through a dangerous web of corrupt politicians, vengeful billionaires, and violent dark web conspiracies.

In The Coldest Case: A Black Book Audio Drama, homicide detective Billy Harney sends his new partner, Kate, deep undercover in a notorious Chicago drug ring. When several members of the ring soon turn up dead, Billy abruptly pulls Kate out, blowing her cover. Kate’s informant inside the gang quickly disappears. As does the ring’s black book.... 

When Billy can’t find the informant, he wonders if Kate is secretly harboring her, since the two grew close during Kate's weeks undercover. As Billy and Kate investigate the ring’s murders, they’ll be pulled into a dangerous web of corrupt politicians, vengeful billionaires, drugged pro-athletes, and violent, dark web conspiracies, all in search of the missing black book. 

", rating: { - num_reviews: 1628, + num_reviews: 1920, overall_distribution: { - average_rating: 4.328910333735424, + average_rating: 4.336082661107587, display_average_rating: '4.3', display_stars: 4.5, - num_five_star_ratings: 11864, - num_four_star_ratings: 4618, - num_one_star_ratings: 590, - num_ratings: 19896, - num_three_star_ratings: 2098, - num_two_star_ratings: 726 + num_five_star_ratings: 13235, + num_four_star_ratings: 5093, + num_one_star_ratings: 644, + num_ratings: 22066, + num_three_star_ratings: 2301, + num_two_star_ratings: 793 }, performance_distribution: { - average_rating: 4.548000665520492, - display_average_rating: '4.5', + average_rating: 4.550625938908363, + display_average_rating: '4.6', display_stars: 4.5, - num_five_star_ratings: 13090, - num_four_star_ratings: 2922, - num_one_star_ratings: 386, - num_ratings: 18031, - num_three_star_ratings: 1215, - num_two_star_ratings: 418 + num_five_star_ratings: 14527, + num_four_star_ratings: 3221, + num_one_star_ratings: 425, + num_ratings: 19970, + num_three_star_ratings: 1338, + num_two_star_ratings: 459 }, story_distribution: { - average_rating: 4.239721059972106, + average_rating: 4.247972598599707, display_average_rating: '4.2', - display_stars: 4, - num_five_star_ratings: 10031, - num_four_star_ratings: 4248, - num_one_star_ratings: 647, - num_ratings: 17925, - num_three_star_ratings: 2205, - num_two_star_ratings: 794 + display_stars: 4.0, + num_five_star_ratings: 11181, + num_four_star_ratings: 4689, + num_one_star_ratings: 706, + num_ratings: 19853, + num_three_star_ratings: 2414, + num_two_star_ratings: 863 } }, + read_along_support: 'false', release_date: '2021-03-11', runtime_length_min: 232, series: [ @@ -392,8 +520,10 @@ export const B08C6YJ1LS = AudibleProductSchema.parse({ 'contributors', 'series', 'rating', + 'category_ladders', 'media', - 'product_attrs' + 'product_attrs', + 'product_details' ] }) @@ -402,7 +532,13 @@ export const minimalB08C6YJ1LS: MinimalResponse = setupMinimalResponse(B08C6YJ1L export const B017V4IM1G = AudibleProductSchema.parse({ product: { asin: 'B017V4IM1G', - authors: [{ asin: 'B000AP9A6K', name: 'J.K. Rowling' }], + asset_details: [], + authors: [ + { + asin: 'B000AP9A6K', + name: 'J.K. Rowling' + } + ], available_codecs: [ { enhanced_codec: 'LC_32_22050_stereo', @@ -410,18 +546,23 @@ export const B017V4IM1G = AudibleProductSchema.parse({ is_kindle_enhanced: true, name: 'aax_22_32' }, + { + enhanced_codec: 'LC_128_44100_stereo', + format: 'Enhanced', + is_kindle_enhanced: true, + name: 'aax_44_128' + }, { enhanced_codec: 'LC_64_22050_stereo', format: 'Enhanced', is_kindle_enhanced: true, name: 'aax_22_64' }, - { enhanced_codec: 'format4', format: 'Format4', is_kindle_enhanced: false, name: 'format4' }, { - enhanced_codec: 'mp42232', + enhanced_codec: 'LC_64_44100_stereo', format: 'Enhanced', is_kindle_enhanced: true, - name: 'mp4_22_32' + name: 'aax_44_64' }, { enhanced_codec: 'mp42264', @@ -429,94 +570,195 @@ export const B017V4IM1G = AudibleProductSchema.parse({ is_kindle_enhanced: true, name: 'mp4_22_64' }, - { enhanced_codec: 'aax', format: 'Enhanced', is_kindle_enhanced: false, name: 'aax' } + { + enhanced_codec: 'mp444128', + format: 'Enhanced', + is_kindle_enhanced: true, + name: 'mp4_44_128' + }, + { + enhanced_codec: 'mp44464', + format: 'Enhanced', + is_kindle_enhanced: true, + name: 'mp4_44_64' + }, + { + enhanced_codec: 'mp42232', + format: 'Enhanced', + is_kindle_enhanced: true, + name: 'mp4_22_32' + }, + { + enhanced_codec: 'aax', + format: 'Enhanced', + is_kindle_enhanced: false, + name: 'aax' + } ], category_ladders: [ - { ladder: [{ id: '18572091011', name: "Children's Audiobooks" }], root: 'Genres' }, - { ladder: [{ id: '18572091011', name: "Children's Audiobooks" }], root: 'Genres' }, { ladder: [ - { id: '18572091011', name: "Children's Audiobooks" }, - { id: '18572491011', name: 'Literature & Fiction' }, - { id: '18572505011', name: 'Family Life' } + { + id: '18572091011', + name: "Children's Audiobooks" + }, + { + id: '18572323011', + name: 'Growing Up & Facts of Life' + } + ], + root: 'Genres' + }, + { + ladder: [ + { + id: '18572091011', + name: "Children's Audiobooks" + }, + { + id: '18572323011', + name: 'Growing Up & Facts of Life' + } ], root: 'Genres' }, { ladder: [ - { id: '18572091011', name: "Children's Audiobooks" }, - { id: '18572586011', name: 'Science Fiction & Fantasy' }, - { id: '18572587011', name: 'Fantasy & Magic' } + { + id: '18572091011', + name: "Children's Audiobooks" + }, + { + id: '18572491011', + name: 'Literature & Fiction' + }, + { + id: '18572505011', + name: 'Family Life' + } ], root: 'Genres' }, { ladder: [ - { id: '18580606011', name: 'Science Fiction & Fantasy' }, - { id: '18580607011', name: 'Fantasy' } + { + id: '18572091011', + name: "Children's Audiobooks" + }, + { + id: '18572586011', + name: 'Science Fiction & Fantasy' + }, + { + id: '18572587011', + name: 'Fantasy & Magic' + } + ], + root: 'Genres' + }, + { + ladder: [ + { + id: '18580606011', + name: 'Science Fiction & Fantasy' + }, + { + id: '18580607011', + name: 'Fantasy' + } ], root: 'Genres' } ], content_delivery_type: 'SinglePartBook', content_type: 'Product', + copyright: + '©1997 J.K. Rowling (P)1999 Listening Library, an imprint of Penguin Random House Audio Publishing Group', + date_first_available: '2015-11-20', editorial_reviews: [ '

"To call Dale a \'reader\' of books is like saying Monet was a Sunday painter." (Los Angeles Times)

' ], + extended_product_description: + "

Harry Potter has never even heard of Hogwarts when the letters start dropping on the doormat at number four, Privet Drive. Addressed in green ink on yellowish parchment with a purple seal, they are swiftly confiscated by his grisly aunt and uncle. Then, on Harry's eleventh birthday, a great beetle-eyed giant of a man called Rubeus Hagrid bursts in with some astonishing news: Harry Potter is a wizard, and he has a place at Hogwarts School of Witchcraft and Wizardry. An incredible adventure is about to begin! 

", format_type: 'unabridged', has_children: false, is_adult_product: false, is_listenable: true, + is_pdf_url_available: false, is_purchasability_suppressed: false, + is_vvab: false, + isbn: '9781781102633', issue_date: '2015-11-20', language: 'english', + merchandising_description: '', merchandising_summary: '

Harry Potter has never even heard of Hogwarts when the letters start dropping on the doormat at number four, Privet Drive. Addressed in green ink on yellowish parchment with a purple seal, they are swiftly confiscated by his grisly aunt and uncle....

', - narrators: [{ name: 'Jim Dale' }], + narrators: [ + { + name: 'Jim Dale' + } + ], + platinum_keywords: [ + 'Childrens_Audiobooks/Growing_Up_Facts_of_Life', + 'Childrens_Audiobooks/Growing_Up_Facts_of_Life/Family_Life', + 'Childrens_Audiobooks', + 'Childrens_Audiobooks/Growing_Up_Facts_of_Life/General', + 'Childrens_Audiobooks/Science_Fiction_Fantasy', + 'Childrens_Audiobooks/Science_Fiction_Fantasy/Fantasy_Magic', + 'Science_Fiction_Fantasy/Fantasy', + 'Science_Fiction_Fantasy', + 'Teen_Young_Adult/Science_Fiction_Fantasy/Fantasy', + 'Teen_Young_Adult/Science_Fiction_Fantasy', + 'Teen_Young_Adult', + 'Teen_Young_Adult/Science_Fiction_Fantasy/Fantasy/Epic' + ], product_images: { - '500': 'https://m.media-amazon.com/images/I/51xJbFMRsxL._SL500_.jpg', - '1024': 'https://m.media-amazon.com/images/I/91eopoUCjLL._SL1024_.jpg' + '1024': 'https://m.media-amazon.com/images/I/91eopoUCjLL._SL1024_.jpg', + '500': 'https://m.media-amazon.com/images/I/51xJbFMRsxL._SL500_.jpg' }, + product_site_launch_date: '2015-11-13T05:00:00Z', + publication_datetime: '2015-11-20T08:00:00Z', publication_name: 'Harry Potter', publisher_name: 'Pottermore Publishing', publisher_summary: "

Harry Potter and the Sorcerer’s Stone will be streaming in Audible Plus through August 4th, 2023.

Turning the envelope over, his hand trembling, Harry saw a purple wax seal bearing a coat of arms; a lion, an eagle, a badger and a snake surrounding a large letter 'H'.

Harry Potter has never even heard of Hogwarts when the letters start dropping on the doormat at number four, Privet Drive. Addressed in green ink on yellowish parchment with a purple seal, they are swiftly confiscated by his grisly aunt and uncle. Then, on Harry's eleventh birthday, a great beetle-eyed giant of a man called Rubeus Hagrid bursts in with some astonishing news: Harry Potter is a wizard, and he has a place at Hogwarts School of Witchcraft and Wizardry. An incredible adventure is about to begin!

Having become classics of our time, the Harry Potter stories never fail to bring comfort and escapism. With their message of hope, belonging and the enduring power of truth and love, the story of the Boy Who Lived continues to delight generations of new listeners.

", rating: { - num_reviews: 6084, + num_reviews: 7606, overall_distribution: { - average_rating: 4.909541875069631, + average_rating: 4.910364294844483, display_average_rating: '4.9', - display_stars: 5, - num_five_star_ratings: 158959, - num_four_star_ratings: 9226, - num_one_star_ratings: 560, - num_ratings: 170543, - num_three_star_ratings: 1433, - num_two_star_ratings: 365 + display_stars: 5.0, + num_five_star_ratings: 175191, + num_four_star_ratings: 9957, + num_one_star_ratings: 619, + num_ratings: 187760, + num_three_star_ratings: 1582, + num_two_star_ratings: 411 }, performance_distribution: { - average_rating: 4.84958682081386, - display_average_rating: '4.8', - display_stars: 5, - num_five_star_ratings: 134106, - num_four_star_ratings: 11919, - num_one_star_ratings: 616, - num_ratings: 150419, - num_three_star_ratings: 3092, - num_two_star_ratings: 686 + average_rating: 4.8522852606445515, + display_average_rating: '4.9', + display_stars: 5.0, + num_five_star_ratings: 147488, + num_four_star_ratings: 12780, + num_one_star_ratings: 684, + num_ratings: 165014, + num_three_star_ratings: 3327, + num_two_star_ratings: 735 }, story_distribution: { - average_rating: 4.9257108183079055, + average_rating: 4.926727990126639, display_average_rating: '4.9', - display_stars: 5, - num_five_star_ratings: 141159, - num_four_star_ratings: 7235, - num_one_star_ratings: 280, - num_ratings: 149968, - num_three_star_ratings: 1096, - num_two_star_ratings: 198 + display_stars: 5.0, + num_five_star_ratings: 154981, + num_four_star_ratings: 7804, + num_one_star_ratings: 317, + num_ratings: 164483, + num_three_star_ratings: 1163, + num_two_star_ratings: 218 } }, + read_along_support: 'false', release_date: '2015-11-20', runtime_length_min: 498, series: [ @@ -551,15 +793,23 @@ export const B017V4IM1G = AudibleProductSchema.parse({ 'contributors', 'series', 'rating', + 'category_ladders', 'media', - 'product_attrs' + 'product_attrs', + 'product_details' ] }) export const B07BS4RKGH = { product: { asin: 'B07BS4RKGH', - authors: [{ asin: 'B019LK4QFY', name: 'Phil Price' }], + asset_details: [], + authors: [ + { + asin: 'B019LK4QFY', + name: 'Phil Price' + } + ], available_codecs: [ { enhanced_codec: 'LC_32_22050_stereo', @@ -573,7 +823,12 @@ export const B07BS4RKGH = { is_kindle_enhanced: true, name: 'aax_22_64' }, - { enhanced_codec: 'format4', format: 'Format4', is_kindle_enhanced: false, name: 'format4' }, + { + enhanced_codec: 'format4', + format: 'Format4', + is_kindle_enhanced: false, + name: 'format4' + }, { enhanced_codec: 'mp42264', format: 'Enhanced', @@ -598,26 +853,81 @@ export const B07BS4RKGH = { is_kindle_enhanced: true, name: 'piff_22_32' }, - { enhanced_codec: 'aax', format: 'Enhanced', is_kindle_enhanced: false, name: 'aax' } + { + enhanced_codec: 'aax', + format: 'Enhanced', + is_kindle_enhanced: false, + name: 'aax' + } + ], + category_ladders: [ + { + ladder: [ + { + id: '18574426011', + name: 'Literature & Fiction' + }, + { + id: '18574490011', + name: 'Horror' + } + ], + root: 'Genres' + }, + { + ladder: [ + { + id: '18574597011', + name: 'Mystery, Thriller & Suspense' + }, + { + id: '18574621011', + name: 'Thriller & Suspense' + }, + { + id: '18574638011', + name: 'Supernatural' + } + ], + root: 'Genres' + } ], - category_ladders: [], content_delivery_type: 'MultiPartBook', content_type: 'Product', + copyright: '©2015 Phil Price (P)2018 Phil Price', editorial_reviews: [''], + extended_product_description: + "

It happens every year. A select few disappear, never to return. From The Falkland Islands to the Himalayas, Puerto Rico to England, people are vanishing without a trace or explanation. A young man who's lost everything stumbles across an ancient secret. Can he unlock the mystery? Will he find those who need him? Can he escape the Unknown? 

", format_type: 'unabridged', has_children: true, is_adult_product: false, is_listenable: true, + is_pdf_url_available: false, is_purchasability_suppressed: false, + is_vvab: false, issue_date: '2018-03-29', language: 'english', + merchandising_description: '', merchandising_summary: "

It happens every year. A select few disappear, never to return. From The Falkland Islands to the Himalayas, people are vanishing without a trace. A young man who's lost everything stumbles across a secret. Can he unlock the mystery? Can he escape the Unknown? Listen to find out more....

", - narrators: [{ name: 'Hannibal Hills' }], + narrators: [ + { + name: 'Hannibal Hills' + } + ], + platinum_keywords: [ + 'Literature_Fiction/Horror', + 'LGBT/Literature_Fiction', + 'Mysteries_Thrillers/Mysteries', + 'Mysteries_Thrillers/Supernatural_Paranormal', + 'Mysteries_Thrillers/Suspense' + ], product_images: { '1024': 'https://m.media-amazon.com/images/I/91leOGfyEML._SL1024_.jpg', '500': 'https://m.media-amazon.com/images/I/61tD+Z-UVPL._SL500_.jpg' }, + product_site_launch_date: '2018-03-29T20:19:00Z', + publication_datetime: '2018-03-29T20:19:00Z', publication_name: 'The Forsaken Series', publisher_name: 'Creativia Publishing', publisher_summary: @@ -627,7 +937,7 @@ export const B07BS4RKGH = { overall_distribution: { average_rating: 4.078947368421052, display_average_rating: '4.1', - display_stars: 4, + display_stars: 4.0, num_five_star_ratings: 16, num_four_star_ratings: 15, num_one_star_ratings: 2, @@ -649,7 +959,7 @@ export const B07BS4RKGH = { story_distribution: { average_rating: 3.8947368421052633, display_average_rating: '3.9', - display_stars: 4, + display_stars: 4.0, num_five_star_ratings: 15, num_four_star_ratings: 13, num_one_star_ratings: 3, @@ -658,6 +968,7 @@ export const B07BS4RKGH = { num_two_star_ratings: 3 } }, + read_along_support: 'true', release_date: '2018-03-29', runtime_length_min: 963, series: [ @@ -686,14 +997,17 @@ export const B07BS4RKGH = { 'contributors', 'series', 'rating', + 'category_ladders', 'media', - 'product_attrs' + 'product_attrs', + 'product_details' ] } export const podcast = AudibleProductSchema.parse({ product: { asin: 'B08JC5J5HR', + asset_details: [], authors: [ { name: 'Jackson Musker' @@ -730,14 +1044,20 @@ export const podcast = AudibleProductSchema.parse({ content_delivery_type: 'PodcastParent', content_type: 'Podcast', continuity: 'serial', + copyright: '©2020 Audible Originals, LLC (P)2020 Audible Originals, LLC', episode_count: 12, + extended_product_description: + 'Wisecracking, marine biologist Bee Guerrero has signed up for the trip of a lifetime: a series of dives deep into the pitch-black waters of Saturn’s moon, Enceladus.', format_type: 'original_recording', has_children: true, is_adult_product: false, is_listenable: false, + is_pdf_url_available: false, is_purchasability_suppressed: true, + is_vvab: false, issue_date: '2020-10-01', language: 'english', + merchandising_description: '', merchandising_summary: 'Wisecracking, marine biologist Bee Guerrero has signed up for the trip of a lifetime: a series of dives deep into the pitch-black waters of Saturn’s moon, Enceladus....', narrators: [ @@ -757,52 +1077,55 @@ export const podcast = AudibleProductSchema.parse({ name: 'a full cast' } ], - new_episode_added_date: '2020-12-24T18:49:57.049Z', + new_episode_added_date: '2022-09-04T20:18:54.018Z', + platinum_keywords: ['Sci-Fi _ Fantasy', 'Sci-Fi Contemporary'], product_images: { - '500': 'https://m.media-amazon.com/images/I/51izwaIIZ2L._SL500_.jpg', - '1024': 'https://m.media-amazon.com/images/I/9125JjSWeCL._SL1024_.jpg' + '1024': 'https://m.media-amazon.com/images/I/9125JjSWeCL._SL1024_.jpg', + '500': 'https://m.media-amazon.com/images/I/51izwaIIZ2L._SL500_.jpg' }, + product_site_launch_date: '2020-10-01T07:00:00Z', program_participation: 'Audible Original', publication_datetime: '2020-10-01T07:00:00Z', publisher_name: 'Audible Originals', publisher_summary: '

In this scripted Audible Original, wisecracking marine biologist and astronaut Bee Guerrero has signed up for the trip of a lifetime: a series of dives deep into the pitch-black waters of Saturn’s moon, Enceladus. 

Set in the near-future when global climate catastrophe has forced humans to search for solutions on new planets, The Sea in the Sky chronicles two astronauts’ journey, in what could be the final NASA-sponsored mission to space. In their search for life, Bee and Ty navigate uncharted waters, take on incredible risks and confront difficult truths about themselves. What will they find at the bottom of it all? 

At times epic and intimate, laugh-out-loud funny and achingly soulful, The Sea in the Sky plumbs the depths of science and faith, triumph and failure. The Audible Original drama is told via daily "dispatches" sent from the space shuttle back to Earth, together with original music and sound design, a never-before-heard space rap, and a full cast of actors. 

Dive into a world you need to hear to believe. 

Contains sensitive content.

This original podcast is 12 episodes; please begin with the episode titled "Prologue". 

Note: this title contains fully immersive sound design and original composition. In order to enjoy the highest quality audio listening experience, please use headphones. If you choose to download this title, make sure it’s set to “High” in your settings.

', rating: { - num_reviews: 517, + num_reviews: 621, overall_distribution: { - average_rating: 4.489013184178985, + average_rating: 4.49203659776347, display_average_rating: '4.5', display_stars: 4.5, - num_five_star_ratings: 1743, - num_four_star_ratings: 455, - num_one_star_ratings: 65, - num_ratings: 2503, - num_three_star_ratings: 156, - num_two_star_ratings: 84 + num_five_star_ratings: 2057, + num_four_star_ratings: 530, + num_one_star_ratings: 74, + num_ratings: 2951, + num_three_star_ratings: 197, + num_two_star_ratings: 93 }, performance_distribution: { - average_rating: 4.677432885906041, + average_rating: 4.680525941719972, display_average_rating: '4.7', display_stars: 4.5, - num_five_star_ratings: 1909, - num_four_star_ratings: 304, - num_one_star_ratings: 40, - num_ratings: 2384, - num_three_star_ratings: 88, - num_two_star_ratings: 43 + num_five_star_ratings: 2260, + num_four_star_ratings: 351, + num_one_star_ratings: 49, + num_ratings: 2814, + num_three_star_ratings: 110, + num_two_star_ratings: 44 }, story_distribution: { - average_rating: 4.414799154334038, + average_rating: 4.415026833631485, display_average_rating: '4.4', display_stars: 4.5, - num_five_star_ratings: 1568, - num_four_star_ratings: 462, - num_one_star_ratings: 82, - num_ratings: 2365, - num_three_star_ratings: 165, - num_two_star_ratings: 88 + num_five_star_ratings: 1845, + num_four_star_ratings: 551, + num_one_star_ratings: 91, + num_ratings: 2795, + num_three_star_ratings: 204, + num_two_star_ratings: 104 } }, + read_along_support: 'false', release_date: '2020-10-01', sku: 'PD_30L0_000001', sku_lite: 'PD_30L0_000001', @@ -829,7 +1152,8 @@ export const podcast = AudibleProductSchema.parse({ 'rating', 'category_ladders', 'media', - 'product_attrs' + 'product_attrs', + 'product_details' ] }) @@ -841,6 +1165,7 @@ export const minimalB0036I54I6: ApiBook = { { name: 'Herbert Lindenberger (Avalon Foundation Professor of Humanities' }, { name: 'Comparative Literature' } ], + copyright: 1993, description: 'Both Anne Sexton and Sylvia Plath rose above severe mental disorders to create bold new directions...', formatType: 'unabridged', @@ -854,6 +1179,8 @@ export const minimalB0036I54I6: ApiBook = { { asin: '18574505011', name: 'Poetry', type: 'tag' } ], image: 'https://m.media-amazon.com/images/I/41dNQts9Z7L.jpg', + isAdult: false, + isbn: '', language: 'english', narrators: [], publisherName: 'Stanford Audio', diff --git a/tests/datasets/audible/books/stitch.ts b/tests/datasets/audible/books/stitch.ts index b6a5f9a1..e20ee7fe 100644 --- a/tests/datasets/audible/books/stitch.ts +++ b/tests/datasets/audible/books/stitch.ts @@ -1,14 +1,11 @@ import { ApiBook, ApiGenre } from '#config/types' import { B08C6YJ1LS, B017V4IM1G, setupMinimalParsed } from '#tests/datasets/audible/books/api' -let description: string -let genres: ApiGenre[] -let image: string - // Scorcerers Stone -description = +export const B017V4IM1Gcopyright = 1997 +export const B017V4IM1Gdescription = 'Harry Potter has never even heard of Hogwarts when the letters start dropping on the doormat at number four, Privet Drive. Addressed in green ink on yellowish parchment with a purple seal, they are swiftly confiscated by his grisly aunt and uncle....' -genres = [ +export const B017V4IM1Ggenres: ApiGenre[] = [ { asin: '18572091011', name: "Children's Audiobooks", @@ -35,17 +32,19 @@ genres = [ { asin: '18572587011', name: 'Fantasy & Magic', type: 'tag' }, { asin: '18580607011', name: 'Fantasy', type: 'tag' } ] -image = 'https://m.media-amazon.com/images/I/91eopoUCjLL.jpg' +export const B017V4IM1Gimage = 'https://m.media-amazon.com/images/I/91eopoUCjLL.jpg' export const combinedB017V4IM1G: ApiBook = setupMinimalParsed( B017V4IM1G.product, - description, - image, - genres + B017V4IM1Gcopyright, + B017V4IM1Gdescription, + B017V4IM1Gimage, + B017V4IM1Ggenres ) // The Coldest Case -description = +export const B08C6YJ1LScopyright = 2020 +export const B08C6YJ1LSdescription = "James Patterson's Detective Billy Harney is back, this time investigating murders in a notorious Chicago drug ring, which will lead him, his sister, and his new partner through a dangerous web of corrupt politicians, vengeful billionaires, and violent dark web conspiracies...." -genres = [ +export const B08C6YJ1LSgenres: ApiGenre[] = [ { asin: '18574597011', name: 'Mystery, Thriller & Suspense', @@ -54,10 +53,11 @@ genres = [ { asin: '18574621011', name: 'Thriller & Suspense', type: 'tag' }, { asin: '18574623011', name: 'Crime Thrillers', type: 'tag' } ] -image = 'https://m.media-amazon.com/images/I/91H9ynKGNwL.jpg' +export const B08C6YJ1LSimage = 'https://m.media-amazon.com/images/I/91H9ynKGNwL.jpg' export const combinedB08C6YJ1LS: ApiBook = setupMinimalParsed( B08C6YJ1LS.product, - description, - image, - genres + B08C6YJ1LScopyright, + B08C6YJ1LSdescription, + B08C6YJ1LSimage, + B08C6YJ1LSgenres ) diff --git a/tests/datasets/helpers/authors.ts b/tests/datasets/helpers/authors.ts index 637cc28b..440fdf60 100644 --- a/tests/datasets/helpers/authors.ts +++ b/tests/datasets/helpers/authors.ts @@ -58,40 +58,42 @@ const similar = [ } ] export const similarUnsorted = [ - { - asin: 'B00A8JBYDU', - name: 'Peter Nealen' - }, - { - asin: 'B00W2ZAK7E', - name: 'JN Chaney' - }, - { - asin: 'B00B1GNL4E', - name: 'Rick Partlow' - }, - { - asin: 'B001IGQXEW', - name: 'Karen Traviss' - }, - { - asin: 'B007E4W0GC', - name: 'Jonathan P. Brazee' - }, + { + asin: 'B00A8JBYDU', + name: 'Peter Nealen' + }, + { + asin: 'B00W2ZAK7E', + name: 'JN Chaney' + }, + { + asin: 'B00B1GNL4E', + name: 'Rick Partlow' + }, + { + asin: 'B001IGQXEW', + name: 'Karen Traviss' + }, + { + asin: 'B007E4W0GC', + name: 'Jonathan P. Brazee' + }, { asin: 'B000APARWG', name: 'Blaine Lee Pardoe' }, - { - asin: 'B005LW1K1A', - name: 'William S Frisbee Jr' - }, + { + asin: 'B005LW1K1A', + name: 'William S Frisbee Jr' + }, { asin: 'B08YC2Y6MV', name: 'Doc Spears' } ] +export const cleanupDescription = `JASON ANSPACH (1979- ) is the award-winning, Associated Press Best-selling author of Galaxy's Edge, Wayward Galaxy, and Forgotten Ruin. He is an American author raised in a military family (Go Army!) known for pulse-pounding military science fiction and adventurous space operas that deftly blend action, suspense, and comedy. Together with his wife, their seven (not a typo) children, and a border collie named Charlotte, Jason resides in Puyallup, Washington. He remains undefeated at arm wrestling against his entire family. Galaxy's Edge: Author website:` + export const parsedAuthor: ApiAuthorProfile = { asin, description, diff --git a/tests/datasets/helpers/books.ts b/tests/datasets/helpers/books.ts index 25560774..1c7f83ad 100644 --- a/tests/datasets/helpers/books.ts +++ b/tests/datasets/helpers/books.ts @@ -16,10 +16,13 @@ const authors = [ name: 'Nick Cole' } ] +const copyright = 2017 const description = 'On the edge of the galaxy, a diplomatic mission to an alien planet takes a turn when the Legionnaires, an elite special fighting force, find themselves ambushed and stranded behind enemy lines. They struggle to survive under siege, waiting on a rescue that might never come....' const formatType = 'unabridged' const image = 'https://m.media-amazon.com/images/I/91spdScZuIL.jpg' +const isAdult = false +const isbn = '9781772305241' const language = 'english' const narrators = [ { @@ -174,9 +177,16 @@ export const htmlResponse = export const apiResponse = AudibleProductSchema.parse({ product: { asin: 'B079LRSMNN', + asset_details: [], authors: [ - { asin: 'B012DQ3BCM', name: 'Jason Anspach' }, - { asin: 'B004W47QXE', name: 'Nick Cole' } + { + asin: 'B012DQ3BCM', + name: 'Jason Anspach' + }, + { + asin: 'B004W47QXE', + name: 'Nick Cole' + } ], available_codecs: [ { @@ -249,59 +259,81 @@ export const apiResponse = AudibleProductSchema.parse({ ], content_delivery_type: 'MultiPartBook', content_type: 'Product', + copyright: + '©2017 Nick Cole; 2018 Podium Publishing; 2017 Jason Anspach (P)2018 Podium Publishing', + date_first_available: '2018-02-20', + extended_product_description: + "

On the edge of the galaxy, a diplomatic mission to an alien planet takes a turn when the Legionnaires, an elite special fighting force, find themselves ambushed and stranded behind enemy lines. They struggle to survive under siege, waiting on a rescue that might never come. In the seedy starport of Ackabar, a young girl searches the crime-ridden gutters to avenge her father's murder; not far away, a double-dealing legionniare-turned-smuggler hunts an epic payday; and somewhere along the outer galaxy, a mysterious bounty hunter lies in wait.

", format_type: 'unabridged', has_children: true, is_adult_product: false, is_listenable: true, + is_pdf_url_available: false, is_purchasability_suppressed: false, + is_vvab: false, + isbn: '9781772305241', issue_date: '2018-02-20', language: 'english', + merchandising_description: '', merchandising_summary: '

On the edge of the galaxy, a diplomatic mission to an alien planet takes a turn when the Legionnaires, an elite special fighting force, find themselves ambushed and stranded behind enemy lines. They struggle to survive under siege, waiting on a rescue that might never come....

', - narrators: [{ name: 'R.C. Bray' }], + narrators: [ + { + name: 'R.C. Bray' + } + ], + platinum_keywords: [ + 'Science_Fiction_Fantasy/Science_Fiction', + 'Science_Fiction_Fantasy', + 'Sci-Fi_Fantasy/Military_Sci-Fi' + ], product_images: { - '500': 'https://m.media-amazon.com/images/I/51OIn2FgdtL._SL500_.jpg', - '1024': 'https://m.media-amazon.com/images/I/91spdScZuIL._SL1024_.jpg' + '1024': 'https://m.media-amazon.com/images/I/91spdScZuIL._SL1024_.jpg', + '500': 'https://m.media-amazon.com/images/I/51OIn2FgdtL._SL500_.jpg' }, - publication_name: seriesPrimary.name, - publisher_name: publisherName, - publisher_summary: summary, + product_site_launch_date: '2018-02-05T17:19:00Z', + publication_datetime: '2018-02-20T08:00:00Z', + publication_name: "Galaxy's Edge Series", + publisher_name: 'Podium Audio', + publisher_summary: + "

Galaxy's Edge contains Legionnaire through to the end of Galactic Outlaws

On the edge of the galaxy, a diplomatic mission to an alien planet takes a turn when the Legionnaires, an elite special fighting force, find themselves ambushed and stranded behind enemy lines. They struggle to survive under siege, waiting on a rescue that might never come.

In the seedy starport of Ackabar, a young girl searches the crime-ridden gutters to avenge her father's murder; not far away, a double-dealing legionniare-turned-smuggler hunts an epic payday; and somewhere along the outer galaxy, a mysterious bounty hunter lies in wait.

Galaxy's Edge combines sleek starfighters, exotic aliens, loyal bots, blasters, scoundrels, heroes, and powerful enemies in a thrilling adventure that will take you back to that magic place from a long time ago.

", rating: { - num_reviews: 1556, + num_reviews: 1727, overall_distribution: { - average_rating: 4.525123735743491, + average_rating: 4.53011688634668, display_average_rating: '4.5', display_stars: 4.5, - num_five_star_ratings: 12664, - num_four_star_ratings: 3960, - num_one_star_ratings: 262, - num_ratings: 18588, - num_three_star_ratings: 1287, - num_two_star_ratings: 415 + num_five_star_ratings: 13753, + num_four_star_ratings: 4256, + num_one_star_ratings: 277, + num_ratings: 20105, + num_three_star_ratings: 1374, + num_two_star_ratings: 445 }, performance_distribution: { - average_rating: 4.819587628865979, + average_rating: 4.821206267439365, display_average_rating: '4.8', - display_stars: 5, - num_five_star_ratings: 14856, - num_four_star_ratings: 1911, - num_one_star_ratings: 68, - num_ratings: 17266, - num_three_star_ratings: 361, - num_two_star_ratings: 70 + display_stars: 5.0, + num_five_star_ratings: 16052, + num_four_star_ratings: 2055, + num_one_star_ratings: 73, + num_ratings: 18636, + num_three_star_ratings: 383, + num_two_star_ratings: 73 }, story_distribution: { - average_rating: 4.421725239616613, + average_rating: 4.429425064599483, display_average_rating: '4.4', display_stars: 4.5, - num_five_star_ratings: 10901, - num_four_star_ratings: 3886, - num_one_star_ratings: 349, - num_ratings: 17215, - num_three_star_ratings: 1564, - num_two_star_ratings: 515 + num_five_star_ratings: 11841, + num_four_star_ratings: 4158, + num_one_star_ratings: 367, + num_ratings: 18576, + num_three_star_ratings: 1657, + num_two_star_ratings: 553 } }, + read_along_support: 'false', release_date: '2018-02-20', runtime_length_min: 1042, series: [ @@ -321,7 +353,7 @@ export const apiResponse = AudibleProductSchema.parse({ 'https://m.media-amazon.com/images/I/51OIn2FgdtL._SL10_UR1600,800_CR200,50,1024,512_CLa%7C1024,512%7C51OIn2FgdtL.jpg%7C0,0,1024,512+67,67,376,376_PJAdblSocialShare-Gradientoverlay-twitter-largeasin-0to60,TopLeft,0,0_PJAdblSocialShare-AudibleLogo-Medium,TopLeft,490,223_OU01_ZBLISTENING%20ON,483,152,55,450,AudibleSansMd,32,255,255,255.jpg' }, thesaurus_subject_keywords: ['literature-and-fiction'], - title + title: "Galaxy's Edge" }, response_groups: [ 'product_desc', @@ -330,18 +362,23 @@ export const apiResponse = AudibleProductSchema.parse({ 'contributors', 'series', 'rating', + 'category_ladders', 'media', - 'product_attrs' + 'product_attrs', + 'product_details' ] }) export const parsedBook = ApiBookSchema.parse({ asin, authors, + copyright, description, formatType, genres, image, + isAdult, + isbn, language, narrators, publisherName, @@ -365,21 +402,8 @@ export const parsedBookWithoutNarrators = ApiBookSchema.parse({ }) export const changedParsedBook: ApiBook = { - asin, - authors, - description, - formatType, - image, - language, - narrators, - publisherName, - rating, - region, - releaseDate, - runtimeLengthMin, - seriesPrimary, - summary: '', - title + ...parsedBook, + summary: '' } const bookWithIdInternal: WithId = { @@ -409,9 +433,12 @@ export const bookWithoutProjectionUpdatedNow: BookDocument = { export const parsedBookWithoutGenres: ApiBook = { asin, authors, + copyright, description, formatType, image, + isAdult, + isbn, language, narrators, publisherName, diff --git a/tests/helpers/authors/audible/ScrapeHelper.test.ts b/tests/helpers/authors/audible/ScrapeHelper.test.ts index ee98edb3..c94b7c83 100644 --- a/tests/helpers/authors/audible/ScrapeHelper.test.ts +++ b/tests/helpers/authors/audible/ScrapeHelper.test.ts @@ -7,7 +7,12 @@ import * as fetchPlus from '#helpers/utils/fetchPlus' import SharedHelper from '#helpers/utils/shared' import { regions } from '#static/regions' import { htmlResponseMinified, htmlResponseNameOnly } from '#tests/datasets/audible/authors/scrape' -import { genres, parsedAuthor, similarUnsorted } from '#tests/datasets/helpers/authors' +import { + cleanupDescription, + genres, + parsedAuthor, + similarUnsorted +} from '#tests/datasets/helpers/authors' jest.mock('#helpers/utils/fetchPlus') jest.mock('#helpers/utils/shared') @@ -57,7 +62,10 @@ describe('ScrapeHelper should', () => { test('parse response', async () => { const author = await helper.fetchAuthor() - await expect(helper.parseResponse(author)).resolves.toEqual(parsedAuthor) + await expect(helper.parseResponse(author)).resolves.toEqual({ + ...parsedAuthor, + description: cleanupDescription + }) }) test('return undefined if no dom for parse response', async () => { @@ -65,7 +73,10 @@ describe('ScrapeHelper should', () => { }) test('process author', async () => { - await expect(helper.process()).resolves.toEqual(parsedAuthor) + await expect(helper.process()).resolves.toEqual({ + ...parsedAuthor, + description: cleanupDescription + }) }) test('return description', () => { diff --git a/tests/helpers/books/audible/ApiHelper.test.ts b/tests/helpers/books/audible/ApiHelper.test.ts index 1d85b09c..a160a4eb 100644 --- a/tests/helpers/books/audible/ApiHelper.test.ts +++ b/tests/helpers/books/audible/ApiHelper.test.ts @@ -50,6 +50,11 @@ describe('ApiHelper should', () => { test.todo('check required keys') + test('get copyright year', async () => { + helper.audibleResponse = mockResponse.product + expect(helper.getCopyrightYear()).toBe(2017) + }) + test('get high res image', async () => { helper.audibleResponse = mockResponse.product expect(helper.getHighResImage()).toBe('https://m.media-amazon.com/images/I/91spdScZuIL.jpg') @@ -141,6 +146,7 @@ describe('ApiHelper should', () => { }) test('parse response with podcast', async () => { + const copyright = 2020 const genres = [ { asin: '18580606011', @@ -161,6 +167,7 @@ describe('ApiHelper should', () => { const image = 'https://m.media-amazon.com/images/I/9125JjSWeCL.jpg' const minimalParsed = setupMinimalParsed( podcast.product, + copyright, podcast.product.merchandising_summary, image, genres diff --git a/tests/helpers/utils/UpdateScheduler.test.ts b/tests/helpers/utils/UpdateScheduler.test.ts index 20ee5fdc..7df8adfd 100644 --- a/tests/helpers/utils/UpdateScheduler.test.ts +++ b/tests/helpers/utils/UpdateScheduler.test.ts @@ -16,6 +16,9 @@ import AuthorShowHelper from '#helpers/routes/AuthorShowHelper' import BookShowHelper from '#helpers/routes/BookShowHelper' import ChapterShowHelper from '#helpers/routes/ChapterShowHelper' import UpdateScheduler from '#helpers/utils/UpdateScheduler' +import { authorWithoutProjection } from '#tests/datasets/helpers/authors' +import { bookWithoutProjection } from '#tests/datasets/helpers/books' +import { chaptersWithoutProjection } from '#tests/datasets/helpers/chapters' type MockContext = { client: DeepMockProxy @@ -48,50 +51,42 @@ describe('UpdateScheduler should', () => { }) test('getAllAuthorAsins', async () => { - jest.spyOn(AuthorModel, 'find').mockResolvedValue([{ asin: 'B079LRSMNN', region: 'us' }] as any) - await expect(helper.getAllAuthorAsins()).resolves.toEqual([ - { asin: 'B079LRSMNN', region: 'us' } - ]) + jest.spyOn(AuthorModel, 'find').mockResolvedValue([authorWithoutProjection]) + await expect(helper.getAllAuthorAsins()).resolves.toEqual([authorWithoutProjection]) expect(AuthorModel.find).toHaveBeenCalledWith({}, projection) }) test('getAllBookAsins', async () => { - jest.spyOn(BookModel, 'find').mockResolvedValue([{ asin: 'B079LRSMNN', region: 'us' }] as any) - await expect(helper.getAllBookAsins()).resolves.toEqual([{ asin: 'B079LRSMNN', region: 'us' }]) + jest.spyOn(BookModel, 'find').mockResolvedValue([bookWithoutProjection]) + await expect(helper.getAllBookAsins()).resolves.toEqual([bookWithoutProjection]) expect(BookModel.find).toHaveBeenCalledWith({}, projection) }) test('getAllChapterAsins', async () => { - jest - .spyOn(ChapterModel, 'find') - .mockResolvedValue([{ asin: 'B079LRSMNN', region: 'us' }] as any) - await expect(helper.getAllChapterAsins()).resolves.toEqual([ - { asin: 'B079LRSMNN', region: 'us' } - ]) + jest.spyOn(ChapterModel, 'find').mockResolvedValue([chaptersWithoutProjection]) + await expect(helper.getAllChapterAsins()).resolves.toEqual([chaptersWithoutProjection]) expect(ChapterModel.find).toHaveBeenCalledWith({}, projection) }) test('updateAuthors', async () => { - jest.spyOn(AuthorModel, 'find').mockResolvedValue([{ asin: 'B079LRSMNN', region: 'us' }] as any) - jest.spyOn(AuthorShowHelper.prototype, 'handler').mockResolvedValue({} as any) + jest.spyOn(AuthorModel, 'find').mockResolvedValue([authorWithoutProjection]) + jest.spyOn(AuthorShowHelper.prototype, 'handler').mockResolvedValue(undefined) await expect(helper.updateAuthors()).resolves.toEqual(undefined) expect(AuthorModel.find).toHaveBeenCalledWith({}, projection) expect(AuthorShowHelper.prototype.handler).toHaveBeenCalledWith() }) test('updateBooks', async () => { - jest.spyOn(BookModel, 'find').mockResolvedValue([{ asin: 'B079LRSMNN', region: 'us' }] as any) - jest.spyOn(BookShowHelper.prototype, 'handler').mockResolvedValue({} as any) + jest.spyOn(BookModel, 'find').mockResolvedValue([bookWithoutProjection]) + jest.spyOn(BookShowHelper.prototype, 'handler').mockResolvedValue(undefined) await expect(helper.updateBooks()).resolves.toEqual(undefined) expect(BookModel.find).toHaveBeenCalledWith({}, projection) expect(BookShowHelper.prototype.handler).toHaveBeenCalledWith() }) test('updateChapters', async () => { - jest - .spyOn(ChapterModel, 'find') - .mockResolvedValue([{ asin: 'B079LRSMNN', region: 'us' }] as any) - jest.spyOn(ChapterShowHelper.prototype, 'handler').mockResolvedValue({} as any) + jest.spyOn(ChapterModel, 'find').mockResolvedValue([chaptersWithoutProjection]) + jest.spyOn(ChapterShowHelper.prototype, 'handler').mockResolvedValue(undefined) await expect(helper.updateChapters()).resolves.toEqual(undefined) expect(ChapterModel.find).toHaveBeenCalledWith({}, projection) expect(ChapterShowHelper.prototype.handler).toHaveBeenCalledWith() @@ -125,7 +120,9 @@ describe('UpdateScheduler should', () => { }) test('updateAllJob', async () => { - jest.spyOn(helper, 'updateAllTask').mockReturnValue({} as any) + jest + .spyOn(helper, 'updateAllTask') + .mockReturnValue(new AsyncTask('id_1', async () => undefined)) expect(JSON.stringify(helper.updateAllJob())).toEqual( JSON.stringify( new LongIntervalJob({ days: 1, runImmediately: true }, helper.updateAllTask(), { diff --git a/tests/helpers/utils/cleanupDescription.test.ts b/tests/helpers/utils/cleanupDescription.test.ts new file mode 100644 index 00000000..8817b207 --- /dev/null +++ b/tests/helpers/utils/cleanupDescription.test.ts @@ -0,0 +1,38 @@ +import cleanupDescription from '#helpers/utils/cleanupDescription' +import { parsedAuthor } from '#tests/datasets/helpers/authors' +import { parsedBook } from '#tests/datasets/helpers/books' + +const badInput = ` +"Matthew Iden is the author of the psychological suspense novel The Winter Over, a half-dozen books in the Marty Singer detective series, and several acclaimed stand-alone novels. His eclectic work resume includes jobs with the US Postal Service, an international nonprofit, the Forest Service in Sitka, Alaska, and the globe-spanning Semester at Sea program. His latest, Birthday Girl, is a suspense novel featuring Elliott Nash, a former forensic psychologist who is now homeless but is recruited to save a young girl from a serial kidnapper (March 2018). Get in touch via e-mail at matt.iden@matthew-iden.com, Facebook at www.facebook.com/matthew.iden, Twitter @CrimeRighter, or visit www.matthew-iden.com for information on upcoming appearances, new releases, and to receive a free copy of the Marty Singer short story "The Guardian"--not available anywhere else."` + +const badAuthorInput = parsedAuthor.description as string + +const goodInput = parsedBook.description as string + +describe('cleanupDescription should', () => { + test('remove emails', () => { + const result = cleanupDescription(badInput) + expect(result).not.toContain('matt.iden@matthew-iden.com') + }) + + test('remove twitter handles', () => { + const result = cleanupDescription(badInput) + expect(result).not.toContain('@CrimeRighter') + }) + + test('remove urls', () => { + const result = cleanupDescription(badInput) + expect(result).not.toContain('www.facebook.com/matthew.iden') + + const result2 = cleanupDescription(badAuthorInput) + expect(result2).not.toContain('www.JasonAnspach.com') + expect(result2).not.toContain('www.InTheLegion.com') + expect(result2).not.toContain('facebook.com/authorjasonanspach') + expect(result2).not.toContain('twitter.com/TheJasonAnspach') + }) + + test('not remove any text from a good input', () => { + const result = cleanupDescription(goodInput) + expect(result).toEqual(goodInput) + }) +})