From 99923b831f7ad42aeb5b270c759db070c4bfa7a2 Mon Sep 17 00:00:00 2001 From: Anton Nazarov Date: Tue, 24 Sep 2024 14:05:07 +1200 Subject: [PATCH] Added eslint + fixed arguments (#24) * added eslint * added prettier * fixed arguments * fixed cube alerts --- .github/workflows/node.js.yml | 6 +- .github/workflows/publish.yml | 2 +- .jest/setEnvVars.ts | 8 +- .prettierrc | 4 + README.md | 122 +- eslint.config.js | 14 + example.ts | 93 +- jest.config.ts | 8 +- package-lock.json | 11408 +++++++++------- package.json | 90 +- src/Contracts.ts | 98 +- src/HeadersBuilder.ts | 24 +- src/HeadersDirector.ts | 13 +- src/Host.ts | 14 +- src/MetlinkHttpClient.ts | 159 +- src/MetlinkHttpClientBuilder.ts | 52 +- src/QueryBuilder.ts | 18 +- src/Response.ts | 22 +- src/ResponseDataDecorator.ts | 354 +- src/Routes.ts | 36 +- src/domain/gtfs-rt/entity/Header.ts | 33 +- src/domain/gtfs-rt/entity/Response.ts | 21 +- .../entity/service-alert/ActivePeriod.ts | 14 +- .../gtfs-rt/entity/service-alert/Alert.ts | 49 +- .../gtfs-rt/entity/service-alert/Entity.ts | 22 +- .../entity/service-alert/InformedEntity.ts | 28 +- .../gtfs-rt/entity/service-alert/Trip.ts | 41 +- .../gtfs-rt/entity/trip-update/Arrival.ts | 17 +- .../gtfs-rt/entity/trip-update/Entity.ts | 19 +- .../entity/trip-update/StopTimeUpdate.ts | 31 +- src/domain/gtfs-rt/entity/trip-update/Trip.ts | 38 +- .../gtfs-rt/entity/trip-update/TripUpdate.ts | 32 +- .../gtfs-rt/entity/trip-update/VehicleId.ts | 8 +- .../entity/vehicle-positions/Entity.ts | 16 +- .../entity/vehicle-positions/Position.ts | 21 +- .../gtfs-rt/entity/vehicle-positions/Trip.ts | 40 +- .../entity/vehicle-positions/Vehicle.ts | 42 +- .../entity/vehicle-positions/VehicleId.ts | 8 +- src/domain/gtfs/entity/Agency.ts | 54 +- src/domain/gtfs/entity/Calendar.ts | 72 +- src/domain/gtfs/entity/CalendarDate.ts | 37 +- src/domain/gtfs/entity/Feed.ts | 48 +- src/domain/gtfs/entity/Route.ts | 86 +- .../gtfs/entity/ServiceWeeklySchedule.ts | 72 +- src/domain/gtfs/entity/Shape.ts | 53 +- src/domain/gtfs/entity/Stop.ts | 78 +- src/domain/gtfs/entity/StopTime.ts | 72 +- src/domain/gtfs/entity/Transfer.ts | 50 +- src/domain/gtfs/entity/Trip.ts | 79 +- src/domain/httpclient/AxiosAdapter.ts | 16 +- src/domain/httpclient/HttpClientInterface.ts | 4 +- .../stop-departure-prediction/Arrival.ts | 17 +- .../stop-departure-prediction/Departure.ts | 17 +- .../stop-departure-prediction/Destination.ts | 17 +- .../stop-departure-prediction/Entity.ts | 100 +- .../stop-departure-prediction/Origin.ts | 17 +- .../stop-departure-prediction/Response.ts | 27 +- src/domain/trip-cancellation/Query.ts | 64 +- src/domain/trip-cancellation/Trip.ts | 62 +- tests/SchemaValidator.ts | 13 +- .../Gtfs-rt/ServiceAlerts.test.ts | 279 +- .../Gtfs-rt/TripUpdates.test.ts | 199 +- .../Gtfs-rt/VehiclePositions.test.ts | 191 +- .../MetlinkHttpClient/Gtfs/Agencies.test.ts | 68 +- .../MetlinkHttpClient/Gtfs/Calendar.test.ts | 132 +- .../Gtfs/CalendarDates.test.ts | 64 +- .../MetlinkHttpClient/Gtfs/FeedInfo.test.ts | 95 +- .../MetlinkHttpClient/Gtfs/Routes.test.ts | 117 +- .../MetlinkHttpClient/Gtfs/Shapes.test.ts | 84 +- .../MetlinkHttpClient/Gtfs/StopTimes.test.ts | 119 +- .../MetlinkHttpClient/Gtfs/Stops.test.ts | 119 +- .../MetlinkHttpClient/Gtfs/Transfers.test.ts | 89 +- .../MetlinkHttpClient/Gtfs/Trips.test.ts | 119 +- .../MetlinkHttpClient/StopPredictions.test.ts | 216 +- .../TripCancellations.test.ts | 113 +- tests/unit/ClientBuilder.ts | 26 +- .../Gtfs-rt/ServiceAlerts.test.ts | 390 +- .../Gtfs-rt/TripUpdates.test.ts | 289 +- .../Gtfs-rt/VehiclePositions.test.ts | 260 +- .../MetlinkHttpClient/Gtfs/Agencies.test.ts | 106 +- .../MetlinkHttpClient/Gtfs/Calendar.test.ts | 153 +- .../Gtfs/CalendarDates.test.ts | 93 +- .../MetlinkHttpClient/Gtfs/FeedInfo.test.ts | 118 +- .../MetlinkHttpClient/Gtfs/Routes.test.ts | 185 +- .../MetlinkHttpClient/Gtfs/Shapes.test.ts | 119 +- .../MetlinkHttpClient/Gtfs/StopTimes.test.ts | 168 +- .../unit/MetlinkHttpClient/Gtfs/Stops.test.ts | 163 +- .../MetlinkHttpClient/Gtfs/Transfers.test.ts | 123 +- .../unit/MetlinkHttpClient/Gtfs/Trips.test.ts | 163 +- .../MetlinkHttpClient/StopPredictions.test.ts | 301 +- .../TripCancellations.test.ts | 151 +- tests/unit/QueryBuilder.test.ts | 32 +- tests/unit/Response.test.ts | 74 +- .../Gtfs-rt/ServiceAlerts.test.ts | 127 +- .../Gtfs-rt/TripUpdates.test.ts | 109 +- .../Gtfs-rt/VehiclePositions.test.ts | 92 +- .../Gtfs/Agencies.test.ts | 59 +- .../Gtfs/Calendar.test.ts | 42 +- .../Gtfs/CalendarDates.test.ts | 52 +- .../Gtfs/FeedInfo.test.ts | 47 +- .../ResponseDataDecorator/Gtfs/Routes.test.ts | 93 +- .../ResponseDataDecorator/Gtfs/Shapes.test.ts | 62 +- .../Gtfs/StopTimes.test.ts | 77 +- .../ResponseDataDecorator/Gtfs/Stops.test.ts | 68 +- .../Gtfs/Transfers.test.ts | 58 +- .../ResponseDataDecorator/Gtfs/Trips.test.ts | 70 +- .../StopPredictions.test.ts | 106 +- .../TripCancellations.test.ts | 62 +- tests/unit/Routes.test.ts | 126 +- tsconfig.json | 233 +- 110 files changed, 10947 insertions(+), 9534 deletions(-) create mode 100644 .prettierrc create mode 100644 eslint.config.js diff --git a/.github/workflows/node.js.yml b/.github/workflows/node.js.yml index 71e3504..c4e986f 100644 --- a/.github/workflows/node.js.yml +++ b/.github/workflows/node.js.yml @@ -5,13 +5,12 @@ name: Node.js CI on: push: - branches: [ "main" ] + branches: ['main'] pull_request: - branches: [ "main" ] + branches: ['main'] jobs: build: - runs-on: ubuntu-latest strategy: @@ -29,3 +28,4 @@ jobs: - run: npm ci - run: npm run build --if-present - run: npm run test-unit + - run: npm run lint diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 7d77796..87b0c01 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -26,4 +26,4 @@ jobs: - name: Publish to npm run: npm publish env: - NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} \ No newline at end of file + NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} diff --git a/.jest/setEnvVars.ts b/.jest/setEnvVars.ts index b3a8eb4..ad3cb18 100644 --- a/.jest/setEnvVars.ts +++ b/.jest/setEnvVars.ts @@ -1,9 +1,9 @@ -import {readFileSync} from "node:fs"; +import { readFileSync } from 'node:fs' -const tokenFile: string = process.env.TOKEN_FILE || ".token"; +const tokenFile: string = process.env.TOKEN_FILE || '.token' try { - process.env.METLINK_TOKEN = readFileSync(tokenFile, "utf-8"); + process.env.METLINK_TOKEN = readFileSync(tokenFile, 'utf-8') } catch { - process.env.METLINK_TOKEN = process.env.METLINK_TOKEN || "" + process.env.METLINK_TOKEN = process.env.METLINK_TOKEN || '' } diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..9903a7a --- /dev/null +++ b/.prettierrc @@ -0,0 +1,4 @@ +trailingComma: 'es5' +tabWidth: 4 +semi: false +singleQuote: true diff --git a/README.md b/README.md index abd6777..2a1262d 100644 --- a/README.md +++ b/README.md @@ -3,6 +3,7 @@ https://opendata.metlink.org.nz/ [![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=jaddek_metlink-api-http-client-typescript&metric=alert_status)](https://sonarcloud.io/summary/new_code?id=jaddek_metlink-api-http-client-typescript) +[![code style: prettier](https://img.shields.io/badge/code_style-prettier-ff69b4.svg?style=flat-square)](https://github.com/prettier/prettier) ## Install @@ -29,51 +30,59 @@ https://api.opendata.metlink.org.nz/v1 #### Client ```ts -import {MetlinkHttpClientInterface} from "./Contracts"; -import {MetlinkHttpClientBuilder} from "./MetlinkHttpClientBuilder"; +import { MetlinkHttpClientInterface } from './Contracts' +import { MetlinkHttpClientBuilder } from './MetlinkHttpClientBuilder' const options = { - timeout: 1000 -}; -const metlinkHttpClient: MetlinkHttpClientInterface = MetlinkHttpClientBuilder.buildWithAxios( - token, - options, - function (axios: AxiosInstance) { - axios.interceptors.response.use(function (response) { - return response; - }, function (error) { - return Promise.reject(error); - }); - } -); + timeout: 1000, +} +const metlinkHttpClient: MetlinkHttpClientInterface = + MetlinkHttpClientBuilder.buildWithAxios( + token, + options, + function (axios: AxiosInstance) { + axios.interceptors.response.use( + function (response) { + return response + }, + function (error) { + return Promise.reject(error) + } + ) + } + ) ``` OR ```ts -import {MetlinkHttpClientInterface} from "./Contracts"; -import {MetlinkHttpClientBuilder} from "./MetlinkHttpClientBuilder"; +import { MetlinkHttpClientInterface } from './Contracts' +import { MetlinkHttpClientBuilder } from './MetlinkHttpClientBuilder' const options = { - timeout: 1000 -}; -const metlinkHttpClient: MetlinkHttpClientInterface = MetlinkHttpClientBuilder.buildWithAxiosAndDecorate( - token, - options, - function (axios: AxiosInstance) { - axios.interceptors.response.use(function (response) { - return response; - }, function (error) { - return Promise.reject(error); - }); - } -); + timeout: 1000, +} +const metlinkHttpClient: MetlinkHttpClientInterface = + MetlinkHttpClientBuilder.buildWithAxiosAndDecorate( + token, + options, + function (axios: AxiosInstance) { + axios.interceptors.response.use( + function (response) { + return response + }, + function (error) { + return Promise.reject(error) + } + ) + } + ) ``` #### Wrapped response body ```ts -const metlinkHttpClient = new ResponseDataDecorator(httpClient); +const metlinkHttpClient = new ResponseDataDecorator(httpClient) ``` ### Tests @@ -92,8 +101,8 @@ TOKEN_FILE=.token jest tests #### Unresolved issues: -- GTFS-RT: Service Alerts: Validation Scheme issue -- GTFS-RT: Trip Updates: Validation Scheme issue +- GTFS-RT: Service Alerts: Validation Scheme issue +- GTFS-RT: Trip Updates: Validation Scheme issue ## API @@ -104,7 +113,7 @@ TOKEN_FILE=.token jest tests Transit agencies with service represented in this dataset. ```ts -metlinkHttpClient.getGtfsAgencies(); +metlinkHttpClient.getGtfsAgencies() ``` #### Calendars @@ -112,7 +121,7 @@ metlinkHttpClient.getGtfsAgencies(); Service dates specified using a weekly schedule with start and end dates. ```ts -metlinkHttpClient.getGtfsCalendar(); +metlinkHttpClient.getGtfsCalendar() ``` #### Calendar Dates @@ -120,7 +129,7 @@ metlinkHttpClient.getGtfsCalendar(); Exceptions for the services defined in the calendar. ```ts -metlinkHttpClient.getGtfsCalendarDates(); +metlinkHttpClient.getGtfsCalendarDates() ``` #### Feed info @@ -128,7 +137,7 @@ metlinkHttpClient.getGtfsCalendarDates(); Dataset metadata, including publisher, version, and expiration information. ```ts -metlinkHttpClient.getGtfsFeedInfo(); +metlinkHttpClient.getGtfsFeedInfo() ``` #### Routes @@ -136,7 +145,7 @@ metlinkHttpClient.getGtfsFeedInfo(); Transit routes. A route is a group of trips that are displayed to riders as a single service. ```ts -metlinkHttpClient.getGtfsRoutes(); +metlinkHttpClient.getGtfsRoutes() ``` #### Shapes @@ -144,7 +153,7 @@ metlinkHttpClient.getGtfsRoutes(); Rules for mapping vehicle travel paths, sometimes referred to as route alignments. ```ts -metlinkHttpClient.getGtfsShapes("shapeId"); +metlinkHttpClient.getGtfsShapes('shapeId') ``` #### Stop Times @@ -152,7 +161,7 @@ metlinkHttpClient.getGtfsShapes("shapeId"); Times that a vehicle arrives at and departs from stops for each trip. ```ts -metlinkHttpClient.getGtfsStopTimes("tripId"); +metlinkHttpClient.getGtfsStopTimes('tripId') ``` #### Stops @@ -160,7 +169,7 @@ metlinkHttpClient.getGtfsStopTimes("tripId"); Stops where vehicles pick up or drop off riders. Also defines stations and station entrances. ```ts -metlinkHttpClient.getGtfsStops(); +metlinkHttpClient.getGtfsStops() ``` #### Transfers @@ -168,7 +177,7 @@ metlinkHttpClient.getGtfsStops(); Rules for making connections at transfer points between routes. ```ts -metlinkHttpClient.getGtfsTransfers(); +metlinkHttpClient.getGtfsTransfers() ``` #### Trips @@ -177,12 +186,12 @@ Trips for each route. A trip is a sequence of two or more stops that occur durin ```ts metlinkHttpClient.getGtfsTrips( - "start", - "extraFields", - "routeId", - "tripId", - "end" -); + 'start', + 'extraFields', + 'routeId', + 'tripId', + 'end' +) ``` ### GTFS-RT @@ -193,7 +202,7 @@ Information about unforeseen events affecting routes, stops, or the network. Use to receive in Protobuf format. ```ts -metlinkHttpClient.getGtfsServiceAlerts(); +metlinkHttpClient.getGtfsServiceAlerts() ``` #### Trip Updates @@ -201,7 +210,7 @@ metlinkHttpClient.getGtfsServiceAlerts(); Delays, cancellations, changed routes. Use accept header 'application/x-protobuf' to receive in Protobuf format. ```ts -metlinkHttpClient.getGtfsRtTripUpdates(); +metlinkHttpClient.getGtfsRtTripUpdates() ``` #### Vehicle Positions @@ -209,7 +218,7 @@ metlinkHttpClient.getGtfsRtTripUpdates(); Information about vehicles including location. Use accept header 'application/x-protobuf' to receive in Protobuf format. ```ts -metlinkHttpClient.getGtfsRtVehiclePositions(); +metlinkHttpClient.getGtfsRtVehiclePositions() ``` ### Other @@ -219,7 +228,7 @@ metlinkHttpClient.getGtfsRtVehiclePositions(); Predictions for when vehicles will arrive and depart through stops. ```ts -metlinkHttpClient.getStopPredictions("stopId"); +metlinkHttpClient.getStopPredictions('stopId') ``` #### Trip Cancellations @@ -227,10 +236,7 @@ metlinkHttpClient.getStopPredictions("stopId"); Historical, current, and known future data for trip cancellations. ```ts -const query: Query = new Query(); -query.dateCreated = Date.now().toString(); -metlinkHttpClient.getTripCancellation(query); +const query: Query = new Query() +query.dateCreated = Date.now().toString() +metlinkHttpClient.getTripCancellation(query) ``` - - - diff --git a/eslint.config.js b/eslint.config.js new file mode 100644 index 0000000..be2f601 --- /dev/null +++ b/eslint.config.js @@ -0,0 +1,14 @@ +// @ts-check + +import eslint from '@eslint/js' +import tseslint from 'typescript-eslint' + +export default tseslint.config( + eslint.configs.recommended, + ...tseslint.configs.recommended, + { + rules: { + '@typescript-eslint/no-explicit-any': 'off', + }, + } +) diff --git a/example.ts b/example.ts index 0ae2369..7fc163c 100644 --- a/example.ts +++ b/example.ts @@ -1,56 +1,57 @@ -import {MetlinkHttpClientBuilder} from "./src/MetlinkHttpClientBuilder"; -import {Query} from "./src/domain/trip-cancellation/Query"; -import * as fs from 'fs'; -import {ResponseDataDecorator} from "./src/ResponseDataDecorator"; -import {MetlinkHttpClientInterface} from "./src/Contracts"; - -const token = fs.readFileSync(".token", "utf-8"); -const axiosOptions = {}; - -const httpClient: MetlinkHttpClientInterface = MetlinkHttpClientBuilder.buildWithAxios(token, axiosOptions); - -httpClient.getGtfsAgencies(); -httpClient.getGtfsCalendar(); -httpClient.getGtfsCalendarDates(); -httpClient.getGtfsFeedInfo(); -httpClient.getGtfsRoutes("routeId"); -httpClient.getGtfsShapes("shapeId"); -httpClient.getGtfsStopTimes("tripId"); -httpClient.getGtfsStops(null, null); -httpClient.getGtfsTransfers(); -httpClient.getGtfsTrips(); -httpClient.getGtfsRtTripUpdates(); -httpClient.getGtfsRtVehiclePositions(); -httpClient.getGtfsRtServiceAlerts(); -httpClient.getStopPredictions("stopId"); - - -const query: Query = new Query(); -query.dateCreated = Date.now().toString(); -httpClient.getTripCancellations(query); +import { MetlinkHttpClientBuilder } from './src/MetlinkHttpClientBuilder' +import { Query } from './src/domain/trip-cancellation/Query' +import * as fs from 'fs' +import { MetlinkHttpClientInterface } from './src/Contracts' + +const token = fs.readFileSync('.token', 'utf-8') +const axiosOptions = {} + +const httpClient: MetlinkHttpClientInterface = + MetlinkHttpClientBuilder.buildWithAxios(token, axiosOptions) + +httpClient.getGtfsAgencies() +httpClient.getGtfsCalendar() +httpClient.getGtfsCalendarDates() +httpClient.getGtfsFeedInfo() +httpClient.getGtfsRoutes('routeId') +httpClient.getGtfsShapes('shapeId') +httpClient.getGtfsStopTimes('tripId') +httpClient.getGtfsStops(null, null) +httpClient.getGtfsTransfers() +httpClient.getGtfsTrips() +httpClient.getGtfsRtTripUpdates() +httpClient.getGtfsRtVehiclePositions() +httpClient.getGtfsRtServiceAlerts() +httpClient.getStopPredictions('stopId') + +const query: Query = new Query() +query.dateCreated = Date.now().toString() +httpClient.getTripCancellations(query) /** * Mapped entities */ -const httpClientDecorated_: MetlinkHttpClientInterface = MetlinkHttpClientBuilder.buildWithAxiosUsingResponseDataDecorator(token, axiosOptions); -// OR -const httpClientDecorated: MetlinkHttpClientInterface = new ResponseDataDecorator(httpClient); +const httpClientDecorated: MetlinkHttpClientInterface = + MetlinkHttpClientBuilder.buildWithAxiosUsingResponseDataDecorator( + token, + axiosOptions + ) httpClientDecorated.getGtfsAgencies() httpClientDecorated.getGtfsCalendar() httpClientDecorated.getGtfsCalendarDates() httpClientDecorated.getGtfsFeedInfo() -httpClientDecorated.getGtfsRoutes("routeId") -httpClientDecorated.getGtfsShapes("shapeId") -httpClientDecorated.getGtfsStopTimes("tripId"); -httpClientDecorated.getGtfsStops(); -httpClientDecorated.getGtfsTransfers(); -httpClientDecorated.getGtfsTrips(); - -httpClientDecorated.getGtfsRtServiceAlerts(); - - -const query2: Query = new Query(); -query2.dateCreated = Date.now().toString(); -httpClientDecorated.getTripCancellations(query2); +httpClientDecorated.getGtfsRoutes('routeId') +httpClientDecorated.getGtfsShapes('shapeId') +httpClientDecorated.getGtfsStopTimes('tripId') +httpClientDecorated.getGtfsStops() +httpClientDecorated.getGtfsTransfers() +httpClientDecorated.getGtfsTrips() +httpClientDecorated.getGtfsRtServiceAlerts() +httpClientDecorated.getGtfsRtTripUpdates() +httpClientDecorated.getGtfsRtVehiclePositions() + +const query2: Query = new Query() +query2.dateCreated = Date.now().toString() +httpClientDecorated.getTripCancellations(query2) diff --git a/jest.config.ts b/jest.config.ts index c84e5f2..147384d 100644 --- a/jest.config.ts +++ b/jest.config.ts @@ -1,4 +1,4 @@ -import type {Config} from 'jest'; +import type { Config } from 'jest' const config: Config = { preset: 'ts-jest', @@ -6,7 +6,7 @@ const config: Config = { verbose: true, coverageDirectory: 'coverage', collectCoverage: true, - setupFiles:["/.jest/setEnvVars.ts"] -}; + setupFiles: ['/.jest/setEnvVars.ts'], +} -export default config; \ No newline at end of file +export default config diff --git a/package-lock.json b/package-lock.json index 879efd0..107f8aa 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,5101 +1,6315 @@ { - "name": "metlink-api-http-client", - "version": "1.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "metlink-api-http-client", - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "axios": "^1.7.7", - "class-transformer": "^0.5.1", - "reflect-metadata": "^0.2.2", - "winston": "^3.14.2" - }, - "devDependencies": { - "@jest/globals": "^29.7.0", - "@types/ajv": "^0.0.5", - "@types/axios": "^0.9.36", - "@types/axios-mock-adapter": "^1.10.0", - "@types/jest": "^29.5.12", - "@types/node": "^22.5.4", - "ajv": "^8.17.1", - "axios-mock-adapter": "^2.0.0", - "jest": "^29.7.0", - "ts-jest": "^29.2.5", - "ts-node": "^10.9.2", - "tsx": "^4.19.1", - "typescript": "^5.6.2" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", - "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", - "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/highlight": "^7.24.7", - "picocolors": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.25.4", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.4.tgz", - "integrity": "sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.2.tgz", - "integrity": "sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.25.0", - "@babel/helper-compilation-targets": "^7.25.2", - "@babel/helper-module-transforms": "^7.25.2", - "@babel/helpers": "^7.25.0", - "@babel/parser": "^7.25.0", - "@babel/template": "^7.25.0", - "@babel/traverse": "^7.25.2", - "@babel/types": "^7.25.2", - "convert-source-map": "^2.0.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/generator": { - "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.6.tgz", - "integrity": "sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.25.6", - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz", - "integrity": "sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.25.2", - "@babel/helper-validator-option": "^7.24.8", - "browserslist": "^4.23.1", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", - "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz", - "integrity": "sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-imports": "^7.24.7", - "@babel/helper-simple-access": "^7.24.7", - "@babel/helper-validator-identifier": "^7.24.7", - "@babel/traverse": "^7.25.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz", - "integrity": "sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz", - "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", - "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", - "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz", - "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.6.tgz", - "integrity": "sha512-Xg0tn4HcfTijTwfDwYlvVCl43V6h4KyVVX2aEm4qdO/PC6L2YvzLHFdmxhoeSA3eslcE6+ZVXHgWwopXYLNq4Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/template": "^7.25.0", - "@babel/types": "^7.25.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", - "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.24.7", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/highlight/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@babel/highlight/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/parser": { - "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.6.tgz", - "integrity": "sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.25.6" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.25.6.tgz", - "integrity": "sha512-sXaDXaJN9SNLymBdlWFA+bjzBhFD617ZaFiY13dGt7TVslVvVgA6fkZOP7Ki3IGElC45lwHdOTrCtKZGVAWeLQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.7.tgz", - "integrity": "sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.25.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.4.tgz", - "integrity": "sha512-uMOCoHVU52BsSWxPOMVv5qKRdeSlPuImUCB2dlPuBSU+W2/ROE7/Zg8F2Kepbk+8yBa68LlRKxO+xgEVWorsDg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/template": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz", - "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.24.7", - "@babel/parser": "^7.25.0", - "@babel/types": "^7.25.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.6.tgz", - "integrity": "sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.25.6", - "@babel/parser": "^7.25.6", - "@babel/template": "^7.25.0", - "@babel/types": "^7.25.6", - "debug": "^4.3.1", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.6.tgz", - "integrity": "sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.24.8", - "@babel/helper-validator-identifier": "^7.24.7", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@colors/colors": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz", - "integrity": "sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==", - "license": "MIT", - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "node_modules/@dabh/diagnostics": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.3.tgz", - "integrity": "sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==", - "license": "MIT", - "dependencies": { - "colorspace": "1.1.x", - "enabled": "2.0.x", - "kuler": "^2.0.0" - } - }, - "node_modules/@esbuild/aix-ppc64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.23.1.tgz", - "integrity": "sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.23.1.tgz", - "integrity": "sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.23.1.tgz", - "integrity": "sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.23.1.tgz", - "integrity": "sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.23.1.tgz", - "integrity": "sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.23.1.tgz", - "integrity": "sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.23.1.tgz", - "integrity": "sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.23.1.tgz", - "integrity": "sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.23.1.tgz", - "integrity": "sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.23.1.tgz", - "integrity": "sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.23.1.tgz", - "integrity": "sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.23.1.tgz", - "integrity": "sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.23.1.tgz", - "integrity": "sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==", - "cpu": [ - "mips64el" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.23.1.tgz", - "integrity": "sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.23.1.tgz", - "integrity": "sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.23.1.tgz", - "integrity": "sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.23.1.tgz", - "integrity": "sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.23.1.tgz", - "integrity": "sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-arm64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.23.1.tgz", - "integrity": "sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.23.1.tgz", - "integrity": "sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.23.1.tgz", - "integrity": "sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.23.1.tgz", - "integrity": "sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.23.1.tgz", - "integrity": "sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.23.1.tgz", - "integrity": "sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/console": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", - "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/core": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", - "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/console": "^29.7.0", - "@jest/reporters": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-changed-files": "^29.7.0", - "jest-config": "^29.7.0", - "jest-haste-map": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.7.0", - "jest-resolve-dependencies": "^29.7.0", - "jest-runner": "^29.7.0", - "jest-runtime": "^29.7.0", - "jest-snapshot": "^29.7.0", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "jest-watcher": "^29.7.0", - "micromatch": "^4.0.4", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/@jest/environment": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", - "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-mock": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/expect": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", - "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "expect": "^29.7.0", - "jest-snapshot": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/expect-utils": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", - "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", - "dev": true, - "license": "MIT", - "dependencies": { - "jest-get-type": "^29.6.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/fake-timers": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", - "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "@sinonjs/fake-timers": "^10.0.2", - "@types/node": "*", - "jest-message-util": "^29.7.0", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/globals": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", - "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/expect": "^29.7.0", - "@jest/types": "^29.6.3", - "jest-mock": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/reporters": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", - "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@jridgewell/trace-mapping": "^0.3.18", - "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^6.0.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "jest-worker": "^29.7.0", - "slash": "^3.0.0", - "string-length": "^4.0.1", - "strip-ansi": "^6.0.0", - "v8-to-istanbul": "^9.0.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/@jest/schemas": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", - "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@sinclair/typebox": "^0.27.8" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/source-map": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", - "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.18", - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/test-result": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", - "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/console": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/test-sequencer": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", - "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/test-result": "^29.7.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/transform": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", - "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/core": "^7.11.6", - "@jest/types": "^29.6.3", - "@jridgewell/trace-mapping": "^0.3.18", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^2.0.0", - "fast-json-stable-stringify": "^2.1.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-util": "^29.7.0", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "write-file-atomic": "^4.0.2" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/types": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", - "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/schemas": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", - "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@sinclair/typebox": { - "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@sinonjs/commons": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", - "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "type-detect": "4.0.8" - } - }, - "node_modules/@sinonjs/fake-timers": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", - "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@sinonjs/commons": "^3.0.0" - } - }, - "node_modules/@tsconfig/node10": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", - "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "dev": true, - "license": "MIT" - }, - "node_modules/@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "dev": true, - "license": "MIT" - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", - "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/ajv": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/@types/ajv/-/ajv-0.0.5.tgz", - "integrity": "sha512-0UD98SZLwPk6cTMZoLs8W4XSAWgqT9nyoZiBw+uXEPf1u5h+Dn2ztMG4Is9pDA+9D7GKbCTfIkQK/hNgoWVQcQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/axios": { - "version": "0.9.36", - "resolved": "https://registry.npmjs.org/@types/axios/-/axios-0.9.36.tgz", - "integrity": "sha512-NLOpedx9o+rxo/X5ChbdiX6mS1atE4WHmEEIcR9NLenRVa5HoVjAvjafwU3FPTqnZEstpoqCaW7fagqSoTDNeg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/axios-mock-adapter": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/@types/axios-mock-adapter/-/axios-mock-adapter-1.10.0.tgz", - "integrity": "sha512-Govyvy3cr8hsR6DcCoBjVMQhYyzkHdfU/hMgBw6ONOFuTrZTDxdE/rBR7Sz3qsGtVZABSK8/2rDekp5UwZ/V8A==", - "deprecated": "This is a stub types definition for axios-mock-adapter (https://github.com/ctimmerm/axios-mock-adapter). axios-mock-adapter provides its own type definitions, so you don't need @types/axios-mock-adapter installed!", - "dev": true, - "dependencies": { - "axios-mock-adapter": "*" - } - }, - "node_modules/@types/babel__core": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", - "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "node_modules/@types/babel__generator": { - "version": "7.6.8", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", - "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__template": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", - "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__traverse": { - "version": "7.20.6", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz", - "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.20.7" - } - }, - "node_modules/@types/graceful-fs": { - "version": "4.1.9", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", - "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", - "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/istanbul-lib-report": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", - "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-coverage": "*" - } - }, - "node_modules/@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/@types/jest": { - "version": "29.5.13", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.13.tgz", - "integrity": "sha512-wd+MVEZCHt23V0/L642O5APvspWply/rGY5BcW4SUETo2UzPU3Z26qr8jC2qxpimI2jjx9h7+2cj2FwIr01bXg==", - "dev": true, - "license": "MIT", - "dependencies": { - "expect": "^29.0.0", - "pretty-format": "^29.0.0" - } - }, - "node_modules/@types/node": { - "version": "22.5.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.5.5.tgz", - "integrity": "sha512-Xjs4y5UPO/CLdzpgR6GirZJx36yScjh73+2NlLlkFRSoQN8B0DpfXPdZGnvVmLRLOsqDpOfTNv7D9trgGhmOIA==", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~6.19.2" - } - }, - "node_modules/@types/stack-utils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", - "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/triple-beam": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.5.tgz", - "integrity": "sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==", - "license": "MIT" - }, - "node_modules/@types/yargs": { - "version": "17.0.33", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", - "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@types/yargs-parser": { - "version": "21.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", - "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/acorn": { - "version": "8.12.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", - "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-walk": { - "version": "8.3.4", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", - "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", - "dev": true, - "license": "MIT", - "dependencies": { - "acorn": "^8.11.0" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "license": "ISC", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true, - "license": "MIT" - }, - "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "license": "MIT", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/async": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", - "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", - "license": "MIT" - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "license": "MIT" - }, - "node_modules/axios": { - "version": "1.7.7", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.7.tgz", - "integrity": "sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==", - "license": "MIT", - "dependencies": { - "follow-redirects": "^1.15.6", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" - } - }, - "node_modules/axios-mock-adapter": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/axios-mock-adapter/-/axios-mock-adapter-2.0.0.tgz", - "integrity": "sha512-D/K0J5Zm6KvaMTnsWrBQZWLzKN9GxUFZEa0mx2qeEHXDeTugCoplWehy8y36dj5vuSjhe1u/Dol8cZ8lzzmDew==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "is-buffer": "^2.0.5" - }, - "peerDependencies": { - "axios": ">= 0.17.0" - } - }, - "node_modules/babel-jest": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", - "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/transform": "^29.7.0", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^29.6.3", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.8.0" - } - }, - "node_modules/babel-plugin-istanbul": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", - "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-jest-hoist": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", - "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.1.14", - "@types/babel__traverse": "^7.0.6" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/babel-preset-current-node-syntax": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.1.0.tgz", - "integrity": "sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-import-attributes": "^7.24.7", - "@babel/plugin-syntax-import-meta": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/babel-preset-jest": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", - "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", - "dev": true, - "license": "MIT", - "dependencies": { - "babel-plugin-jest-hoist": "^29.6.3", - "babel-preset-current-node-syntax": "^1.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, - "license": "MIT", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browserslist": { - "version": "4.23.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz", - "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "caniuse-lite": "^1.0.30001646", - "electron-to-chromium": "^1.5.4", - "node-releases": "^2.0.18", - "update-browserslist-db": "^1.1.0" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/bs-logger": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", - "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-json-stable-stringify": "2.x" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "node-int64": "^0.4.0" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001662", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001662.tgz", - "integrity": "sha512-sgMUVwLmGseH8ZIrm1d51UbrhqMCH3jvS7gF/M6byuHOnKyLOBL7W8yz5V02OHwgLGA36o/AFhWzzh4uc5aqTA==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "CC-BY-4.0" - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/ci-info": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", - "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/cjs-module-lexer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.1.tgz", - "integrity": "sha512-cuSVIHi9/9E/+821Qjdvngor+xpnlwnuwIyZOaLmHBVdXL+gP+I6QQB9VkO7RI77YIcTV+S1W9AreJ5eN63JBA==", - "dev": true, - "license": "MIT" - }, - "node_modules/class-transformer": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/class-transformer/-/class-transformer-0.5.1.tgz", - "integrity": "sha512-SQa1Ws6hUbfC98vKGxZH3KFY0Y1lm5Zm0SY8XX9zbK7FJCyVEac3ATW0RIpwzW+oOfmHE5PMPufDG9hCfoEOMw==", - "license": "MIT" - }, - "node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", - "dev": true, - "license": "MIT", - "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" - } - }, - "node_modules/collect-v8-coverage": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", - "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/color": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", - "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", - "license": "MIT", - "dependencies": { - "color-convert": "^1.9.3", - "color-string": "^1.6.0" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "license": "MIT" - }, - "node_modules/color-string": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", - "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", - "license": "MIT", - "dependencies": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } - }, - "node_modules/color/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "license": "MIT", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "license": "MIT" - }, - "node_modules/colorspace": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz", - "integrity": "sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==", - "license": "MIT", - "dependencies": { - "color": "^3.1.3", - "text-hex": "1.0.x" - } - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "license": "MIT", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true, - "license": "MIT" - }, - "node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true, - "license": "MIT" - }, - "node_modules/create-jest": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", - "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-config": "^29.7.0", - "jest-util": "^29.7.0", - "prompts": "^2.0.1" - }, - "bin": { - "create-jest": "bin/create-jest.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/debug": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", - "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/dedent": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.3.tgz", - "integrity": "sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "babel-plugin-macros": "^3.1.0" - }, - "peerDependenciesMeta": { - "babel-plugin-macros": { - "optional": true - } - } - }, - "node_modules/deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/diff-sequences": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", - "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/ejs": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", - "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "jake": "^10.8.5" - }, - "bin": { - "ejs": "bin/cli.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/electron-to-chromium": { - "version": "1.5.26", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.26.tgz", - "integrity": "sha512-Z+OMe9M/V6Ep9n/52+b7lkvYEps26z4Yz3vjWL1V61W0q+VLF1pOHhMY17sa4roz4AWmULSI8E6SAojZA5L0YQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/emittery": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", - "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" - } - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "license": "MIT" - }, - "node_modules/enabled": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", - "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==", - "license": "MIT" - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/esbuild": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.23.1.tgz", - "integrity": "sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.23.1", - "@esbuild/android-arm": "0.23.1", - "@esbuild/android-arm64": "0.23.1", - "@esbuild/android-x64": "0.23.1", - "@esbuild/darwin-arm64": "0.23.1", - "@esbuild/darwin-x64": "0.23.1", - "@esbuild/freebsd-arm64": "0.23.1", - "@esbuild/freebsd-x64": "0.23.1", - "@esbuild/linux-arm": "0.23.1", - "@esbuild/linux-arm64": "0.23.1", - "@esbuild/linux-ia32": "0.23.1", - "@esbuild/linux-loong64": "0.23.1", - "@esbuild/linux-mips64el": "0.23.1", - "@esbuild/linux-ppc64": "0.23.1", - "@esbuild/linux-riscv64": "0.23.1", - "@esbuild/linux-s390x": "0.23.1", - "@esbuild/linux-x64": "0.23.1", - "@esbuild/netbsd-x64": "0.23.1", - "@esbuild/openbsd-arm64": "0.23.1", - "@esbuild/openbsd-x64": "0.23.1", - "@esbuild/sunos-x64": "0.23.1", - "@esbuild/win32-arm64": "0.23.1", - "@esbuild/win32-ia32": "0.23.1", - "@esbuild/win32-x64": "0.23.1" - } - }, - "node_modules/escalade": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, - "license": "BSD-2-Clause", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/expect": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", - "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/expect-utils": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-uri": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.1.tgz", - "integrity": "sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fb-watchman": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", - "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "bser": "2.1.1" - } - }, - "node_modules/fecha": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz", - "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==", - "license": "MIT" - }, - "node_modules/filelist": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", - "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "minimatch": "^5.0.1" - } - }, - "node_modules/filelist/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/filelist/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/fn.name": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", - "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==", - "license": "MIT" - }, - "node_modules/follow-redirects": { - "version": "1.15.9", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", - "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "license": "MIT", - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "license": "MIT", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true, - "license": "ISC" - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, - "license": "ISC", - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-tsconfig": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.8.1.tgz", - "integrity": "sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==", - "dev": true, - "license": "MIT", - "dependencies": { - "resolve-pkg-maps": "^1.0.0" - }, - "funding": { - "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" - } - }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true, - "license": "MIT" - }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/import-local": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", - "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", - "dev": true, - "license": "MIT", - "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", - "dev": true, - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "license": "ISC" - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true, - "license": "MIT" - }, - "node_modules/is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/is-core-module": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", - "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true, - "license": "ISC" - }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", - "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", - "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@babel/core": "^7.23.9", - "@babel/parser": "^7.23.9", - "@istanbuljs/schema": "^0.1.3", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^7.5.4" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-report": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", - "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^4.0.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-reports": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", - "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jake": { - "version": "10.9.2", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz", - "integrity": "sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "async": "^3.2.3", - "chalk": "^4.0.2", - "filelist": "^1.0.4", - "minimatch": "^3.1.2" - }, - "bin": { - "jake": "bin/cli.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jest": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", - "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/core": "^29.7.0", - "@jest/types": "^29.6.3", - "import-local": "^3.0.2", - "jest-cli": "^29.7.0" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/jest-changed-files": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", - "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", - "dev": true, - "license": "MIT", - "dependencies": { - "execa": "^5.0.0", - "jest-util": "^29.7.0", - "p-limit": "^3.1.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-circus": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", - "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/expect": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^1.0.0", - "is-generator-fn": "^2.0.0", - "jest-each": "^29.7.0", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-runtime": "^29.7.0", - "jest-snapshot": "^29.7.0", - "jest-util": "^29.7.0", - "p-limit": "^3.1.0", - "pretty-format": "^29.7.0", - "pure-rand": "^6.0.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-cli": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", - "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/core": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "create-jest": "^29.7.0", - "exit": "^0.1.2", - "import-local": "^3.0.2", - "jest-config": "^29.7.0", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "yargs": "^17.3.1" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/jest-config": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", - "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/core": "^7.11.6", - "@jest/test-sequencer": "^29.7.0", - "@jest/types": "^29.6.3", - "babel-jest": "^29.7.0", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-circus": "^29.7.0", - "jest-environment-node": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.7.0", - "jest-runner": "^29.7.0", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "micromatch": "^4.0.4", - "parse-json": "^5.2.0", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@types/node": "*", - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "ts-node": { - "optional": true - } - } - }, - "node_modules/jest-diff": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", - "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^29.6.3", - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-docblock": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", - "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", - "dev": true, - "license": "MIT", - "dependencies": { - "detect-newline": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-each": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", - "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "jest-get-type": "^29.6.3", - "jest-util": "^29.7.0", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-environment-node": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", - "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-get-type": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", - "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-haste-map": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", - "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "@types/graceful-fs": "^4.1.3", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^29.6.3", - "jest-util": "^29.7.0", - "jest-worker": "^29.7.0", - "micromatch": "^4.0.4", - "walker": "^1.0.8" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "optionalDependencies": { - "fsevents": "^2.3.2" - } - }, - "node_modules/jest-leak-detector": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", - "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", - "dev": true, - "license": "MIT", - "dependencies": { - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-matcher-utils": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", - "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^29.7.0", - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-message-util": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", - "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^29.6.3", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-mock": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", - "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-pnp-resolver": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", - "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - }, - "peerDependencies": { - "jest-resolve": "*" - }, - "peerDependenciesMeta": { - "jest-resolve": { - "optional": true - } - } - }, - "node_modules/jest-regex-util": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", - "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-resolve": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", - "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "resolve": "^1.20.0", - "resolve.exports": "^2.0.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-resolve-dependencies": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", - "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", - "dev": true, - "license": "MIT", - "dependencies": { - "jest-regex-util": "^29.6.3", - "jest-snapshot": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-runner": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", - "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/console": "^29.7.0", - "@jest/environment": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "graceful-fs": "^4.2.9", - "jest-docblock": "^29.7.0", - "jest-environment-node": "^29.7.0", - "jest-haste-map": "^29.7.0", - "jest-leak-detector": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-resolve": "^29.7.0", - "jest-runtime": "^29.7.0", - "jest-util": "^29.7.0", - "jest-watcher": "^29.7.0", - "jest-worker": "^29.7.0", - "p-limit": "^3.1.0", - "source-map-support": "0.5.13" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-runtime": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", - "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/fake-timers": "^29.7.0", - "@jest/globals": "^29.7.0", - "@jest/source-map": "^29.6.3", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-mock": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.7.0", - "jest-snapshot": "^29.7.0", - "jest-util": "^29.7.0", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-snapshot": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", - "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/core": "^7.11.6", - "@babel/generator": "^7.7.2", - "@babel/plugin-syntax-jsx": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/types": "^7.3.3", - "@jest/expect-utils": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^29.7.0", - "graceful-fs": "^4.2.9", - "jest-diff": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "natural-compare": "^1.4.0", - "pretty-format": "^29.7.0", - "semver": "^7.5.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-snapshot/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jest-util": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", - "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-validate": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", - "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^29.6.3", - "leven": "^3.1.0", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-validate/node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-watcher": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", - "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/test-result": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "jest-util": "^29.7.0", - "string-length": "^4.0.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-worker": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", - "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "jest-util": "^29.7.0", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true, - "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true, - "license": "MIT" - }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, - "license": "MIT", - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/kuler": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", - "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==", - "license": "MIT" - }, - "node_modules/leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true, - "license": "MIT" - }, - "node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", - "dev": true, - "license": "MIT" - }, - "node_modules/logform": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/logform/-/logform-2.6.1.tgz", - "integrity": "sha512-CdaO738xRapbKIMVn2m4F6KTj4j7ooJ8POVnebSgKo3KBz5axNXRAL7ZdRjIV6NOr2Uf4vjtRkxrFETOioCqSA==", - "license": "MIT", - "dependencies": { - "@colors/colors": "1.6.0", - "@types/triple-beam": "^1.3.2", - "fecha": "^4.2.0", - "ms": "^2.1.1", - "safe-stable-stringify": "^2.3.1", - "triple-beam": "^1.3.0" - }, - "engines": { - "node": ">= 12.0.0" - } - }, - "node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/make-dir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", - "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", - "dev": true, - "license": "MIT", - "dependencies": { - "semver": "^7.5.3" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-dir/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true, - "license": "ISC" - }, - "node_modules/makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "tmpl": "1.0.5" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true, - "license": "MIT" - }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "dev": true, - "license": "MIT", - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "license": "MIT" - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true, - "license": "MIT" - }, - "node_modules/node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", - "dev": true, - "license": "MIT" - }, - "node_modules/node-releases": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", - "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", - "dev": true, - "license": "MIT" - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/one-time": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz", - "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==", - "license": "MIT", - "dependencies": { - "fn.name": "1.x.x" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-locate/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true, - "license": "MIT" - }, - "node_modules/picocolors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz", - "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==", - "dev": true, - "license": "ISC" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pirates": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", - "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "license": "MIT" - }, - "node_modules/pure-rand": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", - "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/dubzzz" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fast-check" - } - ], - "license": "MIT" - }, - "node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "dev": true, - "license": "MIT" - }, - "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/reflect-metadata": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", - "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==", - "license": "Apache-2.0" - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-pkg-maps": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", - "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" - } - }, - "node_modules/resolve.exports": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", - "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/safe-stable-stringify": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz", - "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==", - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", - "license": "MIT", - "dependencies": { - "is-arrayish": "^0.3.1" - } - }, - "node_modules/simple-swizzle/node_modules/is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", - "license": "MIT" - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true, - "license": "MIT" - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.13", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", - "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", - "dev": true, - "license": "MIT", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/stack-trace": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", - "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==", - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/stack-utils": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", - "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "escape-string-regexp": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string-length": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", - "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, - "license": "ISC", - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/text-hex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", - "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==", - "license": "MIT" - }, - "node_modules/tmpl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/triple-beam": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.4.1.tgz", - "integrity": "sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==", - "license": "MIT", - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/ts-jest": { - "version": "29.2.5", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.2.5.tgz", - "integrity": "sha512-KD8zB2aAZrcKIdGk4OwpJggeLcH1FgrICqDSROWqlnJXGCXK4Mn6FcdK2B6670Xr73lHMG1kHw8R87A0ecZ+vA==", - "dev": true, - "license": "MIT", - "dependencies": { - "bs-logger": "^0.2.6", - "ejs": "^3.1.10", - "fast-json-stable-stringify": "^2.1.0", - "jest-util": "^29.0.0", - "json5": "^2.2.3", - "lodash.memoize": "^4.1.2", - "make-error": "^1.3.6", - "semver": "^7.6.3", - "yargs-parser": "^21.1.1" - }, - "bin": { - "ts-jest": "cli.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0" - }, - "peerDependencies": { - "@babel/core": ">=7.0.0-beta.0 <8", - "@jest/transform": "^29.0.0", - "@jest/types": "^29.0.0", - "babel-jest": "^29.0.0", - "jest": "^29.0.0", - "typescript": ">=4.3 <6" - }, - "peerDependenciesMeta": { - "@babel/core": { - "optional": true - }, - "@jest/transform": { - "optional": true - }, - "@jest/types": { - "optional": true - }, - "babel-jest": { - "optional": true - }, - "esbuild": { - "optional": true - } - } - }, - "node_modules/ts-jest/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/ts-node": { - "version": "10.9.2", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", - "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } - } - }, - "node_modules/tsx": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.19.1.tgz", - "integrity": "sha512-0flMz1lh74BR4wOvBjuh9olbnwqCPc35OOlfyzHba0Dc+QNUeWX/Gq2YTbnwcWPO3BMd8fkzRVrHcsR+a7z7rA==", - "dev": true, - "license": "MIT", - "dependencies": { - "esbuild": "~0.23.0", - "get-tsconfig": "^4.7.5" - }, - "bin": { - "tsx": "dist/cli.mjs" - }, - "engines": { - "node": ">=18.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" - } - }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/typescript": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.2.tgz", - "integrity": "sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/undici-types": { - "version": "6.19.8", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", - "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", - "dev": true, - "license": "MIT" - }, - "node_modules/update-browserslist-db": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", - "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" + "name": "metlink-api-http-client", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "metlink-api-http-client", + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "axios": "^1.7.7", + "class-transformer": "^0.5.1", + "reflect-metadata": "^0.2.2", + "winston": "^3.14.2" + }, + "devDependencies": { + "@eslint/js": "^9.11.1", + "@jest/globals": "^29.7.0", + "@types/ajv": "^0.0.5", + "@types/axios": "^0.9.36", + "@types/axios-mock-adapter": "^1.10.0", + "@types/eslint__js": "^8.42.3", + "@types/jest": "^29.5.12", + "@types/node": "^22.5.4", + "@typescript-eslint/eslint-plugin": "^8.7.0", + "@typescript-eslint/parser": "^8.7.0", + "ajv": "^8.17.1", + "axios-mock-adapter": "^2.0.0", + "eslint": "^9.11.1", + "jest": "^29.7.0", + "prettier": "3.3.3", + "ts-jest": "^29.2.5", + "ts-node": "^10.9.2", + "tsx": "^4.19.1", + "typescript": "^5.6.2", + "typescript-eslint": "^8.7.0" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", + "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/highlight": "^7.24.7", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.4.tgz", + "integrity": "sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.2.tgz", + "integrity": "sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.25.0", + "@babel/helper-compilation-targets": "^7.25.2", + "@babel/helper-module-transforms": "^7.25.2", + "@babel/helpers": "^7.25.0", + "@babel/parser": "^7.25.0", + "@babel/template": "^7.25.0", + "@babel/traverse": "^7.25.2", + "@babel/types": "^7.25.2", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.6.tgz", + "integrity": "sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.25.6", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz", + "integrity": "sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.25.2", + "@babel/helper-validator-option": "^7.24.8", + "browserslist": "^4.23.1", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", + "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz", + "integrity": "sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-simple-access": "^7.24.7", + "@babel/helper-validator-identifier": "^7.24.7", + "@babel/traverse": "^7.25.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz", + "integrity": "sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz", + "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", + "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", + "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz", + "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.6.tgz", + "integrity": "sha512-Xg0tn4HcfTijTwfDwYlvVCl43V6h4KyVVX2aEm4qdO/PC6L2YvzLHFdmxhoeSA3eslcE6+ZVXHgWwopXYLNq4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.25.0", + "@babel/types": "^7.25.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", + "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.24.7", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@babel/highlight/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/parser": { + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.6.tgz", + "integrity": "sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.25.6" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.25.6.tgz", + "integrity": "sha512-sXaDXaJN9SNLymBdlWFA+bjzBhFD617ZaFiY13dGt7TVslVvVgA6fkZOP7Ki3IGElC45lwHdOTrCtKZGVAWeLQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.7.tgz", + "integrity": "sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.4.tgz", + "integrity": "sha512-uMOCoHVU52BsSWxPOMVv5qKRdeSlPuImUCB2dlPuBSU+W2/ROE7/Zg8F2Kepbk+8yBa68LlRKxO+xgEVWorsDg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz", + "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/parser": "^7.25.0", + "@babel/types": "^7.25.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.6.tgz", + "integrity": "sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.25.6", + "@babel/parser": "^7.25.6", + "@babel/template": "^7.25.0", + "@babel/types": "^7.25.6", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.6.tgz", + "integrity": "sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.24.8", + "@babel/helper-validator-identifier": "^7.24.7", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@colors/colors": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz", + "integrity": "sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==", + "license": "MIT", + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@dabh/diagnostics": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.3.tgz", + "integrity": "sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==", + "license": "MIT", + "dependencies": { + "colorspace": "1.1.x", + "enabled": "2.0.x", + "kuler": "^2.0.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.23.1.tgz", + "integrity": "sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.23.1.tgz", + "integrity": "sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.23.1.tgz", + "integrity": "sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.23.1.tgz", + "integrity": "sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.23.1.tgz", + "integrity": "sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.23.1.tgz", + "integrity": "sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.23.1.tgz", + "integrity": "sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.23.1.tgz", + "integrity": "sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.23.1.tgz", + "integrity": "sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.23.1.tgz", + "integrity": "sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.23.1.tgz", + "integrity": "sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.23.1.tgz", + "integrity": "sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.23.1.tgz", + "integrity": "sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.23.1.tgz", + "integrity": "sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.23.1.tgz", + "integrity": "sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.23.1.tgz", + "integrity": "sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.23.1.tgz", + "integrity": "sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.23.1.tgz", + "integrity": "sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.23.1.tgz", + "integrity": "sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.23.1.tgz", + "integrity": "sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.23.1.tgz", + "integrity": "sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.23.1.tgz", + "integrity": "sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.23.1.tgz", + "integrity": "sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.23.1.tgz", + "integrity": "sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.11.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.1.tgz", + "integrity": "sha512-m4DVN9ZqskZoLU5GlWZadwDnYo3vAEydiUayB9widCl9ffWx2IvPnp6n3on5rJmziJSw9Bv+Z3ChDVdMwXCY8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.18.0.tgz", + "integrity": "sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.4", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.6.0.tgz", + "integrity": "sha512-8I2Q8ykA4J0x0o7cg67FPVnehcqWTBehu/lmY+bolPFHGjh49YzGBMXTvpqVgEbBdvNCSxj6iFgiIyHzf03lzg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.1.0.tgz", + "integrity": "sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@eslint/eslintrc/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/eslintrc/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@eslint/js": { + "version": "9.11.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.11.1.tgz", + "integrity": "sha512-/qu+TWz8WwPWc7/HcIJKi+c+MOm46GdVaSlTTQcaqaL53+GsoA6MxWp5PtTx48qbSP7ylM1Kn7nhvkugfJvRSA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.4.tgz", + "integrity": "sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.0.tgz", + "integrity": "sha512-vH9PiIMMwvhCx31Af3HiGzsVNULDbyVkHXwlemn/B0TFj/00ho3y55efXrUZTfQipxoHC5u4xq6zblww1zm1Ig==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.0.tgz", + "integrity": "sha512-d2CGZR2o7fS6sWB7DG/3a95bGKQyHMACZ5aW8qGkkqQpUoZV6C0X7Pc7l4ZNMZkfNBf4VWNe9E1jRsf0G146Ew==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", + "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/core": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", + "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/reporters": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^29.7.0", + "jest-config": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-resolve-dependencies": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "jest-watcher": "^29.7.0", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/environment": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", + "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "expect": "^29.7.0", + "jest-snapshot": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", + "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "jest-get-type": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/fake-timers": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", + "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@sinonjs/fake-timers": "^10.0.2", + "@types/node": "*", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/globals": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", + "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/types": "^29.6.3", + "jest-mock": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/reporters": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", + "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^6.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "slash": "^3.0.0", + "string-length": "^4.0.1", + "strip-ansi": "^6.0.0", + "v8-to-istanbul": "^9.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/source-map": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", + "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.18", + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/test-result": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", + "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/test-sequencer": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", + "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/test-result": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/transform": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", + "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.2" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@sinonjs/commons": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/commons": "^3.0.0" + } + }, + "node_modules/@tsconfig/node10": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", + "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/ajv": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/@types/ajv/-/ajv-0.0.5.tgz", + "integrity": "sha512-0UD98SZLwPk6cTMZoLs8W4XSAWgqT9nyoZiBw+uXEPf1u5h+Dn2ztMG4Is9pDA+9D7GKbCTfIkQK/hNgoWVQcQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/axios": { + "version": "0.9.36", + "resolved": "https://registry.npmjs.org/@types/axios/-/axios-0.9.36.tgz", + "integrity": "sha512-NLOpedx9o+rxo/X5ChbdiX6mS1atE4WHmEEIcR9NLenRVa5HoVjAvjafwU3FPTqnZEstpoqCaW7fagqSoTDNeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/axios-mock-adapter": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@types/axios-mock-adapter/-/axios-mock-adapter-1.10.0.tgz", + "integrity": "sha512-Govyvy3cr8hsR6DcCoBjVMQhYyzkHdfU/hMgBw6ONOFuTrZTDxdE/rBR7Sz3qsGtVZABSK8/2rDekp5UwZ/V8A==", + "deprecated": "This is a stub types definition for axios-mock-adapter (https://github.com/ctimmerm/axios-mock-adapter). axios-mock-adapter provides its own type definitions, so you don't need @types/axios-mock-adapter installed!", + "dev": true, + "dependencies": { + "axios-mock-adapter": "*" + } + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.8", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", + "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.6", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz", + "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "node_modules/@types/eslint": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", + "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint__js": { + "version": "8.42.3", + "resolved": "https://registry.npmjs.org/@types/eslint__js/-/eslint__js-8.42.3.tgz", + "integrity": "sha512-alfG737uhmPdnvkrLdZLcEKJ/B8s9Y4hrZ+YAdzUeoArBlSUERA2E87ROfOaS4jd/C45fzOoZzidLc1IPwLqOw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/eslint": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/graceful-fs": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", + "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/jest": { + "version": "29.5.13", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.13.tgz", + "integrity": "sha512-wd+MVEZCHt23V0/L642O5APvspWply/rGY5BcW4SUETo2UzPU3Z26qr8jC2qxpimI2jjx9h7+2cj2FwIr01bXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "expect": "^29.0.0", + "pretty-format": "^29.0.0" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "22.5.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.5.5.tgz", + "integrity": "sha512-Xjs4y5UPO/CLdzpgR6GirZJx36yScjh73+2NlLlkFRSoQN8B0DpfXPdZGnvVmLRLOsqDpOfTNv7D9trgGhmOIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.19.2" + } + }, + "node_modules/@types/stack-utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/triple-beam": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.5.tgz", + "integrity": "sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==", + "license": "MIT" + }, + "node_modules/@types/yargs": { + "version": "17.0.33", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", + "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.7.0.tgz", + "integrity": "sha512-RIHOoznhA3CCfSTFiB6kBGLQtB/sox+pJ6jeFu6FxJvqL8qRxq/FfGO/UhsGgQM9oGdXkV4xUgli+dt26biB6A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.7.0", + "@typescript-eslint/type-utils": "8.7.0", + "@typescript-eslint/utils": "8.7.0", + "@typescript-eslint/visitor-keys": "8.7.0", + "graphemer": "^1.4.0", + "ignore": "^5.3.1", + "natural-compare": "^1.4.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0", + "eslint": "^8.57.0 || ^9.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.7.0.tgz", + "integrity": "sha512-lN0btVpj2unxHlNYLI//BQ7nzbMJYBVQX5+pbNXvGYazdlgYonMn4AhhHifQ+J4fGRYA/m1DjaQjx+fDetqBOQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/scope-manager": "8.7.0", + "@typescript-eslint/types": "8.7.0", + "@typescript-eslint/typescript-estree": "8.7.0", + "@typescript-eslint/visitor-keys": "8.7.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.7.0.tgz", + "integrity": "sha512-87rC0k3ZlDOuz82zzXRtQ7Akv3GKhHs0ti4YcbAJtaomllXoSO8hi7Ix3ccEvCd824dy9aIX+j3d2UMAfCtVpg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.7.0", + "@typescript-eslint/visitor-keys": "8.7.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.7.0.tgz", + "integrity": "sha512-tl0N0Mj3hMSkEYhLkjREp54OSb/FI6qyCzfiiclvJvOqre6hsZTGSnHtmFLDU8TIM62G7ygEa1bI08lcuRwEnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/typescript-estree": "8.7.0", + "@typescript-eslint/utils": "8.7.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.7.0.tgz", + "integrity": "sha512-LLt4BLHFwSfASHSF2K29SZ+ZCsbQOM+LuarPjRUuHm+Qd09hSe3GCeaQbcCr+Mik+0QFRmep/FyZBO6fJ64U3w==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.7.0.tgz", + "integrity": "sha512-MC8nmcGHsmfAKxwnluTQpNqceniT8SteVwd2voYlmiSWGOtjvGXdPl17dYu2797GVscK30Z04WRM28CrKS9WOg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/types": "8.7.0", + "@typescript-eslint/visitor-keys": "8.7.0", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.7.0.tgz", + "integrity": "sha512-ZbdUdwsl2X/s3CiyAu3gOlfQzpbuG3nTWKPoIvAu1pu5r8viiJvv2NPN2AqArL35NCYtw/lrPPfM4gxrMLNLPw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@typescript-eslint/scope-manager": "8.7.0", + "@typescript-eslint/types": "8.7.0", + "@typescript-eslint/typescript-estree": "8.7.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.7.0.tgz", + "integrity": "sha512-b1tx0orFCCh/THWPQa2ZwWzvOeyzzp36vkJYOpVg0u8UVOIsfVrnuC9FqAw9gRKn+rG2VmWQ/zDJZzkxUnj/XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.7.0", + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/acorn": { + "version": "8.12.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", + "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", + "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.11.0" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true, + "license": "MIT" + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/async": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", + "license": "MIT" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" + }, + "node_modules/axios": { + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.7.tgz", + "integrity": "sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/axios-mock-adapter": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/axios-mock-adapter/-/axios-mock-adapter-2.0.0.tgz", + "integrity": "sha512-D/K0J5Zm6KvaMTnsWrBQZWLzKN9GxUFZEa0mx2qeEHXDeTugCoplWehy8y36dj5vuSjhe1u/Dol8cZ8lzzmDew==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "is-buffer": "^2.0.5" + }, + "peerDependencies": { + "axios": ">= 0.17.0" + } + }, + "node_modules/babel-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", + "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/transform": "^29.7.0", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^29.6.3", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.8.0" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-jest-hoist": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", + "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.1.14", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/babel-preset-current-node-syntax": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.1.0.tgz", + "integrity": "sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-import-attributes": "^7.24.7", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-preset-jest": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", + "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-plugin-jest-hoist": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.23.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz", + "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "caniuse-lite": "^1.0.30001646", + "electron-to-chromium": "^1.5.4", + "node-releases": "^2.0.18", + "update-browserslist-db": "^1.1.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bs-logger": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", + "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-json-stable-stringify": "2.x" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001662", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001662.tgz", + "integrity": "sha512-sgMUVwLmGseH8ZIrm1d51UbrhqMCH3jvS7gF/M6byuHOnKyLOBL7W8yz5V02OHwgLGA36o/AFhWzzh4uc5aqTA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cjs-module-lexer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.1.tgz", + "integrity": "sha512-cuSVIHi9/9E/+821Qjdvngor+xpnlwnuwIyZOaLmHBVdXL+gP+I6QQB9VkO7RI77YIcTV+S1W9AreJ5eN63JBA==", + "dev": true, + "license": "MIT" + }, + "node_modules/class-transformer": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/class-transformer/-/class-transformer-0.5.1.tgz", + "integrity": "sha512-SQa1Ws6hUbfC98vKGxZH3KFY0Y1lm5Zm0SY8XX9zbK7FJCyVEac3ATW0RIpwzW+oOfmHE5PMPufDG9hCfoEOMw==", + "license": "MIT" + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/collect-v8-coverage": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", + "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/color": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", + "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.3", + "color-string": "^1.6.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, + "node_modules/color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "license": "MIT", + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "node_modules/color/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "license": "MIT" + }, + "node_modules/colorspace": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz", + "integrity": "sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==", + "license": "MIT", + "dependencies": { + "color": "^3.1.3", + "text-hex": "1.0.x" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/create-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", + "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "prompts": "^2.0.1" + }, + "bin": { + "create-jest": "bin/create-jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/dedent": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.3.tgz", + "integrity": "sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "babel-plugin-macros": "^3.1.0" + }, + "peerDependenciesMeta": { + "babel-plugin-macros": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/ejs": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", + "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.26", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.26.tgz", + "integrity": "sha512-Z+OMe9M/V6Ep9n/52+b7lkvYEps26z4Yz3vjWL1V61W0q+VLF1pOHhMY17sa4roz4AWmULSI8E6SAojZA5L0YQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/emittery": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", + "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/enabled": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", + "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==", + "license": "MIT" + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/esbuild": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.23.1.tgz", + "integrity": "sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.23.1", + "@esbuild/android-arm": "0.23.1", + "@esbuild/android-arm64": "0.23.1", + "@esbuild/android-x64": "0.23.1", + "@esbuild/darwin-arm64": "0.23.1", + "@esbuild/darwin-x64": "0.23.1", + "@esbuild/freebsd-arm64": "0.23.1", + "@esbuild/freebsd-x64": "0.23.1", + "@esbuild/linux-arm": "0.23.1", + "@esbuild/linux-arm64": "0.23.1", + "@esbuild/linux-ia32": "0.23.1", + "@esbuild/linux-loong64": "0.23.1", + "@esbuild/linux-mips64el": "0.23.1", + "@esbuild/linux-ppc64": "0.23.1", + "@esbuild/linux-riscv64": "0.23.1", + "@esbuild/linux-s390x": "0.23.1", + "@esbuild/linux-x64": "0.23.1", + "@esbuild/netbsd-x64": "0.23.1", + "@esbuild/openbsd-arm64": "0.23.1", + "@esbuild/openbsd-x64": "0.23.1", + "@esbuild/sunos-x64": "0.23.1", + "@esbuild/win32-arm64": "0.23.1", + "@esbuild/win32-ia32": "0.23.1", + "@esbuild/win32-x64": "0.23.1" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint": { + "version": "9.11.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.11.1.tgz", + "integrity": "sha512-MobhYKIoAO1s1e4VUrgx1l1Sk2JBR/Gqjjgw8+mfgoLE2xwsHur4gdfTxyTgShrhvdVFTaJSgMiQBl1jv/AWxg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.11.0", + "@eslint/config-array": "^0.18.0", + "@eslint/core": "^0.6.0", + "@eslint/eslintrc": "^3.1.0", + "@eslint/js": "9.11.1", + "@eslint/plugin-kit": "^0.2.0", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.3.0", + "@nodelib/fs.walk": "^1.2.8", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.0.2", + "eslint-visitor-keys": "^4.0.0", + "espree": "^10.1.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "json-stable-stringify-without-jsonify": "^1.0.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-scope": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.0.2.tgz", + "integrity": "sha512-6E4xmrTw5wtxnLA5wYL3WDfhZ/1bUBGOXV0zQvVRDOtrR8D0p6W7fs3JweNYhwRYeGvd/1CKX2se0/2s7Q/nJA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz", + "integrity": "sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/eslint/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/espree": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.1.0.tgz", + "integrity": "sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.12.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.0.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/expect-utils": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-uri": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.1.tgz", + "integrity": "sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fb-watchman": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "bser": "2.1.1" + } + }, + "node_modules/fecha": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz", + "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==", + "license": "MIT" + }, + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "minimatch": "^5.0.1" + } + }, + "node_modules/filelist/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/flatted": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", + "dev": true, + "license": "ISC" + }, + "node_modules/fn.name": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", + "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==", + "license": "MIT" + }, + "node_modules/follow-redirects": { + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true, + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-tsconfig": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.8.1.tgz", + "integrity": "sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true, + "license": "MIT" + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true, + "license": "MIT" + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/import-local": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", + "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", + "dev": true, + "license": "MIT", + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dev": true, + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/is-core-module": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", + "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", + "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/core": "^7.23.9", + "@babel/parser": "^7.23.9", + "@istanbuljs/schema": "^0.1.3", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-instrument/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-reports": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", + "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jake": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz", + "integrity": "sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.4", + "minimatch": "^3.1.2" + }, + "bin": { + "jake": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", + "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/core": "^29.7.0", + "@jest/types": "^29.6.3", + "import-local": "^3.0.2", + "jest-cli": "^29.7.0" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-changed-files": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", + "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", + "dev": true, + "license": "MIT", + "dependencies": { + "execa": "^5.0.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-circus": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", + "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^1.0.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^29.7.0", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0", + "pretty-format": "^29.7.0", + "pure-rand": "^6.0.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-cli": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", + "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/core": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "create-jest": "^29.7.0", + "exit": "^0.1.2", + "import-local": "^3.0.2", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "yargs": "^17.3.1" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-config": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", + "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-jest": "^29.7.0", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-circus": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@types/node": "*", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/jest-diff": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-docblock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", + "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "detect-newline": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-each": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", + "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "jest-util": "^29.7.0", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-environment-node": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", + "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-haste-map": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", + "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "micromatch": "^4.0.4", + "walker": "^1.0.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/jest-leak-detector": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", + "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", + "dev": true, + "license": "MIT", + "dependencies": { + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-matcher-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", + "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-message-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.6.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-mock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", + "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-pnp-resolver": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } + } + }, + "node_modules/jest-regex-util": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", + "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "resolve": "^1.20.0", + "resolve.exports": "^2.0.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve-dependencies": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", + "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", + "dev": true, + "license": "MIT", + "dependencies": { + "jest-regex-util": "^29.6.3", + "jest-snapshot": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runner": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", + "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/environment": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-leak-detector": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-resolve": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-util": "^29.7.0", + "jest-watcher": "^29.7.0", + "jest-worker": "^29.7.0", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runtime": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", + "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/globals": "^29.7.0", + "@jest/source-map": "^29.6.3", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-snapshot": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", + "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.11.6", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "natural-compare": "^1.4.0", + "pretty-format": "^29.7.0", + "semver": "^7.5.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-validate": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", + "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "leven": "^3.1.0", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-validate/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-watcher": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", + "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "jest-util": "^29.7.0", + "string-length": "^4.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-worker": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/kuler": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", + "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==", + "license": "MIT" + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true, + "license": "MIT" + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/logform": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/logform/-/logform-2.6.1.tgz", + "integrity": "sha512-CdaO738xRapbKIMVn2m4F6KTj4j7ooJ8POVnebSgKo3KBz5axNXRAL7ZdRjIV6NOr2Uf4vjtRkxrFETOioCqSA==", + "license": "MIT", + "dependencies": { + "@colors/colors": "1.6.0", + "@types/triple-beam": "^1.3.2", + "fecha": "^4.2.0", + "ms": "^2.1.1", + "safe-stable-stringify": "^2.3.1", + "triple-beam": "^1.3.0" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true, + "license": "ISC" + }, + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "tmpl": "1.0.5" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true, + "license": "MIT" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-releases": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", + "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", + "dev": true, + "license": "MIT" + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/one-time": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz", + "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==", + "license": "MIT", + "dependencies": { + "fn.name": "1.x.x" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-locate/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz", + "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", + "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "license": "MIT" + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/pure-rand": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", + "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ], + "license": "MIT" + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true, + "license": "MIT" + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/reflect-metadata": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", + "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==", + "license": "Apache-2.0" + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, + "node_modules/resolve.exports": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", + "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safe-stable-stringify": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz", + "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "node_modules/simple-swizzle/node_modules/is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", + "license": "MIT" + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true, + "license": "MIT" + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/stack-trace": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "license": "ISC", + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/text-hex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", + "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==", + "license": "MIT" + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true, + "license": "MIT" + }, + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/triple-beam": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.4.1.tgz", + "integrity": "sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==", + "license": "MIT", + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/ts-api-utils": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", + "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "typescript": ">=4.2.0" + } + }, + "node_modules/ts-jest": { + "version": "29.2.5", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.2.5.tgz", + "integrity": "sha512-KD8zB2aAZrcKIdGk4OwpJggeLcH1FgrICqDSROWqlnJXGCXK4Mn6FcdK2B6670Xr73lHMG1kHw8R87A0ecZ+vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "bs-logger": "^0.2.6", + "ejs": "^3.1.10", + "fast-json-stable-stringify": "^2.1.0", + "jest-util": "^29.0.0", + "json5": "^2.2.3", + "lodash.memoize": "^4.1.2", + "make-error": "^1.3.6", + "semver": "^7.6.3", + "yargs-parser": "^21.1.1" + }, + "bin": { + "ts-jest": "cli.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0" + }, + "peerDependencies": { + "@babel/core": ">=7.0.0-beta.0 <8", + "@jest/transform": "^29.0.0", + "@jest/types": "^29.0.0", + "babel-jest": "^29.0.0", + "jest": "^29.0.0", + "typescript": ">=4.3 <6" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "@jest/transform": { + "optional": true + }, + "@jest/types": { + "optional": true + }, + "babel-jest": { + "optional": true + }, + "esbuild": { + "optional": true + } + } + }, + "node_modules/ts-jest/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/ts-node": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", + "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "node_modules/tsx": { + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.19.1.tgz", + "integrity": "sha512-0flMz1lh74BR4wOvBjuh9olbnwqCPc35OOlfyzHba0Dc+QNUeWX/Gq2YTbnwcWPO3BMd8fkzRVrHcsR+a7z7rA==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "~0.23.0", + "get-tsconfig": "^4.7.5" + }, + "bin": { + "tsx": "dist/cli.mjs" + }, + "engines": { + "node": ">=18.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + } + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typescript": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.2.tgz", + "integrity": "sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/typescript-eslint": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.7.0.tgz", + "integrity": "sha512-nEHbEYJyHwsuf7c3V3RS7Saq+1+la3i0ieR3qP0yjqWSzVmh8Drp47uOl9LjbPANac4S7EFSqvcYIKXUUwIfIQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/eslint-plugin": "8.7.0", + "@typescript-eslint/parser": "8.7.0", + "@typescript-eslint/utils": "8.7.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/undici-types": { + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", + "dev": true, + "license": "MIT" + }, + "node_modules/update-browserslist-db": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", + "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.1.2", + "picocolors": "^1.0.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" + }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true, + "license": "MIT" + }, + "node_modules/v8-to-istanbul": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", + "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", + "dev": true, + "license": "ISC", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^2.0.0" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "makeerror": "1.0.12" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/winston": { + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/winston/-/winston-3.14.2.tgz", + "integrity": "sha512-CO8cdpBB2yqzEf8v895L+GNKYJiEq8eKlHU38af3snQBQ+sdAIUepjMSguOIJC7ICbzm0ZI+Af2If4vIJrtmOg==", + "license": "MIT", + "dependencies": { + "@colors/colors": "^1.6.0", + "@dabh/diagnostics": "^2.0.2", + "async": "^3.2.3", + "is-stream": "^2.0.0", + "logform": "^2.6.0", + "one-time": "^1.0.0", + "readable-stream": "^3.4.0", + "safe-stable-stringify": "^2.3.1", + "stack-trace": "0.0.x", + "triple-beam": "^1.3.0", + "winston-transport": "^4.7.0" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/winston-transport": { + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.7.1.tgz", + "integrity": "sha512-wQCXXVgfv/wUPOfb2x0ruxzwkcZfxcktz6JIMUaPLmcNhO4bZTwA/WtDWK74xV3F2dKu8YadrFv0qhwYjVEwhA==", + "license": "MIT", + "dependencies": { + "logform": "^2.6.1", + "readable-stream": "^3.6.2", + "triple-beam": "^1.3.0" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } } - ], - "license": "MIT", - "dependencies": { - "escalade": "^3.1.2", - "picocolors": "^1.0.1" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "license": "MIT" - }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "dev": true, - "license": "MIT" - }, - "node_modules/v8-to-istanbul": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", - "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", - "dev": true, - "license": "ISC", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.12", - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^2.0.0" - }, - "engines": { - "node": ">=10.12.0" - } - }, - "node_modules/walker": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", - "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "makeerror": "1.0.12" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/winston": { - "version": "3.14.2", - "resolved": "https://registry.npmjs.org/winston/-/winston-3.14.2.tgz", - "integrity": "sha512-CO8cdpBB2yqzEf8v895L+GNKYJiEq8eKlHU38af3snQBQ+sdAIUepjMSguOIJC7ICbzm0ZI+Af2If4vIJrtmOg==", - "license": "MIT", - "dependencies": { - "@colors/colors": "^1.6.0", - "@dabh/diagnostics": "^2.0.2", - "async": "^3.2.3", - "is-stream": "^2.0.0", - "logform": "^2.6.0", - "one-time": "^1.0.0", - "readable-stream": "^3.4.0", - "safe-stable-stringify": "^2.3.1", - "stack-trace": "0.0.x", - "triple-beam": "^1.3.0", - "winston-transport": "^4.7.0" - }, - "engines": { - "node": ">= 12.0.0" - } - }, - "node_modules/winston-transport": { - "version": "4.7.1", - "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.7.1.tgz", - "integrity": "sha512-wQCXXVgfv/wUPOfb2x0ruxzwkcZfxcktz6JIMUaPLmcNhO4bZTwA/WtDWK74xV3F2dKu8YadrFv0qhwYjVEwhA==", - "license": "MIT", - "dependencies": { - "logform": "^2.6.1", - "readable-stream": "^3.6.2", - "triple-beam": "^1.3.0" - }, - "engines": { - "node": ">= 12.0.0" - } - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/write-file-atomic": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", - "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", - "dev": true, - "license": "ISC", - "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true, - "license": "ISC" - }, - "node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dev": true, - "license": "MIT", - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } } - } } diff --git a/package.json b/package.json index 869b6a5..359fccb 100644 --- a/package.json +++ b/package.json @@ -1,43 +1,51 @@ { - "name": "metlink-api-http-client", - "description": "HTTP Client for Metlink Wellington API", - "version": "1.0.0", - "main": "index.js", - "scripts": { - "build": "npm i", - "test": "jest", - "test-unit": "jest tests/unit", - "test-integration": "jest tests/integration", - "index": "npx tsx index.nts" - }, - "type": "module", - "keywords": [ - "Metlink", - "http client", - "Metlink Wellington", - "GTFS" - ], - "author": "Anton Nazarov", - "license": "MIT", - "devDependencies": { - "@jest/globals": "^29.7.0", - "@types/ajv": "^0.0.5", - "@types/axios": "^0.9.36", - "@types/axios-mock-adapter": "^1.10.0", - "@types/jest": "^29.5.12", - "@types/node": "^22.5.4", - "ajv": "^8.17.1", - "axios-mock-adapter": "^2.0.0", - "jest": "^29.7.0", - "ts-jest": "^29.2.5", - "ts-node": "^10.9.2", - "tsx": "^4.19.1", - "typescript": "^5.6.2" - }, - "dependencies": { - "axios": "^1.7.7", - "class-transformer": "^0.5.1", - "reflect-metadata": "^0.2.2", - "winston": "^3.14.2" - } + "name": "metlink-api-http-client", + "description": "HTTP Client for Metlink Wellington API", + "version": "1.0.0", + "main": "index.js", + "scripts": { + "build": "npm i", + "test": "jest", + "test-unit": "jest tests/unit", + "test-integration": "jest tests/integration", + "index": "npx tsx index.nts", + "lint": "eslint src" + }, + "type": "module", + "keywords": [ + "Metlink", + "http client", + "Metlink Wellington", + "GTFS" + ], + "author": "Anton Nazarov", + "license": "MIT", + "devDependencies": { + "@eslint/js": "^9.11.1", + "@jest/globals": "^29.7.0", + "@types/ajv": "^0.0.5", + "@types/axios": "^0.9.36", + "@types/axios-mock-adapter": "^1.10.0", + "@types/eslint__js": "^8.42.3", + "@types/jest": "^29.5.12", + "@types/node": "^22.5.4", + "@typescript-eslint/eslint-plugin": "^8.7.0", + "@typescript-eslint/parser": "^8.7.0", + "ajv": "^8.17.1", + "axios-mock-adapter": "^2.0.0", + "eslint": "^9.11.1", + "jest": "^29.7.0", + "prettier": "3.3.3", + "ts-jest": "^29.2.5", + "ts-node": "^10.9.2", + "tsx": "^4.19.1", + "typescript": "^5.6.2", + "typescript-eslint": "^8.7.0" + }, + "dependencies": { + "axios": "^1.7.7", + "class-transformer": "^0.5.1", + "reflect-metadata": "^0.2.2", + "winston": "^3.14.2" + } } diff --git a/src/Contracts.ts b/src/Contracts.ts index c330f72..8d11ec4 100644 --- a/src/Contracts.ts +++ b/src/Contracts.ts @@ -1,114 +1,96 @@ export interface ResponseDTO { - isCollection(): boolean; + isCollection(): boolean } -export interface MetlinkHttpClientInterface extends TripCancellationInterface, - StopDeparturePredictionsInterface, - GTFSRealTimeInterface, - GTFSInterface { - -} +export interface MetlinkHttpClientInterface + extends TripCancellationInterface, + StopDeparturePredictionsInterface, + GTFSRealTimeInterface, + GTFSInterface {} export interface HeadersDictInterface { - [key: string]: string; + [key: string]: string } interface EntityInterface { - [key: string]: string | number | null | object; + [key: string]: string | number | null | object } export abstract class Entity implements EntityInterface { - [key: string]: string | number | null | object; + [key: string]: string | number | null | object } export interface HostInterface { - readonly host: string; - readonly version: string; + readonly host: string + readonly version: string - getUrl(): string; + getUrl(): string } export interface GTFSInterface { - getGtfsAgencies(): Promise; + getGtfsAgencies(): Promise - getGtfsCalendar(): Promise; + getGtfsCalendar(): Promise - getGtfsCalendarDates(): Promise; + getGtfsCalendarDates(): Promise - getGtfsFeedInfo(): Promise; + getGtfsFeedInfo(): Promise - getGtfsRoutes( - routeId?: string | null, - ): Promise; + getGtfsRoutes(routeId?: string | null): Promise - getGtfsShapes( - shapeId: string, - ): Promise; + getGtfsShapes(shapeId: string): Promise - getGtfsStopTimes( - tripId: string, - ): Promise; + getGtfsStopTimes(tripId: string): Promise - getGtfsStops( - routeId?: string | null, - tripId?: string | null, - ): Promise; + getGtfsStops(routeId?: string | null, tripId?: string | null): Promise - getGtfsTransfers(): Promise; + getGtfsTransfers(): Promise getGtfsTrips( start?: string | null, extraFields?: string | null, routeId?: string | null, tripId?: string | null, - end?: string | null, - ): Promise; + end?: string | null + ): Promise } export interface GTFSRealTimeInterface { - getGtfsRtServiceAlerts( - useProtoBuf?: boolean, - ): Promise; + getGtfsRtServiceAlerts(useProtoBuf?: boolean): Promise - getGtfsRtTripUpdates( - useProtoBuf?: boolean, - ): Promise; + getGtfsRtTripUpdates(useProtoBuf?: boolean): Promise - getGtfsRtVehiclePositions( - useProtoBuf?: boolean, - ): Promise; + getGtfsRtVehiclePositions(useProtoBuf?: boolean): Promise } export interface StopDeparturePredictionsInterface { - getStopPredictions( - stopId: string, - ): Promise; + getStopPredictions(stopId: string): Promise } export interface TripCancellationInterface { getTripCancellations( - query?: TripCancellationQueryInterface | null, - ): Promise; + query?: TripCancellationQueryInterface | null + ): Promise } export interface TripCancellationQueryInterface { - get dateUpdated(): string | null; + get dateUpdated(): string | null - get dateUpdatedMax(): string | null; + get dateUpdatedMax(): string | null - get reinstated(): string | null; + get reinstated(): string | null - get dateStart(): string | null; + get dateStart(): string | null - get dateEnd(): string | null; + get dateEnd(): string | null - get partCancellation(): string | null; + get partCancellation(): string | null - get dateCreated(): string | null; + get dateCreated(): string | null - get routeId(): string | null; + get routeId(): string | null - get tripId(): string | null; + get tripId(): string | null - get dateCreatedMax(): string | null; -} \ No newline at end of file + get dateCreatedMax(): string | null +} diff --git a/src/HeadersBuilder.ts b/src/HeadersBuilder.ts index f9097fc..d145b1b 100644 --- a/src/HeadersBuilder.ts +++ b/src/HeadersBuilder.ts @@ -1,34 +1,34 @@ -import {HeadersDictInterface} from "./Contracts"; +import { HeadersDictInterface } from './Contracts' export class HeadersBuilder { - private readonly API_KEYWORD: string = "x-api-key"; - private headers: HeadersDictInterface = {}; + private readonly API_KEYWORD: string = 'x-api-key' + private headers: HeadersDictInterface = {} public newHeaders() { - this.headers = {}; + this.headers = {} - return this; + return this } public addHeaders(headers: HeadersDictInterface) { - this.headers = {...this.headers, ...headers}; + this.headers = { ...this.headers, ...headers } - return this; + return this } public addToken(token: string, key: string = this.API_KEYWORD) { - this.headers[key] = token; + this.headers[key] = token - return this; + return this } public addHeaderAcceptJson() { - this.headers["accept"] = "application/json"; + this.headers['accept'] = 'application/json' - return this; + return this } public getHeaders(): HeadersDictInterface { - return this.headers; + return this.headers } } diff --git a/src/HeadersDirector.ts b/src/HeadersDirector.ts index 668ac80..350524d 100644 --- a/src/HeadersDirector.ts +++ b/src/HeadersDirector.ts @@ -1,17 +1,16 @@ -import {HeadersDictInterface, HostInterface} from "./Contracts"; -import {Host} from "./Host"; -import {HeadersBuilder} from "./HeadersBuilder"; +import { HeadersDictInterface, HostInterface } from './Contracts' +import { Host } from './Host' +import { HeadersBuilder } from './HeadersBuilder' export class HeadersDirector { public static build(token: string): [HostInterface, HeadersDictInterface] { return [ new Host(), - (new HeadersBuilder()) + new HeadersBuilder() .newHeaders() .addToken(token) .addHeaderAcceptJson() - .getHeaders() - ]; + .getHeaders(), + ] } } - diff --git a/src/Host.ts b/src/Host.ts index 2e3038c..b270acb 100644 --- a/src/Host.ts +++ b/src/Host.ts @@ -1,18 +1,18 @@ -import {HostInterface} from "./Contracts"; +import { HostInterface } from './Contracts' export class Host implements HostInterface { - private readonly _host: string = "https://api.opendata.metlink.org.nz"; - private readonly _version: string = "/v1"; + private readonly _host: string = 'https://api.opendata.metlink.org.nz' + private readonly _version: string = '/v1' get host(): string { - return this._host; + return this._host } get version(): string { - return this._version; + return this._version } getUrl(): string { - return this._host + this._version; + return this._host + this._version } -} \ No newline at end of file +} diff --git a/src/MetlinkHttpClient.ts b/src/MetlinkHttpClient.ts index f4a7b26..837561b 100644 --- a/src/MetlinkHttpClient.ts +++ b/src/MetlinkHttpClient.ts @@ -1,83 +1,91 @@ -import {MetlinkHttpClientInterface, TripCancellationQueryInterface} from "./Contracts"; -import {QueryBuilder} from "./QueryBuilder"; -import {HttpClientInterface} from "./domain/httpclient/HttpClientInterface"; -import {Routes} from "./Routes"; +import { + MetlinkHttpClientInterface, + TripCancellationQueryInterface, +} from './Contracts' +import { QueryBuilder } from './QueryBuilder' +import { HttpClientInterface } from './domain/httpclient/HttpClientInterface' +import { Routes } from './Routes' -export default class MetlinkHttpClient - implements MetlinkHttpClientInterface { +export default class MetlinkHttpClient implements MetlinkHttpClientInterface { + private readonly httpClientAdapter: HttpClientInterface - private readonly httpClientAdapter: HttpClientInterface; - - constructor( - httpClient: HttpClientInterface, - ) { - this.httpClientAdapter = httpClient; + constructor(httpClient: HttpClientInterface) { + this.httpClientAdapter = httpClient } private async doGetFetch( path: string, urlSearchParams: URLSearchParams | null = null ): Promise { - let query: string = ""; + let query: string = '' - if (urlSearchParams) { - query += "?" + urlSearchParams.toString(); + if (urlSearchParams?.size) { + query += '?' + urlSearchParams.toString() } - return await this.httpClientAdapter.get(path + query); + return await this.httpClientAdapter.get(path + query) } public async getGtfsAgencies(): Promise { - return await this.doGetFetch(Routes.getGtfsAgenciesPath()); + return await this.doGetFetch(Routes.getGtfsAgenciesPath()) } public async getGtfsCalendar(): Promise { - return await this.doGetFetch(Routes.getGtfsCalendarPath()); + return await this.doGetFetch(Routes.getGtfsCalendarPath()) } public async getGtfsCalendarDates(): Promise { - return await this.doGetFetch(Routes.getGtfsCalendarDatesPath()); + return await this.doGetFetch(Routes.getGtfsCalendarDatesPath()) } public async getGtfsFeedInfo(): Promise { - return await this.doGetFetch(Routes.getGtfsFeedInfoPath()); + return await this.doGetFetch(Routes.getGtfsFeedInfoPath()) } - public async getGtfsRoutes( - routeId: string | null = null - ): Promise { - return await this.doGetFetch(Routes.getGtfsRoutesPath()); + public async getGtfsRoutes(routeId: string | null = null): Promise { + const query: URLSearchParams = new URLSearchParams() + + if (routeId) { + query.append('route_id', routeId) + } + + return await this.doGetFetch(Routes.getGtfsRoutesPath(), query) } - public async getGtfsShapes( - shapeId: string, - ): Promise { + public async getGtfsShapes(shapeId: string): Promise { const query: URLSearchParams = new URLSearchParams({ - "shape_id": shapeId - }); + shape_id: shapeId, + }) - return await this.doGetFetch(Routes.getGtfsShapesPath(), query); + return await this.doGetFetch(Routes.getGtfsShapesPath(), query) } - public async getGtfsStopTimes( - tripId: string, - ): Promise { + public async getGtfsStopTimes(tripId: string): Promise { const query: URLSearchParams = new URLSearchParams({ - "trip_id": tripId - }); + trip_id: tripId, + }) - return await this.doGetFetch(Routes.getGtfsStopTimesPath(), query); + return await this.doGetFetch(Routes.getGtfsStopTimesPath(), query) } public async getGtfsStops( routeId: string | null = null, - tripId: string | null = null, + tripId: string | null = null ): Promise { - return await this.doGetFetch(Routes.getGtfsStopsPath()); + const query: URLSearchParams = new URLSearchParams() + if (routeId) { + query.append('route_id', routeId) + } + + if (tripId) { + query.append('tripId', tripId) + } + + return await this.doGetFetch(Routes.getGtfsStopsPath(), query) } public async getGtfsTransfers(): Promise { - return await this.doGetFetch(Routes.getGtfsTransfersPath()); + return await this.doGetFetch(Routes.getGtfsTransfersPath()) } public async getGtfsTrips( @@ -85,46 +93,81 @@ export default class MetlinkHttpClient extraFields: string | null = null, routeId: string | null = null, tripId: string | null = null, - end: string | null = null, + end: string | null = null ): Promise { - return await this.doGetFetch(Routes.getGtfsTripsPath()); + const params: Record = {} + + if (start) params['start'] = start + if (extraFields) params['extraFields'] = extraFields + if (routeId) params['routeId'] = routeId + if (tripId) params['tripId'] = tripId + if (end) params['end'] = end + + const query: URLSearchParams = new URLSearchParams(params) + + return await this.doGetFetch(Routes.getGtfsTripsPath(), query) } public async getGtfsRtServiceAlerts( - useProtoBuf: boolean = false, + useProtoBuf: boolean = false ): Promise { - return await this.doGetFetch(Routes.getGtfsRtServiceAlertsPath()); + const params: Record = {} + + if (useProtoBuf) { + params['accept'] = 'application/x-protobuf' + } + + const query: URLSearchParams = new URLSearchParams(params) + + return await this.doGetFetch(Routes.getGtfsRtServiceAlertsPath(), query) } public async getGtfsRtTripUpdates( - useProtoBuf: boolean = false, + useProtoBuf: boolean = false ): Promise { - return await this.doGetFetch(Routes.getGtfsRtTripUpdatesPath()); + const params: Record = {} + + if (useProtoBuf) { + params['accept'] = 'application/x-protobuf' + } + + const query: URLSearchParams = new URLSearchParams(params) + + return await this.doGetFetch(Routes.getGtfsRtTripUpdatesPath(), query) } public async getGtfsRtVehiclePositions( - useProtoBuf: boolean = false, + useProtoBuf: boolean = false ): Promise { - return await this.doGetFetch(Routes.getGtfsRtVehiclePositionsPath()); + const params: Record = {} + + if (useProtoBuf) { + params['accept'] = 'application/x-protobuf' + } + + const query: URLSearchParams = new URLSearchParams(params) + + return await this.doGetFetch( + Routes.getGtfsRtVehiclePositionsPath(), + query + ) } - public async getStopPredictions( - stopId: string, - ): Promise { + public async getStopPredictions(stopId: string): Promise { const query: URLSearchParams = new URLSearchParams({ - "stop_id": stopId - }); + stop_id: stopId, + }) - return await this.doGetFetch(Routes.getStopPredictions(), query); + return await this.doGetFetch(Routes.getStopPredictions(), query) } public async getTripCancellations( - searchParams: TripCancellationQueryInterface | null = null, + searchParams: TripCancellationQueryInterface | null = null ): Promise { - const query: URLSearchParams| null = searchParams + const query: URLSearchParams | null = searchParams ? QueryBuilder.buildQuery(searchParams) - : null; + : null - return await this.doGetFetch(Routes.getTripCancellations(), query); + return await this.doGetFetch(Routes.getTripCancellations(), query) } -} \ No newline at end of file +} diff --git a/src/MetlinkHttpClientBuilder.ts b/src/MetlinkHttpClientBuilder.ts index d16b165..18fed6e 100644 --- a/src/MetlinkHttpClientBuilder.ts +++ b/src/MetlinkHttpClientBuilder.ts @@ -1,29 +1,35 @@ -import MetlinkHttpClient from "./MetlinkHttpClient"; -import {HeadersDictInterface, HostInterface, MetlinkHttpClientInterface} from "./Contracts"; -import {HeadersDirector} from "./HeadersDirector"; -import {AxiosAdapter} from "./domain/httpclient/AxiosAdapter"; -import axios from "axios"; -import {ResponseDataDecorator} from "./ResponseDataDecorator"; -import AxiosInstance = Axios.AxiosInstance; +import MetlinkHttpClient from './MetlinkHttpClient' +import { + HeadersDictInterface, + HostInterface, + MetlinkHttpClientInterface, +} from './Contracts' +import { HeadersDirector } from './HeadersDirector' +import { AxiosAdapter } from './domain/httpclient/AxiosAdapter' +import axios from 'axios' +import { ResponseDataDecorator } from './ResponseDataDecorator' +import AxiosInstance = Axios.AxiosInstance export class MetlinkHttpClientBuilder { - public static buildWithAxios( token: string, options: object = {}, configureFn?: (axios: AxiosInstance) => void ): MetlinkHttpClientInterface { - const [host, headers]: [HostInterface, HeadersDictInterface] = HeadersDirector.build(token); + const [host, headers]: [HostInterface, HeadersDictInterface] = + HeadersDirector.build(token) const config = { baseURL: host.getUrl(), - headers: headers - }; + headers: headers, + } - const axiosInstance = axios.create({...options, ...config}); + const axiosInstance = axios.create({ ...options, ...config }) - configureFn && configureFn(axiosInstance); + if (configureFn) { + configureFn(axiosInstance) + } - return new MetlinkHttpClient(new AxiosAdapter(axiosInstance)); + return new MetlinkHttpClient(new AxiosAdapter(axiosInstance)) } public static buildWithAxiosUsingResponseDataDecorator( @@ -31,17 +37,21 @@ export class MetlinkHttpClientBuilder { options: object = {}, configureFn?: (axios: AxiosInstance) => void ): MetlinkHttpClientInterface { - - const [host, headers]: [HostInterface, HeadersDictInterface] = HeadersDirector.build(token); + const [host, headers]: [HostInterface, HeadersDictInterface] = + HeadersDirector.build(token) const config = { baseURL: host.getUrl(), - headers: headers - }; + headers: headers, + } - const axiosInstance = axios.create({...options, ...config}); + const axiosInstance = axios.create({ ...options, ...config }) - configureFn && configureFn(axiosInstance); + if (configureFn) { + configureFn(axiosInstance) + } - return new ResponseDataDecorator(new MetlinkHttpClient(new AxiosAdapter(axiosInstance))); + return new ResponseDataDecorator( + new MetlinkHttpClient(new AxiosAdapter(axiosInstance)) + ) } } diff --git a/src/QueryBuilder.ts b/src/QueryBuilder.ts index ee17a3a..c197fae 100644 --- a/src/QueryBuilder.ts +++ b/src/QueryBuilder.ts @@ -1,21 +1,23 @@ -import {TripCancellationQueryInterface} from "./Contracts"; +import { TripCancellationQueryInterface } from './Contracts' export class QueryBuilder { - public static buildQuery(query: TripCancellationQueryInterface | null): URLSearchParams { - const params = new URLSearchParams(); + public static buildQuery( + query: TripCancellationQueryInterface | null + ): URLSearchParams { + const params = new URLSearchParams() if (query) { for (const key of Object.keys(query)) { - let value = (query as any)[key]; + const value = (query as any)[key] if (value == null) { - continue; + continue } - params.append(key.replace("_",""), value); + params.append(key.replace('_', ''), value) } } - return params; + return params } -} \ No newline at end of file +} diff --git a/src/Response.ts b/src/Response.ts index df7ec1c..28b6ada 100644 --- a/src/Response.ts +++ b/src/Response.ts @@ -1,30 +1,30 @@ -import {ResponseDTO} from "./Contracts"; +import { ResponseDTO } from './Contracts' abstract class CollectionResponse implements ResponseDTO { public isCollection(): boolean { - return true; + return true } } export class Collection extends CollectionResponse { - _collection: V[] = []; + _collection: V[] = [] add(item: V): void { - this._collection.push(item); + this._collection.push(item) } remove(item: V): boolean { - const index = this._collection.indexOf(item); - if (index === -1) return false; - this._collection.splice(index, 1); - return true; + const index = this._collection.indexOf(item) + if (index === -1) return false + this._collection.splice(index, 1) + return true } getItems(): V[] { - return this._collection; + return this._collection } size(): number { - return this._collection.length; + return this._collection.length } -} \ No newline at end of file +} diff --git a/src/ResponseDataDecorator.ts b/src/ResponseDataDecorator.ts index 9554ea2..6e2d608 100644 --- a/src/ResponseDataDecorator.ts +++ b/src/ResponseDataDecorator.ts @@ -1,49 +1,52 @@ -import {MetlinkHttpClientInterface, TripCancellationQueryInterface} from "./Contracts"; -import {Agency} from "./domain/gtfs/entity/Agency"; -import {Calendar} from "./domain/gtfs/entity/Calendar"; -import {CalendarDate} from "./domain/gtfs/entity/CalendarDate"; -import {Feed} from "./domain/gtfs/entity/Feed"; -import {Route} from "./domain/gtfs/entity/Route"; -import {Shape} from "./domain/gtfs/entity/Shape"; -import {Stop} from "./domain/gtfs/entity/Stop"; -import {StopTime} from "./domain/gtfs/entity/StopTime"; -import {Transfer} from "./domain/gtfs/entity/Transfer"; -import {Trip as GtfsTrip} from "./domain/gtfs/entity/Trip"; -import {Response as GtfsRtResponse} from "./domain/gtfs-rt/entity/Response"; -import {Trip as ServiceAlertTrip} from "./domain/gtfs-rt/entity/service-alert/Trip"; -import {Trip as CancellationTrip} from "./domain/trip-cancellation/Trip"; -import Alert from "./domain/gtfs-rt/entity/service-alert/Alert"; -import {Entity} from "./domain/gtfs-rt/entity/service-alert/Entity"; -import Header from "./domain/gtfs-rt/entity/Header"; -import {ActivePeriod} from "./domain/gtfs-rt/entity/service-alert/ActivePeriod"; -import {InformedEntity} from "./domain/gtfs-rt/entity/service-alert/InformedEntity"; -import {Entity as TripUpdateEntity} from "./domain/gtfs-rt/entity/trip-update/Entity"; -import {TripUpdate} from "./domain/gtfs-rt/entity/trip-update/TripUpdate"; -import {StopTimeUpdate} from "./domain/gtfs-rt/entity/trip-update/StopTimeUpdate"; -import {Arrival} from "./domain/gtfs-rt/entity/trip-update/Arrival"; -import {Trip as TripUpdateTrip} from "./domain/gtfs-rt/entity/trip-update/Trip"; -import {VehicleId} from "./domain/gtfs-rt/entity/trip-update/VehicleId"; -import {Response as StopPredictionResponse} from "./domain/stop-departure-prediction/Response"; -import {Departure} from "./domain/stop-departure-prediction/Departure"; -import {Origin} from "./domain/stop-departure-prediction/Origin"; -import {Destination} from "./domain/stop-departure-prediction/Destination"; -import {Entity as StopPredictionEntity} from "./domain/stop-departure-prediction/Entity"; -import {Arrival as StopPredictionArrival} from "./domain/stop-departure-prediction/Arrival"; -import {Entity as VehiclePositionEntity} from "./domain/gtfs-rt/entity/vehicle-positions/Entity"; -import {Vehicle as VehiclePositionVehicle} from "./domain/gtfs-rt/entity/vehicle-positions/Vehicle"; -import {Trip as VehiclePositionVehicleTrip} from "./domain/gtfs-rt/entity/vehicle-positions/Trip"; -import {Position as VehiclePositionPosition} from "./domain/gtfs-rt/entity/vehicle-positions/Position"; -import {VehicleId as VehiclePositionVehicleId} from "./domain/gtfs-rt/entity/vehicle-positions/VehicleId"; +import { + MetlinkHttpClientInterface, + TripCancellationQueryInterface, +} from './Contracts' +import { Agency } from './domain/gtfs/entity/Agency' +import { Calendar } from './domain/gtfs/entity/Calendar' +import { CalendarDate } from './domain/gtfs/entity/CalendarDate' +import { Feed } from './domain/gtfs/entity/Feed' +import { Route } from './domain/gtfs/entity/Route' +import { Shape } from './domain/gtfs/entity/Shape' +import { Stop } from './domain/gtfs/entity/Stop' +import { StopTime } from './domain/gtfs/entity/StopTime' +import { Transfer } from './domain/gtfs/entity/Transfer' +import { Trip as GtfsTrip } from './domain/gtfs/entity/Trip' +import { Response as GtfsRtResponse } from './domain/gtfs-rt/entity/Response' +import { Trip as ServiceAlertTrip } from './domain/gtfs-rt/entity/service-alert/Trip' +import { Trip as CancellationTrip } from './domain/trip-cancellation/Trip' +import Alert from './domain/gtfs-rt/entity/service-alert/Alert' +import { Entity } from './domain/gtfs-rt/entity/service-alert/Entity' +import Header from './domain/gtfs-rt/entity/Header' +import { ActivePeriod } from './domain/gtfs-rt/entity/service-alert/ActivePeriod' +import { InformedEntity } from './domain/gtfs-rt/entity/service-alert/InformedEntity' +import { Entity as TripUpdateEntity } from './domain/gtfs-rt/entity/trip-update/Entity' +import { TripUpdate } from './domain/gtfs-rt/entity/trip-update/TripUpdate' +import { StopTimeUpdate } from './domain/gtfs-rt/entity/trip-update/StopTimeUpdate' +import { Arrival } from './domain/gtfs-rt/entity/trip-update/Arrival' +import { Trip as TripUpdateTrip } from './domain/gtfs-rt/entity/trip-update/Trip' +import { VehicleId } from './domain/gtfs-rt/entity/trip-update/VehicleId' +import { Response as StopPredictionResponse } from './domain/stop-departure-prediction/Response' +import { Departure } from './domain/stop-departure-prediction/Departure' +import { Origin } from './domain/stop-departure-prediction/Origin' +import { Destination } from './domain/stop-departure-prediction/Destination' +import { Entity as StopPredictionEntity } from './domain/stop-departure-prediction/Entity' +import { Arrival as StopPredictionArrival } from './domain/stop-departure-prediction/Arrival' +import { Entity as VehiclePositionEntity } from './domain/gtfs-rt/entity/vehicle-positions/Entity' +import { Vehicle as VehiclePositionVehicle } from './domain/gtfs-rt/entity/vehicle-positions/Vehicle' +import { Trip as VehiclePositionVehicleTrip } from './domain/gtfs-rt/entity/vehicle-positions/Trip' +import { Position as VehiclePositionPosition } from './domain/gtfs-rt/entity/vehicle-positions/Position' +import { VehicleId as VehiclePositionVehicleId } from './domain/gtfs-rt/entity/vehicle-positions/VehicleId' export class ResponseDataDecorator implements MetlinkHttpClientInterface { - private readonly httpClient: MetlinkHttpClientInterface; + private readonly httpClient: MetlinkHttpClientInterface constructor(client: MetlinkHttpClientInterface) { - this.httpClient = client; + this.httpClient = client } public async getGtfsAgencies(): Promise { - const response = await this.httpClient.getGtfsAgencies(); + const response = await this.httpClient.getGtfsAgencies() const entities: Agency[] = response.data.map((data: any) => { return new Agency( @@ -55,14 +58,14 @@ export class ResponseDataDecorator implements MetlinkHttpClientInterface { data.agency_lang, data.agency_phone, data.agency_fare_url - ); - }); + ) + }) - return Promise.resolve(entities); + return Promise.resolve(entities) } public async getGtfsCalendar(): Promise { - const response = await this.httpClient.getGtfsCalendar(); + const response = await this.httpClient.getGtfsCalendar() const entities: Calendar[] = response.data.map((data: any) => { return new Calendar( @@ -76,29 +79,29 @@ export class ResponseDataDecorator implements MetlinkHttpClientInterface { data.saturday, data.sunday, data.start_date, - data.end_date, - ); - }); + data.end_date + ) + }) - return Promise.resolve(entities); + return Promise.resolve(entities) } public async getGtfsCalendarDates(): Promise { - const response = await this.httpClient.getGtfsCalendarDates(); + const response = await this.httpClient.getGtfsCalendarDates() const entities: CalendarDate[] = response.data.map((data: any) => { return new CalendarDate( data.id, data.agency_id, data.date, - data.exception_type, - ); - }); + data.exception_type + ) + }) - return Promise.resolve(entities); + return Promise.resolve(entities) } public async getGtfsFeedInfo(): Promise { - const response = await this.httpClient.getGtfsFeedInfo(); + const response = await this.httpClient.getGtfsFeedInfo() const entities: Feed[] = response.data.map((data: any) => { return new Feed( @@ -109,16 +112,16 @@ export class ResponseDataDecorator implements MetlinkHttpClientInterface { data.feed_start_date, data.feed_end_date, data.feed_version - ); - }); + ) + }) - return Promise.resolve(entities); + return Promise.resolve(entities) } public async getGtfsRoutes( routeId: string | null = null ): Promise { - const response = await this.httpClient.getGtfsRoutes(routeId); + const response = await this.httpClient.getGtfsRoutes(routeId) const entities: Route[] = response.data.map((data: any) => { return new Route( @@ -133,14 +136,14 @@ export class ResponseDataDecorator implements MetlinkHttpClientInterface { data.route_text_color, data.route_url, data.route_sort_order - ); - }); + ) + }) - return Promise.resolve(entities); + return Promise.resolve(entities) } public async getGtfsShapes(shapeId: string): Promise { - const response = await this.httpClient.getGtfsShapes(shapeId); + const response = await this.httpClient.getGtfsShapes(shapeId) const entities: Shape[] = response.data.map((data: any) => { return new Shape( @@ -149,15 +152,15 @@ export class ResponseDataDecorator implements MetlinkHttpClientInterface { data.shape_pt_lat, data.shape_pt_lon, data.shape_pt_sequence, - data.shape_dist_traveled, - ); - }); + data.shape_dist_traveled + ) + }) - return Promise.resolve(entities); + return Promise.resolve(entities) } public async getGtfsStopTimes(tripId: string): Promise { - const response = await this.httpClient.getGtfsStopTimes(tripId); + const response = await this.httpClient.getGtfsStopTimes(tripId) const entities: StopTime[] = response.data.map((data: any) => { return new StopTime( @@ -171,15 +174,18 @@ export class ResponseDataDecorator implements MetlinkHttpClientInterface { data.stop_headsign, data.pickup_type, data.drop_off_type, - data.timepoint, - ); - }); + data.timepoint + ) + }) - return Promise.resolve(entities); + return Promise.resolve(entities) } - public async getGtfsStops(routeId: string | null = null, tripId: string | null = null): Promise { - const response = await this.httpClient.getGtfsStops(routeId, tripId); + public async getGtfsStops( + routeId: string | null = null, + tripId: string | null = null + ): Promise { + const response = await this.httpClient.getGtfsStops(routeId, tripId) const entities: Stop[] = response.data.map((data: any) => { return new Stop( @@ -194,15 +200,15 @@ export class ResponseDataDecorator implements MetlinkHttpClientInterface { data.location_type, data.parent_station, data.stop_url, - data.stop_timezone, - ); - }); + data.stop_timezone + ) + }) - return Promise.resolve(entities); + return Promise.resolve(entities) } public async getGtfsTransfers(): Promise { - const response = await this.httpClient.getGtfsTransfers(); + const response = await this.httpClient.getGtfsTransfers() const entities: Transfer[] = response.data.map((data: any) => { return new Transfer( @@ -212,11 +218,11 @@ export class ResponseDataDecorator implements MetlinkHttpClientInterface { data.transfer_type, data.min_transfer_time, data.from_trip_id, - data.to_trip_id, - ); - }); + data.to_trip_id + ) + }) - return Promise.resolve(entities); + return Promise.resolve(entities) } public async getGtfsTrips( @@ -232,7 +238,7 @@ export class ResponseDataDecorator implements MetlinkHttpClientInterface { routeId, tripId, end - ); + ) const entities: GtfsTrip[] = response.data.map((data: any) => { return new GtfsTrip( @@ -247,68 +253,70 @@ export class ResponseDataDecorator implements MetlinkHttpClientInterface { data.wheelchair_accessible, data.bikes_allowed, data.origin_stop_id, - data.destination_stop_id, - ); - }); + data.destination_stop_id + ) + }) - return Promise.resolve(entities); + return Promise.resolve(entities) } // - public async getGtfsRtTripUpdates(useProtoBuf: boolean = false): Promise { - const response = await this.httpClient.getGtfsRtTripUpdates(useProtoBuf); + public async getGtfsRtTripUpdates( + useProtoBuf: boolean = false + ): Promise { + const response = await this.httpClient.getGtfsRtTripUpdates(useProtoBuf) const header: Header = new Header( response.data.header.gtfsRealtimeVersion, response.data.header.incrementality, - response.data.header.timestamp, - ); + response.data.header.timestamp + ) - const entity: TripUpdateEntity[] = response.data.entity.map((data: any) => { - return new TripUpdateEntity( - data.id, - new TripUpdate( - new StopTimeUpdate( - data.trip_update.stop_time_update.schedule_relationship, - data.trip_update.stop_time_update.stop_sequence, - new Arrival( - data.trip_update.stop_time_update.arrival.delay, - data.trip_update.stop_time_update.arrival.time, + const entity: TripUpdateEntity[] = response.data.entity.map( + (data: any) => { + return new TripUpdateEntity( + data.id, + new TripUpdate( + new StopTimeUpdate( + data.trip_update.stop_time_update.schedule_relationship, + data.trip_update.stop_time_update.stop_sequence, + new Arrival( + data.trip_update.stop_time_update.arrival.delay, + data.trip_update.stop_time_update.arrival.time + ), + data.trip_update.stop_time_update.stop_id ), - data.trip_update.stop_time_update.stop_id - ), - new TripUpdateTrip( - data.trip_update.trip.start_time, - data.trip_update.trip.trip_id, - data.trip_update.trip.direction_id, - parseInt(data.trip_update.trip.route_id), - data.trip_update.trip.schedule_relationship, - data.trip_update.trip.start_date - ), - new VehicleId( - data.trip_update.vehicle.id - ), - data.trip_update.id - ), - ) - }); - - const body = new GtfsRtResponse( - header, - entity + new TripUpdateTrip( + data.trip_update.trip.start_time, + data.trip_update.trip.trip_id, + data.trip_update.trip.direction_id, + parseInt(data.trip_update.trip.route_id), + data.trip_update.trip.schedule_relationship, + data.trip_update.trip.start_date + ), + new VehicleId(data.trip_update.vehicle.id), + data.trip_update.id + ) + ) + } ) - return Promise.resolve(body); + const body = new GtfsRtResponse(header, entity) + + return Promise.resolve(body) } - public async getGtfsRtVehiclePositions(useProtoBuf: boolean = false): Promise { - const response = await this.httpClient.getGtfsRtVehiclePositions(useProtoBuf); + public async getGtfsRtVehiclePositions( + useProtoBuf: boolean = false + ): Promise { + const response = + await this.httpClient.getGtfsRtVehiclePositions(useProtoBuf) const header: Header = new Header( response.data.header.gtfsRealtimeVersion, response.data.header.incrementality, - response.data.header.timestamp, - ); + response.data.header.timestamp + ) const entity: Entity[] = response.data.entity.map((data: any) => { return new VehiclePositionEntity( @@ -320,46 +328,41 @@ export class ResponseDataDecorator implements MetlinkHttpClientInterface { data.vehicle.trip.direction_id, data.vehicle.trip.route_id, data.vehicle.trip.schedule_relationship, - data.vehicle.trip.start_date, + data.vehicle.trip.start_date ), new VehiclePositionPosition( data.vehicle.position.bearing, data.vehicle.position.latitude, data.vehicle.position.longitude ), - new VehiclePositionVehicleId( - data.vehicle.vehicle.id - ), - data.vehicle.occupancy_status, - data.vehicle.timestamp, + new VehiclePositionVehicleId(data.vehicle.vehicle.id), + data.vehicle?.occupancy_status ?? null, + data.vehicle.timestamp ) - ); - }); + ) + }) - const body = new GtfsRtResponse( - header, - entity - ) + const body = new GtfsRtResponse(header, entity) - return Promise.resolve(body); + return Promise.resolve(body) } - public async getGtfsRtServiceAlerts(useProtoBuf: boolean = false): Promise> { - const response = await this.httpClient.getGtfsRtServiceAlerts(); + public async getGtfsRtServiceAlerts( + useProtoBuf: boolean = false + ): Promise> { + const response = + await this.httpClient.getGtfsRtServiceAlerts(useProtoBuf) const header: Header = new Header( response.data.header.gtfsRealtimeVersion, response.data.header.incrementality, - response.data.header.timestamp, - ); + response.data.header.timestamp + ) const entity: Entity[] = response.data.entity.map((data: any) => { return new Alert( data.alert.active_period.map((data: any) => { - return new ActivePeriod( - data.start, - data.end - ) + return new ActivePeriod(data.start, data.end) }), data.alert.effect, data.alert.cause, @@ -370,31 +373,29 @@ export class ResponseDataDecorator implements MetlinkHttpClientInterface { data.stop_id, data.route_id, data.route_type ?? null, - data.trip ? new ServiceAlertTrip( - data.trip.start_time, - data.trip.description, - data.trip.trip_id, - data.trip.direction_id, - data.trip.route_id, - data.trip.start_date, - ) : null - ); + data.trip + ? new ServiceAlertTrip( + data.trip.start_time, + data.trip.description, + data.trip.trip_id, + data.trip.direction_id, + data.trip.route_id, + data.trip.start_date + ) + : null + ) }), - data.alert.severity_level, + data.alert.severity_level ) - }); + }) - const body = new GtfsRtResponse( - header, - entity - ) + const body = new GtfsRtResponse(header, entity) - return Promise.resolve(body); + return Promise.resolve(body) } - public async getStopPredictions(stopId: string): Promise { - const response = await this.httpClient.getStopPredictions(stopId); + const response = await this.httpClient.getStopPredictions(stopId) return new StopPredictionResponse( response.data.farezone, @@ -405,10 +406,7 @@ export class ResponseDataDecorator implements MetlinkHttpClientInterface { departure.service_id, departure.direction, departure.operator, - new Origin( - departure.origin.stop_id, - departure.origin.name - ), + new Origin(departure.origin.stop_id, departure.origin.name), new Destination( departure.destination.stop_id, departure.destination.name @@ -428,13 +426,15 @@ export class ResponseDataDecorator implements MetlinkHttpClientInterface { departure.monitored, departure.wheelchair_accessible, departure.trip_id - ); + ) }) - ); + ) } - public async getTripCancellations(query: TripCancellationQueryInterface | null): Promise { - const response = await this.httpClient.getTripCancellations(query); + public async getTripCancellations( + query: TripCancellationQueryInterface | null + ): Promise { + const response = await this.httpClient.getTripCancellations(query) const entities: CancellationTrip[] = response.data.map((data: any) => { return new CancellationTrip( @@ -448,9 +448,9 @@ export class ResponseDataDecorator implements MetlinkHttpClientInterface { data.direction_id, data.reinstalled, data.part_cancellation - ); - }); + ) + }) - return Promise.resolve(entities); + return Promise.resolve(entities) } -} \ No newline at end of file +} diff --git a/src/Routes.ts b/src/Routes.ts index 24687ad..22ae5a5 100644 --- a/src/Routes.ts +++ b/src/Routes.ts @@ -1,63 +1,61 @@ -export class Routes -{ +export class Routes { public static getGtfsAgenciesPath(): string { - return "/gtfs/agency"; + return '/gtfs/agency' } public static getGtfsCalendarPath(): string { - return "/gtfs/calendar"; + return '/gtfs/calendar' } public static getGtfsCalendarDatesPath(): string { - return "/gtfs/calendar_dates"; + return '/gtfs/calendar_dates' } public static getGtfsFeedInfoPath(): string { - return "/gtfs/feed_info"; + return '/gtfs/feed_info' } public static getGtfsRoutesPath(): string { - return "/gtfs/routes"; + return '/gtfs/routes' } public static getGtfsStopTimesPath(): string { - return "/gtfs/stop_times"; + return '/gtfs/stop_times' } public static getGtfsShapesPath(): string { - return "/gtfs/shapes"; + return '/gtfs/shapes' } public static getGtfsStopsPath(): string { - return "/gtfs/stops"; + return '/gtfs/stops' } public static getGtfsTransfersPath(): string { - return "/gtfs/transfers"; + return '/gtfs/transfers' } public static getGtfsTripsPath(): string { - return "/gtfs/trips"; + return '/gtfs/trips' } public static getGtfsRtServiceAlertsPath(): string { - return "/gtfs-rt/servicealerts"; + return '/gtfs-rt/servicealerts' } public static getGtfsRtTripUpdatesPath(): string { - return "/gtfs-rt/tripupdates"; + return '/gtfs-rt/tripupdates' } public static getGtfsRtVehiclePositionsPath(): string { - return "/gtfs-rt/vehiclepositions"; + return '/gtfs-rt/vehiclepositions' } public static getTripCancellations(): string { - return "/trip-cancellations"; + return '/trip-cancellations' } public static getStopPredictions(): string { - return "/stop-predictions"; + return '/stop-predictions' } - -} \ No newline at end of file +} diff --git a/src/domain/gtfs-rt/entity/Header.ts b/src/domain/gtfs-rt/entity/Header.ts index e62ab9d..aecc4d8 100644 --- a/src/domain/gtfs-rt/entity/Header.ts +++ b/src/domain/gtfs-rt/entity/Header.ts @@ -1,30 +1,27 @@ -/** - * "header": { - * "gtfsRealtimeVersion": "2.0", - * "incrementality": 0, - * "timestamp": 1726102640 - * }, - */ export default class Header { - private readonly _gtfsRealtimeVersion: string; - private readonly _incrementality: number; - private readonly _timestamp: number; + private readonly _gtfsRealtimeVersion: string + private readonly _incrementality: number + private readonly _timestamp: number - constructor(gtfsRealtimeVersion: string, incrementality: number, timestamp: number) { - this._gtfsRealtimeVersion = gtfsRealtimeVersion; - this._incrementality = incrementality; - this._timestamp = timestamp; + constructor( + gtfsRealtimeVersion: string, + incrementality: number, + timestamp: number + ) { + this._gtfsRealtimeVersion = gtfsRealtimeVersion + this._incrementality = incrementality + this._timestamp = timestamp } get gtfsRealtimeVersion(): string { - return this._gtfsRealtimeVersion; + return this._gtfsRealtimeVersion } get incrementality(): number { - return this._incrementality; + return this._incrementality } get timestamp(): number { - return this._timestamp; + return this._timestamp } -} \ No newline at end of file +} diff --git a/src/domain/gtfs-rt/entity/Response.ts b/src/domain/gtfs-rt/entity/Response.ts index 42e1a0f..c306d5a 100644 --- a/src/domain/gtfs-rt/entity/Response.ts +++ b/src/domain/gtfs-rt/entity/Response.ts @@ -1,25 +1,24 @@ -import Header from "./Header"; -import {ResponseDTO} from "../../../Contracts"; +import Header from './Header' +import { ResponseDTO } from '../../../Contracts' export class Response implements ResponseDTO { - private readonly _header: Header; - private readonly _entity: V[]; + private readonly _header: Header + private readonly _entity: V[] constructor(header: Header, entity: V[]) { - this._header = header; - this._entity = entity; + this._header = header + this._entity = entity } get header(): Header { - return this._header; + return this._header } get entity(): V[] { - return this._entity; + return this._entity } - isCollection(): boolean { - return false; + return false } -} \ No newline at end of file +} diff --git a/src/domain/gtfs-rt/entity/service-alert/ActivePeriod.ts b/src/domain/gtfs-rt/entity/service-alert/ActivePeriod.ts index 06b0b8b..33f064d 100644 --- a/src/domain/gtfs-rt/entity/service-alert/ActivePeriod.ts +++ b/src/domain/gtfs-rt/entity/service-alert/ActivePeriod.ts @@ -1,17 +1,17 @@ export class ActivePeriod { - private readonly _start: number; - private readonly _end: number; + private readonly _start: number + private readonly _end: number constructor(start: number, end: number) { - this._start = start; - this._end = end; + this._start = start + this._end = end } get start(): number { - return this._start; + return this._start } get end(): number { - return this._end; + return this._end } -} \ No newline at end of file +} diff --git a/src/domain/gtfs-rt/entity/service-alert/Alert.ts b/src/domain/gtfs-rt/entity/service-alert/Alert.ts index 1dab8b7..82dece3 100644 --- a/src/domain/gtfs-rt/entity/service-alert/Alert.ts +++ b/src/domain/gtfs-rt/entity/service-alert/Alert.ts @@ -1,15 +1,14 @@ -import {ActivePeriod} from "./ActivePeriod"; -import {InformedEntity} from "./InformedEntity"; +import { ActivePeriod } from './ActivePeriod' +import { InformedEntity } from './InformedEntity' export default class Alert { - private readonly _activePeriod: ActivePeriod[]; - private readonly _effect: string; - private readonly _cause: string; - private readonly _descriptionText: object; - private readonly _headerText: object; - private readonly _informedEntity: InformedEntity[]; - private readonly _severityLevel: string; - + private readonly _activePeriod: ActivePeriod[] + private readonly _effect: string + private readonly _cause: string + private readonly _descriptionText: object + private readonly _headerText: object + private readonly _informedEntity: InformedEntity[] + private readonly _severityLevel: string constructor( activePeriod: ActivePeriod[], @@ -20,40 +19,40 @@ export default class Alert { informedEntity: InformedEntity[], severityLevel: string ) { - this._activePeriod = activePeriod; - this._effect = effect; - this._cause = cause; - this._descriptionText = descriptionText; - this._headerText = headerText; - this._informedEntity = informedEntity; - this._severityLevel = severityLevel; + this._activePeriod = activePeriod + this._effect = effect + this._cause = cause + this._descriptionText = descriptionText + this._headerText = headerText + this._informedEntity = informedEntity + this._severityLevel = severityLevel } get activePeriod(): ActivePeriod[] { - return this._activePeriod; + return this._activePeriod } get effect(): string { - return this._effect; + return this._effect } get cause(): string { - return this._cause; + return this._cause } get descriptionText(): object { - return this._descriptionText; + return this._descriptionText } get headerText(): object { - return this._headerText; + return this._headerText } get informedEntity(): InformedEntity[] { - return this._informedEntity; + return this._informedEntity } get severityLevel(): string { - return this._severityLevel; + return this._severityLevel } -} \ No newline at end of file +} diff --git a/src/domain/gtfs-rt/entity/service-alert/Entity.ts b/src/domain/gtfs-rt/entity/service-alert/Entity.ts index 6a3a332..a7e7d80 100644 --- a/src/domain/gtfs-rt/entity/service-alert/Entity.ts +++ b/src/domain/gtfs-rt/entity/service-alert/Entity.ts @@ -1,25 +1,25 @@ -import Alert from "./Alert"; +import Alert from './Alert' export class Entity { - private readonly _id: string; - private readonly _alert: Alert; - private readonly _timestamp: string; + private readonly _id: string + private readonly _alert: Alert + private readonly _timestamp: string constructor(id: string, alert: Alert, timestamp: string) { - this._id = id; - this._alert = alert; - this._timestamp = timestamp; + this._id = id + this._alert = alert + this._timestamp = timestamp } get id(): string { - return this._id; + return this._id } get alert(): Alert { - return this._alert; + return this._alert } get timestamp(): string { - return this._timestamp; + return this._timestamp } -} \ No newline at end of file +} diff --git a/src/domain/gtfs-rt/entity/service-alert/InformedEntity.ts b/src/domain/gtfs-rt/entity/service-alert/InformedEntity.ts index a0c5345..0df9784 100644 --- a/src/domain/gtfs-rt/entity/service-alert/InformedEntity.ts +++ b/src/domain/gtfs-rt/entity/service-alert/InformedEntity.ts @@ -1,10 +1,10 @@ -import {Trip} from "./Trip"; +import { Trip } from './Trip' export class InformedEntity { - private readonly _routeId: string; - private readonly _routeType: number; - private readonly _stopId: string | null; - private readonly _trip: Trip | null; + private readonly _routeId: string + private readonly _routeType: number + private readonly _stopId: string | null + private readonly _trip: Trip | null constructor( routeId: string, @@ -12,25 +12,25 @@ export class InformedEntity { stopId: string | null, trip: Trip | null ) { - this._routeId = routeId; - this._routeType = routeType; - this._stopId = stopId; - this._trip = trip; + this._routeId = routeId + this._routeType = routeType + this._stopId = stopId + this._trip = trip } get routeId(): string { - return this._routeId; + return this._routeId } get routeType(): number { - return this._routeType; + return this._routeType } get stopId(): string | null { - return this._stopId; + return this._stopId } get trip(): Trip | null { - return this._trip; + return this._trip } -} \ No newline at end of file +} diff --git a/src/domain/gtfs-rt/entity/service-alert/Trip.ts b/src/domain/gtfs-rt/entity/service-alert/Trip.ts index a892fb3..ecaa0ac 100644 --- a/src/domain/gtfs-rt/entity/service-alert/Trip.ts +++ b/src/domain/gtfs-rt/entity/service-alert/Trip.ts @@ -1,11 +1,10 @@ -export class Trip -{ - private readonly _startTime:string; - private readonly _description:string; - private readonly _tripId:string; - private readonly _directionId:number; - private readonly _routeId:number; - private readonly _startDate:string; +export class Trip { + private readonly _startTime: string + private readonly _description: string + private readonly _tripId: string + private readonly _directionId: number + private readonly _routeId: number + private readonly _startDate: string constructor( startTime: string, @@ -15,35 +14,35 @@ export class Trip routeId: number, startId: string ) { - this._startTime = startTime; - this._description = description; - this._tripId = tripId; - this._directionId = directionId; - this._routeId = routeId; - this._startDate = startId; + this._startTime = startTime + this._description = description + this._tripId = tripId + this._directionId = directionId + this._routeId = routeId + this._startDate = startId } get startTime(): string { - return this._startTime; + return this._startTime } get description(): string { - return this._description; + return this._description } get tripId(): string { - return this._tripId; + return this._tripId } get directionId(): number { - return this._directionId; + return this._directionId } get routeId(): number { - return this._routeId; + return this._routeId } get startDate(): string { - return this._startDate; + return this._startDate } -} \ No newline at end of file +} diff --git a/src/domain/gtfs-rt/entity/trip-update/Arrival.ts b/src/domain/gtfs-rt/entity/trip-update/Arrival.ts index cf07b00..0a67795 100644 --- a/src/domain/gtfs-rt/entity/trip-update/Arrival.ts +++ b/src/domain/gtfs-rt/entity/trip-update/Arrival.ts @@ -1,18 +1,17 @@ -export class Arrival -{ - private readonly _delay: number; - private readonly _time: number; +export class Arrival { + private readonly _delay: number + private readonly _time: number constructor(delay: number, time: number) { - this._delay = delay; - this._time = time; + this._delay = delay + this._time = time } get delay(): number { - return this._delay; + return this._delay } get time(): number { - return this._time; + return this._time } -} \ No newline at end of file +} diff --git a/src/domain/gtfs-rt/entity/trip-update/Entity.ts b/src/domain/gtfs-rt/entity/trip-update/Entity.ts index cf13910..0c8aaf2 100644 --- a/src/domain/gtfs-rt/entity/trip-update/Entity.ts +++ b/src/domain/gtfs-rt/entity/trip-update/Entity.ts @@ -1,20 +1,19 @@ -import {TripUpdate} from "./TripUpdate"; +import { TripUpdate } from './TripUpdate' -export class Entity -{ - private readonly _id: string; - private readonly _tripUpdate: TripUpdate; +export class Entity { + private readonly _id: string + private readonly _tripUpdate: TripUpdate constructor(id: string, tripUpdate: TripUpdate) { - this._id = id; - this._tripUpdate = tripUpdate; + this._id = id + this._tripUpdate = tripUpdate } get id(): string { - return this._id; + return this._id } get tripUpdate(): TripUpdate { - return this._tripUpdate; + return this._tripUpdate } -} \ No newline at end of file +} diff --git a/src/domain/gtfs-rt/entity/trip-update/StopTimeUpdate.ts b/src/domain/gtfs-rt/entity/trip-update/StopTimeUpdate.ts index 8a3bcb1..287ae1e 100644 --- a/src/domain/gtfs-rt/entity/trip-update/StopTimeUpdate.ts +++ b/src/domain/gtfs-rt/entity/trip-update/StopTimeUpdate.ts @@ -1,11 +1,10 @@ -import {Arrival} from "./Arrival"; +import { Arrival } from './Arrival' -export class StopTimeUpdate -{ - private readonly _scheduleRelationship: number; - private readonly _stopSequence: number; - private readonly _stopId: string; - private readonly _arrival: Arrival; +export class StopTimeUpdate { + private readonly _scheduleRelationship: number + private readonly _stopSequence: number + private readonly _stopId: string + private readonly _arrival: Arrival constructor( scheduleRelationship: number, @@ -13,25 +12,25 @@ export class StopTimeUpdate arrival: Arrival, stopId: string ) { - this._scheduleRelationship = scheduleRelationship; - this._stopSequence = stopSequence; - this._arrival = arrival; - this._stopId = stopId; + this._scheduleRelationship = scheduleRelationship + this._stopSequence = stopSequence + this._arrival = arrival + this._stopId = stopId } get scheduleRelationship(): number { - return this._scheduleRelationship; + return this._scheduleRelationship } get stopSequence(): number { - return this._stopSequence; + return this._stopSequence } get stopId(): string { - return this._stopId; + return this._stopId } get arrival(): Arrival { - return this._arrival; + return this._arrival } -} \ No newline at end of file +} diff --git a/src/domain/gtfs-rt/entity/trip-update/Trip.ts b/src/domain/gtfs-rt/entity/trip-update/Trip.ts index 6379e7f..7644f1d 100644 --- a/src/domain/gtfs-rt/entity/trip-update/Trip.ts +++ b/src/domain/gtfs-rt/entity/trip-update/Trip.ts @@ -1,10 +1,10 @@ export class Trip { - private readonly _startTime: string; - private readonly _tripId: string; - private readonly _directionId: number; - private readonly _routeId: number; - private readonly _scheduleRelationship: number; - private readonly _startDate: string; + private readonly _startTime: string + private readonly _tripId: string + private readonly _directionId: number + private readonly _routeId: number + private readonly _scheduleRelationship: number + private readonly _startDate: string constructor( startTime: string, @@ -14,35 +14,35 @@ export class Trip { scheduleRelationship: number, startDate: string ) { - this._startTime = startTime; - this._tripId = tripId; - this._directionId = directionId; - this._routeId = routeId; - this._scheduleRelationship = scheduleRelationship; - this._startDate = startDate; + this._startTime = startTime + this._tripId = tripId + this._directionId = directionId + this._routeId = routeId + this._scheduleRelationship = scheduleRelationship + this._startDate = startDate } get startTime(): string { - return this._startTime; + return this._startTime } get tripId(): string { - return this._tripId; + return this._tripId } get directionId(): number { - return this._directionId; + return this._directionId } get routeId(): number { - return this._routeId; + return this._routeId } get scheduleRelationship(): number { - return this._scheduleRelationship; + return this._scheduleRelationship } get startDate(): string { - return this._startDate; + return this._startDate } -} \ No newline at end of file +} diff --git a/src/domain/gtfs-rt/entity/trip-update/TripUpdate.ts b/src/domain/gtfs-rt/entity/trip-update/TripUpdate.ts index 6b245b3..d955561 100644 --- a/src/domain/gtfs-rt/entity/trip-update/TripUpdate.ts +++ b/src/domain/gtfs-rt/entity/trip-update/TripUpdate.ts @@ -1,12 +1,12 @@ -import {StopTimeUpdate} from "./StopTimeUpdate"; -import {Trip} from "./Trip"; -import {VehicleId} from "./VehicleId"; +import { StopTimeUpdate } from './StopTimeUpdate' +import { Trip } from './Trip' +import { VehicleId } from './VehicleId' export class TripUpdate { - private readonly _stopTimeUpdate: StopTimeUpdate; - private readonly _trip: Trip; - private readonly _vehicle: VehicleId; - private readonly _timestamp: number; + private readonly _stopTimeUpdate: StopTimeUpdate + private readonly _trip: Trip + private readonly _vehicle: VehicleId + private readonly _timestamp: number constructor( stopTimeUpdate: StopTimeUpdate, @@ -14,25 +14,25 @@ export class TripUpdate { vehicle: VehicleId, timestamp: number ) { - this._stopTimeUpdate = stopTimeUpdate; - this._trip = trip; - this._vehicle = vehicle; - this._timestamp = timestamp; + this._stopTimeUpdate = stopTimeUpdate + this._trip = trip + this._vehicle = vehicle + this._timestamp = timestamp } get stopTimeUpdate(): StopTimeUpdate { - return this._stopTimeUpdate; + return this._stopTimeUpdate } get trip(): Trip { - return this._trip; + return this._trip } get vehicle(): VehicleId { - return this._vehicle; + return this._vehicle } get timestamp(): number { - return this._timestamp; + return this._timestamp } -} \ No newline at end of file +} diff --git a/src/domain/gtfs-rt/entity/trip-update/VehicleId.ts b/src/domain/gtfs-rt/entity/trip-update/VehicleId.ts index bbe9020..8da609b 100644 --- a/src/domain/gtfs-rt/entity/trip-update/VehicleId.ts +++ b/src/domain/gtfs-rt/entity/trip-update/VehicleId.ts @@ -1,11 +1,11 @@ export class VehicleId { - private readonly _id:string; + private readonly _id: string constructor(id: string) { - this._id = id; + this._id = id } get id(): string { - return this._id; + return this._id } -} \ No newline at end of file +} diff --git a/src/domain/gtfs-rt/entity/vehicle-positions/Entity.ts b/src/domain/gtfs-rt/entity/vehicle-positions/Entity.ts index 2679e8a..1ae4832 100644 --- a/src/domain/gtfs-rt/entity/vehicle-positions/Entity.ts +++ b/src/domain/gtfs-rt/entity/vehicle-positions/Entity.ts @@ -1,19 +1,19 @@ -import {Vehicle} from "./Vehicle"; +import { Vehicle } from './Vehicle' export class Entity { - private readonly _id: string; - private readonly _vehicle: Vehicle; + private readonly _id: string + private readonly _vehicle: Vehicle constructor(id: string, vehicle: Vehicle) { - this._id = id; - this._vehicle = vehicle; + this._id = id + this._vehicle = vehicle } get id(): string { - return this._id; + return this._id } get vehicle(): Vehicle { - return this._vehicle; + return this._vehicle } -} \ No newline at end of file +} diff --git a/src/domain/gtfs-rt/entity/vehicle-positions/Position.ts b/src/domain/gtfs-rt/entity/vehicle-positions/Position.ts index 2cb3895..8dd7c73 100644 --- a/src/domain/gtfs-rt/entity/vehicle-positions/Position.ts +++ b/src/domain/gtfs-rt/entity/vehicle-positions/Position.ts @@ -1,24 +1,23 @@ - export class Position { - private readonly _bearing: number; - private readonly _latitude: number; - private readonly _longitude: number; + private readonly _bearing: number + private readonly _latitude: number + private readonly _longitude: number constructor(bearing: number, latitude: number, longitude: number) { - this._bearing = bearing; - this._latitude = latitude; - this._longitude = longitude; + this._bearing = bearing + this._latitude = latitude + this._longitude = longitude } get bearing(): number { - return this._bearing; + return this._bearing } get latitude(): number { - return this._latitude; + return this._latitude } get longitude(): number { - return this._longitude; + return this._longitude } -} \ No newline at end of file +} diff --git a/src/domain/gtfs-rt/entity/vehicle-positions/Trip.ts b/src/domain/gtfs-rt/entity/vehicle-positions/Trip.ts index 3f3a7bf..7644f1d 100644 --- a/src/domain/gtfs-rt/entity/vehicle-positions/Trip.ts +++ b/src/domain/gtfs-rt/entity/vehicle-positions/Trip.ts @@ -1,11 +1,10 @@ - export class Trip { - private readonly _startTime: string; - private readonly _tripId: string; - private readonly _directionId: number; - private readonly _routeId: number; - private readonly _scheduleRelationship: number; - private readonly _startDate: string; + private readonly _startTime: string + private readonly _tripId: string + private readonly _directionId: number + private readonly _routeId: number + private readonly _scheduleRelationship: number + private readonly _startDate: string constructor( startTime: string, @@ -15,36 +14,35 @@ export class Trip { scheduleRelationship: number, startDate: string ) { - this._startTime = startTime; - this._tripId = tripId; - this._directionId = directionId; - this._routeId = routeId; - this._scheduleRelationship = scheduleRelationship; - this._startDate = startDate; + this._startTime = startTime + this._tripId = tripId + this._directionId = directionId + this._routeId = routeId + this._scheduleRelationship = scheduleRelationship + this._startDate = startDate } - get startTime(): string { - return this._startTime; + return this._startTime } get tripId(): string { - return this._tripId; + return this._tripId } get directionId(): number { - return this._directionId; + return this._directionId } get routeId(): number { - return this._routeId; + return this._routeId } get scheduleRelationship(): number { - return this._scheduleRelationship; + return this._scheduleRelationship } get startDate(): string { - return this._startDate; + return this._startDate } -} \ No newline at end of file +} diff --git a/src/domain/gtfs-rt/entity/vehicle-positions/Vehicle.ts b/src/domain/gtfs-rt/entity/vehicle-positions/Vehicle.ts index 1bde4e7..10cf62b 100644 --- a/src/domain/gtfs-rt/entity/vehicle-positions/Vehicle.ts +++ b/src/domain/gtfs-rt/entity/vehicle-positions/Vehicle.ts @@ -1,45 +1,45 @@ -import {VehicleId} from "./VehicleId"; -import {Position} from "./Position"; -import {Trip} from "./Trip"; +import { VehicleId } from './VehicleId' +import { Position } from './Position' +import { Trip } from './Trip' export class Vehicle { - private readonly _trip: Trip; - private readonly _position: Position; - private readonly _vehicle: VehicleId; - private readonly _occupancyStatus: number; - private readonly _timestamp: number; + private readonly _trip: Trip + private readonly _position: Position + private readonly _vehicle: VehicleId + private readonly _occupancyStatus: number | null + private readonly _timestamp: number constructor( trip: Trip, position: Position, vehicle: VehicleId, - occupancyStatus: number, + occupancyStatus: number | null, timestamp: number ) { - this._trip = trip; - this._position = position; - this._vehicle = vehicle; - this._occupancyStatus = occupancyStatus; - this._timestamp = timestamp; + this._trip = trip + this._position = position + this._vehicle = vehicle + this._occupancyStatus = occupancyStatus + this._timestamp = timestamp } get trip(): Trip { - return this._trip; + return this._trip } get position(): Position { - return this._position; + return this._position } get vehicle(): VehicleId { - return this._vehicle; + return this._vehicle } - get occupancyStatus(): number { - return this._occupancyStatus; + get occupancyStatus(): number | null { + return this._occupancyStatus } get timestamp(): number { - return this._timestamp; + return this._timestamp } -} \ No newline at end of file +} diff --git a/src/domain/gtfs-rt/entity/vehicle-positions/VehicleId.ts b/src/domain/gtfs-rt/entity/vehicle-positions/VehicleId.ts index bbe9020..8da609b 100644 --- a/src/domain/gtfs-rt/entity/vehicle-positions/VehicleId.ts +++ b/src/domain/gtfs-rt/entity/vehicle-positions/VehicleId.ts @@ -1,11 +1,11 @@ export class VehicleId { - private readonly _id:string; + private readonly _id: string constructor(id: string) { - this._id = id; + this._id = id } get id(): string { - return this._id; + return this._id } -} \ No newline at end of file +} diff --git a/src/domain/gtfs/entity/Agency.ts b/src/domain/gtfs/entity/Agency.ts index 998a5b3..358590d 100644 --- a/src/domain/gtfs/entity/Agency.ts +++ b/src/domain/gtfs/entity/Agency.ts @@ -1,14 +1,14 @@ -import {Entity} from "../../../Contracts"; +import { Entity } from '../../../Contracts' export class Agency extends Entity { - private readonly _id: number; - private readonly _agencyId: string; - private readonly _agencyName: string; - private readonly _agencyTimeZone: string; - private readonly _agencyUrl: string; - private readonly _agencyLang: string; - private readonly _agencyPhone: string; - private readonly _agencyFareUrl: string; + private readonly _id: number + private readonly _agencyId: string + private readonly _agencyName: string + private readonly _agencyTimeZone: string + private readonly _agencyUrl: string + private readonly _agencyLang: string + private readonly _agencyPhone: string + private readonly _agencyFareUrl: string constructor( id: number, @@ -20,46 +20,46 @@ export class Agency extends Entity { agencyPhone: string, agencyFareUrl: string ) { - super(); - this._id = id; - this._agencyId = agencyId; - this._agencyName = agencyName; - this._agencyTimeZone = agencyTimeZone; - this._agencyUrl = agencyUrl; - this._agencyLang = agencyLang; - this._agencyPhone = agencyPhone; - this._agencyFareUrl = agencyFareUrl; + super() + this._id = id + this._agencyId = agencyId + this._agencyName = agencyName + this._agencyTimeZone = agencyTimeZone + this._agencyUrl = agencyUrl + this._agencyLang = agencyLang + this._agencyPhone = agencyPhone + this._agencyFareUrl = agencyFareUrl } get id(): number { - return this._id; + return this._id } get agencyId(): string { - return this._agencyId; + return this._agencyId } get agencyName(): string { - return this._agencyName; + return this._agencyName } get agencyTimeZone(): string { - return this._agencyTimeZone; + return this._agencyTimeZone } get agencyUrl(): string { - return this._agencyUrl; + return this._agencyUrl } get agencyLang(): string { - return this._agencyLang; + return this._agencyLang } get agencyPhone(): string { - return this._agencyPhone; + return this._agencyPhone } get agencyFareUrl(): string { - return this._agencyFareUrl; + return this._agencyFareUrl } -} \ No newline at end of file +} diff --git a/src/domain/gtfs/entity/Calendar.ts b/src/domain/gtfs/entity/Calendar.ts index e6841c0..48712a2 100644 --- a/src/domain/gtfs/entity/Calendar.ts +++ b/src/domain/gtfs/entity/Calendar.ts @@ -1,17 +1,17 @@ -import {Entity} from "../../../Contracts"; +import { Entity } from '../../../Contracts' export class Calendar extends Entity { - private readonly _id: number; - private readonly _serviceId: string; - private readonly _monday: number; - private readonly _tuesday: number; - private readonly _wednesday: number; - private readonly _thursday: number; - private readonly _friday: number; - private readonly _saturday: number; - private readonly _sunday: number; - private readonly _startDate: string; - private readonly _endDate: string; + private readonly _id: number + private readonly _serviceId: string + private readonly _monday: number + private readonly _tuesday: number + private readonly _wednesday: number + private readonly _thursday: number + private readonly _friday: number + private readonly _saturday: number + private readonly _sunday: number + private readonly _startDate: string + private readonly _endDate: string constructor( id: number, @@ -26,61 +26,61 @@ export class Calendar extends Entity { startDate: string, endDate: string ) { - super(); - this._id = id; - this._serviceId = serviceId; - this._monday = monday; - this._tuesday = tuesday; - this._wednesday = wednesday; - this._thursday = thursday; - this._friday = friday; - this._saturday = saturday; - this._sunday = sunday; - this._startDate = startDate; - this._endDate = endDate; + super() + this._id = id + this._serviceId = serviceId + this._monday = monday + this._tuesday = tuesday + this._wednesday = wednesday + this._thursday = thursday + this._friday = friday + this._saturday = saturday + this._sunday = sunday + this._startDate = startDate + this._endDate = endDate } get id(): number { - return this._id; + return this._id } get serviceId(): string { - return this._serviceId; + return this._serviceId } get monday(): number { - return this._monday; + return this._monday } get tuesday(): number { - return this._tuesday; + return this._tuesday } get wednesday(): number { - return this._wednesday; + return this._wednesday } get thursday(): number { - return this._thursday; + return this._thursday } get friday(): number { - return this._friday; + return this._friday } get saturday(): number { - return this._saturday; + return this._saturday } get sunday(): number { - return this._sunday; + return this._sunday } get startDate(): string { - return this._startDate; + return this._startDate } get endDate(): string { - return this._endDate; + return this._endDate } -} \ No newline at end of file +} diff --git a/src/domain/gtfs/entity/CalendarDate.ts b/src/domain/gtfs/entity/CalendarDate.ts index 4f2fbe8..7de34a7 100644 --- a/src/domain/gtfs/entity/CalendarDate.ts +++ b/src/domain/gtfs/entity/CalendarDate.ts @@ -1,32 +1,37 @@ -import {Entity} from "../../../Contracts"; +import { Entity } from '../../../Contracts' export class CalendarDate extends Entity { - private readonly _id: number; - private readonly _serviceId: string; - private readonly _date: string; - private readonly _exceptionType: number; + private readonly _id: number + private readonly _serviceId: string + private readonly _date: string + private readonly _exceptionType: number - constructor(id: number, serviceId: string, date: string, exceptionType: number) { - super(); - this._id = id; - this._serviceId = serviceId; - this._date = date; - this._exceptionType = exceptionType; + constructor( + id: number, + serviceId: string, + date: string, + exceptionType: number + ) { + super() + this._id = id + this._serviceId = serviceId + this._date = date + this._exceptionType = exceptionType } get id(): number { - return this._id; + return this._id } get serviceId(): string { - return this._serviceId; + return this._serviceId } get date(): string { - return this._date; + return this._date } get exceptionType(): number { - return this._exceptionType; + return this._exceptionType } -} \ No newline at end of file +} diff --git a/src/domain/gtfs/entity/Feed.ts b/src/domain/gtfs/entity/Feed.ts index f2ba673..2ca54bf 100644 --- a/src/domain/gtfs/entity/Feed.ts +++ b/src/domain/gtfs/entity/Feed.ts @@ -1,13 +1,13 @@ -import {Entity} from "../../../Contracts"; +import { Entity } from '../../../Contracts' export class Feed extends Entity { - private readonly _id: number; - private readonly _feedPublisherName: string; - private readonly _feedPublisherUrl: string; - private readonly _feedLang: string; - private readonly _feedStartDate: string; - private readonly _feedEndDate: string; - private readonly _feedVersion: string; + private readonly _id: number + private readonly _feedPublisherName: string + private readonly _feedPublisherUrl: string + private readonly _feedLang: string + private readonly _feedStartDate: string + private readonly _feedEndDate: string + private readonly _feedVersion: string constructor( id: number, @@ -18,41 +18,41 @@ export class Feed extends Entity { feedEndDate: string, feedVersion: string ) { - super(); - this._id = id; - this._feedPublisherName = feedPublisherName; - this._feedPublisherUrl = feedPublisherUrl; - this._feedLang = feedLang; - this._feedStartDate = feedStartDate; - this._feedEndDate = feedEndDate; - this._feedVersion = feedVersion; + super() + this._id = id + this._feedPublisherName = feedPublisherName + this._feedPublisherUrl = feedPublisherUrl + this._feedLang = feedLang + this._feedStartDate = feedStartDate + this._feedEndDate = feedEndDate + this._feedVersion = feedVersion } get id(): number { - return this._id; + return this._id } get feedPublisherName(): string { - return this._feedPublisherName; + return this._feedPublisherName } get feedPublisherUrl(): string { - return this._feedPublisherUrl; + return this._feedPublisherUrl } get feedLang(): string { - return this._feedLang; + return this._feedLang } get feedStartDate(): string { - return this._feedStartDate; + return this._feedStartDate } get feedEndDate(): string { - return this._feedEndDate; + return this._feedEndDate } get feedVersion(): string { - return this._feedVersion; + return this._feedVersion } -} \ No newline at end of file +} diff --git a/src/domain/gtfs/entity/Route.ts b/src/domain/gtfs/entity/Route.ts index b5155a8..8b5a446 100644 --- a/src/domain/gtfs/entity/Route.ts +++ b/src/domain/gtfs/entity/Route.ts @@ -1,74 +1,86 @@ -import {Entity} from "../../../Contracts"; +import { Entity } from '../../../Contracts' export class Route extends Entity { - private readonly _id: number; - private readonly _routeId: string; - private readonly _agencyId: string; - private readonly _routeShortName: string; - private readonly _routeLongName: string; - private readonly _routeDesc: string; - private readonly _routeType: number; - private readonly _routeColor: string; - private readonly _routeTextColor: string; - private readonly _routeUrl: string; - private readonly _routeSortOrder: number; + private readonly _id: number + private readonly _routeId: string + private readonly _agencyId: string + private readonly _routeShortName: string + private readonly _routeLongName: string + private readonly _routeDesc: string + private readonly _routeType: number + private readonly _routeColor: string + private readonly _routeTextColor: string + private readonly _routeUrl: string + private readonly _routeSortOrder: number - constructor(id: number, routeId: string, agencyId: string, routeShortName: string, routeLongName: string, routeDesc: string, routeType: number, routeColor: string, routeTextColor: string, routeUrl: string, routeSortOrder: number) { - super(); - this._id = id; - this._routeId = routeId; - this._agencyId = agencyId; - this._routeShortName = routeShortName; - this._routeLongName = routeLongName; - this._routeDesc = routeDesc; - this._routeType = routeType; - this._routeColor = routeColor; - this._routeTextColor = routeTextColor; - this._routeUrl = routeUrl; - this._routeSortOrder = routeSortOrder; + constructor( + id: number, + routeId: string, + agencyId: string, + routeShortName: string, + routeLongName: string, + routeDesc: string, + routeType: number, + routeColor: string, + routeTextColor: string, + routeUrl: string, + routeSortOrder: number + ) { + super() + this._id = id + this._routeId = routeId + this._agencyId = agencyId + this._routeShortName = routeShortName + this._routeLongName = routeLongName + this._routeDesc = routeDesc + this._routeType = routeType + this._routeColor = routeColor + this._routeTextColor = routeTextColor + this._routeUrl = routeUrl + this._routeSortOrder = routeSortOrder } get id(): number { - return this._id; + return this._id } get routeId(): string { - return this._routeId; + return this._routeId } get agencyId(): string { - return this._agencyId; + return this._agencyId } get routeShortName(): string { - return this._routeShortName; + return this._routeShortName } get routeLongName(): string { - return this._routeLongName; + return this._routeLongName } get routeDesc(): string { - return this._routeDesc; + return this._routeDesc } get routeType(): number { - return this._routeType; + return this._routeType } get routeColor(): string { - return this._routeColor; + return this._routeColor } get routeTextColor(): string { - return this._routeTextColor; + return this._routeTextColor } get routeUrl(): string { - return this._routeUrl; + return this._routeUrl } get routeSortOrder(): number { - return this._routeSortOrder; + return this._routeSortOrder } -} \ No newline at end of file +} diff --git a/src/domain/gtfs/entity/ServiceWeeklySchedule.ts b/src/domain/gtfs/entity/ServiceWeeklySchedule.ts index e1d0efe..504c5fe 100644 --- a/src/domain/gtfs/entity/ServiceWeeklySchedule.ts +++ b/src/domain/gtfs/entity/ServiceWeeklySchedule.ts @@ -1,17 +1,17 @@ -import {Entity} from "../../../Contracts"; +import { Entity } from '../../../Contracts' export class ServiceWeeklySchedule extends Entity { - private readonly _id: number; - private readonly _serviceId: string; - private readonly _monday: number; - private readonly _tuesday: number; - private readonly _wednesday: number; - private readonly _thursday: number; - private readonly _friday: number; - private readonly _saturday: number; - private readonly _sunday: number; - private readonly _startDate: string; - private readonly _endDate: string; + private readonly _id: number + private readonly _serviceId: string + private readonly _monday: number + private readonly _tuesday: number + private readonly _wednesday: number + private readonly _thursday: number + private readonly _friday: number + private readonly _saturday: number + private readonly _sunday: number + private readonly _startDate: string + private readonly _endDate: string constructor( id: number, @@ -26,61 +26,61 @@ export class ServiceWeeklySchedule extends Entity { startDate: string, endDate: string ) { - super(); - this._id = id; - this._serviceId = serviceId; - this._monday = monday; - this._tuesday = tuesday; - this._wednesday = wednesday; - this._thursday = thursday; - this._friday = friday; - this._saturday = saturday; - this._sunday = sunday; - this._startDate = startDate; - this._endDate = endDate; + super() + this._id = id + this._serviceId = serviceId + this._monday = monday + this._tuesday = tuesday + this._wednesday = wednesday + this._thursday = thursday + this._friday = friday + this._saturday = saturday + this._sunday = sunday + this._startDate = startDate + this._endDate = endDate } get id(): number { - return this._id; + return this._id } get serviceId(): string { - return this._serviceId; + return this._serviceId } get monday(): number { - return this._monday; + return this._monday } get tuesday(): number { - return this._tuesday; + return this._tuesday } get wednesday(): number { - return this._wednesday; + return this._wednesday } get thursday(): number { - return this._thursday; + return this._thursday } get friday(): number { - return this._friday; + return this._friday } get saturday(): number { - return this._saturday; + return this._saturday } get sunday(): number { - return this._sunday; + return this._sunday } get startDate(): string { - return this._startDate; + return this._startDate } get endDate(): string { - return this._endDate; + return this._endDate } -} \ No newline at end of file +} diff --git a/src/domain/gtfs/entity/Shape.ts b/src/domain/gtfs/entity/Shape.ts index 82db7bb..b9d7f81 100644 --- a/src/domain/gtfs/entity/Shape.ts +++ b/src/domain/gtfs/entity/Shape.ts @@ -1,44 +1,51 @@ -import {Entity} from "../../../Contracts"; +import { Entity } from '../../../Contracts' export class Shape extends Entity { - private readonly _id: number; - private readonly _shapeId: string; - private readonly _shapePtLat: number; - private readonly _shapePtLon: number; - private readonly _shapePtSequence: number; - private readonly _shapeDistTraveled: number; - - constructor(id: number, shapeId: string, shapePtLat: number, shapePtLon: number, shapePtSequence: number, shapeDistTraveled: number) { - super(); - this._id = id; - this._shapeId = shapeId; - this._shapePtLat = shapePtLat; - this._shapePtLon = shapePtLon; - this._shapePtSequence = shapePtSequence; - this._shapeDistTraveled = shapeDistTraveled; + private readonly _id: number + private readonly _shapeId: string + private readonly _shapePtLat: number + private readonly _shapePtLon: number + private readonly _shapePtSequence: number + private readonly _shapeDistTraveled: number + + constructor( + id: number, + shapeId: string, + shapePtLat: number, + shapePtLon: number, + shapePtSequence: number, + shapeDistTraveled: number + ) { + super() + this._id = id + this._shapeId = shapeId + this._shapePtLat = shapePtLat + this._shapePtLon = shapePtLon + this._shapePtSequence = shapePtSequence + this._shapeDistTraveled = shapeDistTraveled } get id(): number { - return this._id; + return this._id } get shapeId(): string { - return this._shapeId; + return this._shapeId } get shapePtLat(): number { - return this._shapePtLat; + return this._shapePtLat } get shapePtLon(): number { - return this._shapePtLon; + return this._shapePtLon } get shapePtSequence(): number { - return this._shapePtSequence; + return this._shapePtSequence } get shapeDistTraveled(): number { - return this._shapeDistTraveled; + return this._shapeDistTraveled } -} \ No newline at end of file +} diff --git a/src/domain/gtfs/entity/Stop.ts b/src/domain/gtfs/entity/Stop.ts index 2a3555a..1c663da 100644 --- a/src/domain/gtfs/entity/Stop.ts +++ b/src/domain/gtfs/entity/Stop.ts @@ -1,18 +1,18 @@ -import {Entity} from "../../../Contracts"; +import { Entity } from '../../../Contracts' export class Stop extends Entity { - private readonly _id: number; - private readonly _stopId: string; - private readonly _stopCode: string; - private readonly _stopName: string; - private readonly _stopDesc: string; - private readonly _zoneId: string; - private readonly _stopLat: number; - private readonly _stopLon: number; - private readonly _locationType: number; - private readonly _parentStation: string; - private readonly _stopUrl: string; - private readonly _stopTimezone: string; + private readonly _id: number + private readonly _stopId: string + private readonly _stopCode: string + private readonly _stopName: string + private readonly _stopDesc: string + private readonly _zoneId: string + private readonly _stopLat: number + private readonly _stopLon: number + private readonly _locationType: number + private readonly _parentStation: string + private readonly _stopUrl: string + private readonly _stopTimezone: string constructor( id: number, @@ -28,66 +28,66 @@ export class Stop extends Entity { stopUrl: string, stopTimezone: string ) { - super(); - this._id = id; - this._stopId = stopId; - this._stopCode = stopCode; - this._stopName = stopName; - this._stopDesc = stopDesc; - this._zoneId = zoneId; - this._stopLat = stopLat; - this._stopLon = stopLon; - this._locationType = locationType; - this._parentStation = parentStation; - this._stopUrl = stopUrl; - this._stopTimezone = stopTimezone; + super() + this._id = id + this._stopId = stopId + this._stopCode = stopCode + this._stopName = stopName + this._stopDesc = stopDesc + this._zoneId = zoneId + this._stopLat = stopLat + this._stopLon = stopLon + this._locationType = locationType + this._parentStation = parentStation + this._stopUrl = stopUrl + this._stopTimezone = stopTimezone } get id(): number { - return this._id; + return this._id } get stopId(): string { - return this._stopId; + return this._stopId } get stopCode(): string { - return this._stopCode; + return this._stopCode } get stopName(): string { - return this._stopName; + return this._stopName } get stopDesc(): string { - return this._stopDesc; + return this._stopDesc } get zoneId(): string { - return this._zoneId; + return this._zoneId } get stopLat(): number { - return this._stopLat; + return this._stopLat } get stopLon(): number { - return this._stopLon; + return this._stopLon } get locationType(): number { - return this._locationType; + return this._locationType } get parentStation(): string { - return this._parentStation; + return this._parentStation } get stopUrl(): string { - return this._stopUrl; + return this._stopUrl } get stopTimezone(): string { - return this._stopTimezone; + return this._stopTimezone } -} \ No newline at end of file +} diff --git a/src/domain/gtfs/entity/StopTime.ts b/src/domain/gtfs/entity/StopTime.ts index 8079800..397210a 100644 --- a/src/domain/gtfs/entity/StopTime.ts +++ b/src/domain/gtfs/entity/StopTime.ts @@ -1,17 +1,17 @@ -import {Entity} from "../../../Contracts"; +import { Entity } from '../../../Contracts' export class StopTime extends Entity { - private readonly _id: number; - private readonly _tripId: string; - private readonly _arrivalTime: string; - private readonly _departureTime: string; - private readonly _stopId: string; - private readonly _stopSequence: number; - private readonly _shapeDistTraveled: number; - private readonly _stopHeadSign: string; - private readonly _pickupType: number; - private readonly _dropOffType: number; - private readonly _timepoint: string; + private readonly _id: number + private readonly _tripId: string + private readonly _arrivalTime: string + private readonly _departureTime: string + private readonly _stopId: string + private readonly _stopSequence: number + private readonly _shapeDistTraveled: number + private readonly _stopHeadSign: string + private readonly _pickupType: number + private readonly _dropOffType: number + private readonly _timepoint: string constructor( id: number, @@ -26,61 +26,61 @@ export class StopTime extends Entity { dropOffType: number, timepoint: string ) { - super(); - this._id = id; - this._tripId = tripId; - this._arrivalTime = arrivalTime; - this._departureTime = departureTime; - this._stopId = stopId; - this._stopSequence = stopSequence; - this._shapeDistTraveled = shapeDistTraveled; - this._stopHeadSign = stopHeadSign; - this._pickupType = pickupType; - this._dropOffType = dropOffType; - this._timepoint = timepoint; + super() + this._id = id + this._tripId = tripId + this._arrivalTime = arrivalTime + this._departureTime = departureTime + this._stopId = stopId + this._stopSequence = stopSequence + this._shapeDistTraveled = shapeDistTraveled + this._stopHeadSign = stopHeadSign + this._pickupType = pickupType + this._dropOffType = dropOffType + this._timepoint = timepoint } get id(): number { - return this._id; + return this._id } get tripId(): string { - return this._tripId; + return this._tripId } get arrivalTime(): string { - return this._arrivalTime; + return this._arrivalTime } get departureTime(): string { - return this._departureTime; + return this._departureTime } get stopId(): string { - return this._stopId; + return this._stopId } get stopSequence(): number { - return this._stopSequence; + return this._stopSequence } get shapeDistTraveled(): number { - return this._shapeDistTraveled; + return this._shapeDistTraveled } get stopHeadSign(): string { - return this._stopHeadSign; + return this._stopHeadSign } get pickupType(): number { - return this._pickupType; + return this._pickupType } get dropOffType(): number { - return this._dropOffType; + return this._dropOffType } get timepoint(): string { - return this._timepoint; + return this._timepoint } -} \ No newline at end of file +} diff --git a/src/domain/gtfs/entity/Transfer.ts b/src/domain/gtfs/entity/Transfer.ts index 2c4cc9c..195d882 100644 --- a/src/domain/gtfs/entity/Transfer.ts +++ b/src/domain/gtfs/entity/Transfer.ts @@ -1,14 +1,13 @@ -import {Entity} from "../../../Contracts"; +import { Entity } from '../../../Contracts' export class Transfer extends Entity { - private readonly _id: number; - private readonly _fromStopId: string; - private readonly _toStopId: string; - private readonly _transferType: string; - private readonly _minTransferTime: string; - private readonly _fromTripId: string; - private readonly _toTripId: string; - + private readonly _id: number + private readonly _fromStopId: string + private readonly _toStopId: string + private readonly _transferType: string + private readonly _minTransferTime: string + private readonly _fromTripId: string + private readonly _toTripId: string constructor( id: number, @@ -19,42 +18,41 @@ export class Transfer extends Entity { fromTripId: string, toTripId: string ) { - super(); - this._id = id; - this._fromStopId = fromStopId; - this._toStopId = toStopId; - this._transferType = transferType; - this._minTransferTime = minTransferTime; - this._fromTripId = fromTripId; - this._toTripId = toTripId; + super() + this._id = id + this._fromStopId = fromStopId + this._toStopId = toStopId + this._transferType = transferType + this._minTransferTime = minTransferTime + this._fromTripId = fromTripId + this._toTripId = toTripId } - get id(): number { - return this._id; + return this._id } get fromStopId(): string { - return this._fromStopId; + return this._fromStopId } get toStopId(): string { - return this._toStopId; + return this._toStopId } get transferType(): string { - return this._transferType; + return this._transferType } get minTransferTime(): string { - return this._minTransferTime; + return this._minTransferTime } get fromTripId(): string { - return this._fromTripId; + return this._fromTripId } get toTripId(): string { - return this._toTripId; + return this._toTripId } -} \ No newline at end of file +} diff --git a/src/domain/gtfs/entity/Trip.ts b/src/domain/gtfs/entity/Trip.ts index e853355..79a2204 100644 --- a/src/domain/gtfs/entity/Trip.ts +++ b/src/domain/gtfs/entity/Trip.ts @@ -1,19 +1,18 @@ -import {Entity} from "../../../Contracts"; +import { Entity } from '../../../Contracts' export class Trip extends Entity { - private readonly _id: number; - private readonly _routeId: number; - private readonly _serviceId: string; - private readonly _tripId: string; - private readonly _tripHeadSign: string; - private readonly _directionId: number; - private readonly _blockId: string; - private readonly _shapeId: string; - private readonly _wheelChairAccessible: number; - private readonly _bikesAllowed: number; - private readonly _originStopId: null | number; - private readonly _destinationStopId: null | number; - + private readonly _id: number + private readonly _routeId: number + private readonly _serviceId: string + private readonly _tripId: string + private readonly _tripHeadSign: string + private readonly _directionId: number + private readonly _blockId: string + private readonly _shapeId: string + private readonly _wheelChairAccessible: number + private readonly _bikesAllowed: number + private readonly _originStopId: null | number + private readonly _destinationStopId: null | number constructor( id: number, @@ -29,66 +28,66 @@ export class Trip extends Entity { originStopId: number | null, destinationStopId: number | null ) { - super(); - this._id = id; - this._routeId = routeId; - this._serviceId = serviceId; - this._tripId = tripId; - this._tripHeadSign = tripHeadSign; - this._directionId = directionId; - this._blockId = blockId; - this._shapeId = shapeId; - this._wheelChairAccessible = wheelChairAccessible; - this._bikesAllowed = bikesAllowed; - this._originStopId = originStopId; - this._destinationStopId = destinationStopId; + super() + this._id = id + this._routeId = routeId + this._serviceId = serviceId + this._tripId = tripId + this._tripHeadSign = tripHeadSign + this._directionId = directionId + this._blockId = blockId + this._shapeId = shapeId + this._wheelChairAccessible = wheelChairAccessible + this._bikesAllowed = bikesAllowed + this._originStopId = originStopId + this._destinationStopId = destinationStopId } get id(): number { - return this._id; + return this._id } get routeId(): number { - return this._routeId; + return this._routeId } get serviceId(): string { - return this._serviceId; + return this._serviceId } get tripId(): string { - return this._tripId; + return this._tripId } get tripHeadSign(): string { - return this._tripHeadSign; + return this._tripHeadSign } get directionId(): number { - return this._directionId; + return this._directionId } get blockId(): string { - return this._blockId; + return this._blockId } get shapeId(): string { - return this._shapeId; + return this._shapeId } get wheelChairAccessible(): number { - return this._wheelChairAccessible; + return this._wheelChairAccessible } get bikesAllowed(): number { - return this._bikesAllowed; + return this._bikesAllowed } get originStopId(): number | null { - return this._originStopId; + return this._originStopId } get destinationStopId(): number | null { - return this._destinationStopId; + return this._destinationStopId } -} \ No newline at end of file +} diff --git a/src/domain/httpclient/AxiosAdapter.ts b/src/domain/httpclient/AxiosAdapter.ts index 5c61402..8b3c086 100644 --- a/src/domain/httpclient/AxiosAdapter.ts +++ b/src/domain/httpclient/AxiosAdapter.ts @@ -1,16 +1,16 @@ -import {HttpClientInterface} from "./HttpClientInterface"; -import AxiosInstance = Axios.AxiosInstance; -import IPromise = Axios.IPromise; -import AxiosXHR = Axios.AxiosXHR; +import { HttpClientInterface } from './HttpClientInterface' +import AxiosInstance = Axios.AxiosInstance +import IPromise = Axios.IPromise +import AxiosXHR = Axios.AxiosXHR export class AxiosAdapter implements HttpClientInterface { - private readonly axios: AxiosInstance; + private readonly axios: AxiosInstance constructor(axios: AxiosInstance) { - this.axios = axios; + this.axios = axios } public async get(path: string): Promise>> { - return this.axios.get(path); + return this.axios.get(path) } -} \ No newline at end of file +} diff --git a/src/domain/httpclient/HttpClientInterface.ts b/src/domain/httpclient/HttpClientInterface.ts index c7aa3ba..7bad26a 100644 --- a/src/domain/httpclient/HttpClientInterface.ts +++ b/src/domain/httpclient/HttpClientInterface.ts @@ -1,3 +1,3 @@ export interface HttpClientInterface { - get(path: string): Promise; -} \ No newline at end of file + get(path: string): Promise +} diff --git a/src/domain/stop-departure-prediction/Arrival.ts b/src/domain/stop-departure-prediction/Arrival.ts index ee57d86..edc2754 100644 --- a/src/domain/stop-departure-prediction/Arrival.ts +++ b/src/domain/stop-departure-prediction/Arrival.ts @@ -1,18 +1,17 @@ -export class Arrival -{ - private readonly _aimed: string; - private readonly _expected: string; +export class Arrival { + private readonly _aimed: string + private readonly _expected: string constructor(aimed: string, expected: string) { - this._aimed = aimed; - this._expected = expected; + this._aimed = aimed + this._expected = expected } get aimed(): string { - return this._aimed; + return this._aimed } get expected(): string { - return this._expected; + return this._expected } -} \ No newline at end of file +} diff --git a/src/domain/stop-departure-prediction/Departure.ts b/src/domain/stop-departure-prediction/Departure.ts index b4a96cd..4f97ec5 100644 --- a/src/domain/stop-departure-prediction/Departure.ts +++ b/src/domain/stop-departure-prediction/Departure.ts @@ -1,18 +1,17 @@ -export class Departure -{ - private readonly _aimed: string; - private readonly _expected: string; +export class Departure { + private readonly _aimed: string + private readonly _expected: string constructor(aimed: string, expected: string) { - this._aimed = aimed; - this._expected = expected; + this._aimed = aimed + this._expected = expected } get aimed(): string { - return this._aimed; + return this._aimed } get expected(): string { - return this._expected; + return this._expected } -} \ No newline at end of file +} diff --git a/src/domain/stop-departure-prediction/Destination.ts b/src/domain/stop-departure-prediction/Destination.ts index e0ccf10..1d926f5 100644 --- a/src/domain/stop-departure-prediction/Destination.ts +++ b/src/domain/stop-departure-prediction/Destination.ts @@ -1,18 +1,17 @@ -export class Destination -{ - private readonly _stopId: string; - private readonly _name: string; +export class Destination { + private readonly _stopId: string + private readonly _name: string constructor(stopId: string, name: string) { - this._stopId = stopId; - this._name = name; + this._stopId = stopId + this._name = name } get stopId(): string { - return this._stopId; + return this._stopId } get name(): string { - return this._name; + return this._name } -} \ No newline at end of file +} diff --git a/src/domain/stop-departure-prediction/Entity.ts b/src/domain/stop-departure-prediction/Entity.ts index 36b7ec3..b39d6b1 100644 --- a/src/domain/stop-departure-prediction/Entity.ts +++ b/src/domain/stop-departure-prediction/Entity.ts @@ -1,7 +1,7 @@ -import {Origin} from "./Origin"; -import {Destination} from "./Destination"; -import {Arrival} from "./Arrival"; -import {Departure} from "./Departure"; +import { Origin } from './Origin' +import { Destination } from './Destination' +import { Arrival } from './Arrival' +import { Departure } from './Departure' /** * "stop_id": "5515", @@ -33,21 +33,21 @@ import {Departure} from "./Departure"; * "trip_id": "2__0__231__NBM__67__1__67__1_20240825" */ export class Entity { - private readonly _stopId: string; - private readonly _serviceId: string; - private readonly _direction: string; - private readonly _operator: string; - private readonly _origin: Origin; - private readonly _destination: Destination; - private readonly _delay: string; - private readonly _vehicleId: string; - private readonly _name: string; - private readonly _arrival: Arrival; - private readonly _departure: Departure; - private readonly _status: string; - private readonly _monitored: boolean; - private readonly _wheelChairAccessible: boolean; - private readonly _tripId: string; + private readonly _stopId: string + private readonly _serviceId: string + private readonly _direction: string + private readonly _operator: string + private readonly _origin: Origin + private readonly _destination: Destination + private readonly _delay: string + private readonly _vehicleId: string + private readonly _name: string + private readonly _arrival: Arrival + private readonly _departure: Departure + private readonly _status: string + private readonly _monitored: boolean + private readonly _wheelChairAccessible: boolean + private readonly _tripId: string constructor( stopId: string, @@ -66,80 +66,80 @@ export class Entity { wheelChairAccessible: boolean, tripId: string ) { - this._stopId = stopId; - this._serviceId = serviceId; - this._direction = direction; - this._operator = operator; - this._origin = origin; - this._destination = destination; - this._delay = delay; - this._vehicleId = vehicleId; - this._name = name; - this._arrival = arrival; - this._departure = departure; - this._status = status; - this._monitored = monitored; - this._wheelChairAccessible = wheelChairAccessible; - this._tripId = tripId; + this._stopId = stopId + this._serviceId = serviceId + this._direction = direction + this._operator = operator + this._origin = origin + this._destination = destination + this._delay = delay + this._vehicleId = vehicleId + this._name = name + this._arrival = arrival + this._departure = departure + this._status = status + this._monitored = monitored + this._wheelChairAccessible = wheelChairAccessible + this._tripId = tripId } get stopId(): string { - return this._stopId; + return this._stopId } get serviceId(): string { - return this._serviceId; + return this._serviceId } get direction(): string { - return this._direction; + return this._direction } get operator(): string { - return this._operator; + return this._operator } get origin(): Origin { - return this._origin; + return this._origin } get destination(): Destination { - return this._destination; + return this._destination } get delay(): string { - return this._delay; + return this._delay } get vehicleId(): string { - return this._vehicleId; + return this._vehicleId } get name(): string { - return this._name; + return this._name } get arrival(): Arrival { - return this._arrival; + return this._arrival } get departure(): Departure { - return this._departure; + return this._departure } get status(): string { - return this._status; + return this._status } get monitored(): boolean { - return this._monitored; + return this._monitored } get wheelChairAccessible(): boolean { - return this._wheelChairAccessible; + return this._wheelChairAccessible } get tripId(): string { - return this._tripId; + return this._tripId } -} \ No newline at end of file +} diff --git a/src/domain/stop-departure-prediction/Origin.ts b/src/domain/stop-departure-prediction/Origin.ts index 586c07a..80fea07 100644 --- a/src/domain/stop-departure-prediction/Origin.ts +++ b/src/domain/stop-departure-prediction/Origin.ts @@ -1,18 +1,17 @@ -export class Origin -{ - private readonly _stopId: string; - private readonly _name: string; +export class Origin { + private readonly _stopId: string + private readonly _name: string constructor(stopId: string, name: string) { - this._stopId = stopId; - this._name = name; + this._stopId = stopId + this._name = name } get stopId(): string { - return this._stopId; + return this._stopId } get name(): string { - return this._name; + return this._name } -} \ No newline at end of file +} diff --git a/src/domain/stop-departure-prediction/Response.ts b/src/domain/stop-departure-prediction/Response.ts index 9061fc3..7e79c8a 100644 --- a/src/domain/stop-departure-prediction/Response.ts +++ b/src/domain/stop-departure-prediction/Response.ts @@ -1,31 +1,30 @@ -import {ResponseDTO} from "../../Contracts"; -import {Entity} from "./Entity"; +import { ResponseDTO } from '../../Contracts' +import { Entity } from './Entity' export class Response implements ResponseDTO { - - private readonly _fareZone: number; - private readonly _closed: boolean; - private readonly _departures: Entity[]; + private readonly _fareZone: number + private readonly _closed: boolean + private readonly _departures: Entity[] constructor(fareZone: number, closed: boolean, departures: Entity[]) { - this._fareZone = fareZone; - this._closed = closed; - this._departures = departures; + this._fareZone = fareZone + this._closed = closed + this._departures = departures } get fareZone(): number { - return this._fareZone; + return this._fareZone } get closed(): boolean { - return this._closed; + return this._closed } get departures(): Entity[] { - return this._departures; + return this._departures } isCollection(): boolean { - return false; + return false } -} \ No newline at end of file +} diff --git a/src/domain/trip-cancellation/Query.ts b/src/domain/trip-cancellation/Query.ts index 41b5621..41e01f0 100644 --- a/src/domain/trip-cancellation/Query.ts +++ b/src/domain/trip-cancellation/Query.ts @@ -1,94 +1,94 @@ -import {TripCancellationQueryInterface} from "../../Contracts"; +import { TripCancellationQueryInterface } from '../../Contracts' export class Query implements TripCancellationQueryInterface { - private _dateUpdated: string | null = null; - private _dateUpdatedMax: string | null = null; - private _reinstated: string | null = null; - private _dateStart: string | null = null; - private _dateEnd: string | null = null; - private _partCancellation: string | null = null; - private _dateCreated: string | null = null; - private _routeId: string | null = null; - private _tripId: string | null = null; - private _dateCratedMax: string | null = null; + private _dateUpdated: string | null = null + private _dateUpdatedMax: string | null = null + private _reinstated: string | null = null + private _dateStart: string | null = null + private _dateEnd: string | null = null + private _partCancellation: string | null = null + private _dateCreated: string | null = null + private _routeId: string | null = null + private _tripId: string | null = null + private _dateCratedMax: string | null = null get dateUpdated(): string | null { - return this._dateUpdated; + return this._dateUpdated } set dateUpdated(value: string | null) { - this._dateUpdated = value; + this._dateUpdated = value } get dateUpdatedMax(): string | null { - return this._dateUpdatedMax; + return this._dateUpdatedMax } set dateUpdatedMax(value: string | null) { - this._dateUpdatedMax = value; + this._dateUpdatedMax = value } get reinstated(): string | null { - return this._reinstated; + return this._reinstated } set reinstated(value: string | null) { - this._reinstated = value; + this._reinstated = value } get dateStart(): string | null { - return this._dateStart; + return this._dateStart } set dateStart(value: string | null) { - this._dateStart = value; + this._dateStart = value } get dateEnd(): string | null { - return this._dateEnd; + return this._dateEnd } set dateEnd(value: string | null) { - this._dateEnd = value; + this._dateEnd = value } get partCancellation(): string | null { - return this._partCancellation; + return this._partCancellation } set partCancellation(value: string | null) { - this._partCancellation = value; + this._partCancellation = value } get dateCreated(): string | null { - return this._dateCreated; + return this._dateCreated } set dateCreated(value: string | null) { - this._dateCreated = value; + this._dateCreated = value } get routeId(): string | null { - return this._routeId; + return this._routeId } set routeId(value: string | null) { - this._routeId = value; + this._routeId = value } get tripId(): string | null { - return this._tripId; + return this._tripId } set tripId(value: string | null) { - this._tripId = value; + this._tripId = value } get dateCreatedMax(): string | null { - return this._dateCratedMax; + return this._dateCratedMax } set dateCreatedMax(value: string | null) { - this._dateCratedMax = value; + this._dateCratedMax = value } -} \ No newline at end of file +} diff --git a/src/domain/trip-cancellation/Trip.ts b/src/domain/trip-cancellation/Trip.ts index f21151d..f67a849 100644 --- a/src/domain/trip-cancellation/Trip.ts +++ b/src/domain/trip-cancellation/Trip.ts @@ -11,16 +11,16 @@ * "part_cancellation": 0 */ export class Trip { - private readonly _id: string; - private readonly _dateCreated: string; - private readonly _dateUpdated: string; - private readonly _tripId: string; - private readonly _routeId: number; - private readonly _tripDateStart: string; - private readonly _tripDateEnd: string; - private readonly _directionId: number; - private readonly _reinstalled: number; - private readonly _partCancellation: number; + private readonly _id: string + private readonly _dateCreated: string + private readonly _dateUpdated: string + private readonly _tripId: string + private readonly _routeId: number + private readonly _tripDateStart: string + private readonly _tripDateEnd: string + private readonly _directionId: number + private readonly _reinstalled: number + private readonly _partCancellation: number constructor( id: string, @@ -34,55 +34,55 @@ export class Trip { reinstalled: number, partCancellation: number ) { - this._id = id; - this._dateCreated = dateCreated; - this._dateUpdated = dateUpdated; - this._tripId = tripId; - this._routeId = routeId; - this._tripDateStart = tripDateStart; - this._tripDateEnd = tripDateEnd; - this._directionId = directionId; - this._reinstalled = reinstalled; - this._partCancellation = partCancellation; + this._id = id + this._dateCreated = dateCreated + this._dateUpdated = dateUpdated + this._tripId = tripId + this._routeId = routeId + this._tripDateStart = tripDateStart + this._tripDateEnd = tripDateEnd + this._directionId = directionId + this._reinstalled = reinstalled + this._partCancellation = partCancellation } get id(): string { - return this._id; + return this._id } get dateCreated(): string { - return this._dateCreated; + return this._dateCreated } get dateUpdated(): string { - return this._dateUpdated; + return this._dateUpdated } get tripId(): string { - return this._tripId; + return this._tripId } get routeId(): number { - return this._routeId; + return this._routeId } get tripDateStart(): string { - return this._tripDateStart; + return this._tripDateStart } get tripDateEnd(): string { - return this._tripDateEnd; + return this._tripDateEnd } get directionId(): number { - return this._directionId; + return this._directionId } get reinstalled(): number { - return this._reinstalled; + return this._reinstalled } get partCancellation(): number { - return this._partCancellation; + return this._partCancellation } -} \ No newline at end of file +} diff --git a/tests/SchemaValidator.ts b/tests/SchemaValidator.ts index e290056..c6adcd3 100644 --- a/tests/SchemaValidator.ts +++ b/tests/SchemaValidator.ts @@ -1,16 +1,13 @@ -import Ajv from "ajv"; +import Ajv from 'ajv' export class SchemaValidator { - public static validate(data: any, schema: {}): { - isValid: boolean | PromiseLike; - errors: any, - } { - const ajv = new Ajv(); + public static validate(data: object, schema: object) { + const ajv = new Ajv() const validate = ajv.compile(schema) return { isValid: validate(data), - errors: validate.errors + errors: validate.errors, } } -} \ No newline at end of file +} diff --git a/tests/integration/MetlinkHttpClient/Gtfs-rt/ServiceAlerts.test.ts b/tests/integration/MetlinkHttpClient/Gtfs-rt/ServiceAlerts.test.ts index f08cbcc..cec1f0e 100644 --- a/tests/integration/MetlinkHttpClient/Gtfs-rt/ServiceAlerts.test.ts +++ b/tests/integration/MetlinkHttpClient/Gtfs-rt/ServiceAlerts.test.ts @@ -1,168 +1,193 @@ -import {MetlinkHttpClientBuilder} from "../../../../src/MetlinkHttpClientBuilder"; -import {SchemaValidator} from "../../../SchemaValidator"; -import {MetlinkHttpClientInterface} from "../../../../src/Contracts"; +import { MetlinkHttpClientBuilder } from '../../../../src/MetlinkHttpClientBuilder' +import { SchemaValidator } from '../../../SchemaValidator' +import { MetlinkHttpClientInterface } from '../../../../src/Contracts' -describe("Integration: Metlink Http Client: Service Alerts", () => { - - function getSchema(): {} { +describe('Integration: Metlink Http Client: Service Alerts', () => { + function getSchema(): object { return { - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "object", - "properties": { - "header": { - "type": "object", - "properties": { - "gtfsRealtimeVersion": { - "type": "string" + $schema: 'http://json-schema.org/draft-07/schema#', + type: 'object', + properties: { + header: { + type: 'object', + properties: { + gtfsRealtimeVersion: { + type: 'string', + }, + incrementality: { + type: 'integer', }, - "incrementality": { - "type": "integer" + timestamp: { + type: 'integer', }, - "timestamp": { - "type": "integer" - } }, - "required": ["gtfsRealtimeVersion", "incrementality", "timestamp"] + required: [ + 'gtfsRealtimeVersion', + 'incrementality', + 'timestamp', + ], }, - "entity": { - "type": "array", - "items": { - "type": "object", - "properties": { - "alert": { - "type": "object", - "properties": { - "active_period": { - "type": "array", - "items": { - "type": "object", - "properties": { - "start": { - "type": "integer" + entity: { + type: 'array', + items: { + type: 'object', + properties: { + alert: { + type: 'object', + properties: { + active_period: { + type: 'array', + items: { + type: 'object', + properties: { + start: { + type: 'integer', + }, + end: { + type: 'integer', }, - "end": { - "type": "integer" - } }, - "required": ["start", "end"] - } + required: ['start', 'end'], + }, }, - "effect": { - "type": "string" + effect: { + type: 'string', }, - "cause": { - "type": "string" + cause: { + type: 'string', }, - "description_text": { - "type": "object", - "properties": { - "translation": { - "type": "array", - "items": { - "type": "object", - "properties": { - "language": { - "type": "string" + description_text: { + type: 'object', + properties: { + translation: { + type: 'array', + items: { + type: 'object', + properties: { + language: { + type: 'string', + }, + text: { + type: 'string', }, - "text": { - "type": "string" - } }, - "required": ["language", "text"] - } - } + required: [ + 'language', + 'text', + ], + }, + }, }, - "required": ["translation"] + required: ['translation'], }, - "header_text": { - "type": "object", - "properties": { - "translation": { - "type": "array", - "items": { - "type": "object", - "properties": { - "language": { - "type": "string" + header_text: { + type: 'object', + properties: { + translation: { + type: 'array', + items: { + type: 'object', + properties: { + language: { + type: 'string', + }, + text: { + type: 'string', }, - "text": { - "type": "string" - } }, - "required": ["language", "text"] - } - } + required: [ + 'language', + 'text', + ], + }, + }, }, - "required": ["translation"] + required: ['translation'], }, - "informed_entity": { - "type": "array", - "items": { - "type": "object", - "properties": { - "route_id": { - "type": "string" + informed_entity: { + type: 'array', + items: { + type: 'object', + properties: { + route_id: { + type: 'string', }, - "route_type": { - "type": "integer" + route_type: { + type: 'integer', }, - "trip": { - "type": "object", - "properties": { - "start_time": { - "type": "string" + trip: { + type: 'object', + properties: { + start_time: { + type: 'string', + }, + description: { + type: 'string', }, - "description": { - "type": "string" + trip_id: { + type: 'string', }, - "trip_id": { - "type": "string" + direction_id: { + type: 'integer', }, - "direction_id": { - "type": "integer" + route_id: { + type: 'number', }, - "route_id": { - "type": "number" + start_date: { + type: 'string', }, - "start_date": { - "type": "string" - } }, - "required": ["start_time", "description", "trip_id", "direction_id", "route_id", "start_date"] - } + required: [ + 'start_time', + 'description', + 'trip_id', + 'direction_id', + 'route_id', + 'start_date', + ], + }, }, - } + }, + }, + severity_level: { + type: 'string', }, - "severity_level": { - "type": "string" - } }, - "required": ["active_period", "effect", "cause", "description_text", "header_text", "informed_entity", "severity_level"] + required: [ + 'active_period', + 'effect', + 'cause', + 'description_text', + 'header_text', + 'informed_entity', + 'severity_level', + ], + }, + id: { + type: 'string', }, - "id": { - "type": "string" + timestamp: { + type: 'string', }, - "timestamp": { - "type": "string" - } }, - "required": ["alert", "id", "timestamp"] - } - } + required: ['alert', 'id', 'timestamp'], + }, + }, }, - "required": ["header", "entity"] + required: ['header', 'entity'], } } function getMetlinkToken(): string { - return process.env.METLINK_TOKEN || ""; + return process.env.METLINK_TOKEN || '' } - test("getGtfsTrips", async () => { - const client: MetlinkHttpClientInterface = MetlinkHttpClientBuilder.buildWithAxios(getMetlinkToken()) - const response = await client.getGtfsRtServiceAlerts(); - const result = SchemaValidator.validate(response.data, getSchema()); + test('getGtfsTrips', async () => { + const client: MetlinkHttpClientInterface = + MetlinkHttpClientBuilder.buildWithAxios(getMetlinkToken()) + const response = await client.getGtfsRtServiceAlerts() + const result = SchemaValidator.validate(response.data, getSchema()) - expect(result.isValid).toBeTruthy(); - }); -}); \ No newline at end of file + expect(result.isValid).toBeTruthy() + }) +}) diff --git a/tests/integration/MetlinkHttpClient/Gtfs-rt/TripUpdates.test.ts b/tests/integration/MetlinkHttpClient/Gtfs-rt/TripUpdates.test.ts index a876993..c1b2561 100644 --- a/tests/integration/MetlinkHttpClient/Gtfs-rt/TripUpdates.test.ts +++ b/tests/integration/MetlinkHttpClient/Gtfs-rt/TripUpdates.test.ts @@ -1,123 +1,140 @@ -import {MetlinkHttpClientBuilder} from "../../../../src/MetlinkHttpClientBuilder"; -import {SchemaValidator} from "../../../SchemaValidator"; -import {MetlinkHttpClientInterface} from "../../../../src/Contracts"; +import { MetlinkHttpClientBuilder } from '../../../../src/MetlinkHttpClientBuilder' +import { SchemaValidator } from '../../../SchemaValidator' +import { MetlinkHttpClientInterface } from '../../../../src/Contracts' -describe("Integration: Metlink Http Client: Trip Updates", () => { - - function getSchema(): {} { +describe('Integration: Metlink Http Client: Trip Updates', () => { + function getSchema(): object { return { - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "object", - "properties": { - "header": { - "type": "object", - "properties": { - "gtfsRealtimeVersion": { - "type": "string" + $schema: 'http://json-schema.org/draft-07/schema#', + type: 'object', + properties: { + header: { + type: 'object', + properties: { + gtfsRealtimeVersion: { + type: 'string', + }, + incrementality: { + type: 'integer', }, - "incrementality": { - "type": "integer" + timestamp: { + type: 'integer', }, - "timestamp": { - "type": "integer" - } }, - "required": ["gtfsRealtimeVersion", "incrementality", "timestamp"] + required: [ + 'gtfsRealtimeVersion', + 'incrementality', + 'timestamp', + ], }, - "entity": { - "type": "array", - "items": { - "type": "object", - "properties": { - "trip_update": { - "type": "object", - "properties": { - "stop_time_update": { - "type": "object", - "properties": { - "schedule_relationship": { - "type": "integer" + entity: { + type: 'array', + items: { + type: 'object', + properties: { + trip_update: { + type: 'object', + properties: { + stop_time_update: { + type: 'object', + properties: { + schedule_relationship: { + type: 'integer', }, - "stop_sequence": { - "type": "integer" + stop_sequence: { + type: 'integer', }, - "arrival": { - "type": "object", - "properties": { - "delay": { - "type": "integer" + arrival: { + type: 'object', + properties: { + delay: { + type: 'integer', + }, + time: { + type: 'integer', }, - "time": { - "type": "integer" - } }, - "required": ["delay", "time"] + required: ['delay', 'time'], + }, + stop_id: { + type: 'string', }, - "stop_id": { - "type": "string" - } }, - "required": ["stop_sequence", "arrival", "stop_id"] + required: [ + 'stop_sequence', + 'arrival', + 'stop_id', + ], }, - "trip": { - "type": "object", - "properties": { - "start_time": { - "type": "string" + trip: { + type: 'object', + properties: { + start_time: { + type: 'string', + }, + trip_id: { + type: 'string', }, - "trip_id": { - "type": "string" + direction_id: { + type: 'integer', }, - "direction_id": { - "type": "integer" + schedule_relationship: { + type: 'integer', }, - "schedule_relationship": { - "type": "integer" + start_date: { + type: 'string', }, - "start_date": { - "type": "string" - } }, - "required": ["trip_id", "direction_id", "schedule_relationship", "start_date"] + required: [ + 'trip_id', + 'direction_id', + 'schedule_relationship', + 'start_date', + ], }, - "vehicle": { - "type": "object", - "properties": { - "id": { - "type": "string" - } + vehicle: { + type: 'object', + properties: { + id: { + type: 'string', + }, }, - "required": ["id"] + required: ['id'], + }, + timestamp: { + type: 'integer', }, - "timestamp": { - "type": "integer" - } }, - "required": ["stop_time_update", "trip", "vehicle", "timestamp"] + required: [ + 'stop_time_update', + 'trip', + 'vehicle', + 'timestamp', + ], + }, + id: { + type: 'string', }, - "id": { - "type": "string" - } }, - "required": ["trip_update", "id"] - } - } + required: ['trip_update', 'id'], + }, + }, }, - "required": ["header", "entity"] + required: ['header', 'entity'], } } - function getMetlinkToken(): string - { - return process.env.METLINK_TOKEN || ""; + function getMetlinkToken(): string { + return process.env.METLINK_TOKEN || '' } - test("getGtfsRtTripUpdates", async () => { - const client: MetlinkHttpClientInterface = MetlinkHttpClientBuilder.buildWithAxios(getMetlinkToken()) - const response = await client.getGtfsRtTripUpdates(); + test('getGtfsRtTripUpdates', async () => { + const client: MetlinkHttpClientInterface = + MetlinkHttpClientBuilder.buildWithAxios(getMetlinkToken()) + const response = await client.getGtfsRtTripUpdates() - const result = SchemaValidator.validate(response.data, getSchema()); + const result = SchemaValidator.validate(response.data, getSchema()) - expect(result.isValid).toBeTruthy(); - }); -}); \ No newline at end of file + expect(result.isValid).toBeTruthy() + }) +}) diff --git a/tests/integration/MetlinkHttpClient/Gtfs-rt/VehiclePositions.test.ts b/tests/integration/MetlinkHttpClient/Gtfs-rt/VehiclePositions.test.ts index 51347b7..940db42 100644 --- a/tests/integration/MetlinkHttpClient/Gtfs-rt/VehiclePositions.test.ts +++ b/tests/integration/MetlinkHttpClient/Gtfs-rt/VehiclePositions.test.ts @@ -1,116 +1,135 @@ -import {MetlinkHttpClientBuilder} from "../../../../src/MetlinkHttpClientBuilder"; -import {SchemaValidator} from "../../../SchemaValidator"; -import {MetlinkHttpClientInterface} from "../../../../src/Contracts"; +import { MetlinkHttpClientBuilder } from '../../../../src/MetlinkHttpClientBuilder' +import { SchemaValidator } from '../../../SchemaValidator' +import { MetlinkHttpClientInterface } from '../../../../src/Contracts' -describe("Integration: Metlink Http Client: Vehicle Positions", () => { - - function getSchema(): {} { +describe('Integration: Metlink Http Client: Vehicle Positions', () => { + function getSchema(): object { return { - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "object", - "properties": { - "header": { - "type": "object", - "properties": { - "gtfsRealtimeVersion": { - "type": "string" + $schema: 'http://json-schema.org/draft-07/schema#', + type: 'object', + properties: { + header: { + type: 'object', + properties: { + gtfsRealtimeVersion: { + type: 'string', + }, + incrementality: { + type: 'integer', }, - "incrementality": { - "type": "integer" + timestamp: { + type: 'integer', }, - "timestamp": { - "type": "integer" - } }, - "required": ["gtfsRealtimeVersion", "incrementality", "timestamp"] + required: [ + 'gtfsRealtimeVersion', + 'incrementality', + 'timestamp', + ], }, - "entity": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string" + entity: { + type: 'array', + items: { + type: 'object', + properties: { + id: { + type: 'string', }, - "vehicle": { - "type": "object", - "properties": { - "trip": { - "type": "object", - "properties": { - "start_time": { - "type": "string" + vehicle: { + type: 'object', + properties: { + trip: { + type: 'object', + properties: { + start_time: { + type: 'string', + }, + trip_id: { + type: 'string', }, - "trip_id": { - "type": "string" + direction_id: { + type: 'integer', }, - "direction_id": { - "type": "integer" + route_id: { + type: 'integer', }, - "route_id": { - "type": "integer" + schedule_relationship: { + type: 'integer', }, - "schedule_relationship": { - "type": "integer" + start_date: { + type: 'string', }, - "start_date": { - "type": "string" - } }, - "required": ["start_time", "trip_id", "direction_id", "route_id", "schedule_relationship", "start_date"] + required: [ + 'start_time', + 'trip_id', + 'direction_id', + 'route_id', + 'schedule_relationship', + 'start_date', + ], }, - "position": { - "type": "object", - "properties": { - "bearing": { - "type": "integer" + position: { + type: 'object', + properties: { + bearing: { + type: 'integer', }, - "latitude": { - "type": "number" + latitude: { + type: 'number', + }, + longitude: { + type: 'number', }, - "longitude": { - "type": "number" - } }, - "required": ["bearing", "latitude", "longitude"] + required: [ + 'bearing', + 'latitude', + 'longitude', + ], }, - "occupancy_status": { - "type": "integer" + occupancy_status: { + type: 'integer', }, - "vehicle": { - "type": "object", - "properties": { - "id": { - "type": "string" - } + vehicle: { + type: 'object', + properties: { + id: { + type: 'string', + }, }, - "required": ["id"] + required: ['id'], + }, + timestamp: { + type: 'integer', }, - "timestamp": { - "type": "integer" - } }, - "required": ["trip", "position", "occupancy_status", "vehicle", "timestamp"] - } + required: [ + 'trip', + 'position', + 'vehicle', + 'timestamp', + ], + }, }, - "required": ["id", "vehicle"] - } - } + required: ['id', 'vehicle'], + }, + }, }, - "required": ["header", "entity"] + required: ['header', 'entity'], } } - function getMetlinkToken(): string - { - return process.env.METLINK_TOKEN || ""; + function getMetlinkToken(): string { + return process.env.METLINK_TOKEN || '' } - test("getGtfsRtVehiclePositions", async () => { - const client: MetlinkHttpClientInterface = MetlinkHttpClientBuilder.buildWithAxios(getMetlinkToken()) - const response = await client.getGtfsRtVehiclePositions(); + test('getGtfsRtVehiclePositions', async () => { + const client: MetlinkHttpClientInterface = + MetlinkHttpClientBuilder.buildWithAxios(getMetlinkToken()) + const response = await client.getGtfsRtVehiclePositions() - const result = SchemaValidator.validate(response.data, getSchema()); - expect(result.isValid).toBeTruthy(); - }); -}); \ No newline at end of file + const result = SchemaValidator.validate(response.data, getSchema()) + expect(result.isValid).toBeTruthy() + }) +}) diff --git a/tests/integration/MetlinkHttpClient/Gtfs/Agencies.test.ts b/tests/integration/MetlinkHttpClient/Gtfs/Agencies.test.ts index c5424fe..0516c78 100644 --- a/tests/integration/MetlinkHttpClient/Gtfs/Agencies.test.ts +++ b/tests/integration/MetlinkHttpClient/Gtfs/Agencies.test.ts @@ -1,48 +1,48 @@ -import {MetlinkHttpClientBuilder} from "../../../../src/MetlinkHttpClientBuilder"; -import {SchemaValidator} from "../../../SchemaValidator"; -import {MetlinkHttpClientInterface} from "../../../../src/Contracts"; +import { MetlinkHttpClientBuilder } from '../../../../src/MetlinkHttpClientBuilder' +import { SchemaValidator } from '../../../SchemaValidator' +import { MetlinkHttpClientInterface } from '../../../../src/Contracts' -describe("Integration: Metlink Http Client: Agencies", () => { - function getSchema(): {} { +describe('Integration: Metlink Http Client: Agencies', () => { + function getSchema(): object { return { - type: "array", + type: 'array', items: { - type: "object", + type: 'object', properties: { - id: {type: "integer"}, - agency_id: {type: "string"}, - agency_name: {type: "string"}, - agency_timezone: {type: "string"}, - agency_url: {type: "string"}, - agency_lang: {type: "string"}, - agency_phone: {type: "string"}, - agency_fare_url: {type: "string"}, + id: { type: 'integer' }, + agency_id: { type: 'string' }, + agency_name: { type: 'string' }, + agency_timezone: { type: 'string' }, + agency_url: { type: 'string' }, + agency_lang: { type: 'string' }, + agency_phone: { type: 'string' }, + agency_fare_url: { type: 'string' }, }, required: [ - "id", - "agency_id", - "agency_name", - "agency_timezone", - "agency_url", - "agency_lang", - "agency_phone", - "agency_fare_url" + 'id', + 'agency_id', + 'agency_name', + 'agency_timezone', + 'agency_url', + 'agency_lang', + 'agency_phone', + 'agency_fare_url', ], additionalProperties: false, }, - }; + } } - function getMetlinkToken(): string - { - return process.env.METLINK_TOKEN || ""; + function getMetlinkToken(): string { + return process.env.METLINK_TOKEN || '' } - test("getGtfsAgencies", async () => { - const client: MetlinkHttpClientInterface = MetlinkHttpClientBuilder.buildWithAxios(getMetlinkToken()) - const response = await client.getGtfsAgencies(); + test('getGtfsAgencies', async () => { + const client: MetlinkHttpClientInterface = + MetlinkHttpClientBuilder.buildWithAxios(getMetlinkToken()) + const response = await client.getGtfsAgencies() - const result = SchemaValidator.validate(response.data, getSchema()); - expect(result.isValid).toBeTruthy(); - }); -}); \ No newline at end of file + const result = SchemaValidator.validate(response.data, getSchema()) + expect(result.isValid).toBeTruthy() + }) +}) diff --git a/tests/integration/MetlinkHttpClient/Gtfs/Calendar.test.ts b/tests/integration/MetlinkHttpClient/Gtfs/Calendar.test.ts index 995c686..6b8575e 100644 --- a/tests/integration/MetlinkHttpClient/Gtfs/Calendar.test.ts +++ b/tests/integration/MetlinkHttpClient/Gtfs/Calendar.test.ts @@ -1,85 +1,85 @@ -import {MetlinkHttpClientBuilder} from "../../../../src/MetlinkHttpClientBuilder"; -import {SchemaValidator} from "../../../SchemaValidator"; -import {MetlinkHttpClientInterface} from "../../../../src/Contracts"; +import { MetlinkHttpClientBuilder } from '../../../../src/MetlinkHttpClientBuilder' +import { SchemaValidator } from '../../../SchemaValidator' +import { MetlinkHttpClientInterface } from '../../../../src/Contracts' -describe("Integration: Metlink Http Client: Calendar", () => { - function getSchema(): {} { +describe('Integration: Metlink Http Client: Calendar', () => { + function getSchema(): object { return { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "integer" + type: 'array', + items: { + type: 'object', + properties: { + id: { + type: 'integer', }, - "service_id": { - "type": "string" + service_id: { + type: 'string', }, - "monday": { - "type": "integer", - "enum": [0, 1] // Assuming 0 or 1 represent days of service (0 = no service, 1 = service) + monday: { + type: 'integer', + enum: [0, 1], // Assuming 0 or 1 represent days of service (0 = no service, 1 = service) }, - "tuesday": { - "type": "integer", - "enum": [0, 1] + tuesday: { + type: 'integer', + enum: [0, 1], }, - "wednesday": { - "type": "integer", - "enum": [0, 1] + wednesday: { + type: 'integer', + enum: [0, 1], }, - "thursday": { - "type": "integer", - "enum": [0, 1] + thursday: { + type: 'integer', + enum: [0, 1], }, - "friday": { - "type": "integer", - "enum": [0, 1] + friday: { + type: 'integer', + enum: [0, 1], }, - "saturday": { - "type": "integer", - "enum": [0, 1] + saturday: { + type: 'integer', + enum: [0, 1], }, - "sunday": { - "type": "integer", - "enum": [0, 1] + sunday: { + type: 'integer', + enum: [0, 1], }, - "start_date": { - "type": "string", - "pattern": "^\\d{8}$" // Format YYYYMMDD + start_date: { + type: 'string', + pattern: '^\\d{8}$', // Format YYYYMMDD + }, + end_date: { + type: 'string', + pattern: '^\\d{8}$', // Format YYYYMMDD }, - "end_date": { - "type": "string", - "pattern": "^\\d{8}$" // Format YYYYMMDD - } }, - "required": [ - "id", - "service_id", - "monday", - "tuesday", - "wednesday", - "thursday", - "friday", - "saturday", - "sunday", - "start_date", - "end_date" + required: [ + 'id', + 'service_id', + 'monday', + 'tuesday', + 'wednesday', + 'thursday', + 'friday', + 'saturday', + 'sunday', + 'start_date', + 'end_date', ], - "additionalProperties": false - } - }; + additionalProperties: false, + }, + } } - function getMetlinkToken(): string - { - return process.env.METLINK_TOKEN || ""; + function getMetlinkToken(): string { + return process.env.METLINK_TOKEN || '' } - test("getGtfsCalendar", async () => { - const client: MetlinkHttpClientInterface = MetlinkHttpClientBuilder.buildWithAxios(getMetlinkToken()) - const response = await client.getGtfsCalendar(); + test('getGtfsCalendar', async () => { + const client: MetlinkHttpClientInterface = + MetlinkHttpClientBuilder.buildWithAxios(getMetlinkToken()) + const response = await client.getGtfsCalendar() - const result = SchemaValidator.validate(response.data, getSchema()); - expect(result.isValid).toBeTruthy(); - }); -}); \ No newline at end of file + const result = SchemaValidator.validate(response.data, getSchema()) + expect(result.isValid).toBeTruthy() + }) +}) diff --git a/tests/integration/MetlinkHttpClient/Gtfs/CalendarDates.test.ts b/tests/integration/MetlinkHttpClient/Gtfs/CalendarDates.test.ts index e8cff27..6065ed3 100644 --- a/tests/integration/MetlinkHttpClient/Gtfs/CalendarDates.test.ts +++ b/tests/integration/MetlinkHttpClient/Gtfs/CalendarDates.test.ts @@ -1,44 +1,44 @@ -import {MetlinkHttpClientBuilder} from "../../../../src/MetlinkHttpClientBuilder"; -import {SchemaValidator} from "../../../SchemaValidator"; -import {MetlinkHttpClientInterface} from "../../../../src/Contracts"; +import { MetlinkHttpClientBuilder } from '../../../../src/MetlinkHttpClientBuilder' +import { SchemaValidator } from '../../../SchemaValidator' +import { MetlinkHttpClientInterface } from '../../../../src/Contracts' -describe("Integration: Metlink Http Client: Calendar Dates", () => { - function getSchema(): {} { +describe('Integration: Metlink Http Client: Calendar Dates', () => { + function getSchema(): object { return { - type: "array", + type: 'array', items: { - "type": "object", - "properties": { - "id": { - "type": "integer" + type: 'object', + properties: { + id: { + type: 'integer', }, - "service_id": { - "type": "string" + service_id: { + type: 'string', }, - "date": { - "type": "string", - "pattern": "^\\d{8}$" // Format YYYYMMDD + date: { + type: 'string', + pattern: '^\\d{8}$', // Format YYYYMMDD + }, + exception_type: { + type: 'integer', }, - "exception_type": { - "type": "integer", - } }, - "required": ["id", "service_id", "date", "exception_type"], - "additionalProperties": false - } - }; + required: ['id', 'service_id', 'date', 'exception_type'], + additionalProperties: false, + }, + } } - function getMetlinkToken(): string - { - return process.env.METLINK_TOKEN || ""; + function getMetlinkToken(): string { + return process.env.METLINK_TOKEN || '' } - test("getGtfsCalendarDates", async () => { - const client: MetlinkHttpClientInterface = MetlinkHttpClientBuilder.buildWithAxios(getMetlinkToken()) - const response = await client.getGtfsCalendarDates(); + test('getGtfsCalendarDates', async () => { + const client: MetlinkHttpClientInterface = + MetlinkHttpClientBuilder.buildWithAxios(getMetlinkToken()) + const response = await client.getGtfsCalendarDates() - const result = SchemaValidator.validate(response.data, getSchema()); - expect(result.isValid).toBeTruthy(); - }); -}); \ No newline at end of file + const result = SchemaValidator.validate(response.data, getSchema()) + expect(result.isValid).toBeTruthy() + }) +}) diff --git a/tests/integration/MetlinkHttpClient/Gtfs/FeedInfo.test.ts b/tests/integration/MetlinkHttpClient/Gtfs/FeedInfo.test.ts index 5d012b2..4338733 100644 --- a/tests/integration/MetlinkHttpClient/Gtfs/FeedInfo.test.ts +++ b/tests/integration/MetlinkHttpClient/Gtfs/FeedInfo.test.ts @@ -1,63 +1,62 @@ -import {MetlinkHttpClientBuilder} from "../../../../src/MetlinkHttpClientBuilder"; -import {SchemaValidator} from "../../../SchemaValidator"; -import {MetlinkHttpClientInterface} from "../../../../src/Contracts"; +import { MetlinkHttpClientBuilder } from '../../../../src/MetlinkHttpClientBuilder' +import { SchemaValidator } from '../../../SchemaValidator' +import { MetlinkHttpClientInterface } from '../../../../src/Contracts' -describe("Integration: Metlink Http Client: FeedInfo", () => { - - function getSchema(): {} { +describe('Integration: Metlink Http Client: FeedInfo', () => { + function getSchema(): object { return { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "integer" + type: 'array', + items: { + type: 'object', + properties: { + id: { + type: 'integer', + }, + feed_publisher_name: { + type: 'string', }, - "feed_publisher_name": { - "type": "string" + feed_publisher_url: { + type: 'string', }, - "feed_publisher_url": { - "type": "string", + feed_lang: { + type: 'string', }, - "feed_lang": { - "type": "string" + feed_start_date: { + type: 'string', + pattern: '^\\d{8}$', // Format YYYYMMDD }, - "feed_start_date": { - "type": "string", - "pattern": "^\\d{8}$" // Format YYYYMMDD + feed_end_date: { + type: 'string', + pattern: '^\\d{8}$', // Format YYYYMMDD }, - "feed_end_date": { - "type": "string", - "pattern": "^\\d{8}$" // Format YYYYMMDD + feed_version: { + type: 'string', }, - "feed_version": { - "type": "string" - } }, - "required": [ - "id", - "feed_publisher_name", - "feed_publisher_url", - "feed_lang", - "feed_start_date", - "feed_end_date", - "feed_version" + required: [ + 'id', + 'feed_publisher_name', + 'feed_publisher_url', + 'feed_lang', + 'feed_start_date', + 'feed_end_date', + 'feed_version', ], - "additionalProperties": false - } - }; + additionalProperties: false, + }, + } } - function getMetlinkToken(): string - { - return process.env.METLINK_TOKEN || ""; + function getMetlinkToken(): string { + return process.env.METLINK_TOKEN || '' } - test("getGtfsFeedInfo", async () => { - const client: MetlinkHttpClientInterface = MetlinkHttpClientBuilder.buildWithAxios(getMetlinkToken()) - const response = await client.getGtfsFeedInfo(); + test('getGtfsFeedInfo', async () => { + const client: MetlinkHttpClientInterface = + MetlinkHttpClientBuilder.buildWithAxios(getMetlinkToken()) + const response = await client.getGtfsFeedInfo() - const result = SchemaValidator.validate(response.data, getSchema()); - expect(result.isValid).toBeTruthy(); - }); -}); \ No newline at end of file + const result = SchemaValidator.validate(response.data, getSchema()) + expect(result.isValid).toBeTruthy() + }) +}) diff --git a/tests/integration/MetlinkHttpClient/Gtfs/Routes.test.ts b/tests/integration/MetlinkHttpClient/Gtfs/Routes.test.ts index afab82c..940ac2d 100644 --- a/tests/integration/MetlinkHttpClient/Gtfs/Routes.test.ts +++ b/tests/integration/MetlinkHttpClient/Gtfs/Routes.test.ts @@ -1,79 +1,78 @@ -import {MetlinkHttpClientBuilder} from "../../../../src/MetlinkHttpClientBuilder"; -import {SchemaValidator} from "../../../SchemaValidator"; -import {MetlinkHttpClientInterface} from "../../../../src/Contracts"; +import { MetlinkHttpClientBuilder } from '../../../../src/MetlinkHttpClientBuilder' +import { SchemaValidator } from '../../../SchemaValidator' +import { MetlinkHttpClientInterface } from '../../../../src/Contracts' -describe("Integration: Metlink Http Client: Routes", () => { - - function getSchema(): {} { +describe('Integration: Metlink Http Client: Routes', () => { + function getSchema(): object { return { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "integer" + type: 'array', + items: { + type: 'object', + properties: { + id: { + type: 'integer', + }, + route_id: { + type: 'string', }, - "route_id": { - "type": "string" + agency_id: { + type: 'string', }, - "agency_id": { - "type": "string" + route_short_name: { + type: 'string', }, - "route_short_name": { - "type": "string" + route_long_name: { + type: 'string', }, - "route_long_name": { - "type": "string" + route_desc: { + type: 'string', }, - "route_desc": { - "type": "string" + route_type: { + type: 'integer', }, - "route_type": { - "type": "integer" + route_color: { + type: 'string', + pattern: '^[0-9a-fA-F]{6}$', // Hex color code without the '#' }, - "route_color": { - "type": "string", - "pattern": "^[0-9a-fA-F]{6}$" // Hex color code without the '#' + route_text_color: { + type: 'string', + pattern: '^[0-9a-fA-F]{6}$', // Hex color code without the '#' }, - "route_text_color": { - "type": "string", - "pattern": "^[0-9a-fA-F]{6}$" // Hex color code without the '#' + route_url: { + type: 'string', }, - "route_url": { - "type": "string" + route_sort_order: { + type: 'integer', }, - "route_sort_order": { - "type": "integer" - } }, - "required": [ - "id", - "route_id", - "agency_id", - "route_short_name", - "route_long_name", - "route_desc", - "route_type", - "route_color", - "route_text_color", - "route_url", - "route_sort_order" + required: [ + 'id', + 'route_id', + 'agency_id', + 'route_short_name', + 'route_long_name', + 'route_desc', + 'route_type', + 'route_color', + 'route_text_color', + 'route_url', + 'route_sort_order', ], - "additionalProperties": false - } + additionalProperties: false, + }, } } - function getMetlinkToken(): string - { - return process.env.METLINK_TOKEN || ""; + function getMetlinkToken(): string { + return process.env.METLINK_TOKEN || '' } - test("getGtfsRoutes", async () => { - const client: MetlinkHttpClientInterface = MetlinkHttpClientBuilder.buildWithAxios(getMetlinkToken()) - const response = await client.getGtfsRoutes(); + test('getGtfsRoutes', async () => { + const client: MetlinkHttpClientInterface = + MetlinkHttpClientBuilder.buildWithAxios(getMetlinkToken()) + const response = await client.getGtfsRoutes() - const result = SchemaValidator.validate(response.data, getSchema()); - expect(result.isValid).toBeTruthy(); - }); -}); \ No newline at end of file + const result = SchemaValidator.validate(response.data, getSchema()) + expect(result.isValid).toBeTruthy() + }) +}) diff --git a/tests/integration/MetlinkHttpClient/Gtfs/Shapes.test.ts b/tests/integration/MetlinkHttpClient/Gtfs/Shapes.test.ts index d390b36..15fb83b 100644 --- a/tests/integration/MetlinkHttpClient/Gtfs/Shapes.test.ts +++ b/tests/integration/MetlinkHttpClient/Gtfs/Shapes.test.ts @@ -1,58 +1,58 @@ -import {MetlinkHttpClientBuilder} from "../../../../src/MetlinkHttpClientBuilder"; -import {SchemaValidator} from "../../../SchemaValidator"; -import {MetlinkHttpClientInterface} from "../../../../src/Contracts"; +import { MetlinkHttpClientBuilder } from '../../../../src/MetlinkHttpClientBuilder' +import { SchemaValidator } from '../../../SchemaValidator' +import { MetlinkHttpClientInterface } from '../../../../src/Contracts' -describe("Integration: Metlink Http Client: Shapes", () => { +describe('Integration: Metlink Http Client: Shapes', () => { + const ShapeId1: string = '[@364.0.17527449@]1_20240825' - const ShapeId1: string = "[@364.0.17527449@]1_20240825"; - - function getSchema(): {} { + function getSchema(): object { return { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "integer" + type: 'array', + items: { + type: 'object', + properties: { + id: { + type: 'integer', + }, + shape_id: { + type: 'string', }, - "shape_id": { - "type": "string" + shape_pt_lat: { + type: 'number', }, - "shape_pt_lat": { - "type": "number" + shape_pt_lon: { + type: 'number', }, - "shape_pt_lon": { - "type": "number" + shape_pt_sequence: { + type: 'integer', }, - "shape_pt_sequence": { - "type": "integer" + shape_dist_traveled: { + type: 'number', }, - "shape_dist_traveled": { - "type": "number" - } }, - "required": [ - "id", - "shape_id", - "shape_pt_lat", - "shape_pt_lon", - "shape_pt_sequence", - "shape_dist_traveled" + required: [ + 'id', + 'shape_id', + 'shape_pt_lat', + 'shape_pt_lon', + 'shape_pt_sequence', + 'shape_dist_traveled', ], - "additionalProperties": false - } - }; + additionalProperties: false, + }, + } } function getMetlinkToken(): string { - return process.env.METLINK_TOKEN || ""; + return process.env.METLINK_TOKEN || '' } - test("getGtfsShapes", async () => { - const client: MetlinkHttpClientInterface = MetlinkHttpClientBuilder.buildWithAxios(getMetlinkToken()) - const response = await client.getGtfsShapes(ShapeId1); + test('getGtfsShapes', async () => { + const client: MetlinkHttpClientInterface = + MetlinkHttpClientBuilder.buildWithAxios(getMetlinkToken()) + const response = await client.getGtfsShapes(ShapeId1) - const result = SchemaValidator.validate(response.data, getSchema()); - expect(result.isValid).toBeTruthy(); - }); -}); \ No newline at end of file + const result = SchemaValidator.validate(response.data, getSchema()) + expect(result.isValid).toBeTruthy() + }) +}) diff --git a/tests/integration/MetlinkHttpClient/Gtfs/StopTimes.test.ts b/tests/integration/MetlinkHttpClient/Gtfs/StopTimes.test.ts index b9f1300..1f94aa0 100644 --- a/tests/integration/MetlinkHttpClient/Gtfs/StopTimes.test.ts +++ b/tests/integration/MetlinkHttpClient/Gtfs/StopTimes.test.ts @@ -1,79 +1,80 @@ -import {MetlinkHttpClientBuilder} from "../../../../src/MetlinkHttpClientBuilder"; -import {SchemaValidator} from "../../../SchemaValidator"; -import {MetlinkHttpClientInterface} from "../../../../src/Contracts"; +import { MetlinkHttpClientBuilder } from '../../../../src/MetlinkHttpClientBuilder' +import { SchemaValidator } from '../../../SchemaValidator' +import { MetlinkHttpClientInterface } from '../../../../src/Contracts' -describe("Integration: Metlink Http Client: StopTimes", () => { - - function getSchema(): {} { +describe('Integration: Metlink Http Client: StopTimes', () => { + function getSchema(): object { return { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "integer" + type: 'array', + items: { + type: 'object', + properties: { + id: { + type: 'integer', + }, + trip_id: { + type: 'string', }, - "trip_id": { - "type": "string" + arrival_time: { + type: 'string', + pattern: '^\\d{2}:\\d{2}:\\d{2}$', // Format HH:MM:SS }, - "arrival_time": { - "type": "string", - "pattern": "^\\d{2}:\\d{2}:\\d{2}$" // Format HH:MM:SS + departure_time: { + type: 'string', + pattern: '^\\d{2}:\\d{2}:\\d{2}$', // Format HH:MM:SS }, - "departure_time": { - "type": "string", - "pattern": "^\\d{2}:\\d{2}:\\d{2}$" // Format HH:MM:SS + stop_id: { + type: 'string', }, - "stop_id": { - "type": "string" + stop_sequence: { + type: 'integer', }, - "stop_sequence": { - "type": "integer" + shape_dist_traveled: { + type: 'number', }, - "shape_dist_traveled": { - "type": "number" + stop_headsign: { + type: 'string', }, - "stop_headsign": { - "type": "string" + pickup_type: { + type: 'integer', }, - "pickup_type": { - "type": "integer", + drop_off_type: { + type: 'integer', }, - "drop_off_type": { - "type": "integer", + timepoint: { + type: 'string', }, - "timepoint": { - "type": "string", - } }, - "required": [ - "id", - "trip_id", - "arrival_time", - "departure_time", - "stop_id", - "stop_sequence", - "shape_dist_traveled", - "stop_headsign", - "pickup_type", - "drop_off_type", - "timepoint" + required: [ + 'id', + 'trip_id', + 'arrival_time', + 'departure_time', + 'stop_id', + 'stop_sequence', + 'shape_dist_traveled', + 'stop_headsign', + 'pickup_type', + 'drop_off_type', + 'timepoint', ], - "additionalProperties": false - } + additionalProperties: false, + }, } } - function getMetlinkToken(): string - { - return process.env.METLINK_TOKEN || ""; + function getMetlinkToken(): string { + return process.env.METLINK_TOKEN || '' } - test("getGtfsStopTimes", async () => { - const client: MetlinkHttpClientInterface = MetlinkHttpClientBuilder.buildWithAxios(getMetlinkToken()) - const response = await client.getGtfsStopTimes("60__0__439__MNM__2071__1__2071__1_20240825"); + test('getGtfsStopTimes', async () => { + const client: MetlinkHttpClientInterface = + MetlinkHttpClientBuilder.buildWithAxios(getMetlinkToken()) + const response = await client.getGtfsStopTimes( + '60__0__439__MNM__2071__1__2071__1_20240825' + ) - const result = SchemaValidator.validate(response.data, getSchema()); - expect(result.isValid).toBeTruthy(); - }); -}); \ No newline at end of file + const result = SchemaValidator.validate(response.data, getSchema()) + expect(result.isValid).toBeTruthy() + }) +}) diff --git a/tests/integration/MetlinkHttpClient/Gtfs/Stops.test.ts b/tests/integration/MetlinkHttpClient/Gtfs/Stops.test.ts index 018b748..26cdaa8 100644 --- a/tests/integration/MetlinkHttpClient/Gtfs/Stops.test.ts +++ b/tests/integration/MetlinkHttpClient/Gtfs/Stops.test.ts @@ -1,81 +1,80 @@ -import {MetlinkHttpClientBuilder} from "../../../../src/MetlinkHttpClientBuilder"; -import {SchemaValidator} from "../../../SchemaValidator"; -import {MetlinkHttpClientInterface} from "../../../../src/Contracts"; +import { MetlinkHttpClientBuilder } from '../../../../src/MetlinkHttpClientBuilder' +import { SchemaValidator } from '../../../SchemaValidator' +import { MetlinkHttpClientInterface } from '../../../../src/Contracts' -describe("Integration: Metlink Http Client: Stops", () => { - - function getSchema(): {} { +describe('Integration: Metlink Http Client: Stops', () => { + function getSchema(): object { return { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "integer" + type: 'array', + items: { + type: 'object', + properties: { + id: { + type: 'integer', + }, + stop_id: { + type: 'string', }, - "stop_id": { - "type": "string" + stop_code: { + type: 'string', }, - "stop_code": { - "type": "string" + stop_name: { + type: 'string', }, - "stop_name": { - "type": "string" + stop_desc: { + type: 'string', }, - "stop_desc": { - "type": "string" + zone_id: { + type: 'string', }, - "zone_id": { - "type": "string" + stop_lat: { + type: 'number', }, - "stop_lat": { - "type": "number" + stop_lon: { + type: 'number', }, - "stop_lon": { - "type": "number" + location_type: { + type: 'integer', }, - "location_type": { - "type": "integer" + parent_station: { + type: 'string', }, - "parent_station": { - "type": "string" + stop_url: { + type: 'string', }, - "stop_url": { - "type": "string" + stop_timezone: { + type: 'string', }, - "stop_timezone": { - "type": "string" - } }, - "required": [ - "id", - "stop_id", - "stop_code", - "stop_name", - "stop_desc", - "zone_id", - "stop_lat", - "stop_lon", - "location_type", - "parent_station", - "stop_url", - "stop_timezone" + required: [ + 'id', + 'stop_id', + 'stop_code', + 'stop_name', + 'stop_desc', + 'zone_id', + 'stop_lat', + 'stop_lon', + 'location_type', + 'parent_station', + 'stop_url', + 'stop_timezone', ], - "additionalProperties": false - } + additionalProperties: false, + }, } } - function getMetlinkToken(): string - { - return process.env.METLINK_TOKEN || ""; + function getMetlinkToken(): string { + return process.env.METLINK_TOKEN || '' } - test("getGtfsStops", async () => { - const client: MetlinkHttpClientInterface = MetlinkHttpClientBuilder.buildWithAxios(getMetlinkToken()) - const response = await client.getGtfsStops(); + test('getGtfsStops', async () => { + const client: MetlinkHttpClientInterface = + MetlinkHttpClientBuilder.buildWithAxios(getMetlinkToken()) + const response = await client.getGtfsStops() - const result = SchemaValidator.validate(response.data, getSchema()); - expect(result.isValid).toBeTruthy(); - }); -}); \ No newline at end of file + const result = SchemaValidator.validate(response.data, getSchema()) + expect(result.isValid).toBeTruthy() + }) +}) diff --git a/tests/integration/MetlinkHttpClient/Gtfs/Transfers.test.ts b/tests/integration/MetlinkHttpClient/Gtfs/Transfers.test.ts index 3c96fb9..84026d1 100644 --- a/tests/integration/MetlinkHttpClient/Gtfs/Transfers.test.ts +++ b/tests/integration/MetlinkHttpClient/Gtfs/Transfers.test.ts @@ -1,61 +1,60 @@ -import {MetlinkHttpClientBuilder} from "../../../../src/MetlinkHttpClientBuilder"; -import {SchemaValidator} from "../../../SchemaValidator"; -import {MetlinkHttpClientInterface} from "../../../../src/Contracts"; +import { MetlinkHttpClientBuilder } from '../../../../src/MetlinkHttpClientBuilder' +import { SchemaValidator } from '../../../SchemaValidator' +import { MetlinkHttpClientInterface } from '../../../../src/Contracts' -describe("Integration: Metlink Http Client: Transfers", () => { - - function getSchema(): {} { +describe('Integration: Metlink Http Client: Transfers', () => { + function getSchema(): object { return { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "integer" + type: 'array', + items: { + type: 'object', + properties: { + id: { + type: 'integer', + }, + from_stop_id: { + type: 'string', }, - "from_stop_id": { - "type": "string" + to_stop_id: { + type: 'string', }, - "to_stop_id": { - "type": "string" + transfer_type: { + type: 'string', }, - "transfer_type": { - "type": "string" + min_transfer_time: { + type: 'string', }, - "min_transfer_time": { - "type": "string" + from_trip_id: { + type: 'string', }, - "from_trip_id": { - "type": "string" + to_trip_id: { + type: 'string', }, - "to_trip_id": { - "type": "string" - } }, - "required": [ - "id", - "from_stop_id", - "to_stop_id", - "transfer_type", - "min_transfer_time", - "from_trip_id", - "to_trip_id" + required: [ + 'id', + 'from_stop_id', + 'to_stop_id', + 'transfer_type', + 'min_transfer_time', + 'from_trip_id', + 'to_trip_id', ], - "additionalProperties": false - } + additionalProperties: false, + }, } } - function getMetlinkToken(): string - { - return process.env.METLINK_TOKEN || ""; + function getMetlinkToken(): string { + return process.env.METLINK_TOKEN || '' } - test("getGtfsTransfers", async () => { - const client: MetlinkHttpClientInterface = MetlinkHttpClientBuilder.buildWithAxios(getMetlinkToken()) - const response = await client.getGtfsTransfers(); + test('getGtfsTransfers', async () => { + const client: MetlinkHttpClientInterface = + MetlinkHttpClientBuilder.buildWithAxios(getMetlinkToken()) + const response = await client.getGtfsTransfers() - const result = SchemaValidator.validate(response.data, getSchema()); - expect(result.isValid).toBeTruthy(); - }); -}); \ No newline at end of file + const result = SchemaValidator.validate(response.data, getSchema()) + expect(result.isValid).toBeTruthy() + }) +}) diff --git a/tests/integration/MetlinkHttpClient/Gtfs/Trips.test.ts b/tests/integration/MetlinkHttpClient/Gtfs/Trips.test.ts index 08880b9..7e7fe44 100644 --- a/tests/integration/MetlinkHttpClient/Gtfs/Trips.test.ts +++ b/tests/integration/MetlinkHttpClient/Gtfs/Trips.test.ts @@ -1,81 +1,80 @@ -import {MetlinkHttpClientBuilder} from "../../../../src/MetlinkHttpClientBuilder"; -import {SchemaValidator} from "../../../SchemaValidator"; -import {MetlinkHttpClientInterface} from "../../../../src/Contracts"; +import { MetlinkHttpClientBuilder } from '../../../../src/MetlinkHttpClientBuilder' +import { SchemaValidator } from '../../../SchemaValidator' +import { MetlinkHttpClientInterface } from '../../../../src/Contracts' -describe("Integration: Metlink Http Client: Trips", () => { - - function getSchema(): {} { +describe('Integration: Metlink Http Client: Trips', () => { + function getSchema(): object { return { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "integer" + type: 'array', + items: { + type: 'object', + properties: { + id: { + type: 'integer', + }, + route_id: { + type: 'integer', }, - "route_id": { - "type": "integer" + service_id: { + type: 'string', }, - "service_id": { - "type": "string" + trip_id: { + type: 'string', }, - "trip_id": { - "type": "string" + trip_headsign: { + type: 'string', }, - "trip_headsign": { - "type": "string" + direction_id: { + type: 'integer', }, - "direction_id": { - "type": "integer" + block_id: { + type: 'string', }, - "block_id": { - "type": "string" + shape_id: { + type: 'string', }, - "shape_id": { - "type": "string" + wheelchair_accessible: { + type: 'integer', }, - "wheelchair_accessible": { - "type": "integer" + bikes_allowed: { + type: 'integer', }, - "bikes_allowed": { - "type": "integer" + origin_stop_id: { + type: 'string', }, - "origin_stop_id": { - "type": "string" + destination_stop_id: { + type: 'string', }, - "destination_stop_id": { - "type": "string" - } }, - "required": [ - "id", - "route_id", - "service_id", - "trip_id", - "trip_headsign", - "direction_id", - "block_id", - "shape_id", - "wheelchair_accessible", - "bikes_allowed", - "origin_stop_id", - "destination_stop_id" + required: [ + 'id', + 'route_id', + 'service_id', + 'trip_id', + 'trip_headsign', + 'direction_id', + 'block_id', + 'shape_id', + 'wheelchair_accessible', + 'bikes_allowed', + 'origin_stop_id', + 'destination_stop_id', ], - "additionalProperties": false - } + additionalProperties: false, + }, } } - function getMetlinkToken(): string - { - return process.env.METLINK_TOKEN || ""; + function getMetlinkToken(): string { + return process.env.METLINK_TOKEN || '' } - test("getGtfsTrips", async () => { - const client: MetlinkHttpClientInterface = MetlinkHttpClientBuilder.buildWithAxios(getMetlinkToken()) - const response = await client.getGtfsTrips(); + test('getGtfsTrips', async () => { + const client: MetlinkHttpClientInterface = + MetlinkHttpClientBuilder.buildWithAxios(getMetlinkToken()) + const response = await client.getGtfsTrips() - const result = SchemaValidator.validate(response.data, getSchema()); - expect(result.isValid).toBeTruthy(); - }); -}); \ No newline at end of file + const result = SchemaValidator.validate(response.data, getSchema()) + expect(result.isValid).toBeTruthy() + }) +}) diff --git a/tests/integration/MetlinkHttpClient/StopPredictions.test.ts b/tests/integration/MetlinkHttpClient/StopPredictions.test.ts index 585c498..ffe6c35 100644 --- a/tests/integration/MetlinkHttpClient/StopPredictions.test.ts +++ b/tests/integration/MetlinkHttpClient/StopPredictions.test.ts @@ -1,143 +1,141 @@ -import {MetlinkHttpClientBuilder} from "../../../src/MetlinkHttpClientBuilder"; -import {SchemaValidator} from "../../SchemaValidator"; -import {MetlinkHttpClientInterface} from "../../../src/Contracts"; +import { MetlinkHttpClientBuilder } from '../../../src/MetlinkHttpClientBuilder' +import { SchemaValidator } from '../../SchemaValidator' +import { MetlinkHttpClientInterface } from '../../../src/Contracts' -describe("Integration: Metlink Http Client: Stop Predictions", () => { - - - function getSchema(): {} { +describe('Integration: Metlink Http Client: Stop Predictions', () => { + function getSchema(): object { return { - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "object", - "properties": { - "farezone": { - "type": "string" + $schema: 'http://json-schema.org/draft-07/schema#', + type: 'object', + properties: { + farezone: { + type: 'string', }, - "closed": { - "type": "boolean" + closed: { + type: 'boolean', }, - "departures": { - "type": "array", - "items": { - "type": "object", - "properties": { - "stop_id": { - "type": "string" + departures: { + type: 'array', + items: { + type: 'object', + properties: { + stop_id: { + type: 'string', }, - "service_id": { - "type": "string" + service_id: { + type: 'string', }, - "direction": { - "type": "string", - "enum": ["inbound", "outbound"] + direction: { + type: 'string', + enum: ['inbound', 'outbound'], }, - "operator": { - "type": "string" + operator: { + type: 'string', }, - "origin": { - "type": "object", - "properties": { - "stop_id": { - "type": "string" + origin: { + type: 'object', + properties: { + stop_id: { + type: 'string', + }, + name: { + type: 'string', }, - "name": { - "type": "string" - } }, - "required": ["stop_id", "name"] + required: ['stop_id', 'name'], }, - "destination": { - "type": "object", - "properties": { - "stop_id": { - "type": "string" + destination: { + type: 'object', + properties: { + stop_id: { + type: 'string', + }, + name: { + type: 'string', }, - "name": { - "type": "string" - } }, - "required": ["stop_id", "name"] + required: ['stop_id', 'name'], }, - "delay": { - "type": "string", + delay: { + type: 'string', }, - "vehicle_id": { - "type": ["string","null"] + vehicle_id: { + type: ['string', 'null'], }, - "name": { - "type": "string" + name: { + type: 'string', }, - "arrival": { - "type": "object", - "properties": { - "aimed": { - "type": "string" + arrival: { + type: 'object', + properties: { + aimed: { + type: 'string', + }, + expected: { + type: ['string', 'null'], }, - "expected": { - "type": ["string", "null"] - } }, - "required": ["aimed", "expected"] + required: ['aimed', 'expected'], }, - "departure": { - "type": "object", - "properties": { - "aimed": { - "type": "string" + departure: { + type: 'object', + properties: { + aimed: { + type: 'string', + }, + expected: { + type: ['string', 'null'], }, - "expected": { - "type": ["string", "null"] - } }, - "required": ["aimed", "expected"] + required: ['aimed', 'expected'], }, - "status": { - "type": ["string", "null"] + status: { + type: ['string', 'null'], }, - "monitored": { - "type": "boolean" + monitored: { + type: 'boolean', }, - "wheelchair_accessible": { - "type": "boolean" + wheelchair_accessible: { + type: 'boolean', + }, + trip_id: { + type: 'string', }, - "trip_id": { - "type": "string" - } }, - "required": [ - "stop_id", - "service_id", - "direction", - "operator", - "origin", - "destination", - "delay", - "vehicle_id", - "name", - "arrival", - "departure", - "status", - "monitored", - "wheelchair_accessible", - "trip_id" - ] - } - } + required: [ + 'stop_id', + 'service_id', + 'direction', + 'operator', + 'origin', + 'destination', + 'delay', + 'vehicle_id', + 'name', + 'arrival', + 'departure', + 'status', + 'monitored', + 'wheelchair_accessible', + 'trip_id', + ], + }, + }, }, - "required": ["farezone", "closed", "departures"] + required: ['farezone', 'closed', 'departures'], } } - function getMetlinkToken(): string - { - return process.env.METLINK_TOKEN || ""; + function getMetlinkToken(): string { + return process.env.METLINK_TOKEN || '' } - test("getStopPredictions", async () => { - const client: MetlinkHttpClientInterface = MetlinkHttpClientBuilder.buildWithAxios(getMetlinkToken()) - const response = await client.getStopPredictions("5515"); + test('getStopPredictions', async () => { + const client: MetlinkHttpClientInterface = + MetlinkHttpClientBuilder.buildWithAxios(getMetlinkToken()) + const response = await client.getStopPredictions('5515') - const result = SchemaValidator.validate(response.data, getSchema()); - expect(result.isValid).toBeTruthy(); - }); -}); \ No newline at end of file + const result = SchemaValidator.validate(response.data, getSchema()) + expect(result.isValid).toBeTruthy() + }) +}) diff --git a/tests/integration/MetlinkHttpClient/TripCancellations.test.ts b/tests/integration/MetlinkHttpClient/TripCancellations.test.ts index fb1f973..b4e0c08 100644 --- a/tests/integration/MetlinkHttpClient/TripCancellations.test.ts +++ b/tests/integration/MetlinkHttpClient/TripCancellations.test.ts @@ -1,75 +1,74 @@ -import {MetlinkHttpClientBuilder} from "../../../src/MetlinkHttpClientBuilder"; -import {SchemaValidator} from "../../SchemaValidator"; -import {MetlinkHttpClientInterface} from "../../../src/Contracts"; +import { MetlinkHttpClientBuilder } from '../../../src/MetlinkHttpClientBuilder' +import { SchemaValidator } from '../../SchemaValidator' +import { MetlinkHttpClientInterface } from '../../../src/Contracts' -describe("Integration: Metlink Http Client: Trip Cancellations", () => { - - function getSchema(): {} { +describe('Integration: Metlink Http Client: Trip Cancellations', () => { + function getSchema(): object { return { - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string" + $schema: 'http://json-schema.org/draft-07/schema#', + type: 'array', + items: { + type: 'object', + properties: { + id: { + type: 'string', + }, + date_created: { + type: 'string', }, - "date_created": { - "type": "string", + date_updated: { + type: 'string', }, - "date_updated": { - "type": "string", + trip_id: { + type: 'string', }, - "trip_id": { - "type": "string" + route_id: { + type: 'integer', }, - "route_id": { - "type": "integer" + trip_date_start: { + type: 'string', }, - "trip_date_start": { - "type": "string", + trip_date_end: { + type: 'string', }, - "trip_date_end": { - "type": "string" + direction_id: { + type: 'integer', }, - "direction_id": { - "type": "integer" + reinstated: { + type: 'integer', + enum: [0, 1], }, - "reinstated": { - "type": "integer", - "enum": [0, 1] + part_cancellation: { + type: 'integer', + enum: [0, 1], }, - "part_cancellation": { - "type": "integer", - "enum": [0, 1] - } }, - "required": [ - "id", - "date_created", - "date_updated", - "trip_id", - "route_id", - "trip_date_start", - "trip_date_end", - "direction_id", - "reinstated", - "part_cancellation" - ] - } + required: [ + 'id', + 'date_created', + 'date_updated', + 'trip_id', + 'route_id', + 'trip_date_start', + 'trip_date_end', + 'direction_id', + 'reinstated', + 'part_cancellation', + ], + }, } } - function getMetlinkToken(): string - { - return process.env.METLINK_TOKEN || ""; + function getMetlinkToken(): string { + return process.env.METLINK_TOKEN || '' } - test("getTripCancellation", async () => { - const client: MetlinkHttpClientInterface = MetlinkHttpClientBuilder.buildWithAxios(getMetlinkToken()) - const response = await client.getTripCancellations(); + test('getTripCancellation', async () => { + const client: MetlinkHttpClientInterface = + MetlinkHttpClientBuilder.buildWithAxios(getMetlinkToken()) + const response = await client.getTripCancellations() - const result = SchemaValidator.validate(response.data, getSchema()); - expect(result.isValid).toBeTruthy(); - }); -}); \ No newline at end of file + const result = SchemaValidator.validate(response.data, getSchema()) + expect(result.isValid).toBeTruthy() + }) +}) diff --git a/tests/unit/ClientBuilder.ts b/tests/unit/ClientBuilder.ts index 9fc7a54..1cc18bb 100644 --- a/tests/unit/ClientBuilder.ts +++ b/tests/unit/ClientBuilder.ts @@ -1,18 +1,22 @@ -import MetlinkHttpClient from "../../src/MetlinkHttpClient"; -import {AxiosAdapter} from "../../src/domain/httpclient/AxiosAdapter"; -import {ResponseDataDecorator} from "../../src/ResponseDataDecorator"; -import {MetlinkHttpClientInterface} from "../../src/Contracts"; +import MetlinkHttpClient from '../../src/MetlinkHttpClient' +import { AxiosAdapter } from '../../src/domain/httpclient/AxiosAdapter' +import { ResponseDataDecorator } from '../../src/ResponseDataDecorator' +import { MetlinkHttpClientInterface } from '../../src/Contracts' export class ClientBuilder { - public static getHttpClient(client: Axios.AxiosInstance): MetlinkHttpClientInterface { - const adapter: AxiosAdapter = new AxiosAdapter(client); + public static getHttpClient( + client: Axios.AxiosInstance + ): MetlinkHttpClientInterface { + const adapter: AxiosAdapter = new AxiosAdapter(client) - return new MetlinkHttpClient(adapter); + return new MetlinkHttpClient(adapter) } - public static getHttpClientWithResponseDataDecorator(client: Axios.AxiosInstance): MetlinkHttpClientInterface { - const adapter: AxiosAdapter = new AxiosAdapter(client); + public static getHttpClientWithResponseDataDecorator( + client: Axios.AxiosInstance + ): MetlinkHttpClientInterface { + const adapter: AxiosAdapter = new AxiosAdapter(client) - return new ResponseDataDecorator(new MetlinkHttpClient(adapter)); + return new ResponseDataDecorator(new MetlinkHttpClient(adapter)) } -} \ No newline at end of file +} diff --git a/tests/unit/MetlinkHttpClient/Gtfs-rt/ServiceAlerts.test.ts b/tests/unit/MetlinkHttpClient/Gtfs-rt/ServiceAlerts.test.ts index d4d1f6a..b1954c6 100644 --- a/tests/unit/MetlinkHttpClient/Gtfs-rt/ServiceAlerts.test.ts +++ b/tests/unit/MetlinkHttpClient/Gtfs-rt/ServiceAlerts.test.ts @@ -1,244 +1,274 @@ -import MetlinkHttpClient from "../../../../src/MetlinkHttpClient"; -import axios from 'axios'; -import {AxiosAdapter} from "../../../../src/domain/httpclient/AxiosAdapter"; -import MockAdapter from "axios-mock-adapter"; -import {SchemaValidator} from "../../../SchemaValidator"; +import MetlinkHttpClient from '../../../../src/MetlinkHttpClient' +import axios from 'axios' +import { AxiosAdapter } from '../../../../src/domain/httpclient/AxiosAdapter' +import MockAdapter from 'axios-mock-adapter' +import { SchemaValidator } from '../../../SchemaValidator' -const mock: MockAdapter = new MockAdapter(axios); - -describe("Metlink Http Client: GTFS-RT: Service alerts", () => { +const mock: MockAdapter = new MockAdapter(axios) +describe('Metlink Http Client: GTFS-RT: Service alerts', () => { afterEach(function () { - mock.reset(); - }); + mock.reset() + }) function getHttpClient(client: Axios.AxiosInstance): MetlinkHttpClient { - const adapter: AxiosAdapter = new AxiosAdapter(client); + const adapter: AxiosAdapter = new AxiosAdapter(client) - return new MetlinkHttpClient(adapter); + return new MetlinkHttpClient(adapter) } - function getSchema(): {} { + function getSchema(): object { return { - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "object", - "properties": { - "header": { - "type": "object", - "properties": { - "gtfsRealtimeVersion": { - "type": "string" + $schema: 'http://json-schema.org/draft-07/schema#', + type: 'object', + properties: { + header: { + type: 'object', + properties: { + gtfsRealtimeVersion: { + type: 'string', + }, + incrementality: { + type: 'integer', }, - "incrementality": { - "type": "integer" + timestamp: { + type: 'integer', }, - "timestamp": { - "type": "integer" - } }, - "required": ["gtfsRealtimeVersion", "incrementality", "timestamp"] + required: [ + 'gtfsRealtimeVersion', + 'incrementality', + 'timestamp', + ], }, - "entity": { - "type": "array", - "items": { - "type": "object", - "properties": { - "alert": { - "type": "object", - "properties": { - "active_period": { - "type": "array", - "items": { - "type": "object", - "properties": { - "start": { - "type": "integer" + entity: { + type: 'array', + items: { + type: 'object', + properties: { + alert: { + type: 'object', + properties: { + active_period: { + type: 'array', + items: { + type: 'object', + properties: { + start: { + type: 'integer', + }, + end: { + type: 'integer', }, - "end": { - "type": "integer" - } }, - "required": ["start", "end"] - } + required: ['start', 'end'], + }, }, - "effect": { - "type": "string" + effect: { + type: 'string', }, - "cause": { - "type": "string" + cause: { + type: 'string', }, - "description_text": { - "type": "object", - "properties": { - "translation": { - "type": "array", - "items": { - "type": "object", - "properties": { - "language": { - "type": "string" + description_text: { + type: 'object', + properties: { + translation: { + type: 'array', + items: { + type: 'object', + properties: { + language: { + type: 'string', + }, + text: { + type: 'string', }, - "text": { - "type": "string" - } }, - "required": ["language", "text"] - } - } + required: [ + 'language', + 'text', + ], + }, + }, }, - "required": ["translation"] + required: ['translation'], }, - "header_text": { - "type": "object", - "properties": { - "translation": { - "type": "array", - "items": { - "type": "object", - "properties": { - "language": { - "type": "string" + header_text: { + type: 'object', + properties: { + translation: { + type: 'array', + items: { + type: 'object', + properties: { + language: { + type: 'string', + }, + text: { + type: 'string', }, - "text": { - "type": "string" - } }, - "required": ["language", "text"] - } - } + required: [ + 'language', + 'text', + ], + }, + }, }, - "required": ["translation"] + required: ['translation'], }, - "informed_entity": { - "type": "array", - "items": { - "type": "object", - "properties": { - "route_id": { - "type": "string" + informed_entity: { + type: 'array', + items: { + type: 'object', + properties: { + route_id: { + type: 'string', }, - "route_type": { - "type": "integer" + route_type: { + type: 'integer', }, - "trip": { - "type": "object", - "properties": { - "start_time": { - "type": "string" + trip: { + type: 'object', + properties: { + start_time: { + type: 'string', + }, + description: { + type: 'string', }, - "description": { - "type": "string" + trip_id: { + type: 'string', }, - "trip_id": { - "type": "string" + direction_id: { + type: 'integer', }, - "direction_id": { - "type": "integer" + route_id: { + type: 'number', }, - "route_id": { - "type": "number" + start_date: { + type: 'string', }, - "start_date": { - "type": "string" - } }, - "required": ["start_time", "description", "trip_id", "direction_id", "route_id", "start_date"] - } + required: [ + 'start_time', + 'description', + 'trip_id', + 'direction_id', + 'route_id', + 'start_date', + ], + }, }, - "required": ["route_id", "route_type", "trip"] - } + required: [ + 'route_id', + 'route_type', + 'trip', + ], + }, + }, + severity_level: { + type: 'string', }, - "severity_level": { - "type": "string" - } }, - "required": ["active_period", "effect", "cause", "description_text", "header_text", "informed_entity", "severity_level"] + required: [ + 'active_period', + 'effect', + 'cause', + 'description_text', + 'header_text', + 'informed_entity', + 'severity_level', + ], + }, + id: { + type: 'string', }, - "id": { - "type": "string" + timestamp: { + type: 'string', }, - "timestamp": { - "type": "string" - } }, - "required": ["alert", "id", "timestamp"] - } - } + required: ['alert', 'id', 'timestamp'], + }, + }, }, - "required": ["header", "entity"] + required: ['header', 'entity'], } } const dataSet = [ [ { - "header": { - "gtfsRealtimeVersion": "2.0", - "incrementality": 0, - "timestamp": 1726282687 + header: { + gtfsRealtimeVersion: '2.0', + incrementality: 0, + timestamp: 1726282687, }, - "entity": [ + entity: [ { - "alert": { - "active_period": [ + alert: { + active_period: [ { - "start": 1714071600, - "end": 1734635400 - } + start: 1714071600, + end: 1734635400, + }, ], - "effect": "STOP_MOVED", - "cause": "OTHER_CAUSE", - "description_text": { - "translation": [ + effect: 'STOP_MOVED', + cause: 'OTHER_CAUSE', + description_text: { + translation: [ { - "language": "en", - "text": "To minimise delays caused by Wairarapa services, the 7:00am, 7:40am, and 8:00am services from Upper Hutt to Wellington will depart from Platform 2 at Wallaceville and Trentham stations. This is an ongoing permanent change. Announcements will be made where possible." - } - ] + language: 'en', + text: 'To minimise delays caused by Wairarapa services, the 7:00am, 7:40am, and 8:00am services from Upper Hutt to Wellington will depart from Platform 2 at Wallaceville and Trentham stations. This is an ongoing permanent change. Announcements will be made where possible.', + }, + ], }, - "header_text": { - "translation": [ + header_text: { + translation: [ { - "language": "en", - "text": "The 7:00am, 7:40am, and 8:00am weekday services from Upper Hutt to Wellington will depart from Platform 2 at Wallaceville and Trentham stations." - } - ] + language: 'en', + text: 'The 7:00am, 7:40am, and 8:00am weekday services from Upper Hutt to Wellington will depart from Platform 2 at Wallaceville and Trentham stations.', + }, + ], }, - "informed_entity": [ + informed_entity: [ { - "route_id": "5", - "route_type": 2, - "trip": { - "start_time": "07:00:00", - "description": "7:00am from Upper Hutt Station to Wellington Station", - "trip_id": "HVL__1__2611__RAIL__Rail_MTuWThF-XHol_20240428", - "direction_id": 1, - "route_id": 5, - "start_date": "20240508" - } - } + route_id: '5', + route_type: 2, + trip: { + start_time: '07:00:00', + description: + '7:00am from Upper Hutt Station to Wellington Station', + trip_id: + 'HVL__1__2611__RAIL__Rail_MTuWThF-XHol_20240428', + direction_id: 1, + route_id: 5, + start_date: '20240508', + }, + }, ], - "severity_level": "WARNING" + severity_level: 'WARNING', }, - "id": "140453", - "timestamp": "2024-04-24T13:33:25+1200" - } - ] - } - ] - ]; + id: '140453', + timestamp: '2024-04-24T13:33:25+1200', + }, + ], + }, + ], + ] function getPath(): string { - return "/gtfs-rt/servicealerts"; + return '/gtfs-rt/servicealerts' } - it.each(dataSet)("getServiceAlerts", async (mockData) => { - mock.onGet(getPath()).replyOnce(200, mockData); + it.each(dataSet)('getServiceAlerts', async (mockData) => { + mock.onGet(getPath()).replyOnce(200, mockData) - const client: MetlinkHttpClient = getHttpClient(axios); - const response = await client.getGtfsRtServiceAlerts(); + const client: MetlinkHttpClient = getHttpClient(axios) + const response = await client.getGtfsRtServiceAlerts() - const result = SchemaValidator.validate(response.data, getSchema()); - expect(result.isValid).toBeTruthy(); - }); -}); \ No newline at end of file + const result = SchemaValidator.validate(response.data, getSchema()) + expect(result.isValid).toBeTruthy() + }) +}) diff --git a/tests/unit/MetlinkHttpClient/Gtfs-rt/TripUpdates.test.ts b/tests/unit/MetlinkHttpClient/Gtfs-rt/TripUpdates.test.ts index f3a1517..c2f8102 100644 --- a/tests/unit/MetlinkHttpClient/Gtfs-rt/TripUpdates.test.ts +++ b/tests/unit/MetlinkHttpClient/Gtfs-rt/TripUpdates.test.ts @@ -1,180 +1,201 @@ -import MetlinkHttpClient from "../../../../src/MetlinkHttpClient"; -import axios from 'axios'; -import {AxiosAdapter} from "../../../../src/domain/httpclient/AxiosAdapter"; -import MockAdapter from "axios-mock-adapter"; -import {SchemaValidator} from "../../../SchemaValidator"; +import MetlinkHttpClient from '../../../../src/MetlinkHttpClient' +import axios from 'axios' +import { AxiosAdapter } from '../../../../src/domain/httpclient/AxiosAdapter' +import MockAdapter from 'axios-mock-adapter' +import { SchemaValidator } from '../../../SchemaValidator' -const mock: MockAdapter = new MockAdapter(axios); - -describe("Metlink Http Client: GTFS-RT: Trip updates", () => { +const mock: MockAdapter = new MockAdapter(axios) +describe('Metlink Http Client: GTFS-RT: Trip updates', () => { afterEach(function () { - mock.reset(); - }); + mock.reset() + }) function getHttpClient(client: Axios.AxiosInstance): MetlinkHttpClient { - const adapter: AxiosAdapter = new AxiosAdapter(client); + const adapter: AxiosAdapter = new AxiosAdapter(client) - return new MetlinkHttpClient(adapter); + return new MetlinkHttpClient(adapter) } - function getSchema(): {} { + function getSchema(): object { return { - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "object", - "properties": { - "header": { - "type": "object", - "properties": { - "gtfsRealtimeVersion": { - "type": "string" + $schema: 'http://json-schema.org/draft-07/schema#', + type: 'object', + properties: { + header: { + type: 'object', + properties: { + gtfsRealtimeVersion: { + type: 'string', + }, + incrementality: { + type: 'integer', }, - "incrementality": { - "type": "integer" + timestamp: { + type: 'integer', }, - "timestamp": { - "type": "integer" - } }, - "required": ["gtfsRealtimeVersion", "incrementality", "timestamp"] + required: [ + 'gtfsRealtimeVersion', + 'incrementality', + 'timestamp', + ], }, - "entity": { - "type": "array", - "items": { - "type": "object", - "properties": { - "trip_update": { - "type": "object", - "properties": { - "stop_time_update": { - "type": "object", - "properties": { - "schedule_relationship": { - "type": "integer" + entity: { + type: 'array', + items: { + type: 'object', + properties: { + trip_update: { + type: 'object', + properties: { + stop_time_update: { + type: 'object', + properties: { + schedule_relationship: { + type: 'integer', }, - "stop_sequence": { - "type": "integer" + stop_sequence: { + type: 'integer', }, - "arrival": { - "type": "object", - "properties": { - "delay": { - "type": "integer" + arrival: { + type: 'object', + properties: { + delay: { + type: 'integer', + }, + time: { + type: 'integer', }, - "time": { - "type": "integer" - } }, - "required": ["delay", "time"] + required: ['delay', 'time'], + }, + stop_id: { + type: 'string', }, - "stop_id": { - "type": "string" - } }, - "required": ["schedule_relationship", "stop_sequence", "arrival", "stop_id"] + required: [ + 'schedule_relationship', + 'stop_sequence', + 'arrival', + 'stop_id', + ], }, - "trip": { - "type": "object", - "properties": { - "start_time": { - "type": "string" + trip: { + type: 'object', + properties: { + start_time: { + type: 'string', + }, + trip_id: { + type: 'string', }, - "trip_id": { - "type": "string" + direction_id: { + type: 'integer', }, - "direction_id": { - "type": "integer" + route_id: { + type: 'integer', }, - "route_id": { - "type": "integer" + schedule_relationship: { + type: 'integer', }, - "schedule_relationship": { - "type": "integer" + start_date: { + type: 'string', }, - "start_date": { - "type": "string" - } }, - "required": ["start_time", "trip_id", "direction_id", "route_id", "schedule_relationship", "start_date"] + required: [ + 'start_time', + 'trip_id', + 'direction_id', + 'route_id', + 'schedule_relationship', + 'start_date', + ], }, - "vehicle": { - "type": "object", - "properties": { - "id": { - "type": "string" - } + vehicle: { + type: 'object', + properties: { + id: { + type: 'string', + }, }, - "required": ["id"] + required: ['id'], + }, + timestamp: { + type: 'integer', }, - "timestamp": { - "type": "integer" - } }, - "required": ["stop_time_update", "trip", "vehicle", "timestamp"] + required: [ + 'stop_time_update', + 'trip', + 'vehicle', + 'timestamp', + ], + }, + id: { + type: 'string', }, - "id": { - "type": "string" - } }, - "required": ["trip_update", "id"] - } - } + required: ['trip_update', 'id'], + }, + }, }, - "required": ["header", "entity"] + required: ['header', 'entity'], } } const dataSet = [ [ - { - "header": { - "gtfsRealtimeVersion": "2.0", - "incrementality": 0, - "timestamp": 1726514766 - }, - "entity": [ - { - "trip_update": { - "stop_time_update": { - "schedule_relationship": 0, - "stop_sequence": 36, - "arrival": { - "delay": 237, - "time": 1726514769 - }, - "stop_id": "9242" - }, - "trip": { - "start_time": "06:55:00", - "trip_id": "110__0__103__TZM__501__4__501__4_20240825", - "direction_id": 0, - "route_id": 1100, - "schedule_relationship": 0, - "start_date": "20240917" - }, - "vehicle": { - "id": "3315" + { + header: { + gtfsRealtimeVersion: '2.0', + incrementality: 0, + timestamp: 1726514766, + }, + entity: [ + { + trip_update: { + stop_time_update: { + schedule_relationship: 0, + stop_sequence: 36, + arrival: { + delay: 237, + time: 1726514769, }, - "timestamp": 1726514757 + stop_id: '9242', }, - "id": "fb9742b0-b5c3-46ca-99cf-c4f24668607d" - } - ] - } - ] - ]; + trip: { + start_time: '06:55:00', + trip_id: + '110__0__103__TZM__501__4__501__4_20240825', + direction_id: 0, + route_id: 1100, + schedule_relationship: 0, + start_date: '20240917', + }, + vehicle: { + id: '3315', + }, + timestamp: 1726514757, + }, + id: 'fb9742b0-b5c3-46ca-99cf-c4f24668607d', + }, + ], + }, + ], + ] function getPath(): string { - return "/gtfs-rt/tripupdates"; + return '/gtfs-rt/tripupdates' } - it.each(dataSet)("GetGtfsRtTripUpdates", async (mockData) => { - mock.onGet(getPath()).replyOnce(200, mockData); + it.each(dataSet)('GetGtfsRtTripUpdates', async (mockData) => { + mock.onGet(getPath()).replyOnce(200, mockData) - const client: MetlinkHttpClient = getHttpClient(axios); - const response = await client.getGtfsRtTripUpdates(); + const client: MetlinkHttpClient = getHttpClient(axios) + const response = await client.getGtfsRtTripUpdates() - const result = SchemaValidator.validate(response.data, getSchema()); - expect(result.isValid).toBeTruthy(); - }); -}); \ No newline at end of file + const result = SchemaValidator.validate(response.data, getSchema()) + expect(result.isValid).toBeTruthy() + }) +}) diff --git a/tests/unit/MetlinkHttpClient/Gtfs-rt/VehiclePositions.test.ts b/tests/unit/MetlinkHttpClient/Gtfs-rt/VehiclePositions.test.ts index a8234c7..b604779 100644 --- a/tests/unit/MetlinkHttpClient/Gtfs-rt/VehiclePositions.test.ts +++ b/tests/unit/MetlinkHttpClient/Gtfs-rt/VehiclePositions.test.ts @@ -1,168 +1,188 @@ -import MetlinkHttpClient from "../../../../src/MetlinkHttpClient"; -import axios from 'axios'; -import {AxiosAdapter} from "../../../../src/domain/httpclient/AxiosAdapter"; -import MockAdapter from "axios-mock-adapter"; -import {SchemaValidator} from "../../../SchemaValidator"; +import MetlinkHttpClient from '../../../../src/MetlinkHttpClient' +import axios from 'axios' +import { AxiosAdapter } from '../../../../src/domain/httpclient/AxiosAdapter' +import MockAdapter from 'axios-mock-adapter' +import { SchemaValidator } from '../../../SchemaValidator' -const mock: MockAdapter = new MockAdapter(axios); - -describe("Metlink Http Client: GTFS-RT: Vehicle positions", () => { +const mock: MockAdapter = new MockAdapter(axios) +describe('Metlink Http Client: GTFS-RT: Vehicle positions', () => { afterEach(function () { - mock.reset(); - }); + mock.reset() + }) function getHttpClient(client: Axios.AxiosInstance): MetlinkHttpClient { - const adapter: AxiosAdapter = new AxiosAdapter(client); + const adapter: AxiosAdapter = new AxiosAdapter(client) - return new MetlinkHttpClient(adapter); + return new MetlinkHttpClient(adapter) } - function getSchema(): {} { + function getSchema(): object { return { - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "object", - "properties": { - "header": { - "type": "object", - "properties": { - "gtfsRealtimeVersion": { - "type": "string" + $schema: 'http://json-schema.org/draft-07/schema#', + type: 'object', + properties: { + header: { + type: 'object', + properties: { + gtfsRealtimeVersion: { + type: 'string', + }, + incrementality: { + type: 'integer', }, - "incrementality": { - "type": "integer" + timestamp: { + type: 'integer', }, - "timestamp": { - "type": "integer" - } }, - "required": ["gtfsRealtimeVersion", "incrementality", "timestamp"] + required: [ + 'gtfsRealtimeVersion', + 'incrementality', + 'timestamp', + ], }, - "entity": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string" + entity: { + type: 'array', + items: { + type: 'object', + properties: { + id: { + type: 'string', }, - "vehicle": { - "type": "object", - "properties": { - "trip": { - "type": "object", - "properties": { - "start_time": { - "type": "string" + vehicle: { + type: 'object', + properties: { + trip: { + type: 'object', + properties: { + start_time: { + type: 'string', + }, + trip_id: { + type: 'string', }, - "trip_id": { - "type": "string" + direction_id: { + type: 'integer', }, - "direction_id": { - "type": "integer" + route_id: { + type: 'integer', }, - "route_id": { - "type": "integer" + schedule_relationship: { + type: 'integer', }, - "schedule_relationship": { - "type": "integer" + start_date: { + type: 'string', }, - "start_date": { - "type": "string" - } }, - "required": ["start_time", "trip_id", "direction_id", "route_id", "schedule_relationship", "start_date"] + required: [ + 'start_time', + 'trip_id', + 'direction_id', + 'route_id', + 'schedule_relationship', + 'start_date', + ], }, - "position": { - "type": "object", - "properties": { - "bearing": { - "type": "integer" + position: { + type: 'object', + properties: { + bearing: { + type: 'integer', }, - "latitude": { - "type": "number" + latitude: { + type: 'number', + }, + longitude: { + type: 'number', }, - "longitude": { - "type": "number" - } }, - "required": ["bearing", "latitude", "longitude"] + required: [ + 'bearing', + 'latitude', + 'longitude', + ], }, - "occupancy_status": { - "type": "integer" + occupancy_status: { + type: 'integer', }, - "vehicle": { - "type": "object", - "properties": { - "id": { - "type": "string" - } + vehicle: { + type: 'object', + properties: { + id: { + type: 'string', + }, }, - "required": ["id"] + required: ['id'], + }, + timestamp: { + type: 'integer', }, - "timestamp": { - "type": "integer" - } }, - "required": ["trip", "position", "occupancy_status", "vehicle", "timestamp"] - } + required: [ + 'trip', + 'position', + 'occupancy_status', + 'vehicle', + 'timestamp', + ], + }, }, - "required": ["id", "vehicle"] - } - } + required: ['id', 'vehicle'], + }, + }, }, - "required": ["header", "entity"] + required: ['header', 'entity'], } } const dataSet = [ [ { - "header": { - "gtfsRealtimeVersion": "2.0", - "incrementality": 0, - "timestamp": 1726515043 + header: { + gtfsRealtimeVersion: '2.0', + incrementality: 0, + timestamp: 1726515043, }, - "entity": [ + entity: [ { - "id": "258a7bb5-3ae7-4436-a7d5-340893394391", - "vehicle": { - "trip": { - "start_time": "07:15:00", - "trip_id": "4__1__112__NBM__7__5__7__5_20240825", - "direction_id": 1, - "route_id": 40, - "schedule_relationship": 0, - "start_date": "20240917" + id: '258a7bb5-3ae7-4436-a7d5-340893394391', + vehicle: { + trip: { + start_time: '07:15:00', + trip_id: '4__1__112__NBM__7__5__7__5_20240825', + direction_id: 1, + route_id: 40, + schedule_relationship: 0, + start_date: '20240917', }, - "position": { - "bearing": 282, - "latitude": -41.3181801, - "longitude": 174.7966614 + position: { + bearing: 282, + latitude: -41.3181801, + longitude: 174.7966614, }, - "occupancy_status": 1, - "vehicle": { - "id": "1471" + occupancy_status: 1, + vehicle: { + id: '1471', }, - "timestamp": 1726515037 - } - } - ] - } - ] - ]; + timestamp: 1726515037, + }, + }, + ], + }, + ], + ] function getPath(): string { - return "/gtfs-rt/vehiclepositions"; + return '/gtfs-rt/vehiclepositions' } - it.each(dataSet)("GetGtfsRtVehiclePosition", async (mockData) => { - mock.onGet(getPath()).replyOnce(200, mockData); + it.each(dataSet)('GetGtfsRtVehiclePosition', async (mockData) => { + mock.onGet(getPath()).replyOnce(200, mockData) - const client: MetlinkHttpClient = getHttpClient(axios); - const response = await client.getGtfsRtVehiclePositions(); + const client: MetlinkHttpClient = getHttpClient(axios) + const response = await client.getGtfsRtVehiclePositions() - const result = SchemaValidator.validate(response.data, getSchema()); - expect(result.isValid).toBeTruthy(); - }); -}); \ No newline at end of file + const result = SchemaValidator.validate(response.data, getSchema()) + expect(result.isValid).toBeTruthy() + }) +}) diff --git a/tests/unit/MetlinkHttpClient/Gtfs/Agencies.test.ts b/tests/unit/MetlinkHttpClient/Gtfs/Agencies.test.ts index 388243d..c9a6ae9 100644 --- a/tests/unit/MetlinkHttpClient/Gtfs/Agencies.test.ts +++ b/tests/unit/MetlinkHttpClient/Gtfs/Agencies.test.ts @@ -1,81 +1,81 @@ -import MetlinkHttpClient from "../../../../src/MetlinkHttpClient"; -import axios from 'axios'; -import {AxiosAdapter} from "../../../../src/domain/httpclient/AxiosAdapter"; -import MockAdapter from "axios-mock-adapter"; -import {SchemaValidator} from "../../../SchemaValidator"; +import MetlinkHttpClient from '../../../../src/MetlinkHttpClient' +import axios from 'axios' +import { AxiosAdapter } from '../../../../src/domain/httpclient/AxiosAdapter' +import MockAdapter from 'axios-mock-adapter' +import { SchemaValidator } from '../../../SchemaValidator' -const mock: MockAdapter = new MockAdapter(axios); - -describe("Metlink Http Client: Agencies", () => { +const mock: MockAdapter = new MockAdapter(axios) +describe('Metlink Http Client: Agencies', () => { afterEach(function () { - mock.reset(); - }); + mock.reset() + }) function getHttpClient(client: Axios.AxiosInstance): MetlinkHttpClient { - const adapter: AxiosAdapter = new AxiosAdapter(client); + const adapter: AxiosAdapter = new AxiosAdapter(client) - return new MetlinkHttpClient(adapter); + return new MetlinkHttpClient(adapter) } - function getSchema(): {} { + function getSchema(): object { return { - type: "array", + type: 'array', items: { - type: "object", + type: 'object', properties: { - id: {type: "integer"}, - agency_id: {type: "string"}, - agency_name: {type: "string"}, - agency_timezone: {type: "string"}, - agency_url: {type: "string"}, - agency_lang: {type: "string"}, - agency_phone: {type: "string"}, - agency_fare_url: {type: "string"}, + id: { type: 'integer' }, + agency_id: { type: 'string' }, + agency_name: { type: 'string' }, + agency_timezone: { type: 'string' }, + agency_url: { type: 'string' }, + agency_lang: { type: 'string' }, + agency_phone: { type: 'string' }, + agency_fare_url: { type: 'string' }, }, required: [ - "id", - "agency_id", - "agency_name", - "agency_timezone", - "agency_url", - "agency_lang", - "agency_phone", - "agency_fare_url" + 'id', + 'agency_id', + 'agency_name', + 'agency_timezone', + 'agency_url', + 'agency_lang', + 'agency_phone', + 'agency_fare_url', ], additionalProperties: false, }, - }; + } } const dataSet = [ [ [ { - "id": 1, - "agency_id": "MADG", - "agency_name": "Madge Coachlines Limited", - "agency_timezone": "Pacific/Auckland", - "agency_url": "http://www.metlink.org.nz", - "agency_lang": "en", - "agency_phone": "", - "agency_fare_url": "http://www.metlink.org.nz/tickets-and-fares" - } - ] - ] - ]; + id: 1, + agency_id: 'An', + agency_name: 'Agency name', + agency_timezone: 'Pacific/Auckland', + agency_url: 'https://someling', + agency_lang: 'en', + agency_phone: '', + agency_fare_url: + 'https://somelinks.com', + }, + ], + ], + ] function getPath(): string { - return "/gtfs/agency"; + return '/gtfs/agency' } - it.each(dataSet)("getGtfsAgencies", async (agencies) => { - mock.onGet(getPath()).replyOnce(200, agencies); + it.each(dataSet)('getGtfsAgencies', async (agencies) => { + mock.onGet(getPath()).replyOnce(200, agencies) - const client: MetlinkHttpClient = getHttpClient(axios); - const response = await client.getGtfsAgencies(); + const client: MetlinkHttpClient = getHttpClient(axios) + const response = await client.getGtfsAgencies() - const result = SchemaValidator.validate(response.data, getSchema()); - expect(result.isValid).toBeTruthy(); - }); -}); \ No newline at end of file + const result = SchemaValidator.validate(response.data, getSchema()) + expect(result.isValid).toBeTruthy() + }) +}) diff --git a/tests/unit/MetlinkHttpClient/Gtfs/Calendar.test.ts b/tests/unit/MetlinkHttpClient/Gtfs/Calendar.test.ts index 97be5de..f6b6f67 100644 --- a/tests/unit/MetlinkHttpClient/Gtfs/Calendar.test.ts +++ b/tests/unit/MetlinkHttpClient/Gtfs/Calendar.test.ts @@ -1,88 +1,87 @@ -import MetlinkHttpClient from "../../../../src/MetlinkHttpClient"; -import axios from 'axios'; -import {AxiosAdapter} from "../../../../src/domain/httpclient/AxiosAdapter"; -import MockAdapter from "axios-mock-adapter"; -import {SchemaValidator} from "../../../SchemaValidator"; +import MetlinkHttpClient from '../../../../src/MetlinkHttpClient' +import axios from 'axios' +import { AxiosAdapter } from '../../../../src/domain/httpclient/AxiosAdapter' +import MockAdapter from 'axios-mock-adapter' +import { SchemaValidator } from '../../../SchemaValidator' -const mock: MockAdapter = new MockAdapter(axios); - -describe("Metlink Http Client: Calendar", () => { +const mock: MockAdapter = new MockAdapter(axios) +describe('Metlink Http Client: Calendar', () => { afterEach(function () { - mock.reset(); - }); + mock.reset() + }) function getHttpClient(client: Axios.AxiosInstance): MetlinkHttpClient { - const adapter: AxiosAdapter = new AxiosAdapter(client); + const adapter: AxiosAdapter = new AxiosAdapter(client) - return new MetlinkHttpClient(adapter); + return new MetlinkHttpClient(adapter) } - function getSchema(): {} { + function getSchema(): object { return { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "integer" + type: 'array', + items: { + type: 'object', + properties: { + id: { + type: 'integer', + }, + service_id: { + type: 'string', }, - "service_id": { - "type": "string" + monday: { + type: 'integer', + enum: [0, 1], // Assuming 0 or 1 represent days of service (0 = no service, 1 = service) }, - "monday": { - "type": "integer", - "enum": [0, 1] // Assuming 0 or 1 represent days of service (0 = no service, 1 = service) + tuesday: { + type: 'integer', + enum: [0, 1], }, - "tuesday": { - "type": "integer", - "enum": [0, 1] + wednesday: { + type: 'integer', + enum: [0, 1], }, - "wednesday": { - "type": "integer", - "enum": [0, 1] + thursday: { + type: 'integer', + enum: [0, 1], }, - "thursday": { - "type": "integer", - "enum": [0, 1] + friday: { + type: 'integer', + enum: [0, 1], }, - "friday": { - "type": "integer", - "enum": [0, 1] + saturday: { + type: 'integer', + enum: [0, 1], }, - "saturday": { - "type": "integer", - "enum": [0, 1] + sunday: { + type: 'integer', + enum: [0, 1], }, - "sunday": { - "type": "integer", - "enum": [0, 1] + start_date: { + type: 'string', + pattern: '^\\d{8}$', // Format YYYYMMDD }, - "start_date": { - "type": "string", - "pattern": "^\\d{8}$" // Format YYYYMMDD + end_date: { + type: 'string', + pattern: '^\\d{8}$', // Format YYYYMMDD }, - "end_date": { - "type": "string", - "pattern": "^\\d{8}$" // Format YYYYMMDD - } }, - "required": [ - "id", - "service_id", - "monday", - "tuesday", - "wednesday", - "thursday", - "friday", - "saturday", - "sunday", - "start_date", - "end_date" + required: [ + 'id', + 'service_id', + 'monday', + 'tuesday', + 'wednesday', + 'thursday', + 'friday', + 'saturday', + 'sunday', + 'start_date', + 'end_date', ], - "additionalProperties": false - } - }; + additionalProperties: false, + }, + } } const dataSet = [ @@ -99,23 +98,23 @@ describe("Metlink Http Client: Calendar", () => { saturday: 0, sunday: 0, start_date: '20240825', - end_date: '20240928' + end_date: '20240928', }, - ] - ] - ]; + ], + ], + ] function getPath(): string { - return "/gtfs/calendar"; + return '/gtfs/calendar' } - it.each(dataSet)("getGtfsCalendar", async (calendar) => { - mock.onGet(getPath()).replyOnce(200, calendar); + it.each(dataSet)('getGtfsCalendar', async (calendar) => { + mock.onGet(getPath()).replyOnce(200, calendar) - const client: MetlinkHttpClient = getHttpClient(axios); - const response = await client.getGtfsCalendar(); + const client: MetlinkHttpClient = getHttpClient(axios) + const response = await client.getGtfsCalendar() - const result = SchemaValidator.validate(response.data, getSchema()); - expect(result.isValid).toBeTruthy(); - }); -}); \ No newline at end of file + const result = SchemaValidator.validate(response.data, getSchema()) + expect(result.isValid).toBeTruthy() + }) +}) diff --git a/tests/unit/MetlinkHttpClient/Gtfs/CalendarDates.test.ts b/tests/unit/MetlinkHttpClient/Gtfs/CalendarDates.test.ts index 2aeb02a..660766e 100644 --- a/tests/unit/MetlinkHttpClient/Gtfs/CalendarDates.test.ts +++ b/tests/unit/MetlinkHttpClient/Gtfs/CalendarDates.test.ts @@ -1,73 +1,72 @@ -import MetlinkHttpClient from "../../../../src/MetlinkHttpClient"; -import axios from 'axios'; -import {AxiosAdapter} from "../../../../src/domain/httpclient/AxiosAdapter"; -import MockAdapter from "axios-mock-adapter"; -import {SchemaValidator} from "../../../SchemaValidator"; +import MetlinkHttpClient from '../../../../src/MetlinkHttpClient' +import axios from 'axios' +import { AxiosAdapter } from '../../../../src/domain/httpclient/AxiosAdapter' +import MockAdapter from 'axios-mock-adapter' +import { SchemaValidator } from '../../../SchemaValidator' -const mock: MockAdapter = new MockAdapter(axios); - -describe("Metlink Http Client: Calendar Dates", () => { +const mock: MockAdapter = new MockAdapter(axios) +describe('Metlink Http Client: Calendar Dates', () => { afterEach(function () { - mock.reset(); - }); + mock.reset() + }) function getHttpClient(client: Axios.AxiosInstance): MetlinkHttpClient { - const adapter: AxiosAdapter = new AxiosAdapter(client); + const adapter: AxiosAdapter = new AxiosAdapter(client) - return new MetlinkHttpClient(adapter); + return new MetlinkHttpClient(adapter) } - function getSchema(): {} { + function getSchema(): object { return { - type: "array", + type: 'array', items: { - "type": "object", - "properties": { - "id": { - "type": "integer" + type: 'object', + properties: { + id: { + type: 'integer', + }, + service_id: { + type: 'string', }, - "service_id": { - "type": "string" + date: { + type: 'string', + pattern: '^\\d{8}$', // Format YYYYMMDD }, - "date": { - "type": "string", - "pattern": "^\\d{8}$" // Format YYYYMMDD + exception_type: { + type: 'integer', }, - "exception_type": { - "type": "integer", - } }, - "required": ["id", "service_id", "date", "exception_type"], - "additionalProperties": false - } - }; + required: ['id', 'service_id', 'date', 'exception_type'], + additionalProperties: false, + }, + } } const dataSet = [ [ [ { - "id": 99, - "service_id": "612_20240825", - "date": "20240919", - "exception_type": 1 - } - ] - ] - ]; + id: 99, + service_id: '612_20240825', + date: '20240919', + exception_type: 1, + }, + ], + ], + ] function getPath(): string { - return "/gtfs/calendar_dates"; + return '/gtfs/calendar_dates' } - it.each(dataSet)("getGtfsCalendarDates", async (mockData) => { - mock.onGet(getPath()).replyOnce(200, mockData); + it.each(dataSet)('getGtfsCalendarDates', async (mockData) => { + mock.onGet(getPath()).replyOnce(200, mockData) - const client: MetlinkHttpClient = getHttpClient(axios); - const response = await client.getGtfsCalendarDates(); + const client: MetlinkHttpClient = getHttpClient(axios) + const response = await client.getGtfsCalendarDates() - const result = SchemaValidator.validate(response.data, getSchema()); - expect(result.isValid).toBeTruthy(); - }); -}); \ No newline at end of file + const result = SchemaValidator.validate(response.data, getSchema()) + expect(result.isValid).toBeTruthy() + }) +}) diff --git a/tests/unit/MetlinkHttpClient/Gtfs/FeedInfo.test.ts b/tests/unit/MetlinkHttpClient/Gtfs/FeedInfo.test.ts index 0c7d718..178b057 100644 --- a/tests/unit/MetlinkHttpClient/Gtfs/FeedInfo.test.ts +++ b/tests/unit/MetlinkHttpClient/Gtfs/FeedInfo.test.ts @@ -1,65 +1,64 @@ -import MetlinkHttpClient from "../../../../src/MetlinkHttpClient"; -import axios from 'axios'; -import {AxiosAdapter} from "../../../../src/domain/httpclient/AxiosAdapter"; -import MockAdapter from "axios-mock-adapter"; -import {SchemaValidator} from "../../../SchemaValidator"; +import MetlinkHttpClient from '../../../../src/MetlinkHttpClient' +import axios from 'axios' +import { AxiosAdapter } from '../../../../src/domain/httpclient/AxiosAdapter' +import MockAdapter from 'axios-mock-adapter' +import { SchemaValidator } from '../../../SchemaValidator' -const mock: MockAdapter = new MockAdapter(axios); - -describe("Metlink Http Client: Feed info", () => { +const mock: MockAdapter = new MockAdapter(axios) +describe('Metlink Http Client: Feed info', () => { afterEach(function () { - mock.reset(); - }); + mock.reset() + }) function getHttpClient(client: Axios.AxiosInstance): MetlinkHttpClient { - const adapter: AxiosAdapter = new AxiosAdapter(client); + const adapter: AxiosAdapter = new AxiosAdapter(client) - return new MetlinkHttpClient(adapter); + return new MetlinkHttpClient(adapter) } - function getSchema(): {} { + function getSchema(): object { return { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "integer" + type: 'array', + items: { + type: 'object', + properties: { + id: { + type: 'integer', + }, + feed_publisher_name: { + type: 'string', }, - "feed_publisher_name": { - "type": "string" + feed_publisher_url: { + type: 'string', }, - "feed_publisher_url": { - "type": "string", + feed_lang: { + type: 'string', }, - "feed_lang": { - "type": "string" + feed_start_date: { + type: 'string', + pattern: '^\\d{8}$', // Format YYYYMMDD }, - "feed_start_date": { - "type": "string", - "pattern": "^\\d{8}$" // Format YYYYMMDD + feed_end_date: { + type: 'string', + pattern: '^\\d{8}$', // Format YYYYMMDD }, - "feed_end_date": { - "type": "string", - "pattern": "^\\d{8}$" // Format YYYYMMDD + feed_version: { + type: 'string', }, - "feed_version": { - "type": "string" - } }, - "required": [ - "id", - "feed_publisher_name", - "feed_publisher_url", - "feed_lang", - "feed_start_date", - "feed_end_date", - "feed_version" + required: [ + 'id', + 'feed_publisher_name', + 'feed_publisher_url', + 'feed_lang', + 'feed_start_date', + 'feed_end_date', + 'feed_version', ], - "additionalProperties": false - } - }; + additionalProperties: false, + }, + } } const dataSet = [ @@ -72,24 +71,23 @@ describe("Metlink Http Client: Feed info", () => { feed_lang: 'en', feed_start_date: '20240825', feed_end_date: '20241012', - feed_version: 'Version' - } - ] - - ] - ]; + feed_version: 'Version', + }, + ], + ], + ] function getPath(): string { - return "/gtfs/feed_info"; + return '/gtfs/feed_info' } - it.each(dataSet)("getGtfsFeedInfo", async (mockData) => { - mock.onGet(getPath()).replyOnce(200, mockData); + it.each(dataSet)('getGtfsFeedInfo', async (mockData) => { + mock.onGet(getPath()).replyOnce(200, mockData) - const client: MetlinkHttpClient = getHttpClient(axios); - const response = await client.getGtfsFeedInfo(); + const client: MetlinkHttpClient = getHttpClient(axios) + const response = await client.getGtfsFeedInfo() - const result = SchemaValidator.validate(response.data, getSchema()); - expect(result.isValid).toBeTruthy(); - }); -}); \ No newline at end of file + const result = SchemaValidator.validate(response.data, getSchema()) + expect(result.isValid).toBeTruthy() + }) +}) diff --git a/tests/unit/MetlinkHttpClient/Gtfs/Routes.test.ts b/tests/unit/MetlinkHttpClient/Gtfs/Routes.test.ts index 58f2bbf..71e9df3 100644 --- a/tests/unit/MetlinkHttpClient/Gtfs/Routes.test.ts +++ b/tests/unit/MetlinkHttpClient/Gtfs/Routes.test.ts @@ -1,80 +1,79 @@ -import MetlinkHttpClient from "../../../../src/MetlinkHttpClient"; -import axios from 'axios'; -import {AxiosAdapter} from "../../../../src/domain/httpclient/AxiosAdapter"; -import MockAdapter from "axios-mock-adapter"; -import {SchemaValidator} from "../../../SchemaValidator"; +import MetlinkHttpClient from '../../../../src/MetlinkHttpClient' +import axios from 'axios' +import { AxiosAdapter } from '../../../../src/domain/httpclient/AxiosAdapter' +import MockAdapter from 'axios-mock-adapter' +import { SchemaValidator } from '../../../SchemaValidator' -const mock: MockAdapter = new MockAdapter(axios); - -describe("Metlink Http Client: Routes", () => { +const mock: MockAdapter = new MockAdapter(axios) +describe('Metlink Http Client: Routes', () => { afterEach(function () { - mock.reset(); - }); + mock.reset() + }) function getHttpClient(client: Axios.AxiosInstance): MetlinkHttpClient { - const adapter: AxiosAdapter = new AxiosAdapter(client); + const adapter: AxiosAdapter = new AxiosAdapter(client) - return new MetlinkHttpClient(adapter); + return new MetlinkHttpClient(adapter) } - function getSchema(): {} { + function getSchema(): object { return { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "integer" + type: 'array', + items: { + type: 'object', + properties: { + id: { + type: 'integer', + }, + route_id: { + type: 'string', }, - "route_id": { - "type": "string" + agency_id: { + type: 'string', }, - "agency_id": { - "type": "string" + route_short_name: { + type: 'string', }, - "route_short_name": { - "type": "string" + route_long_name: { + type: 'string', }, - "route_long_name": { - "type": "string" + route_desc: { + type: 'string', }, - "route_desc": { - "type": "string" + route_type: { + type: 'integer', }, - "route_type": { - "type": "integer" + route_color: { + type: 'string', + pattern: '^[0-9a-fA-F]{6}$', // Hex color code without the '#' }, - "route_color": { - "type": "string", - "pattern": "^[0-9a-fA-F]{6}$" // Hex color code without the '#' + route_text_color: { + type: 'string', + pattern: '^[0-9a-fA-F]{6}$', // Hex color code without the '#' }, - "route_text_color": { - "type": "string", - "pattern": "^[0-9a-fA-F]{6}$" // Hex color code without the '#' + route_url: { + type: 'string', }, - "route_url": { - "type": "string" + route_sort_order: { + type: 'integer', }, - "route_sort_order": { - "type": "integer" - } }, - "required": [ - "id", - "route_id", - "agency_id", - "route_short_name", - "route_long_name", - "route_desc", - "route_type", - "route_color", - "route_text_color", - "route_url", - "route_sort_order" + required: [ + 'id', + 'route_id', + 'agency_id', + 'route_short_name', + 'route_long_name', + 'route_desc', + 'route_type', + 'route_color', + 'route_text_color', + 'route_url', + 'route_sort_order', ], - "additionalProperties": false - } + additionalProperties: false, + }, } } @@ -82,45 +81,53 @@ describe("Metlink Http Client: Routes", () => { [ [ { - "id": 9, - "route_id": "10", - "agency_id": "TZM", - "route_short_name": "1", - "route_long_name": "Johnsonville West/Churton Park/Grenada Village - Island Bay", - "route_desc": "Island Bay - Johnsonville West/Churton Park/Grenada Village", - "route_type": 3, - "route_color": "e31837", - "route_text_color": "ffffff", - "route_url": "", - "route_sort_order": 10 - } - ] - - ] - ]; + id: 9, + route_id: '10', + agency_id: 'TZM', + route_short_name: '1', + route_long_name: + 'Johnsonville West/Churton Park/Grenada Village - Island Bay', + route_desc: + 'Island Bay - Johnsonville West/Churton Park/Grenada Village', + route_type: 3, + route_color: 'e31837', + route_text_color: 'ffffff', + route_url: '', + route_sort_order: 10, + }, + ], + ], + ] + + function getPath(routeId: string | null = null): string { + const query: URLSearchParams = new URLSearchParams() + let prefix = '' + if (routeId) { + query.append('route_id', routeId) + prefix = '?' + } - function getPath(): string { - return "/gtfs/routes"; + return '/gtfs/routes' + prefix + query.toString() } - it.each(dataSet)("getGtfsRoutes", async (mockData) => { - mock.onGet(getPath()).replyOnce(200, mockData); + it.each(dataSet)('getGtfsRoutes', async (mockData) => { + mock.onGet(getPath()).replyOnce(200, mockData) - const client: MetlinkHttpClient = getHttpClient(axios); - const response = await client.getGtfsRoutes(); + const client: MetlinkHttpClient = getHttpClient(axios) + const response = await client.getGtfsRoutes() - const result = SchemaValidator.validate(response.data, getSchema()); + const result = SchemaValidator.validate(response.data, getSchema()) - expect(result.isValid).toBeTruthy(); - }); + expect(result.isValid).toBeTruthy() + }) - it.each(dataSet)("getRouteById", async (mockData) => { - mock.onGet(getPath()).replyOnce(200, mockData); + it.each(dataSet)('getRouteById', async (mockData) => { + mock.onGet(getPath('1100')).replyOnce(200, mockData) - const client: MetlinkHttpClient = getHttpClient(axios); - const response = await client.getGtfsRoutes("1100"); + const client: MetlinkHttpClient = getHttpClient(axios) + const response = await client.getGtfsRoutes('1100') - const result = SchemaValidator.validate(response.data, getSchema()); - expect(result.isValid).toBeTruthy(); - }); -}); \ No newline at end of file + const result = SchemaValidator.validate(response.data, getSchema()) + expect(result.isValid).toBeTruthy() + }) +}) diff --git a/tests/unit/MetlinkHttpClient/Gtfs/Shapes.test.ts b/tests/unit/MetlinkHttpClient/Gtfs/Shapes.test.ts index f36f9c2..b74bfc3 100644 --- a/tests/unit/MetlinkHttpClient/Gtfs/Shapes.test.ts +++ b/tests/unit/MetlinkHttpClient/Gtfs/Shapes.test.ts @@ -1,93 +1,92 @@ -import MetlinkHttpClient from "../../../../src/MetlinkHttpClient"; -import axios from 'axios'; -import {AxiosAdapter} from "../../../../src/domain/httpclient/AxiosAdapter"; -import MockAdapter from "axios-mock-adapter"; -import {SchemaValidator} from "../../../SchemaValidator"; +import MetlinkHttpClient from '../../../../src/MetlinkHttpClient' +import axios from 'axios' +import { AxiosAdapter } from '../../../../src/domain/httpclient/AxiosAdapter' +import MockAdapter from 'axios-mock-adapter' +import { SchemaValidator } from '../../../SchemaValidator' -const mock: MockAdapter = new MockAdapter(axios); +const mock: MockAdapter = new MockAdapter(axios) -describe("Metlink Http Client: Shapes", () => { - - const ShapeId1: string = "[@364.0.17527449@]1_20240825"; +describe('Metlink Http Client: Shapes', () => { + const ShapeId1: string = '[@364.0.17527449@]1_20240825' afterEach(function () { - mock.reset(); - }); + mock.reset() + }) function getHttpClient(client: Axios.AxiosInstance): MetlinkHttpClient { - const adapter: AxiosAdapter = new AxiosAdapter(client); + const adapter: AxiosAdapter = new AxiosAdapter(client) - return new MetlinkHttpClient(adapter); + return new MetlinkHttpClient(adapter) } - function getSchema(): {} { + function getSchema(): object { return { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "integer" + type: 'array', + items: { + type: 'object', + properties: { + id: { + type: 'integer', + }, + shape_id: { + type: 'string', }, - "shape_id": { - "type": "string" + shape_pt_lat: { + type: 'number', }, - "shape_pt_lat": { - "type": "number" + shape_pt_lon: { + type: 'number', }, - "shape_pt_lon": { - "type": "number" + shape_pt_sequence: { + type: 'integer', }, - "shape_pt_sequence": { - "type": "integer" + shape_dist_traveled: { + type: 'number', }, - "shape_dist_traveled": { - "type": "number" - } }, - "required": [ - "id", - "shape_id", - "shape_pt_lat", - "shape_pt_lon", - "shape_pt_sequence", - "shape_dist_traveled" + required: [ + 'id', + 'shape_id', + 'shape_pt_lat', + 'shape_pt_lon', + 'shape_pt_sequence', + 'shape_dist_traveled', ], - "additionalProperties": false - } - }; + additionalProperties: false, + }, + } } const dataSet = [ [ [ { - "id": 92441, - "shape_id": "[@364.0.17527449@]1_20240825", - "shape_pt_lat": -41.2091982, - "shape_pt_lon": 174.9050033, - "shape_pt_sequence": 0, - "shape_dist_traveled": 0 - } + id: 92441, + shape_id: '[@364.0.17527449@]1_20240825', + shape_pt_lat: -41.2091982, + shape_pt_lon: 174.9050033, + shape_pt_sequence: 0, + shape_dist_traveled: 0, + }, ], ], - ]; + ] function getPath(shapeId: string): string { const query: URLSearchParams = new URLSearchParams({ - "shape_id": shapeId - }); + shape_id: shapeId, + }) - return "/gtfs/shapes?"+query.toString(); + return '/gtfs/shapes?' + query.toString() } - it.each(dataSet)("getGtfsShapes", async (mockData) => { - mock.onGet(getPath(ShapeId1)).replyOnce(200, mockData); + it.each(dataSet)('getGtfsShapes', async (mockData) => { + mock.onGet(getPath(ShapeId1)).replyOnce(200, mockData) - const client: MetlinkHttpClient = getHttpClient(axios); - const response = await client.getGtfsShapes(ShapeId1); + const client: MetlinkHttpClient = getHttpClient(axios) + const response = await client.getGtfsShapes(ShapeId1) - const result = SchemaValidator.validate(response.data, getSchema()); - expect(result.isValid).toBeTruthy(); - }); -}); \ No newline at end of file + const result = SchemaValidator.validate(response.data, getSchema()) + expect(result.isValid).toBeTruthy() + }) +}) diff --git a/tests/unit/MetlinkHttpClient/Gtfs/StopTimes.test.ts b/tests/unit/MetlinkHttpClient/Gtfs/StopTimes.test.ts index 052807a..f254f4f 100644 --- a/tests/unit/MetlinkHttpClient/Gtfs/StopTimes.test.ts +++ b/tests/unit/MetlinkHttpClient/Gtfs/StopTimes.test.ts @@ -1,82 +1,81 @@ -import MetlinkHttpClient from "../../../../src/MetlinkHttpClient"; -import axios from 'axios'; -import {AxiosAdapter} from "../../../../src/domain/httpclient/AxiosAdapter"; -import MockAdapter from "axios-mock-adapter"; -import {SchemaValidator} from "../../../SchemaValidator"; +import MetlinkHttpClient from '../../../../src/MetlinkHttpClient' +import axios from 'axios' +import { AxiosAdapter } from '../../../../src/domain/httpclient/AxiosAdapter' +import MockAdapter from 'axios-mock-adapter' +import { SchemaValidator } from '../../../SchemaValidator' -const mock: MockAdapter = new MockAdapter(axios); - -describe("Metlink Http Client: Stop times", () => { +const mock: MockAdapter = new MockAdapter(axios) +describe('Metlink Http Client: Stop times', () => { afterEach(function () { - mock.reset(); - }); + mock.reset() + }) function getHttpClient(client: Axios.AxiosInstance): MetlinkHttpClient { - const adapter: AxiosAdapter = new AxiosAdapter(client); + const adapter: AxiosAdapter = new AxiosAdapter(client) - return new MetlinkHttpClient(adapter); + return new MetlinkHttpClient(adapter) } - const TRIP_ID = "60__0__439__MNM__2071__1__2071__1_20240825"; + const TRIP_ID = '60__0__439__MNM__2071__1__2071__1_20240825' - function getSchema(): {} { + function getSchema(): object { return { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "integer" + type: 'array', + items: { + type: 'object', + properties: { + id: { + type: 'integer', + }, + trip_id: { + type: 'string', }, - "trip_id": { - "type": "string" + arrival_time: { + type: 'string', + pattern: '^\\d{2}:\\d{2}:\\d{2}$', // Format HH:MM:SS }, - "arrival_time": { - "type": "string", - "pattern": "^\\d{2}:\\d{2}:\\d{2}$" // Format HH:MM:SS + departure_time: { + type: 'string', + pattern: '^\\d{2}:\\d{2}:\\d{2}$', // Format HH:MM:SS }, - "departure_time": { - "type": "string", - "pattern": "^\\d{2}:\\d{2}:\\d{2}$" // Format HH:MM:SS + stop_id: { + type: 'string', }, - "stop_id": { - "type": "string" + stop_sequence: { + type: 'integer', }, - "stop_sequence": { - "type": "integer" + shape_dist_traveled: { + type: 'number', }, - "shape_dist_traveled": { - "type": "number" + stop_headsign: { + type: 'string', }, - "stop_headsign": { - "type": "string" + pickup_type: { + type: 'integer', }, - "pickup_type": { - "type": "integer", + drop_off_type: { + type: 'integer', }, - "drop_off_type": { - "type": "integer", + timepoint: { + type: 'string', }, - "timepoint": { - "type": "string", - } }, - "required": [ - "id", - "trip_id", - "arrival_time", - "departure_time", - "stop_id", - "stop_sequence", - "shape_dist_traveled", - "stop_headsign", - "pickup_type", - "drop_off_type", - "timepoint" + required: [ + 'id', + 'trip_id', + 'arrival_time', + 'departure_time', + 'stop_id', + 'stop_sequence', + 'shape_dist_traveled', + 'stop_headsign', + 'pickup_type', + 'drop_off_type', + 'timepoint', ], - "additionalProperties": false - } + additionalProperties: false, + }, } } @@ -84,38 +83,37 @@ describe("Metlink Http Client: Stop times", () => { [ [ { - "id": 1, - "trip_id": "60__0__439__MNM__2071__1__2071__1_20240825", - "arrival_time": "16:58:00", - "departure_time": "16:58:00", - "stop_id": "3000", - "stop_sequence": 0, - "shape_dist_traveled": 0, - "stop_headsign": "Porirua", - "pickup_type": 0, - "drop_off_type": 1, - "timepoint": "1" - } - ] - ] - ]; + id: 1, + trip_id: '60__0__439__MNM__2071__1__2071__1_20240825', + arrival_time: '16:58:00', + departure_time: '16:58:00', + stop_id: '3000', + stop_sequence: 0, + shape_dist_traveled: 0, + stop_headsign: 'Porirua', + pickup_type: 0, + drop_off_type: 1, + timepoint: '1', + }, + ], + ], + ] - function getPath(tripId: string): string - { + function getPath(tripId: string): string { const query: URLSearchParams = new URLSearchParams({ - "trip_id": tripId - }); + trip_id: tripId, + }) - return "/gtfs/stop_times?"+query.toString(); + return '/gtfs/stop_times?' + query.toString() } - it.each(dataSet)("getGtfsStopTimes", async (mockData) => { - mock.onGet(getPath(TRIP_ID)).replyOnce(200, mockData); + it.each(dataSet)('getGtfsStopTimes', async (mockData) => { + mock.onGet(getPath(TRIP_ID)).replyOnce(200, mockData) - const client: MetlinkHttpClient = getHttpClient(axios); - const response = await client.getGtfsStopTimes(TRIP_ID); + const client: MetlinkHttpClient = getHttpClient(axios) + const response = await client.getGtfsStopTimes(TRIP_ID) - const result = SchemaValidator.validate(response.data, getSchema()); - expect(result.isValid).toBeTruthy(); - }); -}); \ No newline at end of file + const result = SchemaValidator.validate(response.data, getSchema()) + expect(result.isValid).toBeTruthy() + }) +}) diff --git a/tests/unit/MetlinkHttpClient/Gtfs/Stops.test.ts b/tests/unit/MetlinkHttpClient/Gtfs/Stops.test.ts index 8257d8a..2b8ab9f 100644 --- a/tests/unit/MetlinkHttpClient/Gtfs/Stops.test.ts +++ b/tests/unit/MetlinkHttpClient/Gtfs/Stops.test.ts @@ -1,82 +1,81 @@ -import MetlinkHttpClient from "../../../../src/MetlinkHttpClient"; -import axios from 'axios'; -import {AxiosAdapter} from "../../../../src/domain/httpclient/AxiosAdapter"; -import MockAdapter from "axios-mock-adapter"; -import {SchemaValidator} from "../../../SchemaValidator"; +import MetlinkHttpClient from '../../../../src/MetlinkHttpClient' +import axios from 'axios' +import { AxiosAdapter } from '../../../../src/domain/httpclient/AxiosAdapter' +import MockAdapter from 'axios-mock-adapter' +import { SchemaValidator } from '../../../SchemaValidator' -const mock: MockAdapter = new MockAdapter(axios); - -describe("Metlink Http Client: Stops", () => { +const mock: MockAdapter = new MockAdapter(axios) +describe('Metlink Http Client: Stops', () => { afterEach(function () { - mock.reset(); - }); + mock.reset() + }) function getHttpClient(client: Axios.AxiosInstance): MetlinkHttpClient { - const adapter: AxiosAdapter = new AxiosAdapter(client); + const adapter: AxiosAdapter = new AxiosAdapter(client) - return new MetlinkHttpClient(adapter); + return new MetlinkHttpClient(adapter) } - function getSchema(): {} { + function getSchema(): object { return { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "integer" + type: 'array', + items: { + type: 'object', + properties: { + id: { + type: 'integer', + }, + stop_id: { + type: 'string', }, - "stop_id": { - "type": "string" + stop_code: { + type: 'string', }, - "stop_code": { - "type": "string" + stop_name: { + type: 'string', }, - "stop_name": { - "type": "string" + stop_desc: { + type: 'string', }, - "stop_desc": { - "type": "string" + zone_id: { + type: 'string', }, - "zone_id": { - "type": "string" + stop_lat: { + type: 'number', }, - "stop_lat": { - "type": "number" + stop_lon: { + type: 'number', }, - "stop_lon": { - "type": "number" + location_type: { + type: 'integer', }, - "location_type": { - "type": "integer" + parent_station: { + type: 'string', }, - "parent_station": { - "type": "string" + stop_url: { + type: 'string', }, - "stop_url": { - "type": "string" + stop_timezone: { + type: 'string', }, - "stop_timezone": { - "type": "string" - } }, - "required": [ - "id", - "stop_id", - "stop_code", - "stop_name", - "stop_desc", - "zone_id", - "stop_lat", - "stop_lon", - "location_type", - "parent_station", - "stop_url", - "stop_timezone" + required: [ + 'id', + 'stop_id', + 'stop_code', + 'stop_name', + 'stop_desc', + 'zone_id', + 'stop_lat', + 'stop_lon', + 'location_type', + 'parent_station', + 'stop_url', + 'stop_timezone', ], - "additionalProperties": false - } + additionalProperties: false, + }, } } @@ -84,34 +83,34 @@ describe("Metlink Http Client: Stops", () => { [ [ { - "id": 1, - "stop_id": "7951", - "stop_code": "7951", - "stop_name": "Buckley Road (near 108)", - "stop_desc": "", - "zone_id": "3", - "stop_lat": -41.33689713, - "stop_lon": 174.7827608, - "location_type": 0, - "parent_station": "", - "stop_url": "", - "stop_timezone": "Pacific/Auckland" - } - ] - ] - ]; + id: 1, + stop_id: '7951', + stop_code: '7951', + stop_name: 'Buckley Road (near 108)', + stop_desc: '', + zone_id: '3', + stop_lat: -41.33689713, + stop_lon: 174.7827608, + location_type: 0, + parent_station: '', + stop_url: '', + stop_timezone: 'Pacific/Auckland', + }, + ], + ], + ] function getPath(): string { - return "/gtfs/stops"; + return '/gtfs/stops' } - it.each(dataSet)("getGtfsStops", async (mockData) => { - mock.onGet(getPath()).replyOnce(200, mockData); + it.each(dataSet)('getGtfsStops', async (mockData) => { + mock.onGet(getPath()).replyOnce(200, mockData) - const client: MetlinkHttpClient = getHttpClient(axios); - const response = await client.getGtfsStops(); + const client: MetlinkHttpClient = getHttpClient(axios) + const response = await client.getGtfsStops() - const result = SchemaValidator.validate(response.data, getSchema()); - expect(result.isValid).toBeTruthy(); - }); -}); \ No newline at end of file + const result = SchemaValidator.validate(response.data, getSchema()) + expect(result.isValid).toBeTruthy() + }) +}) diff --git a/tests/unit/MetlinkHttpClient/Gtfs/Transfers.test.ts b/tests/unit/MetlinkHttpClient/Gtfs/Transfers.test.ts index 7eaeca4..6e2576a 100644 --- a/tests/unit/MetlinkHttpClient/Gtfs/Transfers.test.ts +++ b/tests/unit/MetlinkHttpClient/Gtfs/Transfers.test.ts @@ -1,62 +1,61 @@ -import MetlinkHttpClient from "../../../../src/MetlinkHttpClient"; -import axios from 'axios'; -import {AxiosAdapter} from "../../../../src/domain/httpclient/AxiosAdapter"; -import MockAdapter from "axios-mock-adapter"; -import {SchemaValidator} from "../../../SchemaValidator"; +import MetlinkHttpClient from '../../../../src/MetlinkHttpClient' +import axios from 'axios' +import { AxiosAdapter } from '../../../../src/domain/httpclient/AxiosAdapter' +import MockAdapter from 'axios-mock-adapter' +import { SchemaValidator } from '../../../SchemaValidator' -const mock: MockAdapter = new MockAdapter(axios); - -describe("Metlink Http Client: Transfers", () => { +const mock: MockAdapter = new MockAdapter(axios) +describe('Metlink Http Client: Transfers', () => { afterEach(function () { - mock.reset(); - }); + mock.reset() + }) function getHttpClient(client: Axios.AxiosInstance): MetlinkHttpClient { - const adapter: AxiosAdapter = new AxiosAdapter(client); + const adapter: AxiosAdapter = new AxiosAdapter(client) - return new MetlinkHttpClient(adapter); + return new MetlinkHttpClient(adapter) } - function getSchema(): {} { + function getSchema(): object { return { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "integer" + type: 'array', + items: { + type: 'object', + properties: { + id: { + type: 'integer', + }, + from_stop_id: { + type: 'string', }, - "from_stop_id": { - "type": "string" + to_stop_id: { + type: 'string', }, - "to_stop_id": { - "type": "string" + transfer_type: { + type: 'string', }, - "transfer_type": { - "type": "string" + min_transfer_time: { + type: 'string', }, - "min_transfer_time": { - "type": "string" + from_trip_id: { + type: 'string', }, - "from_trip_id": { - "type": "string" + to_trip_id: { + type: 'string', }, - "to_trip_id": { - "type": "string" - } }, - "required": [ - "id", - "from_stop_id", - "to_stop_id", - "transfer_type", - "min_transfer_time", - "from_trip_id", - "to_trip_id" + required: [ + 'id', + 'from_stop_id', + 'to_stop_id', + 'transfer_type', + 'min_transfer_time', + 'from_trip_id', + 'to_trip_id', ], - "additionalProperties": false - } + additionalProperties: false, + }, } } @@ -64,29 +63,29 @@ describe("Metlink Http Client: Transfers", () => { [ [ { - "id": 1, - "from_stop_id": "9416", - "to_stop_id": "SILV", - "transfer_type": "2", - "min_transfer_time": "240", - "from_trip_id": "115__0__421__TZM__508__3__508__3_20240825", - "to_trip_id": "HVL__1__3853__RAIL__Rail_SaSu+Hol_20240825" - } - ] - ] - ]; + id: 1, + from_stop_id: '9416', + to_stop_id: 'SILV', + transfer_type: '2', + min_transfer_time: '240', + from_trip_id: '115__0__421__TZM__508__3__508__3_20240825', + to_trip_id: 'HVL__1__3853__RAIL__Rail_SaSu+Hol_20240825', + }, + ], + ], + ] function getPath(): string { - return "/gtfs/transfers"; + return '/gtfs/transfers' } - it.each(dataSet)("getGtfsTransfers", async (mockData) => { - mock.onGet(getPath()).replyOnce(200, mockData); + it.each(dataSet)('getGtfsTransfers', async (mockData) => { + mock.onGet(getPath()).replyOnce(200, mockData) - const client: MetlinkHttpClient = getHttpClient(axios); - const response = await client.getGtfsTransfers(); + const client: MetlinkHttpClient = getHttpClient(axios) + const response = await client.getGtfsTransfers() - const result = SchemaValidator.validate(response.data, getSchema()); - expect(result.isValid).toBeTruthy(); - }); -}); \ No newline at end of file + const result = SchemaValidator.validate(response.data, getSchema()) + expect(result.isValid).toBeTruthy() + }) +}) diff --git a/tests/unit/MetlinkHttpClient/Gtfs/Trips.test.ts b/tests/unit/MetlinkHttpClient/Gtfs/Trips.test.ts index a4856a3..0e88885 100644 --- a/tests/unit/MetlinkHttpClient/Gtfs/Trips.test.ts +++ b/tests/unit/MetlinkHttpClient/Gtfs/Trips.test.ts @@ -1,82 +1,81 @@ -import MetlinkHttpClient from "../../../../src/MetlinkHttpClient"; -import axios from 'axios'; -import {AxiosAdapter} from "../../../../src/domain/httpclient/AxiosAdapter"; -import MockAdapter from "axios-mock-adapter"; -import {SchemaValidator} from "../../../SchemaValidator"; +import MetlinkHttpClient from '../../../../src/MetlinkHttpClient' +import axios from 'axios' +import { AxiosAdapter } from '../../../../src/domain/httpclient/AxiosAdapter' +import MockAdapter from 'axios-mock-adapter' +import { SchemaValidator } from '../../../SchemaValidator' -const mock: MockAdapter = new MockAdapter(axios); - -describe("Metlink Http Client: Trips", () => { +const mock: MockAdapter = new MockAdapter(axios) +describe('Metlink Http Client: Trips', () => { afterEach(function () { - mock.reset(); - }); + mock.reset() + }) function getHttpClient(client: Axios.AxiosInstance): MetlinkHttpClient { - const adapter: AxiosAdapter = new AxiosAdapter(client); + const adapter: AxiosAdapter = new AxiosAdapter(client) - return new MetlinkHttpClient(adapter); + return new MetlinkHttpClient(adapter) } - function getSchema(): {} { + function getSchema(): object { return { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "integer" + type: 'array', + items: { + type: 'object', + properties: { + id: { + type: 'integer', + }, + route_id: { + type: 'integer', }, - "route_id": { - "type": "integer" + service_id: { + type: 'string', }, - "service_id": { - "type": "string" + trip_id: { + type: 'string', }, - "trip_id": { - "type": "string" + trip_headsign: { + type: 'string', }, - "trip_headsign": { - "type": "string" + direction_id: { + type: 'integer', }, - "direction_id": { - "type": "integer" + block_id: { + type: 'string', }, - "block_id": { - "type": "string" + shape_id: { + type: 'string', }, - "shape_id": { - "type": "string" + wheelchair_accessible: { + type: 'integer', }, - "wheelchair_accessible": { - "type": "integer" + bikes_allowed: { + type: 'integer', }, - "bikes_allowed": { - "type": "integer" + origin_stop_id: { + type: 'string', }, - "origin_stop_id": { - "type": "string" + destination_stop_id: { + type: 'string', }, - "destination_stop_id": { - "type": "string" - } }, - "required": [ - "id", - "route_id", - "service_id", - "trip_id", - "trip_headsign", - "direction_id", - "block_id", - "shape_id", - "wheelchair_accessible", - "bikes_allowed", - "origin_stop_id", - "destination_stop_id" + required: [ + 'id', + 'route_id', + 'service_id', + 'trip_id', + 'trip_headsign', + 'direction_id', + 'block_id', + 'shape_id', + 'wheelchair_accessible', + 'bikes_allowed', + 'origin_stop_id', + 'destination_stop_id', ], - "additionalProperties": false - } + additionalProperties: false, + }, } } @@ -84,34 +83,34 @@ describe("Metlink Http Client: Trips", () => { [ [ { - "id": 1, - "route_id": 600, - "service_id": "2071_1_20240825", - "trip_id": "60__0__439__MNM__2071__1__2071__1_20240825", - "trip_headsign": "", - "direction_id": 0, - "block_id": "", - "shape_id": "[@356.0.29339884@]2_20240825", - "wheelchair_accessible": 0, - "bikes_allowed": 2, - "origin_stop_id": "3000", - "destination_stop_id": "2002" - } - ] - ] - ]; + id: 1, + route_id: 600, + service_id: '2071_1_20240825', + trip_id: '60__0__439__MNM__2071__1__2071__1_20240825', + trip_headsign: '', + direction_id: 0, + block_id: '', + shape_id: '[@356.0.29339884@]2_20240825', + wheelchair_accessible: 0, + bikes_allowed: 2, + origin_stop_id: '3000', + destination_stop_id: '2002', + }, + ], + ], + ] function getPath(): string { - return "/gtfs/trips"; + return '/gtfs/trips' } - it.each(dataSet)("getGtfsTrips", async (mockData) => { - mock.onGet(getPath()).replyOnce(200, mockData); + it.each(dataSet)('getGtfsTrips', async (mockData) => { + mock.onGet(getPath()).replyOnce(200, mockData) - const client: MetlinkHttpClient = getHttpClient(axios); - const response = await client.getGtfsTrips(); + const client: MetlinkHttpClient = getHttpClient(axios) + const response = await client.getGtfsTrips() - const result = SchemaValidator.validate(response.data, getSchema()); - expect(result.isValid).toBeTruthy(); - }); -}); \ No newline at end of file + const result = SchemaValidator.validate(response.data, getSchema()) + expect(result.isValid).toBeTruthy() + }) +}) diff --git a/tests/unit/MetlinkHttpClient/StopPredictions.test.ts b/tests/unit/MetlinkHttpClient/StopPredictions.test.ts index d24c532..b1c40c8 100644 --- a/tests/unit/MetlinkHttpClient/StopPredictions.test.ts +++ b/tests/unit/MetlinkHttpClient/StopPredictions.test.ts @@ -1,208 +1,209 @@ -import MetlinkHttpClient from "../../../src/MetlinkHttpClient"; -import axios from 'axios'; -import {AxiosAdapter} from "../../../src/domain/httpclient/AxiosAdapter"; -import MockAdapter from "axios-mock-adapter"; -import {SchemaValidator} from "../../SchemaValidator"; +import MetlinkHttpClient from '../../../src/MetlinkHttpClient' +import axios from 'axios' +import { AxiosAdapter } from '../../../src/domain/httpclient/AxiosAdapter' +import MockAdapter from 'axios-mock-adapter' +import { SchemaValidator } from '../../SchemaValidator' -const mock: MockAdapter = new MockAdapter(axios); +const mock: MockAdapter = new MockAdapter(axios) -describe("Metlink Http Client: Stop predictions", () => { - - const STOP_ID = "Well1"; +describe('Metlink Http Client: Stop predictions', () => { + const STOP_ID = 'Well1' afterEach(function (): void { - mock.reset(); - }); + mock.reset() + }) function getHttpClient(client: Axios.AxiosInstance): MetlinkHttpClient { - const adapter: AxiosAdapter = new AxiosAdapter(client); + const adapter: AxiosAdapter = new AxiosAdapter(client) - return new MetlinkHttpClient(adapter); + return new MetlinkHttpClient(adapter) } - function getSchema(): {} { + function getSchema(): object { return { - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "object", - "properties": { - "farezone": { - "type": "string" + $schema: 'http://json-schema.org/draft-07/schema#', + type: 'object', + properties: { + farezone: { + type: 'string', }, - "closed": { - "type": "boolean" + closed: { + type: 'boolean', }, - "departures": { - "type": "array", - "items": { - "type": "object", - "properties": { - "stop_id": { - "type": "string" + departures: { + type: 'array', + items: { + type: 'object', + properties: { + stop_id: { + type: 'string', }, - "service_id": { - "type": "string" + service_id: { + type: 'string', }, - "direction": { - "type": "string", - "enum": ["inbound", "outbound"] + direction: { + type: 'string', + enum: ['inbound', 'outbound'], }, - "operator": { - "type": "string" + operator: { + type: 'string', }, - "origin": { - "type": "object", - "properties": { - "stop_id": { - "type": "string" + origin: { + type: 'object', + properties: { + stop_id: { + type: 'string', + }, + name: { + type: 'string', }, - "name": { - "type": "string" - } }, - "required": ["stop_id", "name"] + required: ['stop_id', 'name'], }, - "destination": { - "type": "object", - "properties": { - "stop_id": { - "type": "string" + destination: { + type: 'object', + properties: { + stop_id: { + type: 'string', + }, + name: { + type: 'string', }, - "name": { - "type": "string" - } }, - "required": ["stop_id", "name"] + required: ['stop_id', 'name'], }, - "delay": { - "type": "string", - "pattern": "^PT\\d+M\\d+S$" + delay: { + type: 'string', + pattern: '^PT\\d+M\\d+S$', }, - "vehicle_id": { - "type": "string" + vehicle_id: { + type: 'string', }, - "name": { - "type": "string" + name: { + type: 'string', }, - "arrival": { - "type": "object", - "properties": { - "aimed": { - "type": "string" + arrival: { + type: 'object', + properties: { + aimed: { + type: 'string', + }, + expected: { + type: 'string', }, - "expected": { - "type": "string" - } }, - "required": ["aimed", "expected"] + required: ['aimed', 'expected'], }, - "departure": { - "type": "object", - "properties": { - "aimed": { - "type": "string" + departure: { + type: 'object', + properties: { + aimed: { + type: 'string', + }, + expected: { + type: 'string', }, - "expected": { - "type": "string" - } }, - "required": ["aimed", "expected"] + required: ['aimed', 'expected'], }, - "status": { - "type": "string", - "enum": ["on time", "delayed", "cancelled"] + status: { + type: 'string', + enum: ['on time', 'delayed', 'cancelled'], }, - "monitored": { - "type": "boolean" + monitored: { + type: 'boolean', }, - "wheelchair_accessible": { - "type": "boolean" + wheelchair_accessible: { + type: 'boolean', + }, + trip_id: { + type: 'string', }, - "trip_id": { - "type": "string" - } }, - "required": [ - "stop_id", - "service_id", - "direction", - "operator", - "origin", - "destination", - "delay", - "vehicle_id", - "name", - "arrival", - "departure", - "status", - "monitored", - "wheelchair_accessible", - "trip_id" - ] - } - } + required: [ + 'stop_id', + 'service_id', + 'direction', + 'operator', + 'origin', + 'destination', + 'delay', + 'vehicle_id', + 'name', + 'arrival', + 'departure', + 'status', + 'monitored', + 'wheelchair_accessible', + 'trip_id', + ], + }, + }, }, - "required": ["farezone", "closed", "departures"] + required: ['farezone', 'closed', 'departures'], } } const dataSet = [ [ { - "farezone": "7", - "closed": false, - "departures": [ + farezone: '7', + closed: false, + departures: [ { - "stop_id": "WALL2", - "service_id": "HVL", - "direction": "outbound", - "operator": "RAIL", - "origin": { - "stop_id": "WELL1", - "name": "WgtnStn" + stop_id: 'WALL2', + service_id: 'HVL', + direction: 'outbound', + operator: 'RAIL', + origin: { + stop_id: 'WELL1', + name: 'WgtnStn', }, - "destination": { - "stop_id": "UPPE", - "name": "UPPE - All stops" + destination: { + stop_id: 'UPPE', + name: 'UPPE - All stops', }, - "delay": "PT2M37S", - "vehicle_id": "4263", - "name": "WallacevilleStn", - "arrival": { - "aimed": "2024-09-17T07:51:00+12:00", - "expected": "2024-09-17T07:53:37+12:00" + delay: 'PT2M37S', + vehicle_id: '4263', + name: 'WallacevilleStn', + arrival: { + aimed: '2024-09-17T07:51:00+12:00', + expected: '2024-09-17T07:53:37+12:00', }, - "departure": { - "aimed": "2024-09-17T07:51:00+12:00", - "expected": "2024-09-17T07:53:37+12:00" + departure: { + aimed: '2024-09-17T07:51:00+12:00', + expected: '2024-09-17T07:53:37+12:00', }, - "status": "delayed", - "monitored": true, - "wheelchair_accessible": true, - "trip_id": "HVL__0__2616__RAIL__Rail_MTuWThF-XHol_20240825" + status: 'delayed', + monitored: true, + wheelchair_accessible: true, + trip_id: + 'HVL__0__2616__RAIL__Rail_MTuWThF-XHol_20240825', }, - ] - - } - ] - ]; + ], + }, + ], + ] function getPath(urlSearchParams: URLSearchParams | null = null): string { - let query: string = ""; + let query: string = '' if (urlSearchParams) { - query = "?"+urlSearchParams?.toString(); + query = '?' + urlSearchParams?.toString() } - return "/stop-predictions" + query; + return '/stop-predictions' + query } - it.each(dataSet)("getStopPredictions", async (mockData) => { - mock.onGet(getPath(new URLSearchParams({"stop_id": STOP_ID}))).replyOnce(200, mockData); + it.each(dataSet)('getStopPredictions', async (mockData) => { + mock.onGet( + getPath(new URLSearchParams({ stop_id: STOP_ID })) + ).replyOnce(200, mockData) - const client: MetlinkHttpClient = getHttpClient(axios); - const response = await client.getStopPredictions(STOP_ID); + const client: MetlinkHttpClient = getHttpClient(axios) + const response = await client.getStopPredictions(STOP_ID) - const result = SchemaValidator.validate(response.data, getSchema()); - expect(result.isValid).toBeTruthy(); - }); -}); \ No newline at end of file + const result = SchemaValidator.validate(response.data, getSchema()) + expect(result.isValid).toBeTruthy() + }) +}) diff --git a/tests/unit/MetlinkHttpClient/TripCancellations.test.ts b/tests/unit/MetlinkHttpClient/TripCancellations.test.ts index 5e0457f..04603e7 100644 --- a/tests/unit/MetlinkHttpClient/TripCancellations.test.ts +++ b/tests/unit/MetlinkHttpClient/TripCancellations.test.ts @@ -1,76 +1,75 @@ -import MetlinkHttpClient from "../../../src/MetlinkHttpClient"; -import axios from 'axios'; -import {AxiosAdapter} from "../../../src/domain/httpclient/AxiosAdapter"; -import MockAdapter from "axios-mock-adapter"; -import {SchemaValidator} from "../../SchemaValidator"; +import MetlinkHttpClient from '../../../src/MetlinkHttpClient' +import axios from 'axios' +import { AxiosAdapter } from '../../../src/domain/httpclient/AxiosAdapter' +import MockAdapter from 'axios-mock-adapter' +import { SchemaValidator } from '../../SchemaValidator' -const mock: MockAdapter = new MockAdapter(axios); - -describe("Metlink Http Client: Trip cancellations", () => { +const mock: MockAdapter = new MockAdapter(axios) +describe('Metlink Http Client: Trip cancellations', () => { afterEach(function () { - mock.reset(); - }); + mock.reset() + }) function getHttpClient(client: Axios.AxiosInstance): MetlinkHttpClient { - const adapter: AxiosAdapter = new AxiosAdapter(client); + const adapter: AxiosAdapter = new AxiosAdapter(client) - return new MetlinkHttpClient(adapter); + return new MetlinkHttpClient(adapter) } - function getSchema(): {} { + function getSchema(): object { return { - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string" + $schema: 'http://json-schema.org/draft-07/schema#', + type: 'array', + items: { + type: 'object', + properties: { + id: { + type: 'string', + }, + date_created: { + type: 'string', }, - "date_created": { - "type": "string", + date_updated: { + type: 'string', }, - "date_updated": { - "type": "string", + trip_id: { + type: 'string', }, - "trip_id": { - "type": "string" + route_id: { + type: 'integer', }, - "route_id": { - "type": "integer" + trip_date_start: { + type: 'string', }, - "trip_date_start": { - "type": "string", + trip_date_end: { + type: 'string', }, - "trip_date_end": { - "type": "string" + direction_id: { + type: 'integer', }, - "direction_id": { - "type": "integer" + reinstated: { + type: 'integer', + enum: [0, 1], }, - "reinstated": { - "type": "integer", - "enum": [0, 1] + part_cancellation: { + type: 'integer', + enum: [0, 1], }, - "part_cancellation": { - "type": "integer", - "enum": [0, 1] - } }, - "required": [ - "id", - "date_created", - "date_updated", - "trip_id", - "route_id", - "trip_date_start", - "trip_date_end", - "direction_id", - "reinstated", - "part_cancellation" - ] - } + required: [ + 'id', + 'date_created', + 'date_updated', + 'trip_id', + 'route_id', + 'trip_date_start', + 'trip_date_end', + 'direction_id', + 'reinstated', + 'part_cancellation', + ], + }, } } @@ -78,32 +77,32 @@ describe("Metlink Http Client: Trip cancellations", () => { [ [ { - "id": "ec196c26-d1ee-410d-bbaf-708763dcd10b", - "date_created": "2024-09-17 07:29:07", - "date_updated": "2024-09-17 07:53:48", - "trip_id": "1__1__134__TZM__224__1__224__1_20240825", - "route_id": 10, - "trip_date_start": "2024-09-17 08:03:00", - "trip_date_end": "2024-09-17 09:25:00", - "direction_id": 1, - "reinstated": 0, - "part_cancellation": 0 + id: 'ec196c26-d1ee-410d-bbaf-708763dcd10b', + date_created: '2024-09-17 07:29:07', + date_updated: '2024-09-17 07:53:48', + trip_id: '1__1__134__TZM__224__1__224__1_20240825', + route_id: 10, + trip_date_start: '2024-09-17 08:03:00', + trip_date_end: '2024-09-17 09:25:00', + direction_id: 1, + reinstated: 0, + part_cancellation: 0, }, - ] - ] - ]; + ], + ], + ] function getPath(): string { - return "/trip-cancellations"; + return '/trip-cancellations' } - it.each(dataSet)("getTripCancellations", async (mockData) => { - mock.onGet(getPath()).replyOnce(200, mockData); + it.each(dataSet)('getTripCancellations', async (mockData) => { + mock.onGet(getPath()).replyOnce(200, mockData) - const client: MetlinkHttpClient = getHttpClient(axios); - const response = await client.getTripCancellations(); + const client: MetlinkHttpClient = getHttpClient(axios) + const response = await client.getTripCancellations() - const result = SchemaValidator.validate(response.data, getSchema()); - expect(result.isValid).toBeTruthy(); - }); -}); \ No newline at end of file + const result = SchemaValidator.validate(response.data, getSchema()) + expect(result.isValid).toBeTruthy() + }) +}) diff --git a/tests/unit/QueryBuilder.test.ts b/tests/unit/QueryBuilder.test.ts index adb5856..232e6cf 100644 --- a/tests/unit/QueryBuilder.test.ts +++ b/tests/unit/QueryBuilder.test.ts @@ -1,24 +1,22 @@ -import {QueryBuilder} from "../../src/QueryBuilder"; -import {Query} from "../../src/domain/trip-cancellation/Query"; +import { QueryBuilder } from '../../src/QueryBuilder' +import { Query } from '../../src/domain/trip-cancellation/Query' -describe("Query Builder", () => { - test("Build query test", () => { - const query = new Query(); - const dateCreated: string = Date.now().toString(); +describe('Query Builder', () => { + test('Build query test', () => { + const query = new Query() + const dateCreated: string = Date.now().toString() - query.dateCreated = dateCreated; - const urlSearchParams = QueryBuilder.buildQuery(query); + query.dateCreated = dateCreated + const urlSearchParams = QueryBuilder.buildQuery(query) - expect(urlSearchParams).toBeInstanceOf(URLSearchParams); - expect("dateCreated=" + dateCreated).toEqual(urlSearchParams.toString()) + expect(urlSearchParams).toBeInstanceOf(URLSearchParams) + expect('dateCreated=' + dateCreated).toEqual(urlSearchParams.toString()) }) - test("Build query test with null", () => { - const dateCreated: string = Date.now().toString(); + test('Build query test with null', () => { + const urlSearchParams = QueryBuilder.buildQuery(null) - const urlSearchParams = QueryBuilder.buildQuery(null); - - expect(urlSearchParams).toBeInstanceOf(URLSearchParams); - expect("").toEqual(urlSearchParams.toString()) + expect(urlSearchParams).toBeInstanceOf(URLSearchParams) + expect('').toEqual(urlSearchParams.toString()) }) -}); \ No newline at end of file +}) diff --git a/tests/unit/Response.test.ts b/tests/unit/Response.test.ts index 078727f..d59fa9b 100644 --- a/tests/unit/Response.test.ts +++ b/tests/unit/Response.test.ts @@ -1,55 +1,55 @@ -import {Collection} from "../../src/Response"; +import { Collection } from '../../src/Response' -describe("Response", () => { - test("Test add", () => { - const collection: Collection = new Collection(); +describe('Response', () => { + test('Test add', () => { + const collection: Collection = new Collection() - collection.add(1); + collection.add(1) - expect(collection.size()).toEqual(1); + expect(collection.size()).toEqual(1) - collection.add(2); - collection.add(3); + collection.add(2) + collection.add(3) - expect(collection.size()).toEqual(3); - }); + expect(collection.size()).toEqual(3) + }) - test("Test remove", () => { - const collection: Collection = new Collection(); + test('Test remove', () => { + const collection: Collection = new Collection() - collection.add(1); - collection.add(2); - collection.add(3); - collection.remove(1); + collection.add(1) + collection.add(2) + collection.add(3) + collection.remove(1) - expect(collection.size()).toEqual(2); - }); + expect(collection.size()).toEqual(2) + }) - test("Test getItems", () => { - const collection: Collection = new Collection(); + test('Test getItems', () => { + const collection: Collection = new Collection() - collection.add(1); - collection.add(2); - collection.add(3); + collection.add(1) + collection.add(2) + collection.add(3) collection.getItems().forEach(function (value) { - expect(value).not.toBeNull(); + expect(value).not.toBeNull() }) - }); + }) - test("Test size", () => { - const collection: Collection = new Collection(); + test('Test size', () => { + const collection: Collection = new Collection() - collection.add(1); - collection.add(2); - collection.add(3); + collection.add(1) + collection.add(2) + collection.add(3) - expect(collection.size()).toEqual(3); - }); + expect(collection.size()).toEqual(3) + }) - test("Test is collection", () => { - const collection: Collection = new Collection(); + test('Test is collection', () => { + const collection: Collection = new Collection() - expect(collection.isCollection()).toEqual(true); - }); -}); \ No newline at end of file + expect(collection.isCollection()).toEqual(true) + }) +}) diff --git a/tests/unit/ResponseDataDecorator/Gtfs-rt/ServiceAlerts.test.ts b/tests/unit/ResponseDataDecorator/Gtfs-rt/ServiceAlerts.test.ts index 278703c..9b5d13b 100644 --- a/tests/unit/ResponseDataDecorator/Gtfs-rt/ServiceAlerts.test.ts +++ b/tests/unit/ResponseDataDecorator/Gtfs-rt/ServiceAlerts.test.ts @@ -1,87 +1,90 @@ -import axios from 'axios'; -import MockAdapter from "axios-mock-adapter"; -import {MetlinkHttpClientInterface} from "../../../../src/Contracts"; -import {ClientBuilder} from "../../ClientBuilder"; -import {Response as GtfsRtResponse} from "../../../../src/domain/gtfs-rt/entity/Response"; -import {Entity} from "../../../../src/domain/gtfs-rt/entity/service-alert/Entity"; +import axios from 'axios' +import MockAdapter from 'axios-mock-adapter' +import { MetlinkHttpClientInterface } from '../../../../src/Contracts' +import { ClientBuilder } from '../../ClientBuilder' +import { Response as GtfsRtResponse } from '../../../../src/domain/gtfs-rt/entity/Response' +import { Entity } from '../../../../src/domain/gtfs-rt/entity/service-alert/Entity' -const mock: MockAdapter = new MockAdapter(axios); - -describe("Response Data Decorator: GTFS-RT: Service alerts", () => { +const mock: MockAdapter = new MockAdapter(axios) +describe('Response Data Decorator: GTFS-RT: Service alerts', () => { afterEach(function () { - mock.reset(); - }); + mock.reset() + }) const dataSet = [ [ { - "header": { - "gtfsRealtimeVersion": "2.0", - "incrementality": 0, - "timestamp": 1726282687 + header: { + gtfsRealtimeVersion: '2.0', + incrementality: 0, + timestamp: 1726282687, }, - "entity": [ + entity: [ { - "alert": { - "active_period": [ + alert: { + active_period: [ { - "start": 1714071600, - "end": 1734635400 - } + start: 1714071600, + end: 1734635400, + }, ], - "effect": "STOP_MOVED", - "cause": "OTHER_CAUSE", - "description_text": { - "translation": [ + effect: 'STOP_MOVED', + cause: 'OTHER_CAUSE', + description_text: { + translation: [ { - "language": "en", - "text": "To minimise delays caused by Wairarapa services, the 7:00am, 7:40am, and 8:00am services from Upper Hutt to Wellington will depart from Platform 2 at Wallaceville and Trentham stations. This is an ongoing permanent change. Announcements will be made where possible." - } - ] + language: 'en', + text: 'To minimise delays caused by Wairarapa services, the 7:00am, 7:40am, and 8:00am services from Upper Hutt to Wellington will depart from Platform 2 at Wallaceville and Trentham stations. This is an ongoing permanent change. Announcements will be made where possible.', + }, + ], }, - "header_text": { - "translation": [ + header_text: { + translation: [ { - "language": "en", - "text": "The 7:00am, 7:40am, and 8:00am weekday services from Upper Hutt to Wellington will depart from Platform 2 at Wallaceville and Trentham stations." - } - ] + language: 'en', + text: 'The 7:00am, 7:40am, and 8:00am weekday services from Upper Hutt to Wellington will depart from Platform 2 at Wallaceville and Trentham stations.', + }, + ], }, - "informed_entity": [ + informed_entity: [ { - "route_id": "5", - "route_type": 2, - "trip": { - "start_time": "07:00:00", - "description": "7:00am from Upper Hutt Station to Wellington Station", - "trip_id": "HVL__1__2611__RAIL__Rail_MTuWThF-XHol_20240428", - "direction_id": 1, - "route_id": 5, - "start_date": "20240508" - } - } + route_id: '5', + route_type: 2, + trip: { + start_time: '07:00:00', + description: + '7:00am from Upper Hutt Station to Wellington Station', + trip_id: + 'HVL__1__2611__RAIL__Rail_MTuWThF-XHol_20240428', + direction_id: 1, + route_id: 5, + start_date: '20240508', + }, + }, ], - "severity_level": "WARNING" + severity_level: 'WARNING', }, - "id": "140453", - "timestamp": "2024-04-24T13:33:25+1200" - } - ] - } - ] - ]; + id: '140453', + timestamp: '2024-04-24T13:33:25+1200', + }, + ], + }, + ], + ] function getPath(): string { - return "/gtfs-rt/servicealerts"; + return '/gtfs-rt/servicealerts' } - it.each(dataSet)("getServiceAlerts", async (mockData) => { - mock.onGet(getPath()).replyOnce(200, mockData); + it.each(dataSet)('getServiceAlerts', async (mockData) => { + mock.onGet(getPath()).replyOnce(200, mockData) - const client: MetlinkHttpClientInterface = ClientBuilder.getHttpClientWithResponseDataDecorator(axios); - const response: GtfsRtResponse = await client.getGtfsRtServiceAlerts(); + const client: MetlinkHttpClientInterface = + ClientBuilder.getHttpClientWithResponseDataDecorator(axios) + const response: GtfsRtResponse = + await client.getGtfsRtServiceAlerts() expect(response).toBeInstanceOf(GtfsRtResponse) - }); -}); \ No newline at end of file + }) +}) diff --git a/tests/unit/ResponseDataDecorator/Gtfs-rt/TripUpdates.test.ts b/tests/unit/ResponseDataDecorator/Gtfs-rt/TripUpdates.test.ts index a24f03f..cccd51c 100644 --- a/tests/unit/ResponseDataDecorator/Gtfs-rt/TripUpdates.test.ts +++ b/tests/unit/ResponseDataDecorator/Gtfs-rt/TripUpdates.test.ts @@ -1,69 +1,70 @@ -import axios from 'axios'; -import MockAdapter from "axios-mock-adapter"; -import {MetlinkHttpClientInterface} from "../../../../src/Contracts"; -import {ClientBuilder} from "../../ClientBuilder"; -import {Response as GtfsRtResponse} from "../../../../src/domain/gtfs-rt/entity/Response"; -import {Entity} from "../../../../src/domain/gtfs-rt/entity/trip-update/Entity"; +import axios from 'axios' +import MockAdapter from 'axios-mock-adapter' +import { MetlinkHttpClientInterface } from '../../../../src/Contracts' +import { ClientBuilder } from '../../ClientBuilder' +import { Response as GtfsRtResponse } from '../../../../src/domain/gtfs-rt/entity/Response' +import { Entity } from '../../../../src/domain/gtfs-rt/entity/trip-update/Entity' -const mock: MockAdapter = new MockAdapter(axios); - -describe("Response Data Decorator: GTFS-RT: Trip updates", () => { +const mock: MockAdapter = new MockAdapter(axios) +describe('Response Data Decorator: GTFS-RT: Trip updates', () => { afterEach(function () { - mock.reset(); - }); + mock.reset() + }) const dataSet = [ [ - { - "header": { - "gtfsRealtimeVersion": "2.0", - "incrementality": 0, - "timestamp": 1726514766 - }, - "entity": [ - { - "trip_update": { - "stop_time_update": { - "schedule_relationship": 0, - "stop_sequence": 36, - "arrival": { - "delay": 237, - "time": 1726514769 - }, - "stop_id": "9242" - }, - "trip": { - "start_time": "06:55:00", - "trip_id": "110__0__103__TZM__501__4__501__4_20240825", - "direction_id": 0, - "route_id": 1100, - "schedule_relationship": 0, - "start_date": "20240917" - }, - "vehicle": { - "id": "3315" + { + header: { + gtfsRealtimeVersion: '2.0', + incrementality: 0, + timestamp: 1726514766, + }, + entity: [ + { + trip_update: { + stop_time_update: { + schedule_relationship: 0, + stop_sequence: 36, + arrival: { + delay: 237, + time: 1726514769, }, - "timestamp": 1726514757 + stop_id: '9242', }, - "id": "fb9742b0-b5c3-46ca-99cf-c4f24668607d" - } - ] - } - ] - ]; + trip: { + start_time: '06:55:00', + trip_id: + '110__0__103__TZM__501__4__501__4_20240825', + direction_id: 0, + route_id: 1100, + schedule_relationship: 0, + start_date: '20240917', + }, + vehicle: { + id: '3315', + }, + timestamp: 1726514757, + }, + id: 'fb9742b0-b5c3-46ca-99cf-c4f24668607d', + }, + ], + }, + ], + ] function getPath(): string { - return "/gtfs-rt/tripupdates"; + return '/gtfs-rt/tripupdates' } - it.each(dataSet)("GetGtfsRtTripUpdates", async (mockData) => { - mock.onGet(getPath()).replyOnce(200, mockData); + it.each(dataSet)('GetGtfsRtTripUpdates', async (mockData) => { + mock.onGet(getPath()).replyOnce(200, mockData) - const client: MetlinkHttpClientInterface = ClientBuilder.getHttpClientWithResponseDataDecorator(axios); - const response: GtfsRtResponse = await client.getGtfsRtTripUpdates(); + const client: MetlinkHttpClientInterface = + ClientBuilder.getHttpClientWithResponseDataDecorator(axios) + const response: GtfsRtResponse = + await client.getGtfsRtTripUpdates() expect(response).toBeInstanceOf(GtfsRtResponse) - - }); -}); \ No newline at end of file + }) +}) diff --git a/tests/unit/ResponseDataDecorator/Gtfs-rt/VehiclePositions.test.ts b/tests/unit/ResponseDataDecorator/Gtfs-rt/VehiclePositions.test.ts index 474ea78..a1186ee 100644 --- a/tests/unit/ResponseDataDecorator/Gtfs-rt/VehiclePositions.test.ts +++ b/tests/unit/ResponseDataDecorator/Gtfs-rt/VehiclePositions.test.ts @@ -1,65 +1,65 @@ -import axios from 'axios'; -import MockAdapter from "axios-mock-adapter"; -import {MetlinkHttpClientInterface} from "../../../../src/Contracts"; -import {ClientBuilder} from "../../ClientBuilder"; -import {Response as GtfsRtResponse} from "../../../../src/domain/gtfs-rt/entity/Response"; -import {Entity} from "../../../../src/domain/gtfs-rt/entity/trip-update/Entity"; +import axios from 'axios' +import MockAdapter from 'axios-mock-adapter' +import { MetlinkHttpClientInterface } from '../../../../src/Contracts' +import { ClientBuilder } from '../../ClientBuilder' +import { Response as GtfsRtResponse } from '../../../../src/domain/gtfs-rt/entity/Response' +import { Entity } from '../../../../src/domain/gtfs-rt/entity/trip-update/Entity' -const mock: MockAdapter = new MockAdapter(axios); - -describe("Response Data Decorator: GTFS-RT: Vehicle positions", () => { +const mock: MockAdapter = new MockAdapter(axios) +describe('Response Data Decorator: GTFS-RT: Vehicle positions', () => { afterEach(function () { - mock.reset(); - }); + mock.reset() + }) const dataSet = [ [ { - "header": { - "gtfsRealtimeVersion": "2.0", - "incrementality": 0, - "timestamp": 1726515043 + header: { + gtfsRealtimeVersion: '2.0', + incrementality: 0, + timestamp: 1726515043, }, - "entity": [ + entity: [ { - "id": "258a7bb5-3ae7-4436-a7d5-340893394391", - "vehicle": { - "trip": { - "start_time": "07:15:00", - "trip_id": "4__1__112__NBM__7__5__7__5_20240825", - "direction_id": 1, - "route_id": 40, - "schedule_relationship": 0, - "start_date": "20240917" + id: '258a7bb5-3ae7-4436-a7d5-340893394391', + vehicle: { + trip: { + start_time: '07:15:00', + trip_id: '4__1__112__NBM__7__5__7__5_20240825', + direction_id: 1, + route_id: 40, + schedule_relationship: 0, + start_date: '20240917', }, - "position": { - "bearing": 282, - "latitude": -41.3181801, - "longitude": 174.7966614 + position: { + bearing: 282, + latitude: -41.3181801, + longitude: 174.7966614, }, - "occupancy_status": 1, - "vehicle": { - "id": "1471" + occupancy_status: 1, + vehicle: { + id: '1471', }, - "timestamp": 1726515037 - } - } - ] - } - ] - ]; + timestamp: 1726515037, + }, + }, + ], + }, + ], + ] function getPath(): string { - return "/gtfs-rt/vehiclepositions"; + return '/gtfs-rt/vehiclepositions' } - it.each(dataSet)("GetGtfsRtVehiclePosition", async (mockData) => { - mock.onGet(getPath()).replyOnce(200, mockData); + it.each(dataSet)('GetGtfsRtVehiclePosition', async (mockData) => { + mock.onGet(getPath()).replyOnce(200, mockData) - const client: MetlinkHttpClientInterface = ClientBuilder.getHttpClientWithResponseDataDecorator(axios); - const response = await client.getGtfsRtVehiclePositions(); + const client: MetlinkHttpClientInterface = + ClientBuilder.getHttpClientWithResponseDataDecorator(axios) + const response = await client.getGtfsRtVehiclePositions() expect(response).toBeInstanceOf(GtfsRtResponse) - }); -}); \ No newline at end of file + }) +}) diff --git a/tests/unit/ResponseDataDecorator/Gtfs/Agencies.test.ts b/tests/unit/ResponseDataDecorator/Gtfs/Agencies.test.ts index 95ece5c..3dad316 100644 --- a/tests/unit/ResponseDataDecorator/Gtfs/Agencies.test.ts +++ b/tests/unit/ResponseDataDecorator/Gtfs/Agencies.test.ts @@ -1,46 +1,47 @@ -import axios from 'axios'; -import MockAdapter from "axios-mock-adapter"; -import {MetlinkHttpClientInterface} from "../../../../src/Contracts"; -import {ClientBuilder} from "../../ClientBuilder"; -import {Agency} from "../../../../src/domain/gtfs/entity/Agency"; +import axios from 'axios' +import MockAdapter from 'axios-mock-adapter' +import { MetlinkHttpClientInterface } from '../../../../src/Contracts' +import { ClientBuilder } from '../../ClientBuilder' +import { Agency } from '../../../../src/domain/gtfs/entity/Agency' -const mock: MockAdapter = new MockAdapter(axios); - -describe("Response Data Decorator: Agencies", () => { +const mock: MockAdapter = new MockAdapter(axios) +describe('Response Data Decorator: Agencies', () => { afterEach(function () { - mock.reset(); - }); + mock.reset() + }) const dataSet = [ [ [ { - "id": 1, - "agency_id": "MADG", - "agency_name": "Madge Coachlines Limited", - "agency_timezone": "Pacific/Auckland", - "agency_url": "http://www.metlink.org.nz", - "agency_lang": "en", - "agency_phone": "", - "agency_fare_url": "http://www.metlink.org.nz/tickets-and-fares" - } - ] - ] - ]; + id: 1, + agency_id: 'An', + agency_name: 'Agency name', + agency_timezone: 'Pacific/Auckland', + agency_url: 'https://someling', + agency_lang: 'en', + agency_phone: '', + agency_fare_url: + 'https://somelinks.com', + }, + ], + ], + ] function getPath(): string { - return "/gtfs/agency"; + return '/gtfs/agency' } - it.each(dataSet)("getGtfsAgencies", async (mockData) => { - mock.onGet(getPath()).replyOnce(200, mockData); + it.each(dataSet)('getGtfsAgencies', async (mockData) => { + mock.onGet(getPath()).replyOnce(200, mockData) - const client: MetlinkHttpClientInterface = ClientBuilder.getHttpClientWithResponseDataDecorator(axios); - const response: Agency[] = await client.getGtfsAgencies(); + const client: MetlinkHttpClientInterface = + ClientBuilder.getHttpClientWithResponseDataDecorator(axios) + const response: Agency[] = await client.getGtfsAgencies() response.forEach((entity) => { expect(entity).toBeInstanceOf(Agency) }) - }); -}); \ No newline at end of file + }) +}) diff --git a/tests/unit/ResponseDataDecorator/Gtfs/Calendar.test.ts b/tests/unit/ResponseDataDecorator/Gtfs/Calendar.test.ts index 1b4a225..537e5ce 100644 --- a/tests/unit/ResponseDataDecorator/Gtfs/Calendar.test.ts +++ b/tests/unit/ResponseDataDecorator/Gtfs/Calendar.test.ts @@ -1,16 +1,15 @@ -import axios from 'axios'; -import MockAdapter from "axios-mock-adapter"; -import {MetlinkHttpClientInterface} from "../../../../src/Contracts"; -import {ClientBuilder} from "../../ClientBuilder"; -import {Calendar} from "../../../../src/domain/gtfs/entity/Calendar"; +import axios from 'axios' +import MockAdapter from 'axios-mock-adapter' +import { MetlinkHttpClientInterface } from '../../../../src/Contracts' +import { ClientBuilder } from '../../ClientBuilder' +import { Calendar } from '../../../../src/domain/gtfs/entity/Calendar' -const mock: MockAdapter = new MockAdapter(axios); - -describe("Response Data Decorator: Calendar", () => { +const mock: MockAdapter = new MockAdapter(axios) +describe('Response Data Decorator: Calendar', () => { afterEach(function () { - mock.reset(); - }); + mock.reset() + }) const dataSet = [ [ @@ -26,24 +25,25 @@ describe("Response Data Decorator: Calendar", () => { saturday: 0, sunday: 0, start_date: '20240825', - end_date: '20240928' + end_date: '20240928', }, - ] - ] - ]; + ], + ], + ] function getPath(): string { - return "/gtfs/calendar"; + return '/gtfs/calendar' } - it.each(dataSet)("getGtfsCalendar", async (mockData) => { - mock.onGet(getPath()).replyOnce(200, mockData); + it.each(dataSet)('getGtfsCalendar', async (mockData) => { + mock.onGet(getPath()).replyOnce(200, mockData) - const client: MetlinkHttpClientInterface = ClientBuilder.getHttpClientWithResponseDataDecorator(axios); - const response: Calendar[] = await client.getGtfsCalendar(); + const client: MetlinkHttpClientInterface = + ClientBuilder.getHttpClientWithResponseDataDecorator(axios) + const response: Calendar[] = await client.getGtfsCalendar() response.forEach((entity) => { expect(entity).toBeInstanceOf(Calendar) }) - }); -}); \ No newline at end of file + }) +}) diff --git a/tests/unit/ResponseDataDecorator/Gtfs/CalendarDates.test.ts b/tests/unit/ResponseDataDecorator/Gtfs/CalendarDates.test.ts index fe23371..621dae2 100644 --- a/tests/unit/ResponseDataDecorator/Gtfs/CalendarDates.test.ts +++ b/tests/unit/ResponseDataDecorator/Gtfs/CalendarDates.test.ts @@ -1,42 +1,42 @@ -import axios from 'axios'; -import MockAdapter from "axios-mock-adapter"; -import {MetlinkHttpClientInterface} from "../../../../src/Contracts"; -import {ClientBuilder} from "../../ClientBuilder"; -import {CalendarDate} from "../../../../src/domain/gtfs/entity/CalendarDate"; +import axios from 'axios' +import MockAdapter from 'axios-mock-adapter' +import { MetlinkHttpClientInterface } from '../../../../src/Contracts' +import { ClientBuilder } from '../../ClientBuilder' +import { CalendarDate } from '../../../../src/domain/gtfs/entity/CalendarDate' -const mock: MockAdapter = new MockAdapter(axios); - -describe("Response Data Decorator: Calendar Dates", () => { +const mock: MockAdapter = new MockAdapter(axios) +describe('Response Data Decorator: Calendar Dates', () => { afterEach(function () { - mock.reset(); - }); + mock.reset() + }) const dataSet = [ [ [ { - "id": 99, - "service_id": "612_20240825", - "date": "20240919", - "exception_type": 1 - } - ] - ] - ]; + id: 99, + service_id: '612_20240825', + date: '20240919', + exception_type: 1, + }, + ], + ], + ] function getPath(): string { - return "/gtfs/calendar_dates"; + return '/gtfs/calendar_dates' } - it.each(dataSet)("getGtfsCalendarDates", async (mockData) => { - mock.onGet(getPath()).replyOnce(200, mockData); + it.each(dataSet)('getGtfsCalendarDates', async (mockData) => { + mock.onGet(getPath()).replyOnce(200, mockData) - const client: MetlinkHttpClientInterface = ClientBuilder.getHttpClientWithResponseDataDecorator(axios); - const response: CalendarDate[] = await client.getGtfsCalendarDates(); + const client: MetlinkHttpClientInterface = + ClientBuilder.getHttpClientWithResponseDataDecorator(axios) + const response: CalendarDate[] = await client.getGtfsCalendarDates() response.forEach((entity) => { expect(entity).toBeInstanceOf(CalendarDate) - }); - }); -}); \ No newline at end of file + }) + }) +}) diff --git a/tests/unit/ResponseDataDecorator/Gtfs/FeedInfo.test.ts b/tests/unit/ResponseDataDecorator/Gtfs/FeedInfo.test.ts index d977345..54c2400 100644 --- a/tests/unit/ResponseDataDecorator/Gtfs/FeedInfo.test.ts +++ b/tests/unit/ResponseDataDecorator/Gtfs/FeedInfo.test.ts @@ -1,16 +1,15 @@ -import axios from 'axios'; -import MockAdapter from "axios-mock-adapter"; -import {MetlinkHttpClientInterface} from "../../../../src/Contracts"; -import {ClientBuilder} from "../../ClientBuilder"; -import {Feed} from "../../../../src/domain/gtfs/entity/Feed"; +import axios from 'axios' +import MockAdapter from 'axios-mock-adapter' +import { MetlinkHttpClientInterface } from '../../../../src/Contracts' +import { ClientBuilder } from '../../ClientBuilder' +import { Feed } from '../../../../src/domain/gtfs/entity/Feed' -const mock: MockAdapter = new MockAdapter(axios); - -describe("Response Data Decorator: Feed info", () => { +const mock: MockAdapter = new MockAdapter(axios) +describe('Response Data Decorator: Feed info', () => { afterEach(function () { - mock.reset(); - }); + mock.reset() + }) const dataSet = [ [ @@ -22,25 +21,25 @@ describe("Response Data Decorator: Feed info", () => { feed_lang: 'en', feed_start_date: '20240825', feed_end_date: '20241012', - feed_version: 'Version' - } - ] - - ] - ]; + feed_version: 'Version', + }, + ], + ], + ] function getPath(): string { - return "/gtfs/feed_info"; + return '/gtfs/feed_info' } - it.each(dataSet)("getGtfsFeedInfo", async (mockData) => { - mock.onGet(getPath()).replyOnce(200, mockData); + it.each(dataSet)('getGtfsFeedInfo', async (mockData) => { + mock.onGet(getPath()).replyOnce(200, mockData) - const client: MetlinkHttpClientInterface = ClientBuilder.getHttpClientWithResponseDataDecorator(axios); - const response: Feed[] = await client.getGtfsFeedInfo(); + const client: MetlinkHttpClientInterface = + ClientBuilder.getHttpClientWithResponseDataDecorator(axios) + const response: Feed[] = await client.getGtfsFeedInfo() response.forEach((entity) => { expect(entity).toBeInstanceOf(Feed) - }); - }); -}); \ No newline at end of file + }) + }) +}) diff --git a/tests/unit/ResponseDataDecorator/Gtfs/Routes.test.ts b/tests/unit/ResponseDataDecorator/Gtfs/Routes.test.ts index 339c080..0aad535 100644 --- a/tests/unit/ResponseDataDecorator/Gtfs/Routes.test.ts +++ b/tests/unit/ResponseDataDecorator/Gtfs/Routes.test.ts @@ -1,61 +1,70 @@ -import axios from 'axios'; -import MockAdapter from "axios-mock-adapter"; -import {MetlinkHttpClientInterface} from "../../../../src/Contracts"; -import {ClientBuilder} from "../../ClientBuilder"; -import {Route} from "../../../../src/domain/gtfs/entity/Route"; +import axios from 'axios' +import MockAdapter from 'axios-mock-adapter' +import { MetlinkHttpClientInterface } from '../../../../src/Contracts' +import { ClientBuilder } from '../../ClientBuilder' +import { Route } from '../../../../src/domain/gtfs/entity/Route' -const mock: MockAdapter = new MockAdapter(axios); - -describe("Response Data Decorator: Routes", () => { +const mock: MockAdapter = new MockAdapter(axios) +describe('Response Data Decorator: Routes', () => { afterEach(function () { - mock.reset(); - }); + mock.reset() + }) const dataSet = [ [ [ { - "id": 9, - "route_id": "10", - "agency_id": "TZM", - "route_short_name": "1", - "route_long_name": "Johnsonville West/Churton Park/Grenada Village - Island Bay", - "route_desc": "Island Bay - Johnsonville West/Churton Park/Grenada Village", - "route_type": 3, - "route_color": "e31837", - "route_text_color": "ffffff", - "route_url": "", - "route_sort_order": 10 - } - ] - - ] - ]; - - function getPath(): string { - return "/gtfs/routes"; + id: 9, + route_id: '10', + agency_id: 'TZM', + route_short_name: '1', + route_long_name: + 'Johnsonville West/Churton Park/Grenada Village - Island Bay', + route_desc: + 'Island Bay - Johnsonville West/Churton Park/Grenada Village', + route_type: 3, + route_color: 'e31837', + route_text_color: 'ffffff', + route_url: '', + route_sort_order: 10, + }, + ], + ], + ] + + function getPath(routeId: string | null = null): string { + const query: URLSearchParams = new URLSearchParams() + let prefix = '' + if (routeId) { + query.append('route_id', routeId) + prefix = '?' + } + + return '/gtfs/routes' + prefix + query.toString() } - it.each(dataSet)("getGtfsRoutes", async (mockData) => { - mock.onGet(getPath()).replyOnce(200, mockData); + it.each(dataSet)('getGtfsRoutes', async (mockData) => { + mock.onGet(getPath()).replyOnce(200, mockData) - const client: MetlinkHttpClientInterface = ClientBuilder.getHttpClientWithResponseDataDecorator(axios); - const response:Route[] = await client.getGtfsRoutes(null); + const client: MetlinkHttpClientInterface = + ClientBuilder.getHttpClientWithResponseDataDecorator(axios) + const response: Route[] = await client.getGtfsRoutes(null) response.forEach((entity) => { expect(entity).toBeInstanceOf(Route) - }); - }); + }) + }) - it.each(dataSet)("getRouteById", async (mockData) => { - mock.onGet(getPath()).replyOnce(200, mockData); + it.each(dataSet)('getRouteById', async (mockData) => { + mock.onGet(getPath('1100')).replyOnce(200, mockData) - const client: MetlinkHttpClientInterface = ClientBuilder.getHttpClientWithResponseDataDecorator(axios); - const response: Route[] = await client.getGtfsRoutes("1100"); + const client: MetlinkHttpClientInterface = + ClientBuilder.getHttpClientWithResponseDataDecorator(axios) + const response: Route[] = await client.getGtfsRoutes('1100') response.forEach((entity) => { expect(entity).toBeInstanceOf(Route) - }); - }); -}); \ No newline at end of file + }) + }) +}) diff --git a/tests/unit/ResponseDataDecorator/Gtfs/Shapes.test.ts b/tests/unit/ResponseDataDecorator/Gtfs/Shapes.test.ts index 53b2a50..8e1312e 100644 --- a/tests/unit/ResponseDataDecorator/Gtfs/Shapes.test.ts +++ b/tests/unit/ResponseDataDecorator/Gtfs/Shapes.test.ts @@ -1,50 +1,50 @@ -import axios from 'axios'; -import MockAdapter from "axios-mock-adapter"; -import {MetlinkHttpClientInterface} from "../../../../src/Contracts"; -import {ClientBuilder} from "../../ClientBuilder"; -import {Shape} from "../../../../src/domain/gtfs/entity/Shape"; +import axios from 'axios' +import MockAdapter from 'axios-mock-adapter' +import { MetlinkHttpClientInterface } from '../../../../src/Contracts' +import { ClientBuilder } from '../../ClientBuilder' +import { Shape } from '../../../../src/domain/gtfs/entity/Shape' -const mock: MockAdapter = new MockAdapter(axios); +const mock: MockAdapter = new MockAdapter(axios) -describe("Response Data Decorator: Shapes", () => { - - const ShapeId1: string = "[@364.0.17527449@]1_20240825"; +describe('Response Data Decorator: Shapes', () => { + const ShapeId1: string = '[@364.0.17527449@]1_20240825' afterEach(function () { - mock.reset(); - }); + mock.reset() + }) const dataSet = [ [ [ { - "id": 92441, - "shape_id": "[@364.0.17527449@]1_20240825", - "shape_pt_lat": -41.2091982, - "shape_pt_lon": 174.9050033, - "shape_pt_sequence": 0, - "shape_dist_traveled": 0 - } - ] - ] - ]; + id: 92441, + shape_id: '[@364.0.17527449@]1_20240825', + shape_pt_lat: -41.2091982, + shape_pt_lon: 174.9050033, + shape_pt_sequence: 0, + shape_dist_traveled: 0, + }, + ], + ], + ] function getPath(shapeId: string): string { const query: URLSearchParams = new URLSearchParams({ - "shape_id": shapeId - }); + shape_id: shapeId, + }) - return "/gtfs/shapes?"+query.toString(); + return '/gtfs/shapes?' + query.toString() } - it.each(dataSet)("getGtfsShapes", async (mockData) => { - mock.onGet(getPath(ShapeId1)).replyOnce(200, mockData); + it.each(dataSet)('getGtfsShapes', async (mockData) => { + mock.onGet(getPath(ShapeId1)).replyOnce(200, mockData) - const client: MetlinkHttpClientInterface = ClientBuilder.getHttpClientWithResponseDataDecorator(axios); - const response:Shape[] = await client.getGtfsShapes(ShapeId1); + const client: MetlinkHttpClientInterface = + ClientBuilder.getHttpClientWithResponseDataDecorator(axios) + const response: Shape[] = await client.getGtfsShapes(ShapeId1) response.forEach((entity) => { expect(entity).toBeInstanceOf(Shape) - }); - }); -}); \ No newline at end of file + }) + }) +}) diff --git a/tests/unit/ResponseDataDecorator/Gtfs/StopTimes.test.ts b/tests/unit/ResponseDataDecorator/Gtfs/StopTimes.test.ts index aa27ccb..0a21d0c 100644 --- a/tests/unit/ResponseDataDecorator/Gtfs/StopTimes.test.ts +++ b/tests/unit/ResponseDataDecorator/Gtfs/StopTimes.test.ts @@ -1,56 +1,55 @@ -import axios from 'axios'; -import MockAdapter from "axios-mock-adapter"; -import {MetlinkHttpClientInterface} from "../../../../src/Contracts"; -import {ClientBuilder} from "../../ClientBuilder"; -import {StopTime} from "../../../../src/domain/gtfs/entity/StopTime"; +import axios from 'axios' +import MockAdapter from 'axios-mock-adapter' +import { MetlinkHttpClientInterface } from '../../../../src/Contracts' +import { ClientBuilder } from '../../ClientBuilder' +import { StopTime } from '../../../../src/domain/gtfs/entity/StopTime' -const mock: MockAdapter = new MockAdapter(axios); - -describe("Response Data Decorator: Stop times", () => { +const mock: MockAdapter = new MockAdapter(axios) +describe('Response Data Decorator: Stop times', () => { afterEach(function () { - mock.reset(); - }); + mock.reset() + }) - const TRIP_ID = "60__0__439__MNM__2071__1__2071__1_20240825"; + const TRIP_ID = '60__0__439__MNM__2071__1__2071__1_20240825' const dataSet = [ [ [ { - "id": 1, - "trip_id": "60__0__439__MNM__2071__1__2071__1_20240825", - "arrival_time": "16:58:00", - "departure_time": "16:58:00", - "stop_id": "3000", - "stop_sequence": 0, - "shape_dist_traveled": 0, - "stop_headsign": "Porirua", - "pickup_type": 0, - "drop_off_type": 1, - "timepoint": "1" - } - ] - ] - ]; - - function getPath(tripId: string): string - { + id: 1, + trip_id: '60__0__439__MNM__2071__1__2071__1_20240825', + arrival_time: '16:58:00', + departure_time: '16:58:00', + stop_id: '3000', + stop_sequence: 0, + shape_dist_traveled: 0, + stop_headsign: 'Porirua', + pickup_type: 0, + drop_off_type: 1, + timepoint: '1', + }, + ], + ], + ] + + function getPath(tripId: string): string { const query: URLSearchParams = new URLSearchParams({ - "trip_id": tripId - }); + trip_id: tripId, + }) - return "/gtfs/stop_times?"+query.toString(); + return '/gtfs/stop_times?' + query.toString() } - it.each(dataSet)("getGtfsStopTimes", async (mockData) => { - mock.onGet(getPath(TRIP_ID)).replyOnce(200, mockData); + it.each(dataSet)('getGtfsStopTimes', async (mockData) => { + mock.onGet(getPath(TRIP_ID)).replyOnce(200, mockData) - const client: MetlinkHttpClientInterface = ClientBuilder.getHttpClientWithResponseDataDecorator(axios); - const response: StopTime[] = await client.getGtfsStopTimes(TRIP_ID); + const client: MetlinkHttpClientInterface = + ClientBuilder.getHttpClientWithResponseDataDecorator(axios) + const response: StopTime[] = await client.getGtfsStopTimes(TRIP_ID) response.forEach((entity) => { expect(entity).toBeInstanceOf(StopTime) - }); - }); -}); \ No newline at end of file + }) + }) +}) diff --git a/tests/unit/ResponseDataDecorator/Gtfs/Stops.test.ts b/tests/unit/ResponseDataDecorator/Gtfs/Stops.test.ts index 018ad42..d9de05a 100644 --- a/tests/unit/ResponseDataDecorator/Gtfs/Stops.test.ts +++ b/tests/unit/ResponseDataDecorator/Gtfs/Stops.test.ts @@ -1,50 +1,50 @@ -import axios from 'axios'; -import MockAdapter from "axios-mock-adapter"; -import {MetlinkHttpClientInterface} from "../../../../src/Contracts"; -import {ClientBuilder} from "../../ClientBuilder"; -import {Stop} from "../../../../src/domain/gtfs/entity/Stop"; +import axios from 'axios' +import MockAdapter from 'axios-mock-adapter' +import { MetlinkHttpClientInterface } from '../../../../src/Contracts' +import { ClientBuilder } from '../../ClientBuilder' +import { Stop } from '../../../../src/domain/gtfs/entity/Stop' -const mock: MockAdapter = new MockAdapter(axios); - -describe("Response Data Decorator: Stops", () => { +const mock: MockAdapter = new MockAdapter(axios) +describe('Response Data Decorator: Stops', () => { afterEach(function () { - mock.reset(); - }); + mock.reset() + }) const dataSet = [ [ [ { - "id": 1, - "stop_id": "7951", - "stop_code": "7951", - "stop_name": "Buckley Road (near 108)", - "stop_desc": "", - "zone_id": "3", - "stop_lat": -41.33689713, - "stop_lon": 174.7827608, - "location_type": 0, - "parent_station": "", - "stop_url": "", - "stop_timezone": "Pacific/Auckland" - } - ] - ] - ]; + id: 1, + stop_id: '7951', + stop_code: '7951', + stop_name: 'Buckley Road (near 108)', + stop_desc: '', + zone_id: '3', + stop_lat: -41.33689713, + stop_lon: 174.7827608, + location_type: 0, + parent_station: '', + stop_url: '', + stop_timezone: 'Pacific/Auckland', + }, + ], + ], + ] function getPath(): string { - return "/gtfs/stops"; + return '/gtfs/stops' } - it.each(dataSet)("getGtfsStops", async (mockData) => { - mock.onGet(getPath()).replyOnce(200, mockData); + it.each(dataSet)('getGtfsStops', async (mockData) => { + mock.onGet(getPath()).replyOnce(200, mockData) - const client: MetlinkHttpClientInterface = ClientBuilder.getHttpClientWithResponseDataDecorator(axios); - const response:Stop[] = await client.getGtfsStops(null, null); + const client: MetlinkHttpClientInterface = + ClientBuilder.getHttpClientWithResponseDataDecorator(axios) + const response: Stop[] = await client.getGtfsStops(null, null) response.forEach((entity) => { expect(entity).toBeInstanceOf(Stop) - }); - }); -}); \ No newline at end of file + }) + }) +}) diff --git a/tests/unit/ResponseDataDecorator/Gtfs/Transfers.test.ts b/tests/unit/ResponseDataDecorator/Gtfs/Transfers.test.ts index f914a9e..5c22049 100644 --- a/tests/unit/ResponseDataDecorator/Gtfs/Transfers.test.ts +++ b/tests/unit/ResponseDataDecorator/Gtfs/Transfers.test.ts @@ -1,45 +1,45 @@ -import axios from 'axios'; -import MockAdapter from "axios-mock-adapter"; -import {MetlinkHttpClientInterface} from "../../../../src/Contracts"; -import {ClientBuilder} from "../../ClientBuilder"; -import {Transfer} from "../../../../src/domain/gtfs/entity/Transfer"; +import axios from 'axios' +import MockAdapter from 'axios-mock-adapter' +import { MetlinkHttpClientInterface } from '../../../../src/Contracts' +import { ClientBuilder } from '../../ClientBuilder' +import { Transfer } from '../../../../src/domain/gtfs/entity/Transfer' -const mock: MockAdapter = new MockAdapter(axios); - -describe("Response Data Decorator: Transfers", () => { +const mock: MockAdapter = new MockAdapter(axios) +describe('Response Data Decorator: Transfers', () => { afterEach(function () { - mock.reset(); - }); + mock.reset() + }) const dataSet = [ [ [ { - "id": 1, - "from_stop_id": "9416", - "to_stop_id": "SILV", - "transfer_type": "2", - "min_transfer_time": "240", - "from_trip_id": "115__0__421__TZM__508__3__508__3_20240825", - "to_trip_id": "HVL__1__3853__RAIL__Rail_SaSu+Hol_20240825" - } - ] - ] - ]; + id: 1, + from_stop_id: '9416', + to_stop_id: 'SILV', + transfer_type: '2', + min_transfer_time: '240', + from_trip_id: '115__0__421__TZM__508__3__508__3_20240825', + to_trip_id: 'HVL__1__3853__RAIL__Rail_SaSu+Hol_20240825', + }, + ], + ], + ] function getPath(): string { - return "/gtfs/transfers"; + return '/gtfs/transfers' } - it.each(dataSet)("getGtfsTransfers", async (mockData) => { - mock.onGet(getPath()).replyOnce(200, mockData); + it.each(dataSet)('getGtfsTransfers', async (mockData) => { + mock.onGet(getPath()).replyOnce(200, mockData) - const client: MetlinkHttpClientInterface = ClientBuilder.getHttpClientWithResponseDataDecorator(axios); - const response:Transfer[] = await client.getGtfsTransfers(); + const client: MetlinkHttpClientInterface = + ClientBuilder.getHttpClientWithResponseDataDecorator(axios) + const response: Transfer[] = await client.getGtfsTransfers() response.forEach((entity) => { expect(entity).toBeInstanceOf(Transfer) - }); - }); -}); \ No newline at end of file + }) + }) +}) diff --git a/tests/unit/ResponseDataDecorator/Gtfs/Trips.test.ts b/tests/unit/ResponseDataDecorator/Gtfs/Trips.test.ts index 0464676..0fe057d 100644 --- a/tests/unit/ResponseDataDecorator/Gtfs/Trips.test.ts +++ b/tests/unit/ResponseDataDecorator/Gtfs/Trips.test.ts @@ -1,56 +1,56 @@ -import axios from 'axios'; -import MockAdapter from "axios-mock-adapter"; -import {MetlinkHttpClientInterface} from "../../../../src/Contracts"; -import {ClientBuilder} from "../../ClientBuilder"; -import {Trip} from "../../../../src/domain/gtfs/entity/Trip"; +import axios from 'axios' +import MockAdapter from 'axios-mock-adapter' +import { MetlinkHttpClientInterface } from '../../../../src/Contracts' +import { ClientBuilder } from '../../ClientBuilder' +import { Trip } from '../../../../src/domain/gtfs/entity/Trip' -const mock: MockAdapter = new MockAdapter(axios); - -describe("Response Data Decorator: Trips", () => { +const mock: MockAdapter = new MockAdapter(axios) +describe('Response Data Decorator: Trips', () => { afterEach(function () { - mock.reset(); - }); + mock.reset() + }) const dataSet = [ [ [ { - "id": 1, - "route_id": 600, - "service_id": "2071_1_20240825", - "trip_id": "60__0__439__MNM__2071__1__2071__1_20240825", - "trip_headsign": "", - "direction_id": 0, - "block_id": "", - "shape_id": "[@356.0.29339884@]2_20240825", - "wheelchair_accessible": 0, - "bikes_allowed": 2, - "origin_stop_id": "3000", - "destination_stop_id": "2002" - } - ] - ] - ]; + id: 1, + route_id: 600, + service_id: '2071_1_20240825', + trip_id: '60__0__439__MNM__2071__1__2071__1_20240825', + trip_headsign: '', + direction_id: 0, + block_id: '', + shape_id: '[@356.0.29339884@]2_20240825', + wheelchair_accessible: 0, + bikes_allowed: 2, + origin_stop_id: '3000', + destination_stop_id: '2002', + }, + ], + ], + ] function getPath(): string { - return "/gtfs/trips"; + return '/gtfs/trips' } - it.each(dataSet)("getGtfsTrips", async (mockData) => { - mock.onGet(getPath()).replyOnce(200, mockData); + it.each(dataSet)('getGtfsTrips', async (mockData) => { + mock.onGet(getPath()).replyOnce(200, mockData) - const client: MetlinkHttpClientInterface = ClientBuilder.getHttpClientWithResponseDataDecorator(axios); + const client: MetlinkHttpClientInterface = + ClientBuilder.getHttpClientWithResponseDataDecorator(axios) const response: Trip[] = await client.getGtfsTrips( null, null, null, null, - null, - ); + null + ) response.forEach((entity) => { expect(entity).toBeInstanceOf(Trip) - }); - }); -}); \ No newline at end of file + }) + }) +}) diff --git a/tests/unit/ResponseDataDecorator/StopPredictions.test.ts b/tests/unit/ResponseDataDecorator/StopPredictions.test.ts index b199400..679c442 100644 --- a/tests/unit/ResponseDataDecorator/StopPredictions.test.ts +++ b/tests/unit/ResponseDataDecorator/StopPredictions.test.ts @@ -1,78 +1,78 @@ -import axios from 'axios'; -import MockAdapter from "axios-mock-adapter"; -import {MetlinkHttpClientInterface} from "../../../src/Contracts"; -import {ClientBuilder} from "../ClientBuilder"; -import {Response} from "../../../src/domain/stop-departure-prediction/Response"; +import axios from 'axios' +import MockAdapter from 'axios-mock-adapter' +import { MetlinkHttpClientInterface } from '../../../src/Contracts' +import { ClientBuilder } from '../ClientBuilder' +import { Response } from '../../../src/domain/stop-departure-prediction/Response' -const mock: MockAdapter = new MockAdapter(axios); - -describe("Response Data Decorator: Stop predictions", () => { - - const STOP_ID: string = "5515"; +const mock: MockAdapter = new MockAdapter(axios) +describe('Response Data Decorator: Stop predictions', () => { + const STOP_ID: string = '5515' afterEach(function (): void { - mock.reset(); - }); + mock.reset() + }) const dataSet = [ [ { - "farezone": "7", - "closed": false, - "departures": [ + farezone: '7', + closed: false, + departures: [ { - "stop_id": "WALL2", - "service_id": "HVL", - "direction": "outbound", - "operator": "RAIL", - "origin": { - "stop_id": "WELL1", - "name": "WgtnStn" + stop_id: 'WALL2', + service_id: 'HVL', + direction: 'outbound', + operator: 'RAIL', + origin: { + stop_id: 'WELL1', + name: 'WgtnStn', }, - "destination": { - "stop_id": "UPPE", - "name": "UPPE - All stops" + destination: { + stop_id: 'UPPE', + name: 'UPPE - All stops', }, - "delay": "PT2M37S", - "vehicle_id": "4263", - "name": "WallacevilleStn", - "arrival": { - "aimed": "2024-09-17T07:51:00+12:00", - "expected": "2024-09-17T07:53:37+12:00" + delay: 'PT2M37S', + vehicle_id: '4263', + name: 'WallacevilleStn', + arrival: { + aimed: '2024-09-17T07:51:00+12:00', + expected: '2024-09-17T07:53:37+12:00', }, - "departure": { - "aimed": "2024-09-17T07:51:00+12:00", - "expected": "2024-09-17T07:53:37+12:00" + departure: { + aimed: '2024-09-17T07:51:00+12:00', + expected: '2024-09-17T07:53:37+12:00', }, - "status": "delayed", - "monitored": true, - "wheelchair_accessible": true, - "trip_id": "HVL__0__2616__RAIL__Rail_MTuWThF-XHol_20240825" + status: 'delayed', + monitored: true, + wheelchair_accessible: true, + trip_id: + 'HVL__0__2616__RAIL__Rail_MTuWThF-XHol_20240825', }, - ] - - } - ] - ]; + ], + }, + ], + ] function getPath(urlSearchParams: URLSearchParams | null = null): string { - let query: string = ""; + let query: string = '' if (urlSearchParams) { - query = "?"+urlSearchParams?.toString(); + query = '?' + urlSearchParams?.toString() } - return "/stop-predictions" + query; + return '/stop-predictions' + query } + it.each(dataSet)('getStopPredictions', async (mockData) => { + mock.onGet( + getPath(new URLSearchParams({ stop_id: STOP_ID })) + ).replyOnce(200, mockData) - it.each(dataSet)("getStopPredictions", async (mockData) => { - mock.onGet(getPath(new URLSearchParams({"stop_id": STOP_ID}))).replyOnce(200, mockData); - - const client: MetlinkHttpClientInterface = ClientBuilder.getHttpClientWithResponseDataDecorator(axios); - const entity: Response = await client.getStopPredictions(STOP_ID); + const client: MetlinkHttpClientInterface = + ClientBuilder.getHttpClientWithResponseDataDecorator(axios) + const entity: Response = await client.getStopPredictions(STOP_ID) expect(entity).toBeInstanceOf(Response) - }); -}); \ No newline at end of file + }) +}) diff --git a/tests/unit/ResponseDataDecorator/TripCancellations.test.ts b/tests/unit/ResponseDataDecorator/TripCancellations.test.ts index 926aacb..357e139 100644 --- a/tests/unit/ResponseDataDecorator/TripCancellations.test.ts +++ b/tests/unit/ResponseDataDecorator/TripCancellations.test.ts @@ -1,48 +1,48 @@ -import axios from 'axios'; -import MockAdapter from "axios-mock-adapter"; -import {MetlinkHttpClientInterface} from "../../../src/Contracts"; -import {ClientBuilder} from "../ClientBuilder"; -import {Trip} from "../../../src/domain/trip-cancellation/Trip"; +import axios from 'axios' +import MockAdapter from 'axios-mock-adapter' +import { MetlinkHttpClientInterface } from '../../../src/Contracts' +import { ClientBuilder } from '../ClientBuilder' +import { Trip } from '../../../src/domain/trip-cancellation/Trip' -const mock: MockAdapter = new MockAdapter(axios); - -describe("Response Data Decorator: Trip cancellations", () => { +const mock: MockAdapter = new MockAdapter(axios) +describe('Response Data Decorator: Trip cancellations', () => { afterEach(function () { - mock.reset(); - }); + mock.reset() + }) const dataSet = [ [ [ { - "id": "ec196c26-d1ee-410d-bbaf-708763dcd10b", - "date_created": "2024-09-17 07:29:07", - "date_updated": "2024-09-17 07:53:48", - "trip_id": "1__1__134__TZM__224__1__224__1_20240825", - "route_id": 10, - "trip_date_start": "2024-09-17 08:03:00", - "trip_date_end": "2024-09-17 09:25:00", - "direction_id": 1, - "reinstated": 0, - "part_cancellation": 0 + id: 'ec196c26-d1ee-410d-bbaf-708763dcd10b', + date_created: '2024-09-17 07:29:07', + date_updated: '2024-09-17 07:53:48', + trip_id: '1__1__134__TZM__224__1__224__1_20240825', + route_id: 10, + trip_date_start: '2024-09-17 08:03:00', + trip_date_end: '2024-09-17 09:25:00', + direction_id: 1, + reinstated: 0, + part_cancellation: 0, }, - ] - ] - ]; + ], + ], + ] function getPath(): string { - return "/trip-cancellations"; + return '/trip-cancellations' } - it.each(dataSet)("getTripCancellations", async (mockData) => { - mock.onGet(getPath()).replyOnce(200, mockData); + it.each(dataSet)('getTripCancellations', async (mockData) => { + mock.onGet(getPath()).replyOnce(200, mockData) - const client: MetlinkHttpClientInterface = ClientBuilder.getHttpClientWithResponseDataDecorator(axios); - const response: Trip[] = await client.getTripCancellations(); + const client: MetlinkHttpClientInterface = + ClientBuilder.getHttpClientWithResponseDataDecorator(axios) + const response: Trip[] = await client.getTripCancellations() response.forEach((entity) => { expect(entity).toBeInstanceOf(Trip) - }); - }); -}); \ No newline at end of file + }) + }) +}) diff --git a/tests/unit/Routes.test.ts b/tests/unit/Routes.test.ts index 6558dd2..a761c40 100644 --- a/tests/unit/Routes.test.ts +++ b/tests/unit/Routes.test.ts @@ -1,108 +1,108 @@ -import {Routes} from "../../src/Routes"; +import { Routes } from '../../src/Routes' -describe("Routes", () => { - test("Test getGtfsAgenciesPath", () => { - const path = Routes.getGtfsAgenciesPath(); +describe('Routes', () => { + test('Test getGtfsAgenciesPath', () => { + const path = Routes.getGtfsAgenciesPath() - expect(path).not.toBe(""); - expect(path).not.toBeNull(); + expect(path).not.toBe('') + expect(path).not.toBeNull() }) - test("Test getGtfsCalendarPath", () => { - const path = Routes.getGtfsCalendarPath(); + test('Test getGtfsCalendarPath', () => { + const path = Routes.getGtfsCalendarPath() - expect(path).not.toBe(""); - expect(path).not.toBeNull(); + expect(path).not.toBe('') + expect(path).not.toBeNull() }) - test("Test getGtfsCalendarDatesPath", () => { - const path = Routes.getGtfsCalendarDatesPath(); + test('Test getGtfsCalendarDatesPath', () => { + const path = Routes.getGtfsCalendarDatesPath() - expect(path).not.toBe(""); - expect(path).not.toBeNull(); + expect(path).not.toBe('') + expect(path).not.toBeNull() }) - test("Test getGtfsFeedInfoPath", () => { - const path = Routes.getGtfsFeedInfoPath(); + test('Test getGtfsFeedInfoPath', () => { + const path = Routes.getGtfsFeedInfoPath() - expect(path).not.toBe(""); - expect(path).not.toBeNull(); + expect(path).not.toBe('') + expect(path).not.toBeNull() }) - test("Test getGtfsRoutesPath", () => { - const path = Routes.getGtfsRoutesPath(); + test('Test getGtfsRoutesPath', () => { + const path = Routes.getGtfsRoutesPath() - expect(path).not.toBe(""); - expect(path).not.toBeNull(); + expect(path).not.toBe('') + expect(path).not.toBeNull() }) - test("Test getGtfsStopTimesPath", () => { - const path = Routes.getGtfsStopTimesPath(); + test('Test getGtfsStopTimesPath', () => { + const path = Routes.getGtfsStopTimesPath() - expect(path).not.toBe(""); - expect(path).not.toBeNull(); + expect(path).not.toBe('') + expect(path).not.toBeNull() }) - test("Test getGtfsShapesPath", () => { - const path = Routes.getGtfsShapesPath(); + test('Test getGtfsShapesPath', () => { + const path = Routes.getGtfsShapesPath() - expect(path).not.toBe(""); - expect(path).not.toBeNull(); + expect(path).not.toBe('') + expect(path).not.toBeNull() }) - test("Test getGtfsStopsPath", () => { - const path = Routes.getGtfsStopsPath(); + test('Test getGtfsStopsPath', () => { + const path = Routes.getGtfsStopsPath() - expect(path).not.toBe(""); - expect(path).not.toBeNull(); + expect(path).not.toBe('') + expect(path).not.toBeNull() }) - test("Test getGtfsTransfersPath", () => { - const path = Routes.getGtfsTransfersPath(); + test('Test getGtfsTransfersPath', () => { + const path = Routes.getGtfsTransfersPath() - expect(path).not.toBe(""); - expect(path).not.toBeNull(); + expect(path).not.toBe('') + expect(path).not.toBeNull() }) - test("Test getGtfsTripsPath", () => { - const path = Routes.getGtfsTripsPath(); + test('Test getGtfsTripsPath', () => { + const path = Routes.getGtfsTripsPath() - expect(path).not.toBe(""); - expect(path).not.toBeNull(); + expect(path).not.toBe('') + expect(path).not.toBeNull() }) - test("Test getGtfsRtServiceAlertsPath", () => { - const path = Routes.getGtfsRtServiceAlertsPath(); + test('Test getGtfsRtServiceAlertsPath', () => { + const path = Routes.getGtfsRtServiceAlertsPath() - expect(path).not.toBe(""); - expect(path).not.toBeNull(); + expect(path).not.toBe('') + expect(path).not.toBeNull() }) - test("Test getGtfsRtTripUpdatesPath", () => { - const path = Routes.getGtfsRtTripUpdatesPath(); + test('Test getGtfsRtTripUpdatesPath', () => { + const path = Routes.getGtfsRtTripUpdatesPath() - expect(path).not.toBe(""); - expect(path).not.toBeNull(); + expect(path).not.toBe('') + expect(path).not.toBeNull() }) - test("Test getGtfsRtVehiclePositionsPath", () => { - const path = Routes.getGtfsRtVehiclePositionsPath(); + test('Test getGtfsRtVehiclePositionsPath', () => { + const path = Routes.getGtfsRtVehiclePositionsPath() - expect(path).not.toBe(""); - expect(path).not.toBeNull(); + expect(path).not.toBe('') + expect(path).not.toBeNull() }) - test("Test getTripCancellations", () => { - const path = Routes.getTripCancellations(); + test('Test getTripCancellations', () => { + const path = Routes.getTripCancellations() - expect(path).not.toBe(""); - expect(path).not.toBeNull(); + expect(path).not.toBe('') + expect(path).not.toBeNull() }) - test("Test getStopPredictions", () => { - const path = Routes.getStopPredictions(); + test('Test getStopPredictions', () => { + const path = Routes.getStopPredictions() - expect(path).not.toBe(""); - expect(path).not.toBeNull(); + expect(path).not.toBe('') + expect(path).not.toBeNull() }) -}) \ No newline at end of file +}) diff --git a/tsconfig.json b/tsconfig.json index e5671b9..eeacf42 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,129 +1,124 @@ { - "compilerOptions": { - /* Visit https://aka.ms/tsconfig to read more about this file */ + "compilerOptions": { + /* Visit https://aka.ms/tsconfig to read more about this file */ - /* Projects */ - // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ - // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ - // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */ - // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */ - // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ - // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ + /* Projects */ + // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ + // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ + // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */ + // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */ + // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ + // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ - /* Language and Environment */ - "target": "es6", - "module": "commonjs", - /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ - // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ - // "jsx": "preserve", /* Specify what JSX code is generated. */ - // "experimentalDecorators": true, /* Enable experimental support for legacy experimental decorators. */ - // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ - // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */ - // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ - // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */ - // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */ - // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ - // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ - // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ + /* Language and Environment */ + "target": "es6", + "module": "commonjs", + /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ + // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ + // "jsx": "preserve", /* Specify what JSX code is generated. */ + // "experimentalDecorators": true, /* Enable experimental support for legacy experimental decorators. */ + // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ + // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */ + // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ + // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */ + // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */ + // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ + // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ + // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ - /* Modules */ - /* Specify what module code is generated. */ - "rootDir": "./", - /* Specify the root folder within your source files. */ - // "moduleResolution": "node10", /* Specify how TypeScript looks up a file from a given module specifier. */ - // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ - // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ - // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ - // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */ - // "types": [], /* Specify type package names to be included without being referenced in a source file. */ - // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ - // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ - // "allowImportingTsExtensions": true, /* Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set. */ - // "resolvePackageJsonExports": true, /* Use the package.json 'exports' field when resolving package imports. */ - // "resolvePackageJsonImports": true, /* Use the package.json 'imports' field when resolving imports. */ - // "customConditions": [], /* Conditions to set in addition to the resolver-specific defaults when resolving imports. */ - // "noUncheckedSideEffectImports": true, /* Check side effect imports. */ - "resolveJsonModule": true, - /* Enable importing .json files. */ - // "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */ - // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */ + /* Modules */ + /* Specify what module code is generated. */ + "rootDir": "./", + /* Specify the root folder within your source files. */ + // "moduleResolution": "node10", /* Specify how TypeScript looks up a file from a given module specifier. */ + // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ + // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ + // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ + // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */ + // "types": [], /* Specify type package names to be included without being referenced in a source file. */ + // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ + // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ + // "allowImportingTsExtensions": true, /* Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set. */ + // "resolvePackageJsonExports": true, /* Use the package.json 'exports' field when resolving package imports. */ + // "resolvePackageJsonImports": true, /* Use the package.json 'imports' field when resolving imports. */ + // "customConditions": [], /* Conditions to set in addition to the resolver-specific defaults when resolving imports. */ + // "noUncheckedSideEffectImports": true, /* Check side effect imports. */ + "resolveJsonModule": true, + /* Enable importing .json files. */ + // "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */ + // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */ - /* JavaScript Support */ - // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ - // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ - // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ + /* JavaScript Support */ + // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ + // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ + // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ - /* Emit */ - // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ - // "declarationMap": true, /* Create sourcemaps for d.ts files. */ - // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ - // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ - // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ - // "noEmit": true, /* Disable emitting files from a compilation. */ - // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ - "outDir": "./", - /* Specify an output folder for all emitted files. */ - // "removeComments": true, /* Disable emitting comments. */ - // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ - // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ - // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ - // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ - // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ - // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ - // "newLine": "crlf", /* Set the newline character for emitting files. */ - // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */ - // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */ - // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ - // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */ - // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ + /* Emit */ + // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ + // "declarationMap": true, /* Create sourcemaps for d.ts files. */ + // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ + // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ + // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ + // "noEmit": true, /* Disable emitting files from a compilation. */ + // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ + "outDir": "./", + /* Specify an output folder for all emitted files. */ + // "removeComments": true, /* Disable emitting comments. */ + // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ + // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ + // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ + // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ + // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ + // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ + // "newLine": "crlf", /* Set the newline character for emitting files. */ + // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */ + // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */ + // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ + // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */ + // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ - /* Interop Constraints */ - // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ - // "verbatimModuleSyntax": true, /* Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting. */ - // "isolatedDeclarations": true, /* Require sufficient annotation on exports so other tools can trivially generate declaration files. */ - // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ - "esModuleInterop": true, - /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */ - // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ - "forceConsistentCasingInFileNames": true, - /* Ensure that casing is correct in imports. */ + /* Interop Constraints */ + // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ + // "verbatimModuleSyntax": true, /* Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting. */ + // "isolatedDeclarations": true, /* Require sufficient annotation on exports so other tools can trivially generate declaration files. */ + // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ + "esModuleInterop": true, + /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */ + // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ + "forceConsistentCasingInFileNames": true, + /* Ensure that casing is correct in imports. */ - /* Type Checking */ - "strict": true, - /* Enable all strict type-checking options. */ - "noImplicitAny": true, - /* Enable error reporting for expressions and declarations with an implied 'any' type. */ - "strictNullChecks": true, - /* When type checking, take into account 'null' and 'undefined'. */ - // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ - // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ - // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ - // "strictBuiltinIteratorReturn": true, /* Built-in iterators are instantiated with a 'TReturn' type of 'undefined' instead of 'any'. */ - // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ - // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ - // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ - // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */ - // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */ - // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ - // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ - // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ - // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */ - // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ - // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */ - // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ - // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ + /* Type Checking */ + "strict": true, + /* Enable all strict type-checking options. */ + "noImplicitAny": true, + /* Enable error reporting for expressions and declarations with an implied 'any' type. */ + "strictNullChecks": true, + /* When type checking, take into account 'null' and 'undefined'. */ + // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ + // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ + // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ + // "strictBuiltinIteratorReturn": true, /* Built-in iterators are instantiated with a 'TReturn' type of 'undefined' instead of 'any'. */ + // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ + // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ + // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ + // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */ + // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */ + // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ + // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ + // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ + // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */ + // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ + // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */ + // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ + // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ - /* Completeness */ - // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ - "skipLibCheck": true, - /* Skip type checking all .d.ts files. */ - "sourceMap": true - }, - "include": [ - "src/**/*.ts", - "tests/**/*.ts" - ], - "exclude": [ - "node_modules" - ] + /* Completeness */ + // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ + "skipLibCheck": true, + /* Skip type checking all .d.ts files. */ + "sourceMap": true + }, + "include": ["src/**/*.ts", "tests/**/*.ts"], + "exclude": ["node_modules"] }