diff --git a/.eslintrc.js b/.eslintrc.js index fcfe8fb..457ff32 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -6,4 +6,4 @@ module.exports = { parserOptions: { project: false, }, -} +}; diff --git a/.github/workflows/deploy-staging.yml b/.github/workflows/deploy-staging.yml index deed27a..7155591 100644 --- a/.github/workflows/deploy-staging.yml +++ b/.github/workflows/deploy-staging.yml @@ -6,7 +6,7 @@ name: "Staging" on: push: - branches: [ "master" ] + branches: ["master"] workflow_dispatch: concurrency: @@ -23,7 +23,7 @@ jobs: packages: write # Needed to push to the GitHub Container Registry strategy: matrix: - component: [ "api", "web" ] + component: ["api", "web"] with: version: "${{ github.sha }}" context: "." @@ -55,7 +55,7 @@ jobs: deploy: name: "Deploy to staging" uses: hemilabs/actions/.github/workflows/deploy-kustomize.yml@main - needs: [ "docker", "deploy-registry" ] + needs: ["docker", "deploy-registry"] permissions: contents: read with: diff --git a/.github/workflows/deploy-testnet.yml b/.github/workflows/deploy-testnet.yml index 6892ada..02bb82d 100644 --- a/.github/workflows/deploy-testnet.yml +++ b/.github/workflows/deploy-testnet.yml @@ -48,13 +48,13 @@ jobs: docker: name: "Docker (${{ matrix.component }})" uses: hemilabs/actions/.github/workflows/docker.yml@main - needs: [ "prepare" ] + needs: ["prepare"] permissions: contents: read packages: write # Needed to push to the GitHub Container Registry strategy: matrix: - component: [ "api", "web" ] + component: ["api", "web"] with: version: "${{ needs.prepare.outputs.version }}" context: "." @@ -90,7 +90,7 @@ jobs: deploy: name: "Deploy to testnet" uses: hemilabs/actions/.github/workflows/deploy-kustomize.yml@main - needs: [ "prepare", "docker", "deploy-registry" ] + needs: ["prepare", "docker", "deploy-registry"] permissions: contents: read with: diff --git a/.github/workflows/js-checks.yml b/.github/workflows/js-checks.yml new file mode 100644 index 0000000..c041af6 --- /dev/null +++ b/.github/workflows/js-checks.yml @@ -0,0 +1,58 @@ +name: JS Checks + +on: + pull_request: + push: + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }}-${{ github.event_name }} + cancel-in-progress: true + +jobs: + build-shared: + runs-on: ubuntu-latest + steps: + - name: Checkout Repository + uses: actions/checkout@v3 + + - name: Install Dependencies + run: npm install --workspaces --include-workspace-root + + - name: Build Shared Package + run: npm run build --workspaces --include-workspace-root + + - name: Save Build Output + run: tar -czf shared-build.tar.gz packages/shared/dist + + - name: Upload Build Artifact + uses: actions/upload-artifact@v3 + with: + name: shared-build + path: shared-build.tar.gz + + prepare-environment: + needs: build-shared + runs-on: ubuntu-latest + steps: + - name: Checkout Repository + uses: actions/checkout@v3 + + - name: Download Shared Build + uses: actions/download-artifact@v3 + with: + name: shared-build + + - name: Create Directory for Shared Build + run: mkdir -p packages/shared/dist + + - name: Extract Shared Build + run: tar -xzf shared-build.tar.gz -C packages/shared/dist + + - name: Install Dependencies + run: npm install --workspaces --include-workspace-root + + js-checks: + needs: prepare-environment + uses: hemilabs/actions/.github/workflows/js-checks.yml@main + with: + node-versions: '["16", "18", "20", "22"]' diff --git a/.nvmrc b/.nvmrc new file mode 100644 index 0000000..2edeafb --- /dev/null +++ b/.nvmrc @@ -0,0 +1 @@ +20 \ No newline at end of file diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 7f8b233..f29e74e 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -119,4 +119,3 @@ While the prerequisites above must be satisfied prior to having your pull reques | `bug` | Confirmed bugs or reports that are very likely to be bugs. | | `question` | Questions more than bug reports or feature requests (e.g. how do I do X). | | `feedback` | General feedback more than bug reports or feature requests. | - diff --git a/CodingChallenge.md b/CodingChallenge.md index 32e6e93..7ce51f6 100644 --- a/CodingChallenge.md +++ b/CodingChallenge.md @@ -1,16 +1,21 @@ # Coding Challenge Submission ## Description + Describe your project here ## Prerequisites, Dependencies, Versions + Please add anything here you've built that requires the above specifics ## Licensing + Please state if license is CC, MIT or ISC or other (please no GPL) ## Outside Libraries + Link any outside open source libraries used ## Steps + Tell us how to run it locally diff --git a/README.md b/README.md index 67fab62..e4ad103 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,11 @@ # CryptoChords + CryptoChords is a tool for visualizing activities on the [Hemi network](https://hemi.xyz). It features a web application that enables users to explore the network and visualize transactions in a user-friendly manner. This document provides instructions on how to set up, run, and contribute to the project. ## Visual Representation of the Network + CryptoChords provides a visual representation of the Hemi network using a piano keyboard as a metaphor. Every time a new transaction is added to the network, a cube appears on a piano key, representing the transaction. The transaction details are displayed on the screen, and if sound is enabled, the corresponding piano note is played simultaneously. There are four types of transactions, each represented by a different color and associated with a different quadrant of the piano keyboard: @@ -15,8 +17,8 @@ There are four types of transactions, each represented by a different color and A random key within the corresponding quadrant is selected to represent each transaction. - ## Folder Structure + The project is organized into the following folders: - `apps`: Contains the API and the Web application. @@ -24,6 +26,7 @@ The project is organized into the following folders: - `infrastucture`: Contains the necessary files to deploy the project. ## Architecture + This project is a monorepo composed of two applications: the API and the Web application and it is managed by [Turborepo](https://turbo.build/repo/docs). Both the API and the Web application follow the Domain-Driven Design (DDD) principles. You can find more information about the architecture in the `readme.md` file of each project. @@ -85,18 +88,23 @@ npm run lint ``` ## Deployment + We have two environments: `stage` and `production`. -The project is automatically deployed using GitHub Actions. +The project is automatically deployed using GitHub Actions. ### Stage + The `stage` environment is automatically deployed when a new tag is created. The tag must follow the pattern `v*.*.*`. For example, `v1.0.0`. ### Production + The `production` environment is automatically deployed when a Commit is pushed to the `main` branch. ## Contributing + If you want to contribute to this project and make it better, your help is very welcome. You can find more information about how to contribute in the [`CONTRIBUTING.md`](./CONTRIBUTING.md) file. ## License + This project is licensed under the MIT License - see the [`LICENSE`](./LICENSE) file for details. diff --git a/apps/api/.eslintrc.js b/apps/api/.eslintrc.js deleted file mode 100644 index d961833..0000000 --- a/apps/api/.eslintrc.js +++ /dev/null @@ -1,10 +0,0 @@ -module.exports = { - root: true, - env: { browser: true, es2020: true }, - extends: [ - 'eslint:recommended', - 'plugin:@typescript-eslint/recommended' - ], - ignorePatterns: ['dist', '.eslintrc.js', '**/*.spec.ts'], - parser: '@typescript-eslint/parser', -} diff --git a/apps/api/.eslintrc.json b/apps/api/.eslintrc.json new file mode 100644 index 0000000..96a012c --- /dev/null +++ b/apps/api/.eslintrc.json @@ -0,0 +1,26 @@ +{ + "extends": ["bloq", "prettier"], + "ignorePatterns": ["dist", "_esm/*", "_cjs/*", "_types/*"], + "overrides": [ + { + "extends": ["bloq/typescript", "prettier"], + "files": ["src/**/*.ts"] + }, + { + "extends": ["bloq/markdown"], + "files": ["*.md"] + }, + { + "extends": ["bloq/vitest", "prettier"], + "files": ["*.spec.{js,ts}"] + } + ], + "parserOptions": { + "sourceType": "module" + }, + "root": true, + "rules": { + "arrow-body-style": "off", + "no-console": "off" + } +} diff --git a/apps/api/.prettierrc.json b/apps/api/.prettierrc.json new file mode 100644 index 0000000..21c021c --- /dev/null +++ b/apps/api/.prettierrc.json @@ -0,0 +1,7 @@ +{ + "arrowParens": "avoid", + "quoteProps": "consistent", + "semi": false, + "singleQuote": true, + "tabWidth": 2 +} diff --git a/apps/api/README.md b/apps/api/README.md index 6348138..cb2a5b4 100644 --- a/apps/api/README.md +++ b/apps/api/README.md @@ -90,7 +90,6 @@ The environment variables are defined in the `.env` file. The following variable - `ENABLE_MAINNET`: A boolean that enables mainnet.[Hemi Docs](https://github.com/hemilabs/infrastructure/blob/main/NETWORK_INFO.md). - Example of the .env file ``` @@ -99,8 +98,10 @@ ENABLE_MAINNET=false ``` ## Contribution + If you want to contribute to this project and make it better, your help is very welcome. You can find more information about how to contribute in the [`CONTRIBUTING.md`](../../CONTRIBUTING.md) file. ## License + This project is licensed under the MIT License - see the [LICENSE](../../LICENSE) file for details. diff --git a/apps/api/package.json b/apps/api/package.json index 1295926..5efe6f6 100644 --- a/apps/api/package.json +++ b/apps/api/package.json @@ -8,15 +8,16 @@ "test:cov": "vitest run src --coverage", "test:watch": "vitest watch src", "dev": "nodemon", + "format:check": "prettier --check .", + "format:fix": "npx prettier --write .", "build": "tsc -p tsconfig.build.json", - "lint": "eslint . --ext ts --report-unused-disable-directives --max-warnings 0", + "lint": "eslint . --ext ts", "start:api": "node dist/server.js" }, "author": "", "license": "MIT", "dependencies": { "@cryptochords/shared": "*", - "@typescript-eslint/eslint-plugin": "8.18.0", "dotenv": "16.4.7", "express": "4.21.2", "web3": "4.16.0" @@ -27,8 +28,12 @@ "@types/node": "22.10.2", "@types/ws": "8.5.13", "@vitest/coverage-v8": "2.1.8", - "eslint": "8.56.0", + "@typescript-eslint/eslint-plugin": "^8.18.2", + "@typescript-eslint/parser": "^8.18.2", + "eslint": "^8.57.1", + "eslint-config-bloq": "^4.4.1", "nodemon": "3.1.9", + "prettier": "^3.3.3", "ts-node": "10.9.2", "typescript": "5.3.3", "vitest": "2.1.8" diff --git a/apps/api/src/application/helpers/BroadcastToClients.ts b/apps/api/src/application/helpers/BroadcastToClients.ts index 25fb9bc..5b21c7e 100644 --- a/apps/api/src/application/helpers/BroadcastToClients.ts +++ b/apps/api/src/application/helpers/BroadcastToClients.ts @@ -1,12 +1,12 @@ -import WebSocket, { WebSocketServer } from 'ws'; -import { L2Block } from '@cryptochords/shared'; +import WebSocket, { WebSocketServer } from 'ws' +import { L2Block } from '@cryptochords/shared' -const BroadcastToClients = (wss: WebSocketServer, l2Block: L2Block): void => { +const broadcastToClients = (wss: WebSocketServer, l2Block: L2Block): void => { wss.clients.forEach((client: WebSocket) => { if (client.readyState === WebSocket.OPEN) { - client.send(JSON.stringify(l2Block.toJSON())); + client.send(JSON.stringify(l2Block.toJSON())) } - }); -}; + }) +} -export default BroadcastToClients +export default broadcastToClients diff --git a/apps/api/src/application/helpers/broadcastToClients.spec.ts b/apps/api/src/application/helpers/broadcastToClients.spec.ts index ff56996..47de08d 100644 --- a/apps/api/src/application/helpers/broadcastToClients.spec.ts +++ b/apps/api/src/application/helpers/broadcastToClients.spec.ts @@ -1,12 +1,12 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ -import { describe, it, expect, vi } from 'vitest'; -import WebSocket, { WebSocketServer } from 'ws'; -import BroadcastToClients from './BroadcastToClients'; +import { describe, it, expect, vi } from 'vitest' +import WebSocket, { WebSocketServer } from 'ws' +import broadcastToClients from './BroadcastToClients' describe('BroadcastToClients', () => { it('should send a message to all connected clients', () => { - const mockSend = vi.fn(); - const wss: any = new WebSocketServer({ noServer: true }); + const mockSend = vi.fn() + const wss: any = new WebSocketServer({ noServer: true }) wss.clients = new Set([ { readyState: WebSocket.OPEN, @@ -16,15 +16,15 @@ describe('BroadcastToClients', () => { readyState: WebSocket.CLOSED, send: mockSend, }, - ]); + ]) const l2Block = { toJSON: () => ({ key: 'value' }), - }; + } - BroadcastToClients(wss, l2Block as any); + broadcastToClients(wss, l2Block as any) - expect(mockSend).toHaveBeenCalledTimes(1); - expect(mockSend).toHaveBeenCalledWith(JSON.stringify({ key: 'value' })); - }); -}); + expect(mockSend).toHaveBeenCalledTimes(1) + expect(mockSend).toHaveBeenCalledWith(JSON.stringify({ key: 'value' })) + }) +}) diff --git a/apps/api/src/application/polling/pollingService.spec.ts b/apps/api/src/application/polling/pollingService.spec.ts index 42682ae..6337e66 100644 --- a/apps/api/src/application/polling/pollingService.spec.ts +++ b/apps/api/src/application/polling/pollingService.spec.ts @@ -1,49 +1,49 @@ -import { describe, it, expect, vi, beforeEach } from 'vitest'; -import { WebSocketServer } from 'ws'; -import { EventEmitter } from 'events'; -import BroadcastToClients from '../helpers/BroadcastToClients'; -import { TxTypesEnum } from '@cryptochords/shared'; -import { PollingService } from './pollingService'; - -vi.mock('ws'); +import { describe, it, expect, vi, beforeEach } from 'vitest' +import { WebSocketServer } from 'ws' +import { EventEmitter } from 'events' +import broadcastToClients from '../helpers/broadcastToClients' +import { TxTypesEnum } from '@cryptochords/shared' +import { PollingService } from './pollingService' + +vi.mock('ws') vi.mock('../helpers/BroadcastToClients', () => ({ __esModule: true, default: vi.fn(), -})); +})) class MockBlockRepository extends EventEmitter { - execute = vi.fn(); - stop = vi.fn(); + execute = vi.fn() + stop = vi.fn() } describe('PollingService', () => { - let pollingService: PollingService; - let mockBlockRepository: MockBlockRepository; - let mockWss: WebSocketServer; + let pollingService: PollingService + let mockBlockRepository: MockBlockRepository + let mockWss: WebSocketServer beforeEach(() => { - mockBlockRepository = new MockBlockRepository(); - mockWss = new WebSocketServer({ noServer: true }); - pollingService = new PollingService(mockBlockRepository); - }); + mockBlockRepository = new MockBlockRepository() + mockWss = new WebSocketServer({ noServer: true }) + pollingService = new PollingService(mockBlockRepository) + }) it('should execute and handle Block and Eth events', () => { - const websocketUrl = 'ws://test.url'; - const mockL2Block = { key: 'Value' }; + const websocketUrl = 'ws://test.url' + const mockL2Block = { key: 'Value' } - pollingService.execute(mockWss, websocketUrl); + pollingService.execute(mockWss, websocketUrl) - expect(mockBlockRepository.execute).toHaveBeenCalledWith(websocketUrl); + expect(mockBlockRepository.execute).toHaveBeenCalledWith(websocketUrl) - mockBlockRepository.emit(TxTypesEnum.Block, mockL2Block); - mockBlockRepository.emit(TxTypesEnum.Eth, mockL2Block); + mockBlockRepository.emit(TxTypesEnum.Block, mockL2Block) + mockBlockRepository.emit(TxTypesEnum.Eth, mockL2Block) - expect(BroadcastToClients).toHaveBeenCalledWith(mockWss, mockL2Block); - expect(BroadcastToClients).toHaveBeenCalledTimes(2); - }); + expect(broadcastToClients).toHaveBeenCalledWith(mockWss, mockL2Block) + expect(broadcastToClients).toHaveBeenCalledTimes(2) + }) it('should stop the repository on stop', () => { - pollingService.stop(); - expect(mockBlockRepository.stop).toHaveBeenCalled(); - }); -}); + pollingService.stop() + expect(mockBlockRepository.stop).toHaveBeenCalled() + }) +}) diff --git a/apps/api/src/application/polling/pollingService.ts b/apps/api/src/application/polling/pollingService.ts index fcd1666..383b524 100644 --- a/apps/api/src/application/polling/pollingService.ts +++ b/apps/api/src/application/polling/pollingService.ts @@ -1,19 +1,23 @@ -import { WebSocketServer } from "ws"; -import { BlockRepository } from "../../domain/repositories/BlockRepository"; -import BroadcastToClients from "../helpers/BroadcastToClients"; -import { TxTypesEnum } from "@cryptochords/shared"; -import { L2Block } from "@cryptochords/shared"; +import { WebSocketServer } from 'ws' +import { BlockRepository } from '../../domain/repositories/BlockRepository' +import broadcastToClients from '../helpers/BroadcastToClients' +import { TxTypesEnum } from '@cryptochords/shared' +import { L2Block } from '@cryptochords/shared' export class PollingService { constructor(private blockRepository: BlockRepository) {} execute(wss: WebSocketServer, url: string): void { this.blockRepository.execute(url) - this.blockRepository.on(TxTypesEnum.Block, (l2Block: L2Block) => BroadcastToClients(wss, l2Block)); - this.blockRepository.on(TxTypesEnum.Eth, (l2Block: L2Block) => BroadcastToClients(wss, l2Block)); + this.blockRepository.on(TxTypesEnum.Block, (l2Block: L2Block) => + broadcastToClients(wss, l2Block), + ) + this.blockRepository.on(TxTypesEnum.Eth, (l2Block: L2Block) => + broadcastToClients(wss, l2Block), + ) } stop() { this.blockRepository.stop() } -} \ No newline at end of file +} diff --git a/apps/api/src/domain/base/Entity.spec.ts b/apps/api/src/domain/base/Entity.spec.ts index b572ccc..e1c1caa 100644 --- a/apps/api/src/domain/base/Entity.spec.ts +++ b/apps/api/src/domain/base/Entity.spec.ts @@ -22,7 +22,7 @@ describe('src/domain/base/Entity', () => { }) it('should be an instance of ValueObject', () => { - const entity = TestEntity.create({ value: 'test'}) + const entity = TestEntity.create({ value: 'test' }) expect(entity).toBeInstanceOf(ValueObject) }) diff --git a/apps/api/src/domain/enums/BlockTypesEnum.spec.ts b/apps/api/src/domain/enums/BlockTypesEnum.spec.ts index 68d7a92..23bcbb5 100644 --- a/apps/api/src/domain/enums/BlockTypesEnum.spec.ts +++ b/apps/api/src/domain/enums/BlockTypesEnum.spec.ts @@ -1,16 +1,16 @@ -import { describe, it, expect } from 'vitest'; -import { BlockTypesEnum } from './BlockTypesEnum'; +import { describe, it, expect } from 'vitest' +import { BlockTypesEnum } from './BlockTypesEnum' describe('BlockTypesEnum', () => { it('should have a LEGACY type with value "0"', () => { - expect(BlockTypesEnum.LEGACY).toBe('0'); - }); + expect(BlockTypesEnum.LEGACY).toBe('0') + }) it('should have an EIP2930 type with value "1"', () => { - expect(BlockTypesEnum.EIP2930).toBe('1'); - }); + expect(BlockTypesEnum.EIP2930).toBe('1') + }) it('should have an EIP1559 type with value "2"', () => { - expect(BlockTypesEnum.EIP1559).toBe('2'); - }); -}); + expect(BlockTypesEnum.EIP1559).toBe('2') + }) +}) diff --git a/apps/api/src/domain/repositories/BlockRepository.ts b/apps/api/src/domain/repositories/BlockRepository.ts index 019cb6a..816c9ac 100644 --- a/apps/api/src/domain/repositories/BlockRepository.ts +++ b/apps/api/src/domain/repositories/BlockRepository.ts @@ -1,4 +1,4 @@ -import { EventEmitter } from 'events'; +import { EventEmitter } from 'events' export interface BlockRepository extends EventEmitter { execute(url: string): void diff --git a/apps/api/src/infrastructure/repositories/blockPolling.spec.ts b/apps/api/src/infrastructure/repositories/blockPolling.spec.ts index ba45d8f..44340f0 100644 --- a/apps/api/src/infrastructure/repositories/blockPolling.spec.ts +++ b/apps/api/src/infrastructure/repositories/blockPolling.spec.ts @@ -1,9 +1,15 @@ -import Web3 from 'web3'; -import { beforeEach, describe, expect, it, vi, afterEach } from 'vitest'; -import { BlockTypesEnum } from '../../domain/enums/BlockTypesEnum'; -import { BlockPollingRepository } from './blockPolling'; +import Web3 from 'web3' +import { beforeEach, describe, expect, it, vi, afterEach } from 'vitest' +import { BlockTypesEnum } from '../../domain/enums/BlockTypesEnum' +import { BlockPollingRepository } from './blockPolling' vi.mock('@cryptochords/shared', () => ({ + Address: { + create: vi.fn().mockReturnValue({}), + }, + L2Block: { + create: vi.fn().mockReturnValue({}), + }, TxType: { create: vi.fn().mockReturnValue({}), }, @@ -11,59 +17,60 @@ vi.mock('@cryptochords/shared', () => ({ Block: 'Block', Eth: 'Eth', }, - Address: { - create: vi.fn().mockReturnValue({}), - }, - L2Block: { - create: vi.fn().mockReturnValue({}), - }, -})); +})) describe('BlockPollingRepository', () => { - let blockPollingRepository: BlockPollingRepository; - let mockWeb3: Web3; + let blockPollingRepository: BlockPollingRepository + let mockWeb3: Web3 beforeEach(() => { - blockPollingRepository = new BlockPollingRepository(); - mockWeb3 = new Web3(); - mockWeb3.eth.getBlockNumber = vi.fn().mockResolvedValue(100); + blockPollingRepository = new BlockPollingRepository() + mockWeb3 = new Web3() + mockWeb3.eth.getBlockNumber = vi.fn().mockResolvedValue(100) mockWeb3.eth.getBlock = vi.fn().mockResolvedValue({ hash: '0xhash', transactions: [], - }); - vi.useFakeTimers(); + }) + vi.useFakeTimers() - vi.spyOn(blockPollingRepository, 'emit'); - }); + vi.spyOn(blockPollingRepository, 'emit') + }) afterEach(() => { - vi.runOnlyPendingTimers(); - vi.useRealTimers(); - vi.clearAllMocks(); - }); + vi.runOnlyPendingTimers() + vi.useRealTimers() + vi.clearAllMocks() + }) it('should start and stop polling correctly', () => { - blockPollingRepository.execute('http://localhost:8545', 1000); - expect(vi.getTimerCount()).toBe(1); - blockPollingRepository.stop(); - expect(vi.getTimerCount()).toBe(0); - }); + blockPollingRepository.execute('http://localhost:8545', 1000) + expect(vi.getTimerCount()).toBe(1) + blockPollingRepository.stop() + expect(vi.getTimerCount()).toBe(0) + }) it('should emit "Block" event for new blocks with no transactions', async () => { - await blockPollingRepository.checkNewBlocks(mockWeb3); - expect(blockPollingRepository.emit).toHaveBeenCalledWith('Block', expect.anything()); - }); + await blockPollingRepository.checkNewBlocks(mockWeb3) + expect(blockPollingRepository.emit).toHaveBeenCalledWith( + 'Block', + expect.anything(), + ) + }) it('should emit "Block" and "Eth" events for new blocks with EIP1559 transactions', async () => { mockWeb3.eth.getBlock = vi.fn().mockResolvedValue({ hash: '0xnewhash', - transactions: [ - { type: BlockTypesEnum.EIP1559, from: '0xSomeAddress' }, - ], - }); + transactions: [{ from: '0xSomeAddress', type: BlockTypesEnum.EIP1559 }], + }) - await blockPollingRepository.checkNewBlocks(mockWeb3); - expect(blockPollingRepository.emit).toHaveBeenCalledWith('Block', expect.anything()); - expect(blockPollingRepository.emit).toHaveBeenCalledWith('Eth', expect.anything()); - }); -}); + await blockPollingRepository.checkNewBlocks(mockWeb3) + expect(blockPollingRepository.emit).toHaveBeenCalledWith( + 'Block', + expect.anything(), + ) + expect(blockPollingRepository.emit).toHaveBeenCalledWith( + 'Eth', + expect.anything(), + ) + }) +}) diff --git a/apps/api/src/infrastructure/repositories/blockPolling.ts b/apps/api/src/infrastructure/repositories/blockPolling.ts index 60f144e..20c8ad0 100644 --- a/apps/api/src/infrastructure/repositories/blockPolling.ts +++ b/apps/api/src/infrastructure/repositories/blockPolling.ts @@ -1,61 +1,69 @@ -import { EventEmitter } from "stream"; -import { BlockRepository } from "../../domain/repositories/BlockRepository"; -import Web3 from "web3"; -import { TxTypesEnum } from "@cryptochords/shared"; -import { TxType } from "@cryptochords/shared"; -import { Address } from "@cryptochords/shared"; -import { BlockTypesEnum } from "../../domain/enums/BlockTypesEnum"; -import { L2Block } from "@cryptochords/shared"; - -export class BlockPollingRepository extends EventEmitter implements BlockRepository { +import { EventEmitter } from 'stream' +import { BlockRepository } from '../../domain/repositories/BlockRepository' +import Web3 from 'web3' +import { TxTypesEnum } from '@cryptochords/shared' +import { TxType } from '@cryptochords/shared' +import { Address } from '@cryptochords/shared' +import { BlockTypesEnum } from '../../domain/enums/BlockTypesEnum' +import { L2Block } from '@cryptochords/shared' + +export class BlockPollingRepository + extends EventEmitter + implements BlockRepository +{ private latestBlockNumber = BigInt(0) - private pollingIntervalId: NodeJS.Timeout | null = null; + private pollingIntervalId: NodeJS.Timeout | null = null execute(rpcUrl: string, pollingInterval = 5000): void { - const web3 = new Web3(rpcUrl); + const web3 = new Web3(rpcUrl) this.poll(web3, pollingInterval) } stop() { if (this.pollingIntervalId) { - clearInterval(this.pollingIntervalId); - this.pollingIntervalId = null; + clearInterval(this.pollingIntervalId) + this.pollingIntervalId = null } - console.log('Polling stopped.'); } async checkNewBlocks(web3: Web3): Promise { - console.log('Checking for new block'); - const currentBlockNumber = await web3.eth.getBlockNumber(); + const currentBlockNumber = await web3.eth.getBlockNumber() if (currentBlockNumber > this.latestBlockNumber) { - this.latestBlockNumber = currentBlockNumber; + this.latestBlockNumber = currentBlockNumber - const block = await web3.eth.getBlock(currentBlockNumber, true); + const block = await web3.eth.getBlock(currentBlockNumber, true) if (block) { - console.log('New block header:', block.hash); - this.emit(TxTypesEnum.Block, L2Block.create({ - txType: TxType.create(TxTypesEnum.Block), - address: Address.create(block.hash ? block.hash.toString() : '') - })); + this.emit( + TxTypesEnum.Block, + L2Block.create({ + address: Address.create(block.hash ? block.hash.toString() : ''), + txType: TxType.create(TxTypesEnum.Block), + }), + ) if (block.transactions) { // eslint-disable-next-line @typescript-eslint/no-explicit-any block.transactions.forEach((tx: any) => { if (tx.type.toString() === BlockTypesEnum.EIP1559) { - console.log('New eth tx from', tx.from); - this.emit(TxTypesEnum.Eth, L2Block.create({ - txType: TxType.create(TxTypesEnum.Eth), - address: Address.create(tx.from) - })); + this.emit( + TxTypesEnum.Eth, + L2Block.create({ + address: Address.create(tx.from), + txType: TxType.create(TxTypesEnum.Eth), + }), + ) } - }); + }) } } } } poll(web3: Web3, pollingInterval: number) { - this.pollingIntervalId = setInterval(() => this.checkNewBlocks(web3), pollingInterval); + this.pollingIntervalId = setInterval( + () => this.checkNewBlocks(web3), + pollingInterval, + ) } } diff --git a/apps/api/src/infrastructure/repositories/blockWebsocket.spec.ts b/apps/api/src/infrastructure/repositories/blockWebsocket.spec.ts index 22fdd12..11db960 100644 --- a/apps/api/src/infrastructure/repositories/blockWebsocket.spec.ts +++ b/apps/api/src/infrastructure/repositories/blockWebsocket.spec.ts @@ -1,28 +1,36 @@ -import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest'; -import { BlockTypesEnum } from '../../domain/enums/BlockTypesEnum'; -import { BlockWebsocketRepository } from './blockWebsocket'; +import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest' +import { BlockTypesEnum } from '../../domain/enums/BlockTypesEnum' +import { BlockWebsocketRepository } from './blockWebsocket' vi.mock('web3', () => ({ __esModule: true, default: vi.fn().mockImplementation(() => ({ eth: { - subscribe: vi.fn().mockImplementation(() => Promise.resolve({ - on: vi.fn((event, callback) => { - if (event === 'data') { - const fakeBlockHeader = { hash: 'fakeHash' }; - callback(fakeBlockHeader); - } - }), - unsubscribe: vi.fn(), - })), getBlock: vi.fn().mockResolvedValue({ - transactions: [{ type: BlockTypesEnum.EIP1559, from: 'fakeAddress' }], + transactions: [{ from: 'fakeAddress', type: BlockTypesEnum.EIP1559 }], }), + subscribe: vi.fn().mockImplementation(() => + Promise.resolve({ + on: vi.fn((event, callback) => { + if (event === 'data') { + const fakeBlockHeader = { hash: 'fakeHash' } + callback(fakeBlockHeader) + } + }), + unsubscribe: vi.fn(), + }), + ), }, })), -})); +})) vi.mock('@cryptochords/shared', () => ({ + Address: { + create: vi.fn().mockReturnValue({}), + }, + L2Block: { + create: vi.fn().mockReturnValue({}), + }, TxType: { create: vi.fn().mockReturnValue({}), }, @@ -30,50 +38,54 @@ vi.mock('@cryptochords/shared', () => ({ Block: 'Block', Eth: 'Eth', }, - Address: { - create: vi.fn().mockReturnValue({}), - }, - L2Block: { - create: vi.fn().mockReturnValue({}), - }, -})); +})) describe('BlockWebsocketRepository', () => { - let blockWebsocketRepository: BlockWebsocketRepository; + let blockWebsocketRepository: BlockWebsocketRepository beforeEach(() => { - blockWebsocketRepository = new BlockWebsocketRepository(); - }); + blockWebsocketRepository = new BlockWebsocketRepository() + }) afterEach(() => { - vi.clearAllMocks(); - }); + vi.clearAllMocks() + }) it('should initialize and subscribe to new block headers', async () => { - blockWebsocketRepository.execute('fakeWebsocketUrl'); + blockWebsocketRepository.execute('fakeWebsocketUrl') await vi.waitFor(() => { - expect(blockWebsocketRepository['subscription']).toBeDefined(); - expect(blockWebsocketRepository['web3']).toBeDefined(); - expect(blockWebsocketRepository['subscription'].on).toHaveBeenCalledWith('data', expect.any(Function)); - }); - }); + expect(blockWebsocketRepository['subscription']).toBeDefined() + expect(blockWebsocketRepository['web3']).toBeDefined() + expect(blockWebsocketRepository['subscription'].on).toHaveBeenCalledWith( + 'data', + expect.any(Function), + ) + }) + }) it('should stop subscription', async () => { - blockWebsocketRepository.execute('fakeWebsocketUrl'); - await vi.waitFor(() => expect(blockWebsocketRepository['subscription']).toBeDefined()); + blockWebsocketRepository.execute('fakeWebsocketUrl') + await vi.waitFor(() => + expect(blockWebsocketRepository['subscription']).toBeDefined(), + ) - blockWebsocketRepository.stop(); - expect(blockWebsocketRepository['subscription']).toBeNull(); - }); + blockWebsocketRepository.stop() + expect(blockWebsocketRepository['subscription']).toBeNull() + }) it('should emit events for new block headers and transactions', async () => { - const emitSpy = vi.spyOn(blockWebsocketRepository, 'emit'); - blockWebsocketRepository.execute('fakeWebsocketUrl'); + const emitSpy = vi.spyOn(blockWebsocketRepository, 'emit') + blockWebsocketRepository.execute('fakeWebsocketUrl') - await vi.waitFor(() => expect(emitSpy).toHaveBeenCalledWith('Block', expect.anything())); - await vi.waitFor(() => expect(emitSpy).toHaveBeenCalledWith('Eth', expect.anything()), { timeout: 500 }); + await vi.waitFor(() => + expect(emitSpy).toHaveBeenCalledWith('Block', expect.anything()), + ) + await vi.waitFor( + () => expect(emitSpy).toHaveBeenCalledWith('Eth', expect.anything()), + { timeout: 500 }, + ) - expect(emitSpy).toHaveBeenNthCalledWith(1, 'Block', expect.anything()); - expect(emitSpy).toHaveBeenNthCalledWith(2, 'Eth', expect.anything()); - }); -}); + expect(emitSpy).toHaveBeenNthCalledWith(1, 'Block', expect.anything()) + expect(emitSpy).toHaveBeenNthCalledWith(2, 'Eth', expect.anything()) + }) +}) diff --git a/apps/api/src/infrastructure/repositories/blockWebsocket.ts b/apps/api/src/infrastructure/repositories/blockWebsocket.ts index 310d690..24ed6d3 100644 --- a/apps/api/src/infrastructure/repositories/blockWebsocket.ts +++ b/apps/api/src/infrastructure/repositories/blockWebsocket.ts @@ -1,60 +1,71 @@ -import Web3, { BlockHeaderOutput } from 'web3'; -import { EventEmitter } from 'events'; -import { TxType } from '@cryptochords/shared'; -import { TxTypesEnum } from '@cryptochords/shared'; -import { Address } from '@cryptochords/shared'; -import { BlockTypesEnum } from '../../domain/enums/BlockTypesEnum'; -import { BlockRepository } from '../../domain/repositories/BlockRepository'; -import { L2Block } from '@cryptochords/shared'; +import Web3, { BlockHeaderOutput } from 'web3' +import { EventEmitter } from 'events' +import { TxType } from '@cryptochords/shared' +import { TxTypesEnum } from '@cryptochords/shared' +import { Address } from '@cryptochords/shared' +import { BlockTypesEnum } from '../../domain/enums/BlockTypesEnum' +import { BlockRepository } from '../../domain/repositories/BlockRepository' +import { L2Block } from '@cryptochords/shared' -export class BlockWebsocketRepository extends EventEmitter implements BlockRepository { - private web3: Web3 | null = null; +export class BlockWebsocketRepository + extends EventEmitter + implements BlockRepository +{ + private web3: Web3 | null = null // eslint-disable-next-line @typescript-eslint/no-explicit-any - private subscription: any | null = null; + private subscription: any | null = null execute(websocketUrl: string): void { - this.web3 = new Web3(websocketUrl); - this.subscribeToNewBlockHeaders(); + this.web3 = new Web3(websocketUrl) + this.subscribeToNewBlockHeaders() } stop(): void { if (this.subscription) { - this.subscription.unsubscribe(); - this.subscription = null; + this.subscription.unsubscribe() + this.subscription = null } } private async subscribeToNewBlockHeaders(): Promise { if (!this.web3) { - console.error('Web3 is not initialized.'); - return; + return } - this.subscription = await this.web3?.eth.subscribe('newBlockHeaders'); + this.subscription = await this.web3?.eth.subscribe('newBlockHeaders') this.subscription.on('data', async (blockHeader: BlockHeaderOutput) => { - await this.handleNewBlockHeader(this.web3, blockHeader); - }); + await this.handleNewBlockHeader(this.web3, blockHeader) + }) } - private async handleNewBlockHeader(web3: Web3 | null, blockHeader: BlockHeaderOutput): Promise { - console.log('New block header:', blockHeader.hash); - this.emit(TxTypesEnum.Block, L2Block.create({ - txType: TxType.create(TxTypesEnum.Block), - address: Address.create(blockHeader.hash ? blockHeader.hash.toString() : '') - })); + private async handleNewBlockHeader( + web3: Web3 | null, + blockHeader: BlockHeaderOutput, + ): Promise { + this.emit( + TxTypesEnum.Block, + L2Block.create({ + address: Address.create( + blockHeader.hash ? blockHeader.hash.toString() : '', + ), + txType: TxType.create(TxTypesEnum.Block), + }), + ) - const block = await web3?.eth.getBlock(blockHeader.hash, true); + const block = await web3?.eth.getBlock(blockHeader.hash, true) if (block && block.transactions) { // eslint-disable-next-line @typescript-eslint/no-explicit-any block.transactions.forEach((tx: any) => { if (tx.type.toString() === BlockTypesEnum.EIP1559) { - console.log('New eth tx from', tx.from); - this.emit(TxTypesEnum.Eth, L2Block.create({ - txType: TxType.create(TxTypesEnum.Eth), - address: Address.create(tx.from) - })); + this.emit( + TxTypesEnum.Eth, + L2Block.create({ + address: Address.create(tx.from), + txType: TxType.create(TxTypesEnum.Eth), + }), + ) } - }); + }) } } } diff --git a/apps/api/src/presentation/ExpressServer.spec.ts b/apps/api/src/presentation/ExpressServer.spec.ts index 167d45e..3ac891f 100644 --- a/apps/api/src/presentation/ExpressServer.spec.ts +++ b/apps/api/src/presentation/ExpressServer.spec.ts @@ -1,69 +1,76 @@ -import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest'; -import { ExpressServer } from './ExpressServer'; -import { PollingRoute } from './routes/PollingRoute'; -import express from 'express'; -import { HemiTestnet } from '@cryptochords/shared'; +import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest' +import { ExpressServer } from './ExpressServer' +import { PollingRoute } from './routes/PollingRoute' +import express from 'express' +import { HemiTestnet } from '@cryptochords/shared' vi.mock('express', () => { const listenMock = vi.fn((_port, callback) => { - callback(); + callback() return { - close: vi.fn((cb) => cb && cb()), - }; - }); + close: vi.fn(cb => cb && cb()), + } + }) return { __esModule: true, default: vi.fn(() => ({ listen: listenMock, })), - }; -}); + } +}) vi.mock('ws', () => ({ Server: vi.fn().mockImplementation(() => ({ on: vi.fn(), })), -})); +})) vi.mock('./routes/PollingRoute', () => ({ PollingRoute: vi.fn().mockImplementation(() => ({ initialize: vi.fn(), stop: vi.fn(), })), -})); +})) describe('ExpressServer', () => { - let expressServer: ExpressServer; - let pollingRouteMock: PollingRoute; + let expressServer: ExpressServer + let pollingRouteMock: PollingRoute - const MOCK_PORT = 3000; - const USE_WEBSOCKET = true; - const MOCK_WEBSOCKET_URL = HemiTestnet.rpcUrls.default.webSocket[0]; - const MOCK_RPC_URL = HemiTestnet.rpcUrls.default.http[0]; + const MOCK_PORT = 3000 + const USE_WEBSOCKET = true + const MOCK_WEBSOCKET_URL = HemiTestnet.rpcUrls.default.webSocket[0] + const MOCK_RPC_URL = HemiTestnet.rpcUrls.default.http[0] beforeEach(() => { - vi.clearAllMocks(); + vi.clearAllMocks() - pollingRouteMock = new PollingRoute(USE_WEBSOCKET, MOCK_WEBSOCKET_URL, MOCK_RPC_URL); - expressServer = new ExpressServer(pollingRouteMock, MOCK_PORT); - }); + pollingRouteMock = new PollingRoute( + USE_WEBSOCKET, + MOCK_WEBSOCKET_URL, + MOCK_RPC_URL, + ) + expressServer = new ExpressServer(pollingRouteMock, MOCK_PORT) + }) afterEach(() => { - vi.clearAllMocks(); - }); + vi.clearAllMocks() + }) it('should start the server correctly', () => { - expressServer.start(); + expressServer.start() - const mockedExpress = express() as any; - expect(mockedExpress.listen).toHaveBeenCalledWith(MOCK_PORT, expect.any(Function)); - expect(pollingRouteMock.initialize).toHaveBeenCalled(); - }); + const mockedExpress = express() + expect(mockedExpress.listen).toHaveBeenCalledWith( + MOCK_PORT, + expect.any(Function), + ) + expect(pollingRouteMock.initialize).toHaveBeenCalled() + }) it('should stop the server correctly', async () => { - expressServer.start(); - await expressServer.stop(); + expressServer.start() + await expressServer.stop() - expect(pollingRouteMock.stop).toHaveBeenCalled(); - }); -}); + expect(pollingRouteMock.stop).toHaveBeenCalled() + }) +}) diff --git a/apps/api/src/presentation/ExpressServer.ts b/apps/api/src/presentation/ExpressServer.ts index 9d49801..f95b2a4 100644 --- a/apps/api/src/presentation/ExpressServer.ts +++ b/apps/api/src/presentation/ExpressServer.ts @@ -1,50 +1,51 @@ -import express, { Express } from 'express'; -import { Server as HTTPServer } from 'http'; -import { Server as WebSocketServer } from 'ws'; -import 'dotenv/config'; -import { PollingRoute } from './routes/PollingRoute'; +import express, { Express } from 'express' +import { Server as HTTPServer } from 'http' +import { Server as WebSocketServer } from 'ws' +import 'dotenv/config' +import { PollingRoute } from './routes/PollingRoute' export class ExpressServer { - private pollingRoute: PollingRoute; - private api: Express; - private httpServer: HTTPServer | null = null; - private wss: WebSocketServer | null = null; - private port: string | number; + private pollingRoute: PollingRoute + private api: Express + private httpServer: HTTPServer | null = null + private wss: WebSocketServer | null = null + private port: string | number constructor(pollingRoute: PollingRoute, port: number) { - this.pollingRoute = pollingRoute; - this.api = express(); - this.port = port || 3000; + this.pollingRoute = pollingRoute + this.api = express() + this.port = port || 3000 } public start(): void { this.httpServer = this.api.listen(this.port, () => { - console.log(`Express server running on port ${this.port}`); - }); + console.log(`Express server running on port ${this.port}`) + }) - this.wss = new WebSocketServer({ server: this.httpServer }); + this.wss = new WebSocketServer({ server: this.httpServer }) - this.wss.on('connection', (ws) => { - console.log('WebSocket client connected'); + this.wss.on('connection', ws => { + console.log('WebSocket client connected') ws.on('message', (message: string) => { - console.log('Message received:', message); - }); - }); + console.log('Message received:', message) + }) + }) - this.pollingRoute.initialize(this.wss); + this.pollingRoute.initialize(this.wss) } async stop(): Promise { console.info('CryptoChords API | Closing HTTP Server') - return await new Promise((resolve) => { - this.httpServer?.close((error) => { + return await new Promise(resolve => { + this.httpServer?.close(error => { if (error) { console.error( - `CryptoChords API | Error Closing HTTP Server: ${error.message}`) + `CryptoChords API | Error Closing HTTP Server: ${error.message}`, + ) } else { - this.wss = null; - console.info('CryptoChords API | WSS Server successfully closed'); + this.wss = null + console.info('CryptoChords API | WSS Server successfully closed') } this.pollingRoute.stop() resolve() diff --git a/apps/api/src/presentation/routes/PollingRoute.spec.ts b/apps/api/src/presentation/routes/PollingRoute.spec.ts index 740b668..4cc7063 100644 --- a/apps/api/src/presentation/routes/PollingRoute.spec.ts +++ b/apps/api/src/presentation/routes/PollingRoute.spec.ts @@ -1,7 +1,7 @@ -import { describe, it, expect, beforeEach, vi } from 'vitest'; -import { WebSocketServer } from 'ws'; -import { PollingRoute } from './PollingRoute'; -import { HemiTestnet } from '@cryptochords/shared'; +import { describe, it, expect, beforeEach, vi } from 'vitest' +import { WebSocketServer } from 'ws' +import { PollingRoute } from './PollingRoute' +import { HemiTestnet } from '@cryptochords/shared' vi.mock('../../application/polling/pollingService', () => { return { @@ -9,41 +9,52 @@ vi.mock('../../application/polling/pollingService', () => { execute: vi.fn(), stop: vi.fn(), })), - }; -}); + } +}) -vi.mock('ws'); +vi.mock('ws') vi.mock('../../infrastructure/repositories/blockWebsocket', () => ({ BlockWebsocketRepository: vi.fn(), -})); +})) vi.mock('../../infrastructure/repositories/blockPolling', () => ({ BlockPollingRepository: vi.fn(), -})); +})) describe('PollingRoute', () => { - let wss: WebSocketServer; + let wss: WebSocketServer - const MOCK_WEBSOCKET_URL = HemiTestnet.rpcUrls.default.webSocket[0]; - const MOCK_RPC_URL = HemiTestnet.rpcUrls.default.http[0]; + const MOCK_WEBSOCKET_URL = HemiTestnet.rpcUrls.default.webSocket[0] + const MOCK_RPC_URL = HemiTestnet.rpcUrls.default.http[0] beforeEach(() => { - vi.clearAllMocks(); - wss = new WebSocketServer({ noServer: true }); - }); + vi.clearAllMocks() + wss = new WebSocketServer({ noServer: true }) + }) it('should initialize with WebSocket when useWebsocket is true', () => { - const pollingRoute = new PollingRoute(true, MOCK_WEBSOCKET_URL, MOCK_RPC_URL); - pollingRoute.initialize(wss); - - const mockPollingService = pollingRoute['pollingService'] as any; - expect(mockPollingService.execute).toHaveBeenCalledWith(wss, MOCK_WEBSOCKET_URL); - }); + const pollingRoute = new PollingRoute( + true, + MOCK_WEBSOCKET_URL, + MOCK_RPC_URL, + ) + pollingRoute.initialize(wss) + + const mockPollingService = pollingRoute['pollingService'] + expect(mockPollingService.execute).toHaveBeenCalledWith( + wss, + MOCK_WEBSOCKET_URL, + ) + }) it('should initialize with Polling when useWebsocket is false', () => { - const pollingRoute = new PollingRoute(false, MOCK_WEBSOCKET_URL, MOCK_RPC_URL); - pollingRoute.initialize(wss); - - const mockPollingService = pollingRoute['pollingService'] as any; - expect(mockPollingService.execute).toHaveBeenCalledWith(wss, MOCK_RPC_URL); - }); -}); + const pollingRoute = new PollingRoute( + false, + MOCK_WEBSOCKET_URL, + MOCK_RPC_URL, + ) + pollingRoute.initialize(wss) + + const mockPollingService = pollingRoute['pollingService'] + expect(mockPollingService.execute).toHaveBeenCalledWith(wss, MOCK_RPC_URL) + }) +}) diff --git a/apps/api/src/presentation/routes/PollingRoute.ts b/apps/api/src/presentation/routes/PollingRoute.ts index d605576..417e15e 100644 --- a/apps/api/src/presentation/routes/PollingRoute.ts +++ b/apps/api/src/presentation/routes/PollingRoute.ts @@ -1,30 +1,30 @@ -import { WebSocketServer } from 'ws'; -import { BlockWebsocketRepository } from '../../infrastructure/repositories/blockWebsocket'; -import { BlockPollingRepository } from '../../infrastructure/repositories/blockPolling'; -import { PollingService } from '../../application/polling/pollingService'; -import 'dotenv/config'; +import { WebSocketServer } from 'ws' +import { BlockWebsocketRepository } from '../../infrastructure/repositories/blockWebsocket' +import { BlockPollingRepository } from '../../infrastructure/repositories/blockPolling' +import { PollingService } from '../../application/polling/pollingService' +import 'dotenv/config' export class PollingRoute { - private pollingService: PollingService; - private url: string; + private pollingService: PollingService + private url: string constructor(useWebsocket: boolean, websocketUrl: string, rpcUrl: string) { if (useWebsocket) { - this.url = websocketUrl; - const blockWebsocketRepository = new BlockWebsocketRepository(); - this.pollingService = new PollingService(blockWebsocketRepository); + this.url = websocketUrl + const blockWebsocketRepository = new BlockWebsocketRepository() + this.pollingService = new PollingService(blockWebsocketRepository) } else { - this.url = rpcUrl; - const blockPollingRepository = new BlockPollingRepository(); - this.pollingService = new PollingService(blockPollingRepository); + this.url = rpcUrl + const blockPollingRepository = new BlockPollingRepository() + this.pollingService = new PollingService(blockPollingRepository) } } public initialize(wss: WebSocketServer): void { - this.pollingService.execute(wss, this.url); + this.pollingService.execute(wss, this.url) } public stop(): void { - this.pollingService.stop(); - } + this.pollingService.stop() + } } diff --git a/apps/api/src/server.spec.ts b/apps/api/src/server.spec.ts index 9d29e74..4f1dacb 100644 --- a/apps/api/src/server.spec.ts +++ b/apps/api/src/server.spec.ts @@ -1,40 +1,49 @@ -import { describe, it, expect, beforeAll, afterAll, vi, beforeEach, afterEach } from 'vitest'; -import { ExpressServer } from './presentation/ExpressServer'; - -vi.mock('./presentation/ExpressServer'); +import { + describe, + it, + expect, + beforeAll, + afterAll, + vi, + beforeEach, + afterEach, +} from 'vitest' +import { ExpressServer } from './presentation/ExpressServer' + +vi.mock('./presentation/ExpressServer') describe('server', () => { beforeEach(() => { vi.spyOn(process, 'exit').mockImplementation(() => { - return undefined as never; - }); - }); + return undefined as never + }) + }) afterEach(() => { - vi.restoreAllMocks(); - }); + vi.restoreAllMocks() + }) beforeAll(() => { - ExpressServer.prototype.start = vi.fn(); - ExpressServer.prototype.stop = vi.fn(); - }); + ExpressServer.prototype.start = vi.fn() + ExpressServer.prototype.stop = vi.fn() + }) afterAll(() => { - vi.restoreAllMocks(); - }); + vi.restoreAllMocks() + }) it('should start the server', async () => { - await import('./server'); - expect(ExpressServer.prototype.start).toHaveBeenCalled(); - }); + await import('./server') + expect(ExpressServer.prototype.start).toHaveBeenCalled() + }) it('should stop the server on SIGTERM', async () => { - process.emit('SIGTERM'); - expect(ExpressServer.prototype.stop).toHaveBeenCalled(); - }); + process.emit('SIGTERM') + expect(ExpressServer.prototype.stop).toHaveBeenCalled() + }) it('should stop the server on SIGINT', async () => { - process.emit('SIGINT'); - expect(ExpressServer.prototype.stop).toHaveBeenCalled(); - }); -}); + process.emit('SIGINT') + expect(ExpressServer.prototype.stop).toHaveBeenCalled() + }) +}) diff --git a/apps/api/src/server.ts b/apps/api/src/server.ts index ebfc250..4e46305 100644 --- a/apps/api/src/server.ts +++ b/apps/api/src/server.ts @@ -1,19 +1,27 @@ -import 'dotenv/config'; -import { ExpressServer } from './presentation/ExpressServer'; -import { PollingRoute } from './presentation/routes/PollingRoute'; -import { HemiTestnet, HemiMainnet } from "@cryptochords/shared"; +import 'dotenv/config' +import { ExpressServer } from './presentation/ExpressServer' +import { PollingRoute } from './presentation/routes/PollingRoute' +import { HemiTestnet, HemiMainnet } from '@cryptochords/shared' const useWebsocket = process.env['USE_WEBSOCKET_NODE_L2'] === 'true' const useMainnet = process.env['ENABLE_MAINNET'] === 'true' // Testnet const websocketTestnet = HemiTestnet.rpcUrls.default.webSocket[0] const rpcTestnet = HemiTestnet.rpcUrls.default.http[0] -const pollingRouteTestnet = new PollingRoute(useWebsocket, websocketTestnet, rpcTestnet) +const pollingRouteTestnet = new PollingRoute( + useWebsocket, + websocketTestnet, + rpcTestnet, +) const serverTestnet = new ExpressServer(pollingRouteTestnet, 3000) // Mainnet const websocketMainnet = HemiMainnet.rpcUrls.default.webSocket[0] const rpcMainnet = HemiMainnet.rpcUrls.default.http[0] -const pollingRouteMainnet = new PollingRoute(useWebsocket, websocketMainnet, rpcMainnet) +const pollingRouteMainnet = new PollingRoute( + useWebsocket, + websocketMainnet, + rpcMainnet, +) const serverMainnet = new ExpressServer(pollingRouteMainnet, 3001) const startServer = async (): Promise => { @@ -32,12 +40,12 @@ const stopServer = async (): Promise => { process.on('SIGTERM', async () => { await stopServer() - process.exit(0); + process.exit(0) }) process.on('SIGINT', async () => { await stopServer() - process.exit(0); + process.exit(0) }) startServer() diff --git a/apps/api/tsconfig.build.json b/apps/api/tsconfig.build.json index e702d94..5417c7d 100644 --- a/apps/api/tsconfig.build.json +++ b/apps/api/tsconfig.build.json @@ -1,6 +1,4 @@ { - "extends": "./tsconfig.json", - "exclude": [ - "src/**/*.spec.ts" - ] - } \ No newline at end of file + "extends": "./tsconfig.json", + "exclude": ["src/**/*.spec.ts"] +} diff --git a/apps/api/tsconfig.json b/apps/api/tsconfig.json index fc3ad0f..b7aadeb 100644 --- a/apps/api/tsconfig.json +++ b/apps/api/tsconfig.json @@ -1,5 +1,5 @@ { - "include": [ "src/**/*" ], + "include": ["src/**/*"], "compilerOptions": { /* Visit https://aka.ms/tsconfig to read more about this file */ @@ -12,7 +12,7 @@ // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ /* Language and Environment */ - "target": "es2016", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ + "target": "es2016" /* 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 TC39 stage 2 draft decorators. */ @@ -26,9 +26,9 @@ // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ /* Modules */ - "module": "commonjs", /* Specify what module code is generated. */ - "rootDir": "./src", /* Specify the root folder within your source files. */ - "moduleResolution": "node", /* Specify how TypeScript looks up a file from a given module specifier. */ + "module": "commonjs" /* Specify what module code is generated. */, + "rootDir": "./src" /* Specify the root folder within your source files. */, + "moduleResolution": "node" /* 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. */ @@ -40,17 +40,17 @@ // "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. */ + "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. */ + "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. */ + "sourceMap": true /* Create source map files for emitted JavaScript files. */, // "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": "./dist", /* Specify an output folder for all emitted files. */ + "outDir": "./dist" /* Specify an output folder for all emitted files. */, // "removeComments": true, /* Disable emitting comments. */ // "noEmit": true, /* Disable emitting files from a compilation. */ // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ @@ -72,33 +72,33 @@ /* Interop Constraints */ // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ // "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. */ + "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. */ + "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. */ - "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. */ + "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. */, + "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. */ + "skipLibCheck": true /* Skip type checking all .d.ts files. */ } } diff --git a/apps/api/vitest.config.ts b/apps/api/vitest.config.ts index 1c0eacf..e21acf9 100644 --- a/apps/api/vitest.config.ts +++ b/apps/api/vitest.config.ts @@ -4,8 +4,8 @@ export default defineConfig({ test: { coverage: { // instanbul excludes interfaces from coverage - provider: 'istanbul', include: ['src/**/*.ts'], + provider: 'istanbul', }, }, -}) \ No newline at end of file +}) diff --git a/apps/api/webSocketTest.html b/apps/api/webSocketTest.html index 070df56..a3c7827 100644 --- a/apps/api/webSocketTest.html +++ b/apps/api/webSocketTest.html @@ -1,29 +1,29 @@ - + - - + + WebSocket Test - - + + Last block: waiting... Last eth tx: waiting... Last piano note: waiting... - + diff --git a/apps/web/.prettierrc.json b/apps/web/.prettierrc.json new file mode 100644 index 0000000..21c021c --- /dev/null +++ b/apps/web/.prettierrc.json @@ -0,0 +1,7 @@ +{ + "arrowParens": "avoid", + "quoteProps": "consistent", + "semi": false, + "singleQuote": true, + "tabWidth": 2 +} diff --git a/apps/web/@types/tonejs-instruments.d.ts b/apps/web/@types/tonejs-instruments.d.ts index 2b6286f..79a646a 100644 --- a/apps/web/@types/tonejs-instruments.d.ts +++ b/apps/web/@types/tonejs-instruments.d.ts @@ -1,199 +1,139 @@ declare module 'tonejs-instrument-bass-electric-mp3' { import { Sampler } from 'tone' export default class InstrumentBassElectricMp3 extends Sampler { - constructor(options?: { - minify?: boolean - onload?: unknown - }) + constructor(options?: { minify?: boolean; onload?: unknown }) } } declare module 'tonejs-instrument-bassoon-mp3' { import { Sampler } from 'tone' export default class InstrumentBassoonMp3 extends Sampler { - constructor(options?: { - minify?: boolean - onload?: unknown - }) + constructor(options?: { minify?: boolean; onload?: unknown }) } } declare module 'tonejs-instrument-cello-mp3' { import { Sampler } from 'tone' export default class InstrumentCelloMp3 extends Sampler { - constructor(options?: { - minify?: boolean - onload?: unknown - }) + constructor(options?: { minify?: boolean; onload?: unknown }) } } declare module 'tonejs-instrument-clarinet-mp3' { import { Sampler } from 'tone' export default class InstrumentClarinetMp3 extends Sampler { - constructor(options?: { - minify?: boolean - onload?: unknown - }) + constructor(options?: { minify?: boolean; onload?: unknown }) } } declare module 'tonejs-instrument-contrabass-mp3' { import { Sampler } from 'tone' export default class InstrumentContrabassMp3 extends Sampler { - constructor(options?: { - minify?: boolean - onload?: unknown - }) + constructor(options?: { minify?: boolean; onload?: unknown }) } } declare module 'tonejs-instrument-flute-mp3' { import { Sampler } from 'tone' export default class InstrumentFluteMp3 extends Sampler { - constructor(options?: { - minify?: boolean - onload?: unknown - }) + constructor(options?: { minify?: boolean; onload?: unknown }) } } declare module 'tonejs-instrument-french-horn-mp3' { import { Sampler } from 'tone' export default class InstrumentFrenchHornMp3 extends Sampler { - constructor(options?: { - minify?: boolean - onload?: unknown - }) + constructor(options?: { minify?: boolean; onload?: unknown }) } } declare module 'tonejs-instrument-guitar-acoustic-mp3' { import { Sampler } from 'tone' export default class InstrumentGuitarAcousticMp3 extends Sampler { - constructor(options?: { - minify?: boolean - onload?: unknown - }) + constructor(options?: { minify?: boolean; onload?: unknown }) } } declare module 'tonejs-instrument-guitar-electric-mp3' { import { Sampler } from 'tone' export default class InstrumentGuitarElectricMp3 extends Sampler { - constructor(options?: { - minify?: boolean - onload?: unknown - }) + constructor(options?: { minify?: boolean; onload?: unknown }) } } declare module 'tonejs-instrument-guitar-nylon-mp3' { import { Sampler } from 'tone' export default class InstrumentGuitarNylonMp3 extends Sampler { - constructor(options?: { - minify?: boolean - onload?: unknown - }) + constructor(options?: { minify?: boolean; onload?: unknown }) } } declare module 'tonejs-instrument-harmonium-mp3' { import { Sampler } from 'tone' export default class InstrumentHarmoniumMp3 extends Sampler { - constructor(options?: { - minify?: boolean - onload?: unknown - }) + constructor(options?: { minify?: boolean; onload?: unknown }) } } declare module 'tonejs-instrument-harp-mp3' { import { Sampler } from 'tone' export default class InstrumentHarpMp3 extends Sampler { - constructor(options?: { - minify?: boolean - onload?: unknown - }) + constructor(options?: { minify?: boolean; onload?: unknown }) } } declare module 'tonejs-instrument-organ-mp3' { import { Sampler } from 'tone' export default class InstrumentOrganMp3 extends Sampler { - constructor(options?: { - minify?: boolean - onload?: unknown - }) + constructor(options?: { minify?: boolean; onload?: unknown }) } } declare module 'tonejs-instrument-piano-mp3' { import { Sampler } from 'tone' export default class InstrumentPianoMp3 extends Sampler { - constructor(options?: { - minify?: boolean - onload?: unknown - }) + constructor(options?: { minify?: boolean; onload?: unknown }) } } declare module 'tonejs-instrument-saxophone-mp3' { import { Sampler } from 'tone' export default class InstrumentSaxophoneMp3 extends Sampler { - constructor(options?: { - minify?: boolean - onload?: unknown - }) + constructor(options?: { minify?: boolean; onload?: unknown }) } } declare module 'tonejs-instrument-trombone-mp3' { import { Sampler } from 'tone' export default class InstrumentTromboneMp3 extends Sampler { - constructor(options?: { - minify?: boolean - onload?: unknown - }) + constructor(options?: { minify?: boolean; onload?: unknown }) } } declare module 'tonejs-instrument-trumpet-mp3' { import { Sampler } from 'tone' export default class InstrumentTrumpetMp3 extends Sampler { - constructor(options?: { - minify?: boolean - onload?: unknown - }) + constructor(options?: { minify?: boolean; onload?: unknown }) } } declare module 'tonejs-instrument-tuba-mp3' { import { Sampler } from 'tone' export default class InstrumentTubaMp3 extends Sampler { - constructor(options?: { - minify?: boolean - onload?: unknown - }) + constructor(options?: { minify?: boolean; onload?: unknown }) } } declare module 'tonejs-instrument-violin-mp3' { import { Sampler } from 'tone' export default class InstrumentViolinMp3 extends Sampler { - constructor(options?: { - minify?: boolean - onload?: unknown - }) + constructor(options?: { minify?: boolean; onload?: unknown }) } } declare module 'tonejs-instrument-xylophone-mp3' { import { Sampler } from 'tone' export default class InstrumentXylophoneMp3 extends Sampler { - constructor(options?: { - minify?: boolean - onload?: unknown - }) + constructor(options?: { minify?: boolean; onload?: unknown }) } } diff --git a/apps/web/README.md b/apps/web/README.md index d0cc11b..0d30ca6 100644 --- a/apps/web/README.md +++ b/apps/web/README.md @@ -1,29 +1,38 @@ # CryptoChords Web App + This is the web application of the CryptoChords project. It is a front-end application that allows users to visualize activities on the [Hemi network](https://hemi.xyz). ## Architecture + It is built using DDD principles with the following layers: + - Application - Domain - Infrastructure - Presentation ### Application + This layer contains the use cases of the application. It is the entry point of the application and it is responsible for coordinating the domain layer and the infrastructure layer. ### Domain + This layer contains the business logic of the application. It is the core of the application and it is responsible for the entities, value objects, and domain services. ### Infrastructure + This layer contains the implementation of the application. It is responsible for the database and the external services. ### Presentation + This layer contains the user interface of the application. #### Presenters + This sublayer contains the presenters of the application. It is responsible for the whole user interface logic. #### React + This sublayer contains the React implementation of the application. Its components are responsible for the style and the interface with the presenters, displaying its state and redirecting the user actions. ## Getting Started @@ -99,8 +108,10 @@ The environment variables are defined in the `.env` file. The following variable - `VITE_LOGO_URL`: The URL of the logo. If it is not defined, the logo will point to the root of the web app and will not display the pointer cursor. ## Contribution + If you want to contribute to this project and make it better, your help is very welcome. You can find more information about how to contribute in the [`CONTRIBUTING.md`](../../CONTRIBUTING.md) file. ## License -This project is licensed under the MIT License - see the [LICENSE](../../LICENSE) file for details. \ No newline at end of file + +This project is licensed under the MIT License - see the [LICENSE](../../LICENSE) file for details. diff --git a/apps/web/index.html b/apps/web/index.html index 50635c9..41901cc 100644 --- a/apps/web/index.html +++ b/apps/web/index.html @@ -2,7 +2,11 @@ - + Crypto Chords diff --git a/apps/web/package.json b/apps/web/package.json index 92faaaf..59af7c8 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -7,7 +7,9 @@ "scripts": { "dev": "vite", "build": "tsc && vite build", - "lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0", + "format:check": "prettier --check .", + "format:fix": "npx prettier --write .", + "lint": "eslint . --ext ts,tsx", "preview": "vite preview", "test": "vitest run", "test:cov": "vitest run --coverage", @@ -58,6 +60,7 @@ "eslint-plugin-react-hooks": "5.1.0", "eslint-plugin-react-refresh": "0.4.16", "postcss": "8.4.49", + "prettier": "^3.3.3", "tailwindcss": "3.4.16", "typescript": "5.2.2", "vite": "5.0.8", diff --git a/apps/web/src/application/ObservableService.ts b/apps/web/src/application/ObservableService.ts index ea145b3..ad29ce5 100644 --- a/apps/web/src/application/ObservableService.ts +++ b/apps/web/src/application/ObservableService.ts @@ -1,10 +1,16 @@ -import { Observable, EventBusInstance, EventSubscription, Event } from '@cryptochords/shared' +import { + Observable, + EventBusInstance, + EventSubscription, + Event, +} from '@cryptochords/shared' import { Service } from './Service' import { ServiceResponseEvent } from './events/ServiceResponseEvent' export abstract class ObservableService -extends Service -implements Observable>{ + extends Service + implements Observable> +{ private eventBus = new EventBusInstance() public async execute(request: Request): Promise { @@ -16,7 +22,12 @@ implements Observable>{ return response } - public async listen(listener: EventSubscription>) { - this.eventBus.subscribe(ServiceResponseEvent.eventKey, listener as EventSubscription) + public async listen( + listener: EventSubscription>, + ) { + this.eventBus.subscribe( + ServiceResponseEvent.eventKey, + listener as EventSubscription, + ) } -} \ No newline at end of file +} diff --git a/apps/web/src/application/Service.ts b/apps/web/src/application/Service.ts index 48e9b38..42a238a 100644 --- a/apps/web/src/application/Service.ts +++ b/apps/web/src/application/Service.ts @@ -1,7 +1,7 @@ -export abstract class Service{ +export abstract class Service { protected abstract process(request: Request): Promise - + public async execute(request: Request): Promise { return this.process(request) } -} \ No newline at end of file +} diff --git a/apps/web/src/application/events/ServiceResponseEvent.ts b/apps/web/src/application/events/ServiceResponseEvent.ts index 6b7b5ba..5514dab 100644 --- a/apps/web/src/application/events/ServiceResponseEvent.ts +++ b/apps/web/src/application/events/ServiceResponseEvent.ts @@ -1,8 +1,11 @@ import { Event } from '@cryptochords/shared' export class ServiceResponseEvent extends Event { - static eventKey = Symbol('ServiceResponseEvent'); - constructor(public readonly request: Request, public readonly response: Response) { + static eventKey = Symbol('ServiceResponseEvent') + constructor( + public readonly request: Request, + public readonly response: Response, + ) { super(ServiceResponseEvent.eventKey) } } diff --git a/apps/web/src/application/services/CreateCube/CreateCubeDtos.ts b/apps/web/src/application/services/CreateCube/CreateCubeDtos.ts index 0e17781..31802e1 100644 --- a/apps/web/src/application/services/CreateCube/CreateCubeDtos.ts +++ b/apps/web/src/application/services/CreateCube/CreateCubeDtos.ts @@ -2,11 +2,11 @@ export interface CreateCubeResponseDto { id: string x: number y: number - color: string + color: string mirrored: boolean } export interface CreateCubeRequestDto { - x: number, + x: number color: string -} \ No newline at end of file +} diff --git a/apps/web/src/application/services/CreateCube/CreateCubeService.spec.ts b/apps/web/src/application/services/CreateCube/CreateCubeService.spec.ts index 404464b..68dd2ee 100644 --- a/apps/web/src/application/services/CreateCube/CreateCubeService.spec.ts +++ b/apps/web/src/application/services/CreateCube/CreateCubeService.spec.ts @@ -8,12 +8,12 @@ const cubeRepositoryMock: CubeRepository = { x: { value: 0.5 }, y: { value: 0 }, color: { value: 'blue' }, - mirrored: false + mirrored: false, }), delete: vi.fn(), update: vi.fn(), list: vi.fn(), - clear: vi.fn() + clear: vi.fn(), } const create: CreateCubeService = new CreateCubeService(cubeRepositoryMock) @@ -27,7 +27,7 @@ describe('src/application/CreateCube/CreateCubeService', () => { x: 0.5, y: 0, color: 'blue', - mirrored: false + mirrored: false, }) }) }) diff --git a/apps/web/src/application/services/CreateCube/CreateCubeService.ts b/apps/web/src/application/services/CreateCube/CreateCubeService.ts index eaf5af3..07d6987 100644 --- a/apps/web/src/application/services/CreateCube/CreateCubeService.ts +++ b/apps/web/src/application/services/CreateCube/CreateCubeService.ts @@ -6,23 +6,31 @@ import { UnitInterval } from '../../../domain/valueObjects/UnitInterval' import { ObservableService } from '../../ObservableService' import { CreateCubeRequestDto, CreateCubeResponseDto } from './CreateCubeDtos' -export class CreateCubeService extends ObservableService{ +export class CreateCubeService extends ObservableService< + CreateCubeRequestDto, + CreateCubeResponseDto +> { private readonly cubeRepository: CubeRepository - + constructor(cubeRepository: CubeRepository) { super() this.cubeRepository = cubeRepository } - protected async process(request: CreateCubeRequestDto): Promise { - const cube = Cube.create(TransactionColor.create(request.color as TransactionColorEnum), UnitInterval.create(request.x)) + protected async process( + request: CreateCubeRequestDto, + ): Promise { + const cube = Cube.create( + TransactionColor.create(request.color as TransactionColorEnum), + UnitInterval.create(request.x), + ) const createdCube = await this.cubeRepository.create(cube) return { id: createdCube.uuid.value, x: createdCube.x.value, y: createdCube.y.value, color: createdCube.color.value, - mirrored: createdCube.mirrored + mirrored: createdCube.mirrored, } } -} \ No newline at end of file +} diff --git a/apps/web/src/application/services/CreateKeyboard/CreateKeyboardDtos.ts b/apps/web/src/application/services/CreateKeyboard/CreateKeyboardDtos.ts index a72c53f..c7eba9d 100644 --- a/apps/web/src/application/services/CreateKeyboard/CreateKeyboardDtos.ts +++ b/apps/web/src/application/services/CreateKeyboard/CreateKeyboardDtos.ts @@ -10,7 +10,7 @@ export interface CreateKeyboardResponseDto { class: string octave: number } - keyShape: string, + keyShape: string x: number color?: string }[] diff --git a/apps/web/src/application/services/CreateKeyboard/CreateKeyboardService.spec.ts b/apps/web/src/application/services/CreateKeyboard/CreateKeyboardService.spec.ts index 4b51863..2307934 100644 --- a/apps/web/src/application/services/CreateKeyboard/CreateKeyboardService.spec.ts +++ b/apps/web/src/application/services/CreateKeyboard/CreateKeyboardService.spec.ts @@ -7,9 +7,9 @@ describe('src/application/CreateKeyboard/CreateKeyboardService', () => { let keyboardRepository: KeyboardRepository beforeAll(() => { - keyboardRepository= { + keyboardRepository = { setKeyboard: vi.fn(), - getKeyboard: vi.fn() + getKeyboard: vi.fn(), } createKeyboardService = new CreateKeyboardService(keyboardRepository) }) @@ -22,7 +22,7 @@ describe('src/application/CreateKeyboard/CreateKeyboardService', () => { const response = await createKeyboardService.execute({ initialOctave: 0, numberOfKeys: 88, - initialPitchClass: 'A' + initialPitchClass: 'A', }) expect(response.keys.length).toBe(88) }) @@ -31,8 +31,8 @@ describe('src/application/CreateKeyboard/CreateKeyboardService', () => { await createKeyboardService.execute({ initialOctave: 0, numberOfKeys: 88, - initialPitchClass: 'A' + initialPitchClass: 'A', }) expect(keyboardRepository.setKeyboard).toHaveBeenCalled() }) -}) \ No newline at end of file +}) diff --git a/apps/web/src/application/services/CreateKeyboard/CreateKeyboardService.ts b/apps/web/src/application/services/CreateKeyboard/CreateKeyboardService.ts index 00050c7..dec7bf4 100644 --- a/apps/web/src/application/services/CreateKeyboard/CreateKeyboardService.ts +++ b/apps/web/src/application/services/CreateKeyboard/CreateKeyboardService.ts @@ -2,9 +2,15 @@ import { PitchClassEnum } from '../../../domain/enum/PitchClassEnum' import { KeyboardFactory } from '../../../domain/factories/KeyboardFactory' import { KeyboardRepository } from '../../../domain/repositories/KeyboardRepository' import { ObservableService } from '../../ObservableService' -import { CreateKeyboardRequestDto, CreateKeyboardResponseDto } from './CreateKeyboardDtos' +import { + CreateKeyboardRequestDto, + CreateKeyboardResponseDto, +} from './CreateKeyboardDtos' -export class CreateKeyboardService extends ObservableService{ +export class CreateKeyboardService extends ObservableService< + CreateKeyboardRequestDto, + CreateKeyboardResponseDto +> { private keyboardRepository: KeyboardRepository constructor(keyboardRepository: KeyboardRepository) { @@ -12,11 +18,13 @@ export class CreateKeyboardService extends ObservableService { + protected async process( + request: CreateKeyboardRequestDto, + ): Promise { const keyboard = KeyboardFactory.create({ initialOctave: request.initialOctave, numberOfKeys: request.numberOfKeys, - initialPitchClass: request.initialPitchClass as PitchClassEnum + initialPitchClass: request.initialPitchClass as PitchClassEnum, }) this.keyboardRepository.setKeyboard(keyboard) @@ -25,12 +33,12 @@ export class CreateKeyboardService extends ObservableService ({ pitch: { class: key.pitch.pitchClass.value, - octave: key.pitch.octave + octave: key.pitch.octave, }, keyShape: key.keyShape.value, x: key.x.value, - color: key.color - })) + color: key.color, + })), } } -} \ No newline at end of file +} diff --git a/apps/web/src/application/services/CreateTransaction/CreateTransactionDtos.ts b/apps/web/src/application/services/CreateTransaction/CreateTransactionDtos.ts index 0ec3906..2c86d7b 100644 --- a/apps/web/src/application/services/CreateTransaction/CreateTransactionDtos.ts +++ b/apps/web/src/application/services/CreateTransaction/CreateTransactionDtos.ts @@ -3,4 +3,4 @@ export interface CreateTransactionRequest { address: string network: string timestamp: number -} \ No newline at end of file +} diff --git a/apps/web/src/application/services/CreateTransaction/CreateTransactionService.ts b/apps/web/src/application/services/CreateTransaction/CreateTransactionService.ts index 2d6ebfc..0a7ef05 100644 --- a/apps/web/src/application/services/CreateTransaction/CreateTransactionService.ts +++ b/apps/web/src/application/services/CreateTransaction/CreateTransactionService.ts @@ -1,4 +1,10 @@ -import { Address, NetworkEnum, Timestamp, TxType, TxTypesEnum } from '@cryptochords/shared' +import { + Address, + NetworkEnum, + Timestamp, + TxType, + TxTypesEnum, +} from '@cryptochords/shared' import { Transaction } from '../../../domain/entities/Transaction' import { InstrumentEnum } from '../../../domain/enum/InstrumentEnum' import { KeyboardRepository } from '../../../domain/repositories/KeyboardRepository' @@ -11,7 +17,10 @@ import { PressKeyService } from '../PressKey/PressKeyService' import { ReleaseKeyService } from '../ReleaseKey/ReleaseKeyService' import { CreateTransactionRequest } from './CreateTransactionDtos' -export class CreateTransactionService extends ObservableService { +export class CreateTransactionService extends ObservableService< + CreateTransactionRequest, + void +> { private readonly keyboardRepository: KeyboardRepository private readonly transactionRepository: TransactionRepository private readonly createCubeService: CreateCubeService @@ -25,7 +34,7 @@ export class CreateTransactionService extends ObservableService { const transaction = await this.createTransaction(request) - const [ key, instrument ] = await this.pressKey(transaction) - if (!key) - return + const [key, instrument] = await this.pressKey(transaction) + if (!key) return await this.createCube(key) - setTimeout(() => { - this.releaseKey(key, instrument) - }, 100 + Math.random() * 3_000) + setTimeout( + () => { + this.releaseKey(key, instrument) + }, + 100 + Math.random() * 3_000, + ) } - async createTransaction(request: CreateTransactionRequest): Promise { - const network = await this.netwtorkRepository.find(request.network as NetworkEnum) + async createTransaction( + request: CreateTransactionRequest, + ): Promise { + const network = await this.netwtorkRepository.find( + request.network as NetworkEnum, + ) - if (!network) - throw new Error('Network not found') + if (!network) throw new Error('Network not found') const transaction = Transaction.create({ txType: TxType.create(request.txType as TxTypesEnum), address: Address.create(request.address), network, - timestamp: Timestamp.create(request.timestamp) + timestamp: Timestamp.create(request.timestamp), }) await this.transactionRepository.create(transaction) @@ -68,22 +82,25 @@ export class CreateTransactionService extends ObservableService { this.createCubeService.execute({ x: key.x.value, - color: key.color + color: key.color, }) } - async pressKey(transaction: Transaction): Promise<[Key | undefined, (InstrumentEnum | undefined) ] > { + async pressKey( + transaction: Transaction, + ): Promise<[Key | undefined, InstrumentEnum | undefined]> { const keyboard = this.keyboardRepository.getKeyboard() - if (!keyboard) - return [undefined, undefined] + if (!keyboard) return [undefined, undefined] - const randomKey = keyboard.getRandomWhiteKeyByTxType(transaction.txType.value) + const randomKey = keyboard.getRandomWhiteKeyByTxType( + transaction.txType.value, + ) const { instrument } = await this.pressKeyService.execute({ pitchClass: randomKey.pitch.pitchClass.value, - octave: randomKey.pitch.octave + octave: randomKey.pitch.octave, }) - + return [randomKey, instrument as InstrumentEnum] } @@ -91,7 +108,7 @@ export class CreateTransactionService extends ObservableService { it('should return the correct values', async () => { expect(response).toEqual({ - cubes: [{ - id: 'some-id', - x: 0.5, - y: 0, - color: 'blue', - mirrored: false - }, { - id: 'another-id', - x: 0.1, - y: 0, - color: 'orange', - mirrored: false - }] + cubes: [ + { + id: 'some-id', + x: 0.5, + y: 0, + color: 'blue', + mirrored: false, + }, + { + id: 'another-id', + x: 0.1, + y: 0, + color: 'orange', + mirrored: false, + }, + ], }) }) }) diff --git a/apps/web/src/application/services/GetCubes/GetCubesService.ts b/apps/web/src/application/services/GetCubes/GetCubesService.ts index ae8f362..2ac9b54 100644 --- a/apps/web/src/application/services/GetCubes/GetCubesService.ts +++ b/apps/web/src/application/services/GetCubes/GetCubesService.ts @@ -2,9 +2,12 @@ import { CubeRepository } from '../../../domain/repositories/CubeRepository' import { ObservableService } from '../../ObservableService' import { GetCubesResponseDto } from './GetCubesDtos' -export class GetCubesService extends ObservableService{ +export class GetCubesService extends ObservableService< + void, + GetCubesResponseDto +> { private readonly cubeRepository: CubeRepository - + constructor(cubeRepository: CubeRepository) { super() this.cubeRepository = cubeRepository @@ -20,8 +23,8 @@ export class GetCubesService extends ObservableService{ +export class GetKeyboardService extends ObservableService< + void, + GetKeyboardResponseDto +> { private readonly keyboardRepository: KeyboardRepository - + constructor(keyboardRepository: KeyboardRepository) { super() this.keyboardRepository = keyboardRepository @@ -15,7 +18,7 @@ export class GetKeyboardService extends ObservableService ({ pitch: { class: key.pitch.pitchClass.value, - octave: key.pitch.octave + octave: key.pitch.octave, }, keyShape: key.keyShape.value, x: key.x.value, color: key.color, - pressed: key.pressed - })) + pressed: key.pressed, + })), } } -} \ No newline at end of file +} diff --git a/apps/web/src/application/services/GetOptions/GetOptionsDtos.ts b/apps/web/src/application/services/GetOptions/GetOptionsDtos.ts index 1009d77..8d77f35 100644 --- a/apps/web/src/application/services/GetOptions/GetOptionsDtos.ts +++ b/apps/web/src/application/services/GetOptions/GetOptionsDtos.ts @@ -1,4 +1,4 @@ export interface GetOptionsResponseDto { muted: boolean instrument: string -} \ No newline at end of file +} diff --git a/apps/web/src/application/services/GetOptions/GetOptionsService.ts b/apps/web/src/application/services/GetOptions/GetOptionsService.ts index 8cc3c5c..995a9ae 100644 --- a/apps/web/src/application/services/GetOptions/GetOptionsService.ts +++ b/apps/web/src/application/services/GetOptions/GetOptionsService.ts @@ -2,9 +2,12 @@ import { OptionsRepository } from '../../../domain/repositories/OptionsRepositor import { ObservableService } from '../../ObservableService' import { GetOptionsResponseDto } from './GetOptionsDtos' -export class GetOptionsService extends ObservableService{ +export class GetOptionsService extends ObservableService< + void, + GetOptionsResponseDto +> { private readonly optionsRepository: OptionsRepository - + constructor(optionsRepository: OptionsRepository) { super() this.optionsRepository = optionsRepository @@ -15,7 +18,7 @@ export class GetOptionsService extends ObservableService { +export class GetSelectedNetworkService extends ObservableService< + void, + GetSelectedNetworkResponseDto +> { private readonly netwtorkRepository: NetworkRepository - constructor( - networkRepository: NetworkRepository, - ) { + constructor(networkRepository: NetworkRepository) { super() this.netwtorkRepository = networkRepository } @@ -19,4 +20,4 @@ export class GetSelectedNetworkService extends ObservableService { +export class ListNetworksService extends ObservableService< + void, + ListNetworksResponseDto +> { private readonly networkRepository: NetworkRepository - constructor( - networkRepository: NetworkRepository, - ) { + constructor(networkRepository: NetworkRepository) { super() this.networkRepository = networkRepository } @@ -16,7 +16,7 @@ export class ListNetworksService extends ObservableService { const [networks, selectedNetwork] = await Promise.all([ this.networkRepository.list(), - this.networkRepository.getSelected() + this.networkRepository.getSelected(), ]) return { @@ -24,7 +24,7 @@ export class ListNetworksService extends ObservableService{ +export class ListTransactionsService extends ObservableService< + void, + ListTransactionsResponseDto +> { private readonly transactionRepository: TransactionRepository - - constructor( - transactionRepository: TransactionRepository, - ) { + + constructor(transactionRepository: TransactionRepository) { super() this.transactionRepository = transactionRepository } @@ -20,8 +21,8 @@ export class ListTransactionsService extends ObservableService { +import { + LoadInstrumentRequest, + LoadInstrumentResponse, +} from './LoadInstrumentDtos' +export class LoadInstrumentService extends ObservableService< + LoadInstrumentRequest, + LoadInstrumentResponse +> { private soundService: SoundService constructor(soundService: SoundService) { @@ -11,7 +16,9 @@ export class LoadInstrumentService extends ObservableService { + protected async process({ + instrument, + }: LoadInstrumentRequest): Promise { await this.soundService.loadInstrument(instrument) return } diff --git a/apps/web/src/application/services/PlaySound/PlaySoundDtos.ts b/apps/web/src/application/services/PlaySound/PlaySoundDtos.ts index ba48bf0..2be1440 100644 --- a/apps/web/src/application/services/PlaySound/PlaySoundDtos.ts +++ b/apps/web/src/application/services/PlaySound/PlaySoundDtos.ts @@ -5,4 +5,4 @@ export interface PlaySoundRequest { export interface PlaySoundResponse { instrument?: string -} \ No newline at end of file +} diff --git a/apps/web/src/application/services/PlaySound/PlaySoundService.ts b/apps/web/src/application/services/PlaySound/PlaySoundService.ts index 05e1ff2..981483d 100644 --- a/apps/web/src/application/services/PlaySound/PlaySoundService.ts +++ b/apps/web/src/application/services/PlaySound/PlaySoundService.ts @@ -5,27 +5,38 @@ import { PitchClass } from '../../../domain/valueObjects/PitchClass' import { ObservableService } from '../../ObservableService' import { PlaySoundRequest, PlaySoundResponse } from './PlaySoundDtos' -export class PlaySoundService extends ObservableService{ - +export class PlaySoundService extends ObservableService< + PlaySoundRequest, + PlaySoundResponse +> { private soundService: SoundService private optionsRepository: OptionsRepository - constructor(soundService: SoundService, optionsRepository: OptionsRepository) { + constructor( + soundService: SoundService, + optionsRepository: OptionsRepository, + ) { super() this.soundService = soundService this.optionsRepository = optionsRepository } - protected async process(request: PlaySoundRequest): Promise { + protected async process( + request: PlaySoundRequest, + ): Promise { const options = await this.optionsRepository.getOptions() - if(options.muted) { + if (options.muted) { return {} } const pitchClass = PitchClass.create(request.pitchClass as PitchClassEnum) - await this.soundService.playSound(pitchClass.value, request.octave, options.instrument.name) + await this.soundService.playSound( + pitchClass.value, + request.octave, + options.instrument.name, + ) return { instrument: options.instrument.name } } -} \ No newline at end of file +} diff --git a/apps/web/src/application/services/PressKey/PressKeyDtos.ts b/apps/web/src/application/services/PressKey/PressKeyDtos.ts index 85bceab..fa041b8 100644 --- a/apps/web/src/application/services/PressKey/PressKeyDtos.ts +++ b/apps/web/src/application/services/PressKey/PressKeyDtos.ts @@ -5,4 +5,4 @@ export interface PressKeyRequest { export interface PressKeyResponse { instrument?: string -} \ No newline at end of file +} diff --git a/apps/web/src/application/services/PressKey/PressKeyService.ts b/apps/web/src/application/services/PressKey/PressKeyService.ts index c8fa215..d50046c 100644 --- a/apps/web/src/application/services/PressKey/PressKeyService.ts +++ b/apps/web/src/application/services/PressKey/PressKeyService.ts @@ -3,12 +3,17 @@ import { ObservableService } from '../../ObservableService' import { PlaySoundService } from '../PlaySound/PlaySoundService' import { PressKeyRequest, PressKeyResponse } from './PressKeyDtos' -export class PressKeyService extends ObservableService{ - +export class PressKeyService extends ObservableService< + PressKeyRequest, + PressKeyResponse +> { private keyboardRepository: KeyboardRepository private playSound: PlaySoundService - constructor(keyboardRepository: KeyboardRepository, playSound: PlaySoundService) { + constructor( + keyboardRepository: KeyboardRepository, + playSound: PlaySoundService, + ) { super() this.keyboardRepository = keyboardRepository this.playSound = playSound @@ -16,20 +21,18 @@ export class PressKeyService extends ObservableService { const keyboard = this.keyboardRepository.getKeyboard() - if (!keyboard) - return {} + if (!keyboard) return {} const key = keyboard.findKey(request.pitchClass, request.octave) - if (!key) - return {} + if (!key) return {} key.press() const { instrument } = await this.playSound.execute({ pitchClass: request.pitchClass, - octave: request.octave + octave: request.octave, }) return { instrument } } -} \ No newline at end of file +} diff --git a/apps/web/src/application/services/RecalculateCubePositions/RecalculateCubePositionsService.ts b/apps/web/src/application/services/RecalculateCubePositions/RecalculateCubePositionsService.ts index 0607a52..48c90e2 100644 --- a/apps/web/src/application/services/RecalculateCubePositions/RecalculateCubePositionsService.ts +++ b/apps/web/src/application/services/RecalculateCubePositions/RecalculateCubePositionsService.ts @@ -1,25 +1,33 @@ import { CubeRepository } from '../../../domain/repositories/CubeRepository' import { ObservableService } from '../../ObservableService' -import { RecalculateCubePositionsRequestDto, RecalculateCubePositionsResponseDto } from './RecalculateCubePositionsDtos' +import { + RecalculateCubePositionsRequestDto, + RecalculateCubePositionsResponseDto, +} from './RecalculateCubePositionsDtos' -export class RecalculateCubePositionsService extends ObservableService{ +export class RecalculateCubePositionsService extends ObservableService< + RecalculateCubePositionsRequestDto, + RecalculateCubePositionsResponseDto +> { private readonly cubeRepository: CubeRepository - + constructor(cubeRepository: CubeRepository) { super() this.cubeRepository = cubeRepository } - protected async process(request: RecalculateCubePositionsRequestDto): Promise { + protected async process( + request: RecalculateCubePositionsRequestDto, + ): Promise { const cubes = await this.cubeRepository.list() - const response: RecalculateCubePositionsResponseDto = { + const response: RecalculateCubePositionsResponseDto = { deletedCubes: 0, - updatedCubes: 0 + updatedCubes: 0, } - for await(const cube of cubes) { + for await (const cube of cubes) { cube.recalculateYByAge(request.maxAge) - if(cube.isOnTop) { + if (cube.isOnTop) { await this.cubeRepository.delete(cube.uuid) response.deletedCubes++ } else { @@ -27,8 +35,7 @@ export class RecalculateCubePositionsService extends ObservableService{ - +export class ReleaseKeyService extends ObservableService< + ReleaseKeyRequest, + void +> { private keyboardRepository: KeyboardRepository private stopSound: StopSoundService - constructor(keyboardRepository: KeyboardRepository, stopSound: StopSoundService) { + constructor( + keyboardRepository: KeyboardRepository, + stopSound: StopSoundService, + ) { super() this.keyboardRepository = keyboardRepository this.stopSound = stopSound @@ -17,23 +22,21 @@ export class ReleaseKeyService extends ObservableService { const keyboard = this.keyboardRepository.getKeyboard() - if (!keyboard) - return + if (!keyboard) return const key = keyboard.findKey(request.pitchClass, request.octave) - if (!key) - return + if (!key) return key.release() - - if(!request.instrument) { + + if (!request.instrument) { return } this.stopSound.execute({ pitchClass: request.pitchClass, octave: request.octave, - instrument: request.instrument as InstrumentEnum + instrument: request.instrument as InstrumentEnum, }) } -} \ No newline at end of file +} diff --git a/apps/web/src/application/services/SetInstrument/SetInstrumentDtos.ts b/apps/web/src/application/services/SetInstrument/SetInstrumentDtos.ts index 246324f..c49f32b 100644 --- a/apps/web/src/application/services/SetInstrument/SetInstrumentDtos.ts +++ b/apps/web/src/application/services/SetInstrument/SetInstrumentDtos.ts @@ -1,3 +1,3 @@ export interface SetInstrumentRequest { instrument: string -} \ No newline at end of file +} diff --git a/apps/web/src/application/services/SetInstrument/SetInstrumentService.ts b/apps/web/src/application/services/SetInstrument/SetInstrumentService.ts index 41723b5..427b342 100644 --- a/apps/web/src/application/services/SetInstrument/SetInstrumentService.ts +++ b/apps/web/src/application/services/SetInstrument/SetInstrumentService.ts @@ -5,8 +5,10 @@ import { Options } from '../../../domain/valueObjects/Options' import { ObservableService } from '../../ObservableService' import { SetInstrumentRequest } from './SetInstrumentDtos' -export class SetInstrumentService extends ObservableService{ - +export class SetInstrumentService extends ObservableService< + SetInstrumentRequest, + void +> { private optionsRepository: OptionsRepository constructor(optionsRepository: OptionsRepository) { @@ -19,8 +21,10 @@ export class SetInstrumentService extends ObservableService{ - +export class SetMutedService extends ObservableService { private optionsRepository: OptionsRepository constructor(optionsRepository: OptionsRepository) { @@ -17,8 +16,8 @@ export class SetMutedService extends ObservableService{ this.optionsRepository.setOptions( Options.create({ instrument: options.instrument, - muted: request.muted - }) + muted: request.muted, + }), ) } } diff --git a/apps/web/src/application/services/StopSound/StopSoundDtos.ts b/apps/web/src/application/services/StopSound/StopSoundDtos.ts index 223bd57..9746608 100644 --- a/apps/web/src/application/services/StopSound/StopSoundDtos.ts +++ b/apps/web/src/application/services/StopSound/StopSoundDtos.ts @@ -2,4 +2,4 @@ export interface StopSoundRequest { pitchClass: string octave: number instrument: string -} \ No newline at end of file +} diff --git a/apps/web/src/application/services/StopSound/StopSoundService.ts b/apps/web/src/application/services/StopSound/StopSoundService.ts index c8ab2e6..eb29819 100644 --- a/apps/web/src/application/services/StopSound/StopSoundService.ts +++ b/apps/web/src/application/services/StopSound/StopSoundService.ts @@ -4,8 +4,10 @@ import { PitchClass } from '../../../domain/valueObjects/PitchClass' import { ObservableService } from '../../ObservableService' import { StopSoundRequest } from './StopSoundDtos' -export class StopSoundService extends ObservableService{ - +export class StopSoundService extends ObservableService< + StopSoundRequest, + void +> { private soundService: SoundService constructor(soundService: SoundService) { @@ -15,6 +17,10 @@ export class StopSoundService extends ObservableService{ protected async process(request: StopSoundRequest): Promise { const pitchClass = PitchClass.create(request.pitchClass as PitchClassEnum) - await this.soundService.stopSound(pitchClass.value, request.octave, request.instrument) + await this.soundService.stopSound( + pitchClass.value, + request.octave, + request.instrument, + ) } -} \ No newline at end of file +} diff --git a/apps/web/src/application/services/SwitchNetwork/SwitchNetworkRequestDto.ts b/apps/web/src/application/services/SwitchNetwork/SwitchNetworkRequestDto.ts index 281ef9a..4b48cfe 100644 --- a/apps/web/src/application/services/SwitchNetwork/SwitchNetworkRequestDto.ts +++ b/apps/web/src/application/services/SwitchNetwork/SwitchNetworkRequestDto.ts @@ -1,3 +1,3 @@ export interface SwitchNetworkRequestDto { networkName: string -} \ No newline at end of file +} diff --git a/apps/web/src/application/services/SwitchNetwork/SwitchNetworkResponseDto.ts b/apps/web/src/application/services/SwitchNetwork/SwitchNetworkResponseDto.ts index 46cd0ac..c728dd7 100644 --- a/apps/web/src/application/services/SwitchNetwork/SwitchNetworkResponseDto.ts +++ b/apps/web/src/application/services/SwitchNetwork/SwitchNetworkResponseDto.ts @@ -1,4 +1,4 @@ export interface SwitchNetworkResponseDto { - networkName: string, + networkName: string networkWsUrl: string -} \ No newline at end of file +} diff --git a/apps/web/src/application/services/SwitchNetwork/SwitchNetworkService.ts b/apps/web/src/application/services/SwitchNetwork/SwitchNetworkService.ts index dd20dd4..6489f17 100644 --- a/apps/web/src/application/services/SwitchNetwork/SwitchNetworkService.ts +++ b/apps/web/src/application/services/SwitchNetwork/SwitchNetworkService.ts @@ -7,7 +7,10 @@ import { ObservableService } from '../../ObservableService' import { SwitchNetworkRequestDto } from './SwitchNetworkRequestDto' import { SwitchNetworkResponseDto } from './SwitchNetworkResponseDto' -export class SwitchNetworkService extends ObservableService { +export class SwitchNetworkService extends ObservableService< + SwitchNetworkRequestDto, + SwitchNetworkResponseDto +> { private readonly transactionRepository: TransactionRepository private readonly networkRepository: NetworkRepository private readonly cubeRepository: CubeRepository @@ -15,7 +18,7 @@ export class SwitchNetworkService extends ObservableService { + protected async process( + request: SwitchNetworkRequestDto, + ): Promise { const network = await this.validateNetwork(request.networkName) await Promise.all([ this.transactionRepository.clear(), this.cubeRepository.clear(), - this.networkRepository.select(network.name) + this.networkRepository.select(network.name), ]) return { networkName: network.name, - networkWsUrl: network.wsUrl + networkWsUrl: network.wsUrl, } } @@ -42,7 +47,9 @@ export class SwitchNetworkService extends ObservableService { private constructor(color: TransactionColor, x: UnitInterval, uuid: Uuid) { - super({ - color, - x: x, - y: UnitInterval.create(0), - creation: Date.now(), - mirrored: Cube.randomMirrored() - }, uuid) + super( + { + color, + x: x, + y: UnitInterval.create(0), + creation: Date.now(), + mirrored: Cube.randomMirrored(), + }, + uuid, + ) } private static randomMirrored() { @@ -43,7 +46,10 @@ export class Cube extends Entity { return new Cube(color, x, Uuid.create()) } - private static isValidPosition(color: TransactionColor, x: UnitInterval): boolean { + private static isValidPosition( + color: TransactionColor, + x: UnitInterval, + ): boolean { const range = CubeXRange.get(color.value) if (!range) { diff --git a/apps/web/src/domain/entities/Network.spec.ts b/apps/web/src/domain/entities/Network.spec.ts index 9b4fd64..3a37057 100644 --- a/apps/web/src/domain/entities/Network.spec.ts +++ b/apps/web/src/domain/entities/Network.spec.ts @@ -1,39 +1,39 @@ -import { describe, it, expect } from 'vitest'; -import { Network } from './Network'; -import { NetworkEnum } from '../../../../../packages/shared/src/domain/enums/NetworkEnum'; -import { Uuid } from '../../../../../packages/shared/src/domain/valueObjects/Uuid'; +import { describe, it, expect } from 'vitest' +import { Network } from './Network' +import { NetworkEnum } from '../../../../../packages/shared/src/domain/enums/NetworkEnum' +import { Uuid } from '../../../../../packages/shared/src/domain/valueObjects/Uuid' describe('Network', () => { const mockProps = { name: NetworkEnum.MAINNET, explorerUrl: 'https://explorer.mainnet.com', wsUrl: 'wss://mainnet.ws.com', - }; + } it('should create a Network instance with default UUID', () => { - const network = Network.create(mockProps); - expect(network).toBeInstanceOf(Network); - expect(network.name).toBe(NetworkEnum.MAINNET); - expect(network.explorerUrl).toBe(mockProps.explorerUrl); - expect(network.wsUrl).toBe(mockProps.wsUrl); - expect(network.transactionUrl).toBe(`${mockProps.explorerUrl}/tx`); - expect(network.blockUrl).toBe(`${mockProps.explorerUrl}/block`); - }); + const network = Network.create(mockProps) + expect(network).toBeInstanceOf(Network) + expect(network.name).toBe(NetworkEnum.MAINNET) + expect(network.explorerUrl).toBe(mockProps.explorerUrl) + expect(network.wsUrl).toBe(mockProps.wsUrl) + expect(network.transactionUrl).toBe(`${mockProps.explorerUrl}/tx`) + expect(network.blockUrl).toBe(`${mockProps.explorerUrl}/block`) + }) it('should create a Network instance with a provided UUID', () => { - const uuid = Uuid.create(); - const network = Network.create(mockProps, uuid); - expect(network).toBeInstanceOf(Network); - expect(network.name).toBe(NetworkEnum.MAINNET); - expect(network.explorerUrl).toBe(mockProps.explorerUrl); - expect(network.wsUrl).toBe(mockProps.wsUrl); - expect(network.transactionUrl).toBe(`${mockProps.explorerUrl}/tx`); - expect(network.blockUrl).toBe(`${mockProps.explorerUrl}/block`); - }); + const uuid = Uuid.create() + const network = Network.create(mockProps, uuid) + expect(network).toBeInstanceOf(Network) + expect(network.name).toBe(NetworkEnum.MAINNET) + expect(network.explorerUrl).toBe(mockProps.explorerUrl) + expect(network.wsUrl).toBe(mockProps.wsUrl) + expect(network.transactionUrl).toBe(`${mockProps.explorerUrl}/tx`) + expect(network.blockUrl).toBe(`${mockProps.explorerUrl}/block`) + }) it('should return correct URLs for transactions and blocks', () => { - const network = Network.create(mockProps); - expect(network.transactionUrl).toBe(`${mockProps.explorerUrl}/tx`); - expect(network.blockUrl).toBe(`${mockProps.explorerUrl}/block`); - }); -}); + const network = Network.create(mockProps) + expect(network.transactionUrl).toBe(`${mockProps.explorerUrl}/tx`) + expect(network.blockUrl).toBe(`${mockProps.explorerUrl}/block`) + }) +}) diff --git a/apps/web/src/domain/entities/Network.ts b/apps/web/src/domain/entities/Network.ts index 9aa485d..3fbb69a 100644 --- a/apps/web/src/domain/entities/Network.ts +++ b/apps/web/src/domain/entities/Network.ts @@ -9,13 +9,12 @@ export interface NetworkProps { } export class Network extends Entity { - private constructor(props: NetworkProps, uuid: Uuid) { super(props, uuid) } static create(props: NetworkProps, id?: Uuid) { - const uuid = id ?? Uuid.create(); + const uuid = id ?? Uuid.create() return new Network(props, uuid) } @@ -38,4 +37,4 @@ export class Network extends Entity { get wsUrl() { return this.props.wsUrl } -} \ No newline at end of file +} diff --git a/apps/web/src/domain/entities/Transaction.spec.ts b/apps/web/src/domain/entities/Transaction.spec.ts index 97ebead..a7da207 100644 --- a/apps/web/src/domain/entities/Transaction.spec.ts +++ b/apps/web/src/domain/entities/Transaction.spec.ts @@ -1,62 +1,62 @@ -import { describe, it, expect } from 'vitest'; -import { Transaction } from './Transaction'; -import { NetworkEnum, TxType } from '@cryptochords/shared'; -import { Network } from './Network'; -import { Address } from '@cryptochords/shared'; -import { Timestamp } from '@cryptochords/shared'; +import { describe, it, expect } from 'vitest' +import { Transaction } from './Transaction' +import { NetworkEnum, TxType } from '@cryptochords/shared' +import { Network } from './Network' +import { Address } from '@cryptochords/shared' +import { Timestamp } from '@cryptochords/shared' describe('Transaction', () => { const mockNetwork = Network.create({ name: NetworkEnum.MAINNET, explorerUrl: 'https://explorer.mainnet.com', - wsUrl: 'wss://mainnet.ws.com' - }); + wsUrl: 'wss://mainnet.ws.com', + }) - const mockAddress = { value: '0x1234567890abcdef' } as Address; + const mockAddress = { value: '0x1234567890abcdef' } as Address const mockTimestamp = Timestamp.create(new Date().getTime()) it('should create a Transaction instance', () => { - const txType = { isBlock: false } as TxType; + const txType = { isBlock: false } as TxType const transaction = Transaction.create({ txType, address: mockAddress, network: mockNetwork, - timestamp: mockTimestamp - }); + timestamp: mockTimestamp, + }) - expect(transaction).toBeInstanceOf(Transaction); - expect(transaction.txType).toEqual(txType); - expect(transaction.address).toEqual(mockAddress); - expect(transaction.network).toEqual(mockNetwork); - expect(transaction.timestamp).toEqual(mockTimestamp); - }); + expect(transaction).toBeInstanceOf(Transaction) + expect(transaction.txType).toEqual(txType) + expect(transaction.address).toEqual(mockAddress) + expect(transaction.network).toEqual(mockNetwork) + expect(transaction.timestamp).toEqual(mockTimestamp) + }) it('should return correct block URL when txType.isBlock is true', () => { - const txType = { isBlock: true } as TxType; + const txType = { isBlock: true } as TxType const transaction = Transaction.create({ txType, address: mockAddress, network: mockNetwork, - timestamp: mockTimestamp - }); + timestamp: mockTimestamp, + }) - const expectedUrl = `${mockNetwork.blockUrl}/${mockAddress.value}`; - expect(transaction.url).toBe(expectedUrl); - }); + const expectedUrl = `${mockNetwork.blockUrl}/${mockAddress.value}` + expect(transaction.url).toBe(expectedUrl) + }) it('should return correct transaction URL when txType.isBlock is false', () => { - const txType = { isBlock: false } as TxType; + const txType = { isBlock: false } as TxType const transaction = Transaction.create({ txType, address: mockAddress, network: mockNetwork, - timestamp: mockTimestamp - }); + timestamp: mockTimestamp, + }) - const expectedUrl = `${mockNetwork.transactionUrl}/${mockAddress.value}`; - expect(transaction.url).toBe(expectedUrl); - }); -}); \ No newline at end of file + const expectedUrl = `${mockNetwork.transactionUrl}/${mockAddress.value}` + expect(transaction.url).toBe(expectedUrl) + }) +}) diff --git a/apps/web/src/domain/entities/Transaction.ts b/apps/web/src/domain/entities/Transaction.ts index 8c7f742..4e3f460 100644 --- a/apps/web/src/domain/entities/Transaction.ts +++ b/apps/web/src/domain/entities/Transaction.ts @@ -36,10 +36,10 @@ export class Transaction { } get url() { - if(this.props.txType.isBlock) { + if (this.props.txType.isBlock) { return `${this.props.network.blockUrl}/${this.props.address.value}` } return `${this.props.network.transactionUrl}/${this.props.address.value}` } -} \ No newline at end of file +} diff --git a/apps/web/src/domain/enum/InstrumentEnum.ts b/apps/web/src/domain/enum/InstrumentEnum.ts index 929dee4..a2660f3 100644 --- a/apps/web/src/domain/enum/InstrumentEnum.ts +++ b/apps/web/src/domain/enum/InstrumentEnum.ts @@ -40,4 +40,4 @@ export const instrumentLabels: Map = new Map([ [InstrumentEnum.Tuba, 'Tuba'], [InstrumentEnum.Violin, 'Violin'], [InstrumentEnum.Xylophone, 'Xylophone'], -]) \ No newline at end of file +]) diff --git a/apps/web/src/domain/enum/KeyShapeEnum.ts b/apps/web/src/domain/enum/KeyShapeEnum.ts index 3412eec..b9e0f4c 100644 --- a/apps/web/src/domain/enum/KeyShapeEnum.ts +++ b/apps/web/src/domain/enum/KeyShapeEnum.ts @@ -3,5 +3,5 @@ export enum KeyShapeEnum { White = 'white', WhiteMiddle = 'white-middle', WhiteLeft = 'white-left', - WhiteRight = 'white-right' -} \ No newline at end of file + WhiteRight = 'white-right', +} diff --git a/apps/web/src/domain/enum/PitchClassEnum.ts b/apps/web/src/domain/enum/PitchClassEnum.ts index 0f8bfc2..7a56940 100644 --- a/apps/web/src/domain/enum/PitchClassEnum.ts +++ b/apps/web/src/domain/enum/PitchClassEnum.ts @@ -10,5 +10,5 @@ export enum PitchClassEnum { G_SHARP = 'G#', A = 'A', A_SHARP = 'A#', - B = 'B' + B = 'B', } diff --git a/apps/web/src/domain/enum/TransactionColorEnum.ts b/apps/web/src/domain/enum/TransactionColorEnum.ts index f4d415c..9973488 100644 --- a/apps/web/src/domain/enum/TransactionColorEnum.ts +++ b/apps/web/src/domain/enum/TransactionColorEnum.ts @@ -2,5 +2,5 @@ export enum TransactionColorEnum { Orange = 'orange', Blue = 'blue', Purple = 'purple', - Green = 'green' + Green = 'green', } diff --git a/apps/web/src/domain/events/TransactionCreatedEvent.ts b/apps/web/src/domain/events/TransactionCreatedEvent.ts index 6be77c8..39b9f11 100644 --- a/apps/web/src/domain/events/TransactionCreatedEvent.ts +++ b/apps/web/src/domain/events/TransactionCreatedEvent.ts @@ -2,7 +2,7 @@ import { Event } from '@cryptochords/shared' import { Transaction } from '../entities/Transaction' export class TransactionCreatedEvent extends Event { - static eventKey:symbol = Symbol('TransactionCreatedEvent') + static eventKey: symbol = Symbol('TransactionCreatedEvent') private readonly transaction: Transaction @@ -18,4 +18,4 @@ export class TransactionCreatedEvent extends Event { getTransaction(): Transaction { return this.transaction } -} \ No newline at end of file +} diff --git a/apps/web/src/domain/factories/KeyboardFactory.test.ts b/apps/web/src/domain/factories/KeyboardFactory.test.ts index ffac32a..3b1a231 100644 --- a/apps/web/src/domain/factories/KeyboardFactory.test.ts +++ b/apps/web/src/domain/factories/KeyboardFactory.test.ts @@ -12,7 +12,7 @@ describe('src/domain/factories/KeyboardFactory', () => { const keyboard = KeyboardFactory.create({ initialOctave: 0, numberOfKeys: 88, - initialPitchClass: PitchClassEnum.A + initialPitchClass: PitchClassEnum.A, }) expect(keyboard.keys.length).toBe(88) }) @@ -21,7 +21,7 @@ describe('src/domain/factories/KeyboardFactory', () => { const keyboard = KeyboardFactory.create({ initialOctave: 1, numberOfKeys: 12, - initialPitchClass: PitchClassEnum.F + initialPitchClass: PitchClassEnum.F, }) expect(keyboard.keys[0].pitch.pitchClass.value).toBe(PitchClassEnum.F) expect(keyboard.keys[0].pitch.octave).toBe(1) @@ -30,43 +30,45 @@ describe('src/domain/factories/KeyboardFactory', () => { expect(keyboard.keys[1].pitch.pitchClass.value).toBe(PitchClassEnum.F_SHARP) expect(keyboard.keys[1].pitch.octave).toBe(1) expect(keyboard.keys[1].keyShape.value).toBe(KeyShapeEnum.Black) - + expect(keyboard.keys[2].pitch.pitchClass.value).toBe(PitchClassEnum.G) expect(keyboard.keys[2].pitch.octave).toBe(1) expect(keyboard.keys[2].keyShape.value).toBe(KeyShapeEnum.WhiteMiddle) - + expect(keyboard.keys[3].pitch.pitchClass.value).toBe(PitchClassEnum.G_SHARP) expect(keyboard.keys[3].pitch.octave).toBe(1) expect(keyboard.keys[3].keyShape.value).toBe(KeyShapeEnum.Black) - + expect(keyboard.keys[4].pitch.pitchClass.value).toBe(PitchClassEnum.A) expect(keyboard.keys[4].pitch.octave).toBe(1) expect(keyboard.keys[4].keyShape.value).toBe(KeyShapeEnum.WhiteMiddle) - + expect(keyboard.keys[5].pitch.pitchClass.value).toBe(PitchClassEnum.A_SHARP) expect(keyboard.keys[5].pitch.octave).toBe(1) expect(keyboard.keys[5].keyShape.value).toBe(KeyShapeEnum.Black) - + expect(keyboard.keys[6].pitch.pitchClass.value).toBe(PitchClassEnum.B) expect(keyboard.keys[6].pitch.octave).toBe(1) expect(keyboard.keys[6].keyShape.value).toBe(KeyShapeEnum.WhiteRight) - + expect(keyboard.keys[7].pitch.pitchClass.value).toBe(PitchClassEnum.C) expect(keyboard.keys[7].pitch.octave).toBe(2) expect(keyboard.keys[7].keyShape.value).toBe(KeyShapeEnum.WhiteLeft) - + expect(keyboard.keys[8].pitch.pitchClass.value).toBe(PitchClassEnum.C_SHARP) expect(keyboard.keys[8].pitch.octave).toBe(2) expect(keyboard.keys[8].keyShape.value).toBe(KeyShapeEnum.Black) - + expect(keyboard.keys[9].pitch.pitchClass.value).toBe(PitchClassEnum.D) expect(keyboard.keys[9].pitch.octave).toBe(2) expect(keyboard.keys[9].keyShape.value).toBe(KeyShapeEnum.WhiteMiddle) - - expect(keyboard.keys[10].pitch.pitchClass.value).toBe(PitchClassEnum.D_SHARP) + + expect(keyboard.keys[10].pitch.pitchClass.value).toBe( + PitchClassEnum.D_SHARP, + ) expect(keyboard.keys[10].pitch.octave).toBe(2) expect(keyboard.keys[10].keyShape.value).toBe(KeyShapeEnum.Black) - + expect(keyboard.keys[11].pitch.pitchClass.value).toBe(PitchClassEnum.E) expect(keyboard.keys[11].pitch.octave).toBe(2) expect(keyboard.keys[11].keyShape.value).toBe(KeyShapeEnum.WhiteRight) @@ -76,7 +78,7 @@ describe('src/domain/factories/KeyboardFactory', () => { const keyboard = KeyboardFactory.create({ initialOctave: 1, numberOfKeys: 2, - initialPitchClass: PitchClassEnum.B + initialPitchClass: PitchClassEnum.B, }) expect(keyboard.keys[1].keyShape.value).toBe(KeyShapeEnum.White) }) @@ -85,7 +87,7 @@ describe('src/domain/factories/KeyboardFactory', () => { const keyboard = KeyboardFactory.create({ initialOctave: 1, numberOfKeys: 2, - initialPitchClass: PitchClassEnum.E + initialPitchClass: PitchClassEnum.E, }) expect(keyboard.keys[1].keyShape.value).toBe(KeyShapeEnum.White) }) @@ -94,16 +96,16 @@ describe('src/domain/factories/KeyboardFactory', () => { const keyboard = KeyboardFactory.create({ initialOctave: 1, numberOfKeys: 3, - initialPitchClass: PitchClassEnum.C + initialPitchClass: PitchClassEnum.C, }) expect(keyboard.keys[2].keyShape.value).toBe(KeyShapeEnum.WhiteRight) }) - + it('should return a keyboard with a white-right last key when it finish with a G key', () => { const keyboard = KeyboardFactory.create({ initialOctave: 1, numberOfKeys: 3, - initialPitchClass: PitchClassEnum.F + initialPitchClass: PitchClassEnum.F, }) expect(keyboard.keys[2].keyShape.value).toBe(KeyShapeEnum.WhiteRight) }) @@ -112,7 +114,7 @@ describe('src/domain/factories/KeyboardFactory', () => { const keyboard = KeyboardFactory.create({ initialOctave: 1, numberOfKeys: 3, - initialPitchClass: PitchClassEnum.G + initialPitchClass: PitchClassEnum.G, }) expect(keyboard.keys[2].keyShape.value).toBe(KeyShapeEnum.WhiteRight) }) diff --git a/apps/web/src/domain/factories/KeyboardFactory.ts b/apps/web/src/domain/factories/KeyboardFactory.ts index ee67555..fe7ff3f 100644 --- a/apps/web/src/domain/factories/KeyboardFactory.ts +++ b/apps/web/src/domain/factories/KeyboardFactory.ts @@ -8,11 +8,10 @@ import { Pitch } from '../valueObjects/Pitch' import { PitchClass } from '../valueObjects/PitchClass' import { UnitInterval } from '../valueObjects/UnitInterval' - enum KeyPosition { Beginning, Middle, - End + End, } export interface CreateProps { @@ -23,14 +22,23 @@ export interface CreateProps { export class KeyboardFactory { static create(props: CreateProps) { - const keysProps: Pick[] = [] + const keysProps: Pick< + KeyProps, + 'color' | 'keyShape' | 'pitch' | 'pressed' + >[] = [] let pitchClassValue = props.initialPitchClass let octave = props.initialOctave for (let i = 0; i < props.numberOfKeys; i++) { const isLastKey = i === props.numberOfKeys - 1 const isFirstKey = i === 0 - const position = isFirstKey ? KeyPosition.Beginning : isLastKey ? KeyPosition.End : KeyPosition.Middle - const keyShape = KeyShape.create(KeyboardFactory.getKeyShape(pitchClassValue, position)) + const position = isFirstKey + ? KeyPosition.Beginning + : isLastKey + ? KeyPosition.End + : KeyPosition.Middle + const keyShape = KeyShape.create( + KeyboardFactory.getKeyShape(pitchClassValue, position), + ) const pitchClass = PitchClass.create(pitchClassValue) const pitch = Pitch.create({ pitchClass: pitchClass, octave }) const color = KeyboardFactory.getColor(props.numberOfKeys, i) @@ -55,8 +63,12 @@ export class KeyboardFactory { return Object.values(TransactionColorEnum)[keyQuarter] } - private static calculatePositions(keysProps: Pick[]) { - const whiteKeysCount = keysProps.filter(key => key.keyShape.value !== KeyShapeEnum.Black).length + private static calculatePositions( + keysProps: Pick[], + ) { + const whiteKeysCount = keysProps.filter( + key => key.keyShape.value !== KeyShapeEnum.Black, + ).length const minKeyCenterSpacing = 1 / (whiteKeysCount * 2 - 1) const result = [] let x = 0 @@ -64,7 +76,10 @@ export class KeyboardFactory { const shape = keysProps[i].keyShape.value if (i === 0) { x += minKeyCenterSpacing * 0.75 - } else if (shape === KeyShapeEnum.WhiteLeft || shape === KeyShapeEnum.White) { + } else if ( + shape === KeyShapeEnum.WhiteLeft || + shape === KeyShapeEnum.White + ) { x += minKeyCenterSpacing * 2 } else { x += minKeyCenterSpacing @@ -103,7 +118,10 @@ export class KeyboardFactory { } } - private static getKeyShape(pitchClass: PitchClassEnum, position: KeyPosition): KeyShapeEnum { + private static getKeyShape( + pitchClass: PitchClassEnum, + position: KeyPosition, + ): KeyShapeEnum { if (pitchClass === PitchClassEnum.C || pitchClass === PitchClassEnum.F) { if (position === KeyPosition.End) { return KeyShapeEnum.White @@ -118,7 +136,11 @@ export class KeyboardFactory { return KeyShapeEnum.WhiteRight } - if (pitchClass === PitchClassEnum.D || pitchClass === PitchClassEnum.G || pitchClass === PitchClassEnum.A) { + if ( + pitchClass === PitchClassEnum.D || + pitchClass === PitchClassEnum.G || + pitchClass === PitchClassEnum.A + ) { if (position === KeyPosition.End) { return KeyShapeEnum.WhiteRight } diff --git a/apps/web/src/domain/repositories/CubeRepository.ts b/apps/web/src/domain/repositories/CubeRepository.ts index ff531b4..218f334 100644 --- a/apps/web/src/domain/repositories/CubeRepository.ts +++ b/apps/web/src/domain/repositories/CubeRepository.ts @@ -7,4 +7,4 @@ export interface CubeRepository { update: (cube: Cube) => Promise delete: (id: Uuid) => Promise clear: () => Promise -} \ No newline at end of file +} diff --git a/apps/web/src/domain/repositories/KeyboardRepository.ts b/apps/web/src/domain/repositories/KeyboardRepository.ts index 063e7a4..62515c3 100644 --- a/apps/web/src/domain/repositories/KeyboardRepository.ts +++ b/apps/web/src/domain/repositories/KeyboardRepository.ts @@ -3,4 +3,4 @@ import { Keyboard } from '../valueObjects/Keyboard' export interface KeyboardRepository { setKeyboard: (keyboard: Keyboard) => void getKeyboard: () => Keyboard | undefined -} \ No newline at end of file +} diff --git a/apps/web/src/domain/repositories/NetworkRepository.ts b/apps/web/src/domain/repositories/NetworkRepository.ts index f560b66..c6cbd93 100644 --- a/apps/web/src/domain/repositories/NetworkRepository.ts +++ b/apps/web/src/domain/repositories/NetworkRepository.ts @@ -6,4 +6,4 @@ export interface NetworkRepository { find: (name: NetworkEnum) => Promise select: (name: NetworkEnum) => Promise getSelected: () => Promise -} \ No newline at end of file +} diff --git a/apps/web/src/domain/repositories/OptionsRepository.ts b/apps/web/src/domain/repositories/OptionsRepository.ts index 9ae5f43..1940116 100644 --- a/apps/web/src/domain/repositories/OptionsRepository.ts +++ b/apps/web/src/domain/repositories/OptionsRepository.ts @@ -3,4 +3,4 @@ import { Options } from '../valueObjects/Options' export interface OptionsRepository { setOptions: (options: Options) => Promise getOptions: () => Promise -} \ No newline at end of file +} diff --git a/apps/web/src/domain/repositories/TransactionRepository.ts b/apps/web/src/domain/repositories/TransactionRepository.ts index 0cd9486..c7398f1 100644 --- a/apps/web/src/domain/repositories/TransactionRepository.ts +++ b/apps/web/src/domain/repositories/TransactionRepository.ts @@ -4,4 +4,4 @@ export interface TransactionRepository { create(block: Transaction): Promise list(): Promise clear(): Promise -} \ No newline at end of file +} diff --git a/apps/web/src/domain/services/SoundService.ts b/apps/web/src/domain/services/SoundService.ts index 5ae5fb3..fa1d0c2 100644 --- a/apps/web/src/domain/services/SoundService.ts +++ b/apps/web/src/domain/services/SoundService.ts @@ -2,6 +2,14 @@ import { PitchClassEnum } from '../enum/PitchClassEnum' export interface SoundService { loadInstrument(instrument: string): Promise - playSound(pitch: PitchClassEnum, octave: number, instrument: string): Promise - stopSound(pitch: PitchClassEnum, octave: number, instrument: string): Promise + playSound( + pitch: PitchClassEnum, + octave: number, + instrument: string, + ): Promise + stopSound( + pitch: PitchClassEnum, + octave: number, + instrument: string, + ): Promise } diff --git a/apps/web/src/domain/valueObjects/Instrument.ts b/apps/web/src/domain/valueObjects/Instrument.ts index 83639ae..586f2b7 100644 --- a/apps/web/src/domain/valueObjects/Instrument.ts +++ b/apps/web/src/domain/valueObjects/Instrument.ts @@ -5,7 +5,7 @@ export interface InstrumentProps { name: InstrumentEnum } -export class Instrument extends ValueObject{ +export class Instrument extends ValueObject { private constructor(props: InstrumentProps) { super(props) } diff --git a/apps/web/src/domain/valueObjects/KeyShape.ts b/apps/web/src/domain/valueObjects/KeyShape.ts index 742906f..bab6c26 100644 --- a/apps/web/src/domain/valueObjects/KeyShape.ts +++ b/apps/web/src/domain/valueObjects/KeyShape.ts @@ -5,7 +5,7 @@ interface KeyShapeProps { value: KeyShapeEnum } -export class KeyShape extends ValueObject{ +export class KeyShape extends ValueObject { private constructor(shape: KeyShapeEnum) { super({ value: shape }) } @@ -17,4 +17,4 @@ export class KeyShape extends ValueObject{ get value() { return this.props.value } -} \ No newline at end of file +} diff --git a/apps/web/src/domain/valueObjects/Keyboard.ts b/apps/web/src/domain/valueObjects/Keyboard.ts index eeaa035..956db3b 100644 --- a/apps/web/src/domain/valueObjects/Keyboard.ts +++ b/apps/web/src/domain/valueObjects/Keyboard.ts @@ -20,9 +20,10 @@ export class Keyboard extends ValueObject { } findKey(pitchClass: string, octave: number): Key | undefined { - return this.props.keys.find((key) => - key.pitch.pitchClass.value === pitchClass - && key.pitch.octave === octave + return this.props.keys.find( + key => + key.pitch.pitchClass.value === pitchClass && + key.pitch.octave === octave, ) } @@ -30,10 +31,19 @@ export class Keyboard extends ValueObject { if (txType === TxTypesEnum.Btc) return this.getRandomWhiteKey(0, Math.floor(this.props.keys.length / 4)) if (txType === TxTypesEnum.Eth) - return this.getRandomWhiteKey(Math.floor(this.props.keys.length / 4), Math.floor(this.props.keys.length / 2)) + return this.getRandomWhiteKey( + Math.floor(this.props.keys.length / 4), + Math.floor(this.props.keys.length / 2), + ) if (txType === TxTypesEnum.Pop) - return this.getRandomWhiteKey(Math.floor(this.props.keys.length / 2), Math.floor(this.props.keys.length * 3 / 4)) - return this.getRandomWhiteKey(Math.floor(this.props.keys.length * 3 / 4), this.props.keys.length) + return this.getRandomWhiteKey( + Math.floor(this.props.keys.length / 2), + Math.floor((this.props.keys.length * 3) / 4), + ) + return this.getRandomWhiteKey( + Math.floor((this.props.keys.length * 3) / 4), + this.props.keys.length, + ) } getRandomKey(min: number, max: number): Key { @@ -43,7 +53,9 @@ export class Keyboard extends ValueObject { getRandomWhiteKey(min: number, max: number): Key { const keysInTheRange = this.props.keys.slice(min, max) - const whiteKeys = keysInTheRange.filter((key) => key.keyShape.value !== KeyShapeEnum.Black ) + const whiteKeys = keysInTheRange.filter( + key => key.keyShape.value !== KeyShapeEnum.Black, + ) const randomIndex = Math.floor(Math.random() * whiteKeys.length) return whiteKeys[randomIndex] } diff --git a/apps/web/src/domain/valueObjects/Options.ts b/apps/web/src/domain/valueObjects/Options.ts index 4759d96..a5ee7ac 100644 --- a/apps/web/src/domain/valueObjects/Options.ts +++ b/apps/web/src/domain/valueObjects/Options.ts @@ -12,7 +12,7 @@ export interface OptionsJSON { instrument: string } -export class Options extends ValueObject{ +export class Options extends ValueObject { private constructor(props: OptionsProps) { super(props) } @@ -32,14 +32,16 @@ export class Options extends ValueObject{ toJSON(): OptionsJSON { return { muted: this.props.muted, - instrument: this.props.instrument.name + instrument: this.props.instrument.name, } } static fromJSON(json: OptionsJSON) { return Options.create({ muted: json.muted, - instrument: Instrument.create({ name: json.instrument as InstrumentEnum}) + instrument: Instrument.create({ + name: json.instrument as InstrumentEnum, + }), }) } } diff --git a/apps/web/src/domain/valueObjects/Pitch.ts b/apps/web/src/domain/valueObjects/Pitch.ts index 1d03500..e56526f 100644 --- a/apps/web/src/domain/valueObjects/Pitch.ts +++ b/apps/web/src/domain/valueObjects/Pitch.ts @@ -27,7 +27,8 @@ export class Pitch extends ValueObject { const nextClass = this.props.pitchClass.next return Pitch.create({ pitchClass: nextClass, - octave: nextClass.value === 'C' ? this.props.octave + 1 : this.props.octave + octave: + nextClass.value === 'C' ? this.props.octave + 1 : this.props.octave, }) } @@ -35,39 +36,51 @@ export class Pitch extends ValueObject { const previousClass = this.props.pitchClass.previous return Pitch.create({ pitchClass: previousClass, - octave: previousClass.value === 'B' ? this.props.octave - 1 : this.props.octave + octave: + previousClass.value === 'B' ? this.props.octave - 1 : this.props.octave, }) } isBefore(pitch: Pitch) { - return this.props.octave < pitch.octave || (this.props.octave === pitch.octave && this.props.pitchClass.value < pitch.pitchClass.value) + return ( + this.props.octave < pitch.octave || + (this.props.octave === pitch.octave && + this.props.pitchClass.value < pitch.pitchClass.value) + ) } isAfter(pitch: Pitch) { - return this.props.octave > pitch.octave || (this.props.octave === pitch.octave && this.props.pitchClass.value > pitch.pitchClass.value) + return ( + this.props.octave > pitch.octave || + (this.props.octave === pitch.octave && + this.props.pitchClass.value > pitch.pitchClass.value) + ) } equals(pitch: Pitch) { - return this.props.octave === pitch.octave && this.props.pitchClass.value === pitch.pitchClass.value + return ( + this.props.octave === pitch.octave && + this.props.pitchClass.value === pitch.pitchClass.value + ) } toString() { return `${this.props.pitchClass.value}${this.props.octave}` - } - - static random(min: Pitch, max: Pitch) { + } + + static random(min: Pitch, max: Pitch) { const range = Pitch.range(min, max) return range[Math.floor(Math.random() * range.length)] } static range(min: Pitch, max: Pitch): Pitch[] { - if(min.isAfter(max)) { + if (min.isAfter(max)) { throw new Error('Min pitch must be before max pitch') } - - const possibleValues:Pitch[] = [] + + const possibleValues: Pitch[] = [] let current = min - while(!current.isAfter(max)) { + while (!current.isAfter(max)) { possibleValues.push(current) current = current.next } diff --git a/apps/web/src/domain/valueObjects/PitchClass.spec.ts b/apps/web/src/domain/valueObjects/PitchClass.spec.ts index b185194..d2b3b3d 100644 --- a/apps/web/src/domain/valueObjects/PitchClass.spec.ts +++ b/apps/web/src/domain/valueObjects/PitchClass.spec.ts @@ -18,4 +18,4 @@ describe('src/domain/valueObjects/PitchClass', () => { PitchClass.create('Z' as PitchClassEnum) }).toThrow(InvalidPitchClassError) }) -}) \ No newline at end of file +}) diff --git a/apps/web/src/domain/valueObjects/PitchClass.ts b/apps/web/src/domain/valueObjects/PitchClass.ts index 23e4fd1..b67caa1 100644 --- a/apps/web/src/domain/valueObjects/PitchClass.ts +++ b/apps/web/src/domain/valueObjects/PitchClass.ts @@ -27,12 +27,18 @@ export class PitchClass extends ValueObject { } get next() { - const nextIndex = (Object.values(PitchClassEnum).indexOf(this.props.value) + 1) % Object.values(PitchClassEnum).length + const nextIndex = + (Object.values(PitchClassEnum).indexOf(this.props.value) + 1) % + Object.values(PitchClassEnum).length return PitchClass.create(Object.values(PitchClassEnum)[nextIndex]) } get previous() { - const previousIndex = (Object.values(PitchClassEnum).indexOf(this.props.value) - 1 + Object.values(PitchClassEnum).length) % Object.values(PitchClassEnum).length + const previousIndex = + (Object.values(PitchClassEnum).indexOf(this.props.value) - + 1 + + Object.values(PitchClassEnum).length) % + Object.values(PitchClassEnum).length return PitchClass.create(Object.values(PitchClassEnum)[previousIndex]) } } diff --git a/apps/web/src/domain/valueObjects/TransactionColor.spec.ts b/apps/web/src/domain/valueObjects/TransactionColor.spec.ts index 8dcd138..939f8f1 100644 --- a/apps/web/src/domain/valueObjects/TransactionColor.spec.ts +++ b/apps/web/src/domain/valueObjects/TransactionColor.spec.ts @@ -22,5 +22,4 @@ describe('src/domain/valueObjects/CubeColor', () => { expect(color.value).toBeDefined() }) }) - -}) \ No newline at end of file +}) diff --git a/apps/web/src/domain/valueObjects/UnitInterval.ts b/apps/web/src/domain/valueObjects/UnitInterval.ts index 46d67ec..a81e44e 100644 --- a/apps/web/src/domain/valueObjects/UnitInterval.ts +++ b/apps/web/src/domain/valueObjects/UnitInterval.ts @@ -1,7 +1,6 @@ import { ValueObject } from '@cryptochords/shared' import { InvalidUnitIntervalError } from '../errors/InvalidUnitIntervalError' - interface UnitIntevalProps { value: number } @@ -12,9 +11,7 @@ export class UnitInterval extends ValueObject { } static create(value: number) { - if (typeof value !== 'number' || - value < 0 || - value > 1) { + if (typeof value !== 'number' || value < 0 || value > 1) { throw new InvalidUnitIntervalError() } @@ -33,7 +30,9 @@ export class UnitInterval extends ValueObject { const minSanitized = Math.max(0, min) const maxSanitized = Math.min(1, max) - return this.create(Math.random() * (maxSanitized - minSanitized) + minSanitized) + return this.create( + Math.random() * (maxSanitized - minSanitized) + minSanitized, + ) } increment(value: number) { diff --git a/apps/web/src/domain/valueObjects/UnitIntervalRange.ts b/apps/web/src/domain/valueObjects/UnitIntervalRange.ts index 1d18d9b..42fa9f5 100644 --- a/apps/web/src/domain/valueObjects/UnitIntervalRange.ts +++ b/apps/web/src/domain/valueObjects/UnitIntervalRange.ts @@ -1,9 +1,8 @@ import { ValueObject } from '@cryptochords/shared' import { UnitInterval } from './UnitInterval' - interface UnitIntevalRangeProps { - min: UnitInterval, + min: UnitInterval max: UnitInterval } @@ -13,7 +12,10 @@ export class UnitIntervalRange extends ValueObject { } static create(min: number, max: number) { - return new UnitIntervalRange(UnitInterval.create(min), UnitInterval.create(max)) + return new UnitIntervalRange( + UnitInterval.create(min), + UnitInterval.create(max), + ) } get min() { @@ -23,5 +25,4 @@ export class UnitIntervalRange extends ValueObject { get max() { return this.props.max.value } - } diff --git a/apps/web/src/infrastructure/repositories/LimitedInMemoryTransactionRepository.ts b/apps/web/src/infrastructure/repositories/LimitedInMemoryTransactionRepository.ts index 894334f..b0b1bb4 100644 --- a/apps/web/src/infrastructure/repositories/LimitedInMemoryTransactionRepository.ts +++ b/apps/web/src/infrastructure/repositories/LimitedInMemoryTransactionRepository.ts @@ -1,7 +1,9 @@ import { Transaction } from '../../domain/entities/Transaction' import { TransactionRepository } from '../../domain/repositories/TransactionRepository' -export class LimitedInMemoryTransactionRepository implements TransactionRepository { +export class LimitedInMemoryTransactionRepository + implements TransactionRepository +{ private transactions: Transaction[] = [] constructor(private max = 99) { @@ -26,4 +28,4 @@ export class LimitedInMemoryTransactionRepository implements TransactionReposito async clear(): Promise { this.transactions = [] } -} \ No newline at end of file +} diff --git a/apps/web/src/infrastructure/repositories/LocalStorageOptionsRepository.ts b/apps/web/src/infrastructure/repositories/LocalStorageOptionsRepository.ts index f090a2d..e69d739 100644 --- a/apps/web/src/infrastructure/repositories/LocalStorageOptionsRepository.ts +++ b/apps/web/src/infrastructure/repositories/LocalStorageOptionsRepository.ts @@ -16,7 +16,7 @@ export class LocalStorageOptionsRepository implements OptionsRepository { return Options.create({ muted: true, - instrument: Instrument.create({ name: InstrumentEnum.Piano }) + instrument: Instrument.create({ name: InstrumentEnum.Piano }), }) } } diff --git a/apps/web/src/infrastructure/repositories/StaticNetworksRepository.ts b/apps/web/src/infrastructure/repositories/StaticNetworksRepository.ts index 0622d30..00eb899 100644 --- a/apps/web/src/infrastructure/repositories/StaticNetworksRepository.ts +++ b/apps/web/src/infrastructure/repositories/StaticNetworksRepository.ts @@ -3,23 +3,19 @@ import { NetworkRepository } from '../../domain/repositories/NetworkRepository' import { Network } from '../../domain/entities/Network' export class StaticNetworksRepository implements NetworkRepository { - private readonly testnet = Network.create({ name: NetworkEnum.TESTNET, explorerUrl: HemiTestnet.blockExplorers.default.url, - wsUrl: StaticNetworksRepository.buildWebserviceUrl(NetworkEnum.TESTNET) + wsUrl: StaticNetworksRepository.buildWebserviceUrl(NetworkEnum.TESTNET), }) private readonly mainnet = Network.create({ name: NetworkEnum.MAINNET, explorerUrl: HemiMainnet.blockExplorers.default.url, - wsUrl: StaticNetworksRepository.buildWebserviceUrl(NetworkEnum.MAINNET) + wsUrl: StaticNetworksRepository.buildWebserviceUrl(NetworkEnum.MAINNET), }) - private networks = [ - this.mainnet, - this.testnet - ] + private networks = [this.mainnet, this.testnet] private selectedNetwork: Network = this.testnet @@ -28,9 +24,8 @@ export class StaticNetworksRepository implements NetworkRepository { } async find(name: NetworkEnum) { - if(!name) - return undefined - + if (!name) return undefined + return this.networks.find(network => network.name === name) } @@ -53,8 +48,7 @@ export class StaticNetworksRepository implements NetworkRepository { async select(name: NetworkEnum) { const network = await this.find(name) - if(!network) - throw new Error('Network not found') + if (!network) throw new Error('Network not found') this.selectedNetwork = network } @@ -62,4 +56,4 @@ export class StaticNetworksRepository implements NetworkRepository { async getSelected() { return this.selectedNetwork } -} \ No newline at end of file +} diff --git a/apps/web/src/infrastructure/services/ToneJs.ts b/apps/web/src/infrastructure/services/ToneJs.ts index f7a4db1..94aa902 100644 --- a/apps/web/src/infrastructure/services/ToneJs.ts +++ b/apps/web/src/infrastructure/services/ToneJs.ts @@ -1,4 +1,7 @@ -import { Instrument, InstrumentOptions } from 'tone/build/esm/instrument/Instrument' +import { + Instrument, + InstrumentOptions, +} from 'tone/build/esm/instrument/Instrument' import InstrumentBassElectricMp3 from 'tonejs-instrument-bass-electric-mp3' import InstrumentBassoonMp3 from 'tonejs-instrument-bassoon-mp3' import InstrumentClarinetMp3 from 'tonejs-instrument-clarinet-mp3' @@ -22,11 +25,12 @@ import InstrumentXylophoneMp3 from 'tonejs-instrument-xylophone-mp3' import { InstrumentEnum } from '../../domain/enum/InstrumentEnum' import { SoundService } from '../../domain/services/SoundService' - export class ToneJS implements SoundService { static instruments: Map> = new Map() - static async getInstrument(instrumentId: string): Promise> { + static async getInstrument( + instrumentId: string, + ): Promise> { let instrument = ToneJS.instruments.get(instrumentId) if (instrument) { return instrument @@ -34,38 +38,58 @@ export class ToneJS implements SoundService { const InstrumentClass = ToneJS.getInstrumentClass(instrumentId) - return new Promise>((resolve) => { + return new Promise>(resolve => { instrument = new InstrumentClass({ onload: () => { ToneJS.instruments.set(instrumentId, instrument!) resolve(ToneJS.getInstrument(instrumentId)) - } + }, }).toDestination() }) } static getInstrumentClass(instrumentId: string) { switch (instrumentId) { - case InstrumentEnum.BassElectric: return InstrumentBassElectricMp3 - case InstrumentEnum.Bassoon: return InstrumentBassoonMp3 - case InstrumentEnum.Clarinet: return InstrumentClarinetMp3 - case InstrumentEnum.Contrabass: return InstrumentContrabassMp3 - case InstrumentEnum.Flute: return InstrumentFluteMp3 - case InstrumentEnum.FrenchHorn: return InstrumentFrenchHornMp3 - case InstrumentEnum.GuitarAcoustic: return InstrumentGuitarAcousticMp3 - case InstrumentEnum.GuitarElectric: return InstrumentGuitarElectricMp3 - case InstrumentEnum.GuitarNylon: return InstrumentGuitarNylonMp3 - case InstrumentEnum.Harmonium: return InstrumentHarmoniumMp3 - case InstrumentEnum.Harp: return InstrumentHarpMp3 - case InstrumentEnum.Organ: return InstrumentOrganMp3 - case InstrumentEnum.Piano: return InstrumentPianoMp3 - case InstrumentEnum.Saxophone: return InstrumentSaxophoneMp3 - case InstrumentEnum.Trombone: return InstrumentTromboneMp3 - case InstrumentEnum.Trumpet: return InstrumentTrumpetMp3 - case InstrumentEnum.Tuba: return InstrumentTubaMp3 - case InstrumentEnum.Violin: return InstrumentViolinMp3 - case InstrumentEnum.Xylophone: return InstrumentXylophoneMp3 - default: throw new Error(`Instrument ${instrumentId} not found`) + case InstrumentEnum.BassElectric: + return InstrumentBassElectricMp3 + case InstrumentEnum.Bassoon: + return InstrumentBassoonMp3 + case InstrumentEnum.Clarinet: + return InstrumentClarinetMp3 + case InstrumentEnum.Contrabass: + return InstrumentContrabassMp3 + case InstrumentEnum.Flute: + return InstrumentFluteMp3 + case InstrumentEnum.FrenchHorn: + return InstrumentFrenchHornMp3 + case InstrumentEnum.GuitarAcoustic: + return InstrumentGuitarAcousticMp3 + case InstrumentEnum.GuitarElectric: + return InstrumentGuitarElectricMp3 + case InstrumentEnum.GuitarNylon: + return InstrumentGuitarNylonMp3 + case InstrumentEnum.Harmonium: + return InstrumentHarmoniumMp3 + case InstrumentEnum.Harp: + return InstrumentHarpMp3 + case InstrumentEnum.Organ: + return InstrumentOrganMp3 + case InstrumentEnum.Piano: + return InstrumentPianoMp3 + case InstrumentEnum.Saxophone: + return InstrumentSaxophoneMp3 + case InstrumentEnum.Trombone: + return InstrumentTromboneMp3 + case InstrumentEnum.Trumpet: + return InstrumentTrumpetMp3 + case InstrumentEnum.Tuba: + return InstrumentTubaMp3 + case InstrumentEnum.Violin: + return InstrumentViolinMp3 + case InstrumentEnum.Xylophone: + return InstrumentXylophoneMp3 + default: + throw new Error(`Instrument ${instrumentId} not found`) } } @@ -73,11 +97,21 @@ export class ToneJS implements SoundService { await ToneJS.getInstrument(instrument) } - async playSound(pitch: string, octave: number, instrument: string): Promise { - (await ToneJS.getInstrument(instrument)).triggerAttack(`${pitch}${octave}`) + async playSound( + pitch: string, + octave: number, + instrument: string, + ): Promise { + const instrumentInstance = await ToneJS.getInstrument(instrument) + instrumentInstance.triggerAttack(`${pitch}${octave}`) } - async stopSound(pitch: string, octave: number, instrument: string): Promise { - (await ToneJS.getInstrument(instrument)).triggerRelease(`${pitch}${octave}`) + async stopSound( + pitch: string, + octave: number, + instrument: string, + ): Promise { + const instrumentInstance = await ToneJS.getInstrument(instrument) + instrumentInstance.triggerRelease(`${pitch}${octave}`) } -} \ No newline at end of file +} diff --git a/apps/web/src/presentation/common/base/Presenter.ts b/apps/web/src/presentation/common/base/Presenter.ts index 815dee3..861e44d 100644 --- a/apps/web/src/presentation/common/base/Presenter.ts +++ b/apps/web/src/presentation/common/base/Presenter.ts @@ -1,3 +1,3 @@ import { StateController } from './StateController' -export abstract class Presenter extends StateController {} \ No newline at end of file +export abstract class Presenter extends StateController {} diff --git a/apps/web/src/presentation/common/base/StateController.spec.ts b/apps/web/src/presentation/common/base/StateController.spec.ts index 041e70b..a5d41d5 100644 --- a/apps/web/src/presentation/common/base/StateController.spec.ts +++ b/apps/web/src/presentation/common/base/StateController.spec.ts @@ -55,7 +55,6 @@ describe('src/presentation/common/base/StateController', () => { }) describe('unsubscribe', () => { - it('should unsubscribe subscribers correctly', () => { const subscriber1 = vi.fn() const subscriber2 = vi.fn() diff --git a/apps/web/src/presentation/common/base/StateController.ts b/apps/web/src/presentation/common/base/StateController.ts index 8e0e801..77fbef9 100644 --- a/apps/web/src/presentation/common/base/StateController.ts +++ b/apps/web/src/presentation/common/base/StateController.ts @@ -15,7 +15,7 @@ export abstract class StateController { protected changeState(state: Partial): void { this.setState({ ...this.internalState, - ...state + ...state, }) } @@ -34,7 +34,10 @@ export abstract class StateController { listener(this.state) } - public subscribe(listener: Subscription, sendCurrentStatus = false): void { + public subscribe( + listener: Subscription, + sendCurrentStatus = false, + ): void { this.listeners.push(listener) if (sendCurrentStatus) { this.notifyStateChangeToListener(listener) diff --git a/apps/web/src/presentation/common/context/domainServices.ts b/apps/web/src/presentation/common/context/domainServices.ts index 07e18f9..ff5f28c 100644 --- a/apps/web/src/presentation/common/context/domainServices.ts +++ b/apps/web/src/presentation/common/context/domainServices.ts @@ -6,5 +6,5 @@ export interface DomainServices { } export const domainServices: DomainServices = { - soundService: new ToneJS() + soundService: new ToneJS(), } diff --git a/apps/web/src/presentation/common/context/presenters.ts b/apps/web/src/presentation/common/context/presenters.ts index 5432c2b..4bc1c0b 100644 --- a/apps/web/src/presentation/common/context/presenters.ts +++ b/apps/web/src/presentation/common/context/presenters.ts @@ -16,45 +16,38 @@ export interface Presenters { const cubesPresenter = new CubesPresenter( services.getCubes, - services.recalculateCubePosition + services.recalculateCubePosition, ) const appPresenter = new AppPresenter( services.createTransaction, services.switchNetwork, services.getSelectedNetwork, - services.listNetworks + services.listNetworks, ) const keyboardPresenter = new KeyboardPresenter( services.createKeyboard, services.getKeyboard, - new ObservableSet( - services.pressKey, - services.releaseKey - ) + new ObservableSet(services.pressKey, services.releaseKey), ) const transactionsPresenter = new TransactionsPresenter( services.listTransactions, - new ObservableSet( - services.createTransaction, - services.switchNetwork - ) + new ObservableSet(services.createTransaction, services.switchNetwork), ) const optionsPresenter = new OptionsPresenter( services.getOptions, services.setMuted, services.setInstrument, - services.loadInstrument + services.loadInstrument, ) - export const presenters: Presenters = { cubesPresenter, appPresenter, keyboardPresenter, transactionsPresenter, - optionsPresenter + optionsPresenter, } diff --git a/apps/web/src/presentation/common/context/repositories.ts b/apps/web/src/presentation/common/context/repositories.ts index b5b00d3..2b07703 100644 --- a/apps/web/src/presentation/common/context/repositories.ts +++ b/apps/web/src/presentation/common/context/repositories.ts @@ -11,9 +11,9 @@ import { StaticNetworksRepository } from '../../../infrastructure/repositories/S export interface Repositories { cubeRepository: CubeRepository - transactionRepository: TransactionRepository, - keyboardRepository: KeyboardRepository, - optionsRepository: OptionsRepository, + transactionRepository: TransactionRepository + keyboardRepository: KeyboardRepository + optionsRepository: OptionsRepository networkRepository: NetworkRepository } @@ -22,5 +22,5 @@ export const repositories: Repositories = { transactionRepository: new LimitedInMemoryTransactionRepository(), keyboardRepository: new InMemoryKeyboardRepository(), optionsRepository: new LocalStorageOptionsRepository(), - networkRepository: new StaticNetworksRepository() + networkRepository: new StaticNetworksRepository(), } diff --git a/apps/web/src/presentation/common/context/services.ts b/apps/web/src/presentation/common/context/services.ts index 13c5f6f..b7be09a 100644 --- a/apps/web/src/presentation/common/context/services.ts +++ b/apps/web/src/presentation/common/context/services.ts @@ -33,38 +33,55 @@ export interface Services { setMuted: SetMutedService setInstrument: SetInstrumentService loadInstrument: LoadInstrumentService - switchNetwork: SwitchNetworkService, + switchNetwork: SwitchNetworkService getSelectedNetwork: GetSelectedNetworkService listNetworks: ListNetworksService } const getCubes = new GetCubesService(repositories.cubeRepository) const createCube = new CreateCubeService(repositories.cubeRepository) -const recalculateCubePosition = new RecalculateCubePositionsService(repositories.cubeRepository) -const createKeyboard = new CreateKeyboardService(repositories.keyboardRepository) -const playSound = new PlaySoundService(domainServices.soundService, repositories.optionsRepository) +const recalculateCubePosition = new RecalculateCubePositionsService( + repositories.cubeRepository, +) +const createKeyboard = new CreateKeyboardService( + repositories.keyboardRepository, +) +const playSound = new PlaySoundService( + domainServices.soundService, + repositories.optionsRepository, +) const stopSound = new StopSoundService(domainServices.soundService) const pressKey = new PressKeyService(repositories.keyboardRepository, playSound) -const releaseKey = new ReleaseKeyService(repositories.keyboardRepository, stopSound) +const releaseKey = new ReleaseKeyService( + repositories.keyboardRepository, + stopSound, +) const createTransaction = new CreateTransactionService( repositories.keyboardRepository, repositories.transactionRepository, createCube, pressKey, releaseKey, - repositories.networkRepository + repositories.networkRepository, +) +const listTransactions = new ListTransactionsService( + repositories.transactionRepository, ) -const listTransactions = new ListTransactionsService(repositories.transactionRepository) const getKeyboard = new GetKeyboardService(repositories.keyboardRepository) const getOptions = new GetOptionsService(repositories.optionsRepository) const setMuted = new SetMutedService(repositories.optionsRepository) const setInstrument = new SetInstrumentService(repositories.optionsRepository) const loadInstrument = new LoadInstrumentService(domainServices.soundService) -const switchNetwork = new SwitchNetworkService(repositories.transactionRepository, repositories.networkRepository, repositories.cubeRepository) -const getSelectedNetwork = new GetSelectedNetworkService(repositories.networkRepository) +const switchNetwork = new SwitchNetworkService( + repositories.transactionRepository, + repositories.networkRepository, + repositories.cubeRepository, +) +const getSelectedNetwork = new GetSelectedNetworkService( + repositories.networkRepository, +) const listNetworks = new ListNetworksService(repositories.networkRepository) - export const services: Services = { createTransaction, getCubes, @@ -81,5 +98,5 @@ export const services: Services = { loadInstrument, switchNetwork, getSelectedNetwork, - listNetworks + listNetworks, } diff --git a/apps/web/src/presentation/common/presenter/app/AppPresenter.ts b/apps/web/src/presentation/common/presenter/app/AppPresenter.ts index b0a30cc..74ab669 100644 --- a/apps/web/src/presentation/common/presenter/app/AppPresenter.ts +++ b/apps/web/src/presentation/common/presenter/app/AppPresenter.ts @@ -42,8 +42,7 @@ export class AppPresenter extends Presenter { private async loadNetworkState() { const { networks } = await this.listNetworks.execute() - if (!networks) - return + if (!networks) return const networkNames = networks.map(network => network.name) const selectedNetwork = await this.getSelectedNetworkService.execute() @@ -51,7 +50,7 @@ export class AppPresenter extends Presenter { this.changeState({ networkNames, selectedNetworkName: selectedNetwork.networkName, - selectedNetworkWsUrl: selectedNetwork.networkWsUrl + selectedNetworkWsUrl: selectedNetwork.networkWsUrl, }) } @@ -69,21 +68,25 @@ export class AppPresenter extends Presenter { async selectNetwork(networkName: string) { const response = await this.switchNetworkService.execute({ - networkName + networkName, }) this.changeState({ selectedNetworkName: response.networkName, - selectedNetworkWsUrl: response.networkWsUrl + selectedNetworkWsUrl: response.networkWsUrl, }) } - async createTransaction(txType: string, address: string, network: string): Promise { + async createTransaction( + txType: string, + address: string, + network: string, + ): Promise { return this.createTransactionService.execute({ txType, address, network, - timestamp: Date.now() + timestamp: Date.now(), }) } } diff --git a/apps/web/src/presentation/common/presenter/app/AppPresenterState.ts b/apps/web/src/presentation/common/presenter/app/AppPresenterState.ts index 1b82589..375b802 100644 --- a/apps/web/src/presentation/common/presenter/app/AppPresenterState.ts +++ b/apps/web/src/presentation/common/presenter/app/AppPresenterState.ts @@ -1,8 +1,7 @@ - export type AppPresenterState = { networkNames: string[] selectedNetworkName: string | null navMenuVisible: boolean selectedNetworkWsUrl: string | null enableMainnet: boolean -} \ No newline at end of file +} diff --git a/apps/web/src/presentation/common/presenter/cubes/CubesPresenter.spec.ts b/apps/web/src/presentation/common/presenter/cubes/CubesPresenter.spec.ts index 98250d2..6da78d4 100644 --- a/apps/web/src/presentation/common/presenter/cubes/CubesPresenter.spec.ts +++ b/apps/web/src/presentation/common/presenter/cubes/CubesPresenter.spec.ts @@ -17,28 +17,32 @@ describe('src/presentation/common/CubesPresenter', () => { let createKeyboardService: CreateKeyboardService let createCubeService: CreateCubeService - const options = { timeToFirstBlock: 100, maxCubeCreationInterval: 10, tickInterval: 5, - cubeStep: 0.001 + cubeStep: 0.001, } - beforeEach(async () => { keyboardRepository = new InMemoryKeyboardRepository() createKeyboardService = new CreateKeyboardService(keyboardRepository) await createKeyboardService.execute({ numberOfKeys: 88, initialPitchClass: 'A', - initialOctave: 1 + initialOctave: 1, }) cubeRepository = new InMemoryCubeRepository() getCubesService = new GetCubesService(cubeRepository) - recalculateCubePositionsService = new RecalculateCubePositionsService(cubeRepository) + recalculateCubePositionsService = new RecalculateCubePositionsService( + cubeRepository, + ) createCubeService = new CreateCubeService(cubeRepository) - presenter = new CubesPresenter(getCubesService, recalculateCubePositionsService, options) + presenter = new CubesPresenter( + getCubesService, + recalculateCubePositionsService, + options, + ) await createCubeService.execute({ color: 'blue', x: 0.5 }) }) @@ -55,11 +59,15 @@ describe('src/presentation/common/CubesPresenter', () => { it('should stop creating cubes when stopped', async () => { presenter.run() - await new Promise(resolve => setTimeout(resolve, options.maxCubeCreationInterval)) + await new Promise(resolve => + setTimeout(resolve, options.maxCubeCreationInterval), + ) presenter.stop() const cubes = await cubeRepository.list() const cubesCount = cubes.length - await new Promise(resolve => setTimeout(resolve, options.maxCubeCreationInterval)) + await new Promise(resolve => + setTimeout(resolve, options.maxCubeCreationInterval), + ) expect(cubes.length).toBe(cubesCount) }) diff --git a/apps/web/src/presentation/common/presenter/cubes/CubesPresenter.ts b/apps/web/src/presentation/common/presenter/cubes/CubesPresenter.ts index 7b8f4b3..62bb8ca 100644 --- a/apps/web/src/presentation/common/presenter/cubes/CubesPresenter.ts +++ b/apps/web/src/presentation/common/presenter/cubes/CubesPresenter.ts @@ -16,31 +16,28 @@ interface CubesPresenterOptions { const defaultOptions: CubesPresenterOptions = { maxCubeCreationInterval: 300, tickInterval: 20, - maxCubeAge: 17_000 + maxCubeAge: 17_000, } export class CubesPresenter extends Presenter { - private readonly getCubesService: GetCubesService private readonly recalculateCubePositions: RecalculateCubePositionsService - private options: CubesPresenterOptions private tickLoop: NodeJS.Timeout | undefined - constructor( getCubesService: GetCubesService, recalculateCubePositions: RecalculateCubePositionsService, - options?: Partial + options?: Partial, ) { super(initalState) this.getCubesService = getCubesService this.recalculateCubePositions = recalculateCubePositions this.options = { ...defaultOptions, - ...options + ...options, } this.run() @@ -77,14 +74,14 @@ export class CubesPresenter extends Presenter { private async moveAllCubesUp() { await this.recalculateCubePositions.execute({ - maxAge: this.options.maxCubeAge + maxAge: this.options.maxCubeAge, }) } private async syncState() { const getCubesResponse = await this.getCubesService.execute() this.changeState({ - cubes: getCubesResponse.cubes + cubes: getCubesResponse.cubes, }) } } diff --git a/apps/web/src/presentation/common/presenter/cubes/CubesPresenterState.ts b/apps/web/src/presentation/common/presenter/cubes/CubesPresenterState.ts index ce796cc..f40c4f3 100644 --- a/apps/web/src/presentation/common/presenter/cubes/CubesPresenterState.ts +++ b/apps/web/src/presentation/common/presenter/cubes/CubesPresenterState.ts @@ -1,4 +1,3 @@ - export type CubesPresenterState = { cubes: { id: string diff --git a/apps/web/src/presentation/common/presenter/keyboard/KeyboardPresenter.spec.ts b/apps/web/src/presentation/common/presenter/keyboard/KeyboardPresenter.spec.ts index 012acd7..480474b 100644 --- a/apps/web/src/presentation/common/presenter/keyboard/KeyboardPresenter.spec.ts +++ b/apps/web/src/presentation/common/presenter/keyboard/KeyboardPresenter.spec.ts @@ -9,10 +9,13 @@ const createKeyboardService = new CreateKeyboardService(keyboardRepository) await createKeyboardService.execute({ numberOfKeys: 88, initialPitchClass: 'A', - initialOctave: 1 + initialOctave: 1, }) const getKeyboardService = new GetKeyboardService(keyboardRepository) -const keyboardPresenter = new KeyboardPresenter(createKeyboardService, getKeyboardService) +const keyboardPresenter = new KeyboardPresenter( + createKeyboardService, + getKeyboardService, +) describe('src/presentation/common/presenter/keyboard/KeyboardPresenter', () => { it('should be defined', () => { @@ -22,5 +25,4 @@ describe('src/presentation/common/presenter/keyboard/KeyboardPresenter', () => { it('should have 88 keys', () => { expect(keyboardPresenter.state.keys.length).toBe(88) }) - -}) \ No newline at end of file +}) diff --git a/apps/web/src/presentation/common/presenter/keyboard/KeyboardPresenter.ts b/apps/web/src/presentation/common/presenter/keyboard/KeyboardPresenter.ts index 9da55da..cf5af31 100644 --- a/apps/web/src/presentation/common/presenter/keyboard/KeyboardPresenter.ts +++ b/apps/web/src/presentation/common/presenter/keyboard/KeyboardPresenter.ts @@ -5,7 +5,7 @@ import { Presenter } from '../../base/Presenter' import { KeyboardPresenterState } from './KeyboardPresenterState' const initalState: KeyboardPresenterState = { - keys: [] + keys: [], } interface KeyboardPresenterOptions { @@ -17,11 +17,10 @@ interface KeyboardPresenterOptions { const defaultOptions: KeyboardPresenterOptions = { numberOfKeys: 88, initialPitchClass: 'A', - initialOctave: 0 + initialOctave: 0, } export class KeyboardPresenter extends Presenter { - private options: KeyboardPresenterOptions private createKeyboardService: CreateKeyboardService private getKeyboardService: GetKeyboardService @@ -30,7 +29,7 @@ export class KeyboardPresenter extends Presenter { createKeyboardService: CreateKeyboardService, getKeyboardService: GetKeyboardService, keyboardChangesObserver?: Observable, - options?: Partial + options?: Partial, ) { super(initalState) @@ -39,13 +38,13 @@ export class KeyboardPresenter extends Presenter { this.options = { ...defaultOptions, - ...options + ...options, } this.createKeyboard() this.refresh() - if(keyboardChangesObserver) { + if (keyboardChangesObserver) { keyboardChangesObserver.listen(this.refresh.bind(this)) } } @@ -61,12 +60,12 @@ export class KeyboardPresenter extends Presenter { keys: keyboard.keys.map(key => ({ pitch: { class: key.pitch.class, - octave: key.pitch.octave + octave: key.pitch.octave, }, keyShape: key.keyShape, x: key.x, - color: key.pressed ? key.color : undefined - })) + color: key.pressed ? key.color : undefined, + })), }) } @@ -74,8 +73,7 @@ export class KeyboardPresenter extends Presenter { await this.createKeyboardService.execute({ numberOfKeys: this.options.numberOfKeys, initialPitchClass: this.options.initialPitchClass, - initialOctave: this.options.initialOctave + initialOctave: this.options.initialOctave, }) } - } diff --git a/apps/web/src/presentation/common/presenter/options/OptionsPresenter.ts b/apps/web/src/presentation/common/presenter/options/OptionsPresenter.ts index b91f01d..0530d2a 100644 --- a/apps/web/src/presentation/common/presenter/options/OptionsPresenter.ts +++ b/apps/web/src/presentation/common/presenter/options/OptionsPresenter.ts @@ -2,27 +2,29 @@ import { GetOptionsService } from '../../../../application/services/GetOptions/G import { LoadInstrumentService } from '../../../../application/services/LoadInstrument/LoadInstrumentService' import { SetInstrumentService } from '../../../../application/services/SetInstrument/SetInstrumentService' import { SetMutedService } from '../../../../application/services/SetMuted/SetMutedService' -import { InstrumentEnum, instrumentLabels } from '../../../../domain/enum/InstrumentEnum' +import { + InstrumentEnum, + instrumentLabels, +} from '../../../../domain/enum/InstrumentEnum' import { Presenter } from '../../base/Presenter' import { OptionsPresenterState } from './OptionsPresenterState' -const instruments: { label: string, value: string }[] = Object.values(InstrumentEnum).map( - (instrument) => ({ - label: instrumentLabels.get(instrument) ?? instrument, - value: instrument - }) -) +const instruments: { label: string; value: string }[] = Object.values( + InstrumentEnum, +).map(instrument => ({ + label: instrumentLabels.get(instrument) ?? instrument, + value: instrument, +})) const initalState: OptionsPresenterState = { muted: true, selectedInstrument: '', instruments, displayLoadingMessage: false, - displayInstrumentPicker: false + displayInstrumentPicker: false, } export class OptionsPresenter extends Presenter { - private getOptionsService: GetOptionsService private setMutedService: SetMutedService private setInstrumentService: SetInstrumentService @@ -32,7 +34,7 @@ export class OptionsPresenter extends Presenter { getOptionsService: GetOptionsService, setMutedService: SetMutedService, setInstrumentService: SetInstrumentService, - loadInstrumentService: LoadInstrumentService + loadInstrumentService: LoadInstrumentService, ) { super(initalState) @@ -51,11 +53,10 @@ export class OptionsPresenter extends Presenter { selectedInstrument: options.instrument, instruments, displayLoadingMessage: false, - displayInstrumentPicker: true + displayInstrumentPicker: true, }) } - async setMuted(muted: boolean) { if (!muted) { await this.loadInstrument(this.state.selectedInstrument) @@ -71,8 +72,14 @@ export class OptionsPresenter extends Presenter { } private async loadInstrument(instrument: string) { - this.changeState({ displayLoadingMessage: true, displayInstrumentPicker: false }) + this.changeState({ + displayLoadingMessage: true, + displayInstrumentPicker: false, + }) await this.loadInstrumentService.execute({ instrument }) - this.changeState({ displayLoadingMessage: false, displayInstrumentPicker: true }) + this.changeState({ + displayLoadingMessage: false, + displayInstrumentPicker: true, + }) } } diff --git a/apps/web/src/presentation/common/presenter/transactions/TransactionsPresenter.ts b/apps/web/src/presentation/common/presenter/transactions/TransactionsPresenter.ts index 278d31f..7368164 100644 --- a/apps/web/src/presentation/common/presenter/transactions/TransactionsPresenter.ts +++ b/apps/web/src/presentation/common/presenter/transactions/TransactionsPresenter.ts @@ -11,36 +11,38 @@ const titleMap: Map = new Map([ [TxTypesEnum.Block, 'New Block'], [TxTypesEnum.Eth, 'ETH'], [TxTypesEnum.Pop, 'PoP'], - [TxTypesEnum.Btc, 'BTC'] + [TxTypesEnum.Btc, 'BTC'], ]) const rgbMap: Map = new Map([ [TxTypesEnum.Block, '#10FF2A'], [TxTypesEnum.Eth, '#00D3FF'], [TxTypesEnum.Pop, '#DC53FF'], - [TxTypesEnum.Btc, '#FFB200'] + [TxTypesEnum.Btc, '#FFB200'], ]) const messageMap: Map = new Map([ [TxTypesEnum.Block, 'created by'], [TxTypesEnum.Eth, 'transaction by'], [TxTypesEnum.Pop, 'transaction by'], - [TxTypesEnum.Btc, 'transaction by'] + [TxTypesEnum.Btc, 'transaction by'], ]) export class TransactionsPresenter extends Presenter { - private listTransactions: ListTransactionsService - constructor(listTransactions: ListTransactionsService, transactionsChangeObserver?: Observable) { + constructor( + listTransactions: ListTransactionsService, + transactionsChangeObserver?: Observable, + ) { super(initalState) this.listTransactions = listTransactions - if(transactionsChangeObserver) { + if (transactionsChangeObserver) { transactionsChangeObserver.listen(this.refresh.bind(this)) } } - async refresh() { + async refresh() { const response = await this.listTransactions.execute() this.changeState({ transactions: response.transactions.map(transaction => ({ @@ -49,8 +51,8 @@ export class TransactionsPresenter extends Presenter message: messageMap.get(transaction.txType as TxTypesEnum) ?? ' ', id: transaction.address, at: this.formatDate(transaction.timestamp), - url: transaction.url - })) + url: transaction.url, + })), }) } @@ -62,7 +64,7 @@ export class TransactionsPresenter extends Presenter hour: 'numeric', minute: 'numeric', second: 'numeric', - hour12: true + hour12: true, }) return formattedDate.replace(/,/g, '') diff --git a/apps/web/src/presentation/common/presenter/transactions/TransactionsPresenterState.ts b/apps/web/src/presentation/common/presenter/transactions/TransactionsPresenterState.ts index b07f631..689604f 100644 --- a/apps/web/src/presentation/common/presenter/transactions/TransactionsPresenterState.ts +++ b/apps/web/src/presentation/common/presenter/transactions/TransactionsPresenterState.ts @@ -1,4 +1,3 @@ - export type TransactionsPresenterState = { transactions: { type: string diff --git a/apps/web/src/presentation/react/App.tsx b/apps/web/src/presentation/react/App.tsx index f0eb8ea..b47cc00 100644 --- a/apps/web/src/presentation/react/App.tsx +++ b/apps/web/src/presentation/react/App.tsx @@ -10,26 +10,26 @@ import { usePresenter } from './hooks/usePresenter' function App() { const { appPresenter } = useContext(presenters) - const { - navMenuVisible, - } = usePresenter(appPresenter) + const { navMenuVisible } = usePresenter( + appPresenter, + ) return ( <> - appPresenter.navButtonClicked()} - networks={appPresenter.state.networkNames} - selectedNetwork={appPresenter.state.selectedNetworkName} - selectNetwork={(networkName) => appPresenter.selectNetwork(networkName)} + appPresenter.navButtonClicked()} + networks={appPresenter.state.networkNames} + selectedNetwork={appPresenter.state.selectedNetworkName} + selectNetwork={networkName => appPresenter.selectNetwork(networkName)} enableMainnet={appPresenter.state.enableMainnet} /> - appPresenter.closeButtonClicked()} - className={`${navMenuVisible ? '' : 'hidden'} md:hidden`} - networks={appPresenter.state.networkNames} - selectedNetwork={appPresenter.state.selectedNetworkName} - selectNetwork={(networkName) => appPresenter.selectNetwork(networkName)} + appPresenter.closeButtonClicked()} + className={`${navMenuVisible ? '' : 'hidden'} md:hidden`} + networks={appPresenter.state.networkNames} + selectedNetwork={appPresenter.state.selectedNetworkName} + selectNetwork={networkName => appPresenter.selectNetwork(networkName)} enableMainnet={appPresenter.state.enableMainnet} /> diff --git a/apps/web/src/presentation/react/components/Card.tsx b/apps/web/src/presentation/react/components/Card.tsx index 0cdded2..e1d0439 100644 --- a/apps/web/src/presentation/react/components/Card.tsx +++ b/apps/web/src/presentation/react/components/Card.tsx @@ -3,7 +3,9 @@ export const Card = function (props: { children?: React.ReactNode }) { return ( - + {props.children} ) diff --git a/apps/web/src/presentation/react/components/Checkbox.tsx b/apps/web/src/presentation/react/components/Checkbox.tsx index 652fb9f..3e02815 100644 --- a/apps/web/src/presentation/react/components/Checkbox.tsx +++ b/apps/web/src/presentation/react/components/Checkbox.tsx @@ -5,10 +5,15 @@ export const Checkbox = function (props: { }) { return ( <> - {}}/> + {}} + /> - > + `} + > + > ) } diff --git a/apps/web/src/presentation/react/components/Cube.tsx b/apps/web/src/presentation/react/components/Cube.tsx index d0ebf91..12a16d2 100644 --- a/apps/web/src/presentation/react/components/Cube.tsx +++ b/apps/web/src/presentation/react/components/Cube.tsx @@ -6,7 +6,8 @@ export const Cube = function (props: { mirrored?: boolean }) { return ( - (cubesPresenter) + const { cubes } = usePresenter( + cubesPresenter, + ) return ( - {cubes - .map((cube) => { - return ( - - ) - })} + {cubes.map(cube => { + return ( + + ) + })} ) } diff --git a/apps/web/src/presentation/react/components/Header.tsx b/apps/web/src/presentation/react/components/Header.tsx index 7c7a001..b835936 100644 --- a/apps/web/src/presentation/react/components/Header.tsx +++ b/apps/web/src/presentation/react/components/Header.tsx @@ -1,16 +1,16 @@ -import { JoinCommunityButton } from './JoinCommunityButton'; -import { Logo } from './Logo'; -import { NavButton } from './NavButton'; -import { NavItems } from './NavItems'; -import { NetworkSwitch } from './NetworkSwitch'; +import { JoinCommunityButton } from './JoinCommunityButton' +import { Logo } from './Logo' +import { NavButton } from './NavButton' +import { NavItems } from './NavItems' +import { NetworkSwitch } from './NetworkSwitch' export const Header = (props: { - className?: string; - onNavButtonClick?: () => void; - networks: string[]; - selectedNetwork: string | null; - selectNetwork: (networkName: string) => void; - enableMainnet: boolean; + className?: string + onNavButtonClick?: () => void + networks: string[] + selectedNetwork: string | null + selectNetwork: (networkName: string) => void + enableMainnet: boolean }) => { return ( - ); -}; \ No newline at end of file + ) +} diff --git a/apps/web/src/presentation/react/components/JoinCommunityButton.tsx b/apps/web/src/presentation/react/components/JoinCommunityButton.tsx index f93ab02..1d61ed8 100644 --- a/apps/web/src/presentation/react/components/JoinCommunityButton.tsx +++ b/apps/web/src/presentation/react/components/JoinCommunityButton.tsx @@ -1,6 +1,4 @@ -export const JoinCommunityButton = (props: { - className?: string -}) => { +export const JoinCommunityButton = (props: { className?: string }) => { return ( Join Community + target="_blank" + > + Join Community + ) } diff --git a/apps/web/src/presentation/react/components/Key.tsx b/apps/web/src/presentation/react/components/Key.tsx index b1d0329..c85ef5f 100644 --- a/apps/web/src/presentation/react/components/Key.tsx +++ b/apps/web/src/presentation/react/components/Key.tsx @@ -4,7 +4,7 @@ export interface KeyProps { index: number color?: string } -export const Key = function ({ keyShape, x, index, color}: KeyProps) { +export const Key = function ({ keyShape, x, index, color }: KeyProps) { const isBlack = keyShape === 'black' const zIndex = isBlack ? 1 : 0 const left = `${x * 100}%` @@ -13,11 +13,12 @@ export const Key = function ({ keyShape, x, index, color}: KeyProps) { return ( (keyboardPresenter) + const { keys } = usePresenter( + keyboardPresenter, + ) return ( - - { - keys.map( - ({ keyShape, x, color, pitch }, index) => - - ) - } + + {keys.map(({ keyShape, x, color, pitch }, index) => ( + + ))} ) diff --git a/apps/web/src/presentation/react/components/Logo.tsx b/apps/web/src/presentation/react/components/Logo.tsx index 0594daf..3f2ee41 100644 --- a/apps/web/src/presentation/react/components/Logo.tsx +++ b/apps/web/src/presentation/react/components/Logo.tsx @@ -3,13 +3,14 @@ import logo from '/image/crypto-chords.svg' export const Logo = function () { const url = import.meta.env.VITE_LOGO_URL return ( - + `} + > ) diff --git a/apps/web/src/presentation/react/components/MainContent.tsx b/apps/web/src/presentation/react/components/MainContent.tsx index deb5669..8297db1 100644 --- a/apps/web/src/presentation/react/components/MainContent.tsx +++ b/apps/web/src/presentation/react/components/MainContent.tsx @@ -14,25 +14,33 @@ const CUBES_Y_MULTIPLIER = 2 // to hide the creation of the cubes avoiding a visual glitch const CUBES_BOTTOM_OFFSET = 0.15 -export function MainContent(props: { - className: string -}) { +export function MainContent(props: { className: string }) { return ( - - - - - - - + + + + + + + - + - + ) diff --git a/apps/web/src/presentation/react/components/NavButton.tsx b/apps/web/src/presentation/react/components/NavButton.tsx index bc1c067..8f0d149 100644 --- a/apps/web/src/presentation/react/components/NavButton.tsx +++ b/apps/web/src/presentation/react/components/NavButton.tsx @@ -4,6 +4,10 @@ export const NavButton = function (props: { onClick?: () => void }) { return ( - + ) } diff --git a/apps/web/src/presentation/react/components/NavItem.tsx b/apps/web/src/presentation/react/components/NavItem.tsx index a744532..c935b90 100644 --- a/apps/web/src/presentation/react/components/NavItem.tsx +++ b/apps/web/src/presentation/react/components/NavItem.tsx @@ -3,7 +3,8 @@ export const NavItem = function (options: { children: React.ReactNode }) { return ( - diff --git a/apps/web/src/presentation/react/components/NavItems.tsx b/apps/web/src/presentation/react/components/NavItems.tsx index 724f9be..4041889 100644 --- a/apps/web/src/presentation/react/components/NavItems.tsx +++ b/apps/web/src/presentation/react/components/NavItems.tsx @@ -1,8 +1,6 @@ import { NavItem } from './NavItem' -export const NavItems = function (props: { - className?: string -}) { +export const NavItems = function (props: { className?: string }) { return ( Github diff --git a/apps/web/src/presentation/react/components/NavMenu.tsx b/apps/web/src/presentation/react/components/NavMenu.tsx index 104aaf2..dcf34ac 100644 --- a/apps/web/src/presentation/react/components/NavMenu.tsx +++ b/apps/web/src/presentation/react/components/NavMenu.tsx @@ -14,7 +14,8 @@ export const NavMenu = function (props: { enableMainnet: boolean }) { return ( - - + `} + > + - + - + {props.enableMainnet && ( @@ -44,7 +50,7 @@ export const NavMenu = function (props: { - + ) } diff --git a/apps/web/src/presentation/react/components/NetworkSwitch.tsx b/apps/web/src/presentation/react/components/NetworkSwitch.tsx index 70fcf70..7bca9b5 100644 --- a/apps/web/src/presentation/react/components/NetworkSwitch.tsx +++ b/apps/web/src/presentation/react/components/NetworkSwitch.tsx @@ -18,7 +18,7 @@ const MenuContainer = ({ className, ...props }: { - refProp: React.RefObject | MutableRefObject; + refProp: React.RefObject | MutableRefObject } & ComponentProps<'div'>) => ( {children} -); +) -const ItemText = ({ - selected = false, - text = ''}) => ( +const ItemText = ({ selected = false, text = '' }) => ( (() => setIsOpen(false)) diff --git a/apps/web/src/presentation/react/components/Options.tsx b/apps/web/src/presentation/react/components/Options.tsx index 2a02e7a..3cf5d58 100644 --- a/apps/web/src/presentation/react/components/Options.tsx +++ b/apps/web/src/presentation/react/components/Options.tsx @@ -6,11 +6,15 @@ import { OptionsPresenterState } from '../../common/presenter/options/OptionsPre import { Checkbox } from './Checkbox' import { Select } from './Select' -export const Options = function (props: { - className?: string -}) { +export const Options = function (props: { className?: string }) { const { optionsPresenter } = useContext(presenters) - const { muted, instruments, selectedInstrument, displayLoadingMessage, displayInstrumentPicker } = usePresenter(optionsPresenter) + const { + muted, + instruments, + selectedInstrument, + displayLoadingMessage, + displayInstrumentPicker, + } = usePresenter(optionsPresenter) /** * Since the browser will not allow sound to be played without user interaction, @@ -21,27 +25,31 @@ export const Options = function (props: { }, [optionsPresenter]) return ( - - Sound - optionsPresenter.setMuted(!muted)} /> - { - displayLoadingMessage && Loading instrument sounds... - } - { - displayInstrumentPicker && + + Sound + + optionsPresenter.setMuted(!muted)} + /> + {displayLoadingMessage && Loading instrument sounds...} + {displayInstrumentPicker && ( + value && optionsPresenter.setInstrument(value)} + onChange={value => value && optionsPresenter.setInstrument(value)} options={instruments} /> - - } - + )} ) } diff --git a/apps/web/src/presentation/react/components/Select.tsx b/apps/web/src/presentation/react/components/Select.tsx index 424b7a0..ff147a8 100644 --- a/apps/web/src/presentation/react/components/Select.tsx +++ b/apps/web/src/presentation/react/components/Select.tsx @@ -3,14 +3,14 @@ import ReactSelect from 'react-select' export const Select = function (props: { value: string onChange: (value?: string) => void - options: { value: string, label: string }[] + options: { value: string; label: string }[] className?: string }) { return ( option.value === props.value)} - onChange={(option) => props.onChange(option?.value)} + onChange={option => props.onChange(option?.value)} options={props.options} isMulti={false} styles={{ @@ -27,7 +27,7 @@ export const Select = function (props: { ...provided, rotate: state.selectProps.menuIsOpen ? '180deg' : '0', }), - menu: (provided) => ({ + menu: provided => ({ ...provided, backgroundColor: 'white', borderTop: 'none', @@ -36,7 +36,7 @@ export const Select = function (props: { borderTopRightRadius: '0', marginTop: '0', }), - menuList: (provided) => ({ + menuList: provided => ({ ...provided, borderRadius: '0.7rem', borderTopLeftRadius: '0', @@ -44,12 +44,12 @@ export const Select = function (props: { }), option: (provided, state) => ({ ...provided, - color: 'black', - backgroundColor: state.isSelected ? '#ccc' : 'white', + 'color': 'black', + 'backgroundColor': state.isSelected ? '#ccc' : 'white', '&:hover': { backgroundColor: '#666', - color: 'white' - } + color: 'white', + }, }), }} /> diff --git a/apps/web/src/presentation/react/components/Social.tsx b/apps/web/src/presentation/react/components/Social.tsx index 635ef3f..60daf6e 100644 --- a/apps/web/src/presentation/react/components/Social.tsx +++ b/apps/web/src/presentation/react/components/Social.tsx @@ -6,12 +6,26 @@ export const Social = function (props: { large?: boolean }) { return ( - - - + + + - - + + ) diff --git a/apps/web/src/presentation/react/components/Transaction.tsx b/apps/web/src/presentation/react/components/Transaction.tsx index e85c9f5..f8c659e 100644 --- a/apps/web/src/presentation/react/components/Transaction.tsx +++ b/apps/web/src/presentation/react/components/Transaction.tsx @@ -1,4 +1,3 @@ - export const Transaction = function (props: { className?: string id: string @@ -8,15 +7,18 @@ export const Transaction = function (props: { at: string url: string }) { - return ( - {props.type} - + + {props.type} + + {props.message} - - `{props.id}` - `{props.id.slice(0, 6)}...{props.id.slice(-4)}` + + `{props.id}` + + `{props.id.slice(0, 6)}...{props.id.slice(-4)}` + at {props.at} diff --git a/apps/web/src/presentation/react/components/Transactions.tsx b/apps/web/src/presentation/react/components/Transactions.tsx index c27b068..9b8c957 100644 --- a/apps/web/src/presentation/react/components/Transactions.tsx +++ b/apps/web/src/presentation/react/components/Transactions.tsx @@ -5,30 +5,31 @@ import { presenters } from '../context' import { usePresenter } from '../hooks/usePresenter' import { Transaction } from './Transaction' -export const Transactions = function (props: { - className?: string -}) { +export const Transactions = function (props: { className?: string }) { const { transactionsPresenter } = useContext(presenters) - const { transactions } = usePresenter(transactionsPresenter) + const { transactions } = usePresenter< + TransactionsPresenter, + TransactionsPresenterState + >(transactionsPresenter) return ( - Transactions - - { - transactions.map((transaction) => ( - - - - )) - } + + Transactions + + + {transactions.map(transaction => ( + + + + ))} ) diff --git a/apps/web/src/presentation/react/components/icons/Chevron.tsx b/apps/web/src/presentation/react/components/icons/Chevron.tsx index 302a5bc..17745d6 100644 --- a/apps/web/src/presentation/react/components/icons/Chevron.tsx +++ b/apps/web/src/presentation/react/components/icons/Chevron.tsx @@ -1,4 +1,4 @@ -import React from "react" +import React from 'react' const ChevronBase = (props: React.SVGProps) => ( (context.presenters) let ws: WebSocket const { appPresenter } = context.presenters - if (import.meta.env.VITE_USE_API_MOCK === 'true') { mockBlockRecursively() } else { - appPresenter.subscribe((state) => { + appPresenter.subscribe(state => { setWebserviceUrl(state.selectedNetworkWsUrl) }) } - function setWebserviceUrl(url: string | null) { if (ws?.url == url) { return @@ -33,7 +31,10 @@ function setWebserviceUrl(url: string | null) { function mockBlockRecursively() { setTimeout(() => { - const randomTxType = Object.values(TxTypesEnum)[Math.floor(Math.random() * Object.values(TxTypesEnum).length)] + const randomTxType = + Object.values(TxTypesEnum)[ + Math.floor(Math.random() * Object.values(TxTypesEnum).length) + ] const randomAddress = '0x' + Math.random().toString(16).slice(2) handleBlockCreation(randomTxType, randomAddress) mockBlockRecursively() @@ -54,6 +55,9 @@ function stopWebsocket() { } async function handleBlockCreation(txType: TxTypesEnum, address: string) { - await appPresenter.createTransaction(txType, address, appPresenter.state.selectedNetworkName!) + await appPresenter.createTransaction( + txType, + address, + appPresenter.state.selectedNetworkName!, + ) } - diff --git a/apps/web/src/presentation/react/hooks/usePresenter.ts b/apps/web/src/presentation/react/hooks/usePresenter.ts index 65d80e4..a264f0f 100644 --- a/apps/web/src/presentation/react/hooks/usePresenter.ts +++ b/apps/web/src/presentation/react/hooks/usePresenter.ts @@ -1,7 +1,7 @@ import { useEffect, useState } from 'react' import { Presenter } from '../../common/base/Presenter' -export function usePresenter, S>(presenter: P): S { +export function usePresenter, S>(presenter: P): S { const [state, setState] = useState(presenter.state) useEffect(() => { @@ -9,4 +9,4 @@ export function usePresenter, S>(presenter: P): S { }, [presenter]) return state -} \ No newline at end of file +} diff --git a/apps/web/src/presentation/react/index.css b/apps/web/src/presentation/react/index.css index ae14df0..08a83dc 100644 --- a/apps/web/src/presentation/react/index.css +++ b/apps/web/src/presentation/react/index.css @@ -6,7 +6,7 @@ :root { color-scheme: light dark; - font-family: "Poppins", sans-serif; + font-family: 'Poppins', sans-serif; font-weight: 400; line-height: 100%; } diff --git a/apps/web/src/presentation/react/main.tsx b/apps/web/src/presentation/react/main.tsx index 44ed9f0..a9f109c 100644 --- a/apps/web/src/presentation/react/main.tsx +++ b/apps/web/src/presentation/react/main.tsx @@ -2,6 +2,4 @@ import ReactDOM from 'react-dom/client' import App from './App.tsx' import './index.css' -ReactDOM.createRoot(document.getElementById('root')!).render( - -) +ReactDOM.createRoot(document.getElementById('root')!).render() diff --git a/apps/web/tailwind.config.js b/apps/web/tailwind.config.js index 2761ad4..7141e45 100644 --- a/apps/web/tailwind.config.js +++ b/apps/web/tailwind.config.js @@ -1,14 +1,8 @@ /** @type {import('tailwindcss').Config} */ export default { - content: [ - "./index.html", - "./src/**/*.{js,ts,jsx,tsx}", - ], + content: ['./index.html', './src/**/*.{js,ts,jsx,tsx}'], theme: { - extend: { - - }, + extend: {}, }, plugins: [], } - diff --git a/apps/web/vitest.config.ts b/apps/web/vitest.config.ts index 1c0eacf..3e7c490 100644 --- a/apps/web/vitest.config.ts +++ b/apps/web/vitest.config.ts @@ -8,4 +8,4 @@ export default defineConfig({ include: ['src/**/*.ts'], }, }, -}) \ No newline at end of file +}) diff --git a/package-lock.json b/package-lock.json index cd0ff8b..facfd28 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,7 +23,6 @@ "license": "MIT", "dependencies": { "@cryptochords/shared": "*", - "@typescript-eslint/eslint-plugin": "8.18.0", "dotenv": "16.4.7", "express": "4.21.2", "web3": "4.16.0" @@ -33,221 +32,18 @@ "@types/express": "5.0.0", "@types/node": "22.10.2", "@types/ws": "8.5.13", + "@typescript-eslint/eslint-plugin": "^8.18.2", + "@typescript-eslint/parser": "^8.18.2", "@vitest/coverage-v8": "2.1.8", - "eslint": "8.56.0", + "eslint": "^8.57.1", + "eslint-config-bloq": "^4.4.1", "nodemon": "3.1.9", + "prettier": "^3.3.3", "ts-node": "10.9.2", "typescript": "5.3.3", "vitest": "2.1.8" } }, - "apps/api/node_modules/@eslint/js": { - "version": "8.56.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.56.0.tgz", - "integrity": "sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "apps/api/node_modules/@humanwhocodes/config-array": { - "version": "0.11.14", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", - "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", - "deprecated": "Use @eslint/config-array instead", - "dependencies": { - "@humanwhocodes/object-schema": "^2.0.2", - "debug": "^4.3.1", - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "apps/api/node_modules/@humanwhocodes/config-array/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==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "apps/api/node_modules/@humanwhocodes/config-array/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "apps/api/node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.18.0.tgz", - "integrity": "sha512-NR2yS7qUqCL7AIxdJUQf2MKKNDVNaig/dEB0GBLU7D+ZdHgK1NoH/3wsgO3OnPVipn51tG3MAwaODEGil70WEw==", - "dependencies": { - "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.18.0", - "@typescript-eslint/type-utils": "8.18.0", - "@typescript-eslint/utils": "8.18.0", - "@typescript-eslint/visitor-keys": "8.18.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", - "typescript": ">=4.8.4 <5.8.0" - } - }, - "apps/api/node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/type-utils": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.18.0.tgz", - "integrity": "sha512-er224jRepVAVLnMF2Q7MZJCq5CsdH2oqjP4dT7K6ij09Kyd+R21r7UVJrF0buMVdZS5QRhDzpvzAxHxabQadow==", - "dependencies": { - "@typescript-eslint/typescript-estree": "8.18.0", - "@typescript-eslint/utils": "8.18.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" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <5.8.0" - } - }, - "apps/api/node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/utils": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.18.0.tgz", - "integrity": "sha512-p6GLdY383i7h5b0Qrfbix3Vc3+J2k6QWw6UMUeY5JGfm3C5LbZ4QIZzJNoNOfgyRe0uuYKjvVOsO/jD4SJO+xg==", - "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "8.18.0", - "@typescript-eslint/types": "8.18.0", - "@typescript-eslint/typescript-estree": "8.18.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", - "typescript": ">=4.8.4 <5.8.0" - } - }, - "apps/api/node_modules/@typescript-eslint/parser": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.18.0.tgz", - "integrity": "sha512-hgUZ3kTEpVzKaK3uNibExUYm6SKKOmTU2BOxBSvOYwtJEPdVQ70kZJpPjstlnhCHcuc2WGfSbpKlb/69ttyN5Q==", - "peer": true, - "dependencies": { - "@typescript-eslint/scope-manager": "8.18.0", - "@typescript-eslint/types": "8.18.0", - "@typescript-eslint/typescript-estree": "8.18.0", - "@typescript-eslint/visitor-keys": "8.18.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", - "typescript": ">=4.8.4 <5.8.0" - } - }, - "apps/api/node_modules/@typescript-eslint/scope-manager": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.18.0.tgz", - "integrity": "sha512-PNGcHop0jkK2WVYGotk/hxj+UFLhXtGPiGtiaWgVBVP1jhMoMCHlTyJA+hEj4rszoSdLTK3fN4oOatrL0Cp+Xw==", - "dependencies": { - "@typescript-eslint/types": "8.18.0", - "@typescript-eslint/visitor-keys": "8.18.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "apps/api/node_modules/@typescript-eslint/types": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.18.0.tgz", - "integrity": "sha512-FNYxgyTCAnFwTrzpBGq+zrnoTO4x0c1CKYY5MuUTzpScqmY5fmsh2o3+57lqdI3NZucBDCzDgdEbIaNfAjAHQA==", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "apps/api/node_modules/@typescript-eslint/typescript-estree": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.18.0.tgz", - "integrity": "sha512-rqQgFRu6yPkauz+ms3nQpohwejS8bvgbPyIDq13cgEDbkXt4LH4OkDMT0/fN1RUtzG8e8AKJyDBoocuQh8qNeg==", - "dependencies": { - "@typescript-eslint/types": "8.18.0", - "@typescript-eslint/visitor-keys": "8.18.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" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <5.8.0" - } - }, - "apps/api/node_modules/@typescript-eslint/visitor-keys": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.18.0.tgz", - "integrity": "sha512-pCh/qEA8Lb1wVIqNvBke8UaRjJ6wrAWkJO5yyIbs8Yx6TNGYyfNjOo61tLv+WwLvoLPp4BQ8B7AHKijl8NGUfw==", - "dependencies": { - "@typescript-eslint/types": "8.18.0", - "eslint-visitor-keys": "^4.2.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, "apps/api/node_modules/@vitest/coverage-v8": { "version": "2.1.8", "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-2.1.8.tgz", @@ -348,20 +144,6 @@ "url": "https://opencollective.com/vitest" } }, - "apps/api/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==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, "apps/api/node_modules/assertion-error": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", @@ -387,21 +169,6 @@ "node": ">=12" } }, - "apps/api/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, "apps/api/node_modules/check-error": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz", @@ -411,22 +178,6 @@ "node": ">= 16" } }, - "apps/api/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==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "apps/api/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==" - }, "apps/api/node_modules/deep-eql": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz", @@ -436,183 +187,53 @@ "node": ">=6" } }, - "apps/api/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==", + "apps/api/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "apps/api/node_modules/istanbul-lib-source-maps": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-5.0.6.tgz", + "integrity": "sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.23", + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0" + }, "engines": { "node": ">=10" + } + }, + "apps/api/node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "dependencies": { + "@isaacs/cliui": "^8.0.2" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "apps/api/node_modules/eslint": { - "version": "8.56.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.56.0.tgz", - "integrity": "sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==", - "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.56.0", - "@humanwhocodes/config-array": "^0.11.13", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "apps/api/node_modules/eslint-visitor-keys": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", - "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "apps/api/node_modules/eslint/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==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "apps/api/node_modules/eslint/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==", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "apps/api/node_modules/eslint/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "apps/api/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "dev": true, - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "apps/api/node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "apps/api/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==", - "engines": { - "node": ">=8" - } - }, - "apps/api/node_modules/istanbul-lib-source-maps": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-5.0.6.tgz", - "integrity": "sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.23", - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "apps/api/node_modules/jackspeak": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", - "dev": true, - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" } }, "apps/api/node_modules/loupe": { @@ -621,20 +242,6 @@ "integrity": "sha512-23I4pFZHmAemUnz8WZXbYRSKYj801VDaNv9ETuMh7IrMc7VuVVSo+Z9iLE3ni30+U48iDWfi30d3twAXBYmnCg==", "dev": true }, - "apps/api/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "apps/api/node_modules/pathval": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.0.tgz", @@ -644,17 +251,6 @@ "node": ">= 14.16" } }, - "apps/api/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==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "apps/api/node_modules/test-exclude": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-7.0.1.tgz", @@ -691,6 +287,7 @@ "version": "5.3.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", + "dev": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -830,6 +427,7 @@ "eslint-plugin-react-hooks": "5.1.0", "eslint-plugin-react-refresh": "0.4.16", "postcss": "8.4.49", + "prettier": "^3.3.3", "tailwindcss": "3.4.16", "typescript": "5.2.2", "vite": "5.0.8", @@ -1197,18 +795,6 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "apps/web/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, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "apps/web/node_modules/eslint": { "version": "8.55.0", "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.55.0.tgz", @@ -1526,6 +1112,7 @@ "version": "1.2.6", "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -3324,17 +2911,6 @@ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" }, - "node_modules/@emotion/babel-plugin/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==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/@emotion/babel-plugin/node_modules/source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", @@ -3433,6 +3009,20 @@ "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.3.1.tgz", "integrity": "sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==" }, + "node_modules/@es-joy/jsdoccomment": { + "version": "0.38.0", + "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.38.0.tgz", + "integrity": "sha512-TFac4Bnv0ZYNkEeDnOWHQhaS1elWlvOCQxH06iHeu5iffs+hCaLVIZJwF+FqksQi68R4i66Pu+4DfFGvble+Uw==", + "dev": true, + "dependencies": { + "comment-parser": "1.3.1", + "esquery": "^1.5.0", + "jsdoc-type-pratt-parser": "~4.0.0" + }, + "engines": { + "node": ">=16" + } + }, "node_modules/@esbuild/aix-ppc64": { "version": "0.19.12", "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz", @@ -3805,6 +3395,7 @@ "version": "4.4.0", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, "dependencies": { "eslint-visitor-keys": "^3.3.0" }, @@ -3819,6 +3410,7 @@ "version": "4.12.1", "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "dev": true, "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } @@ -3827,6 +3419,7 @@ "version": "2.1.4", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dev": true, "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", @@ -3849,6 +3442,7 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -3858,6 +3452,7 @@ "version": "13.24.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, "dependencies": { "type-fest": "^0.20.2" }, @@ -3872,6 +3467,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -3883,6 +3479,7 @@ "version": "8.57.1", "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", + "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } @@ -3925,6 +3522,7 @@ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", "deprecated": "Use @eslint/config-array instead", + "dev": true, "dependencies": { "@humanwhocodes/object-schema": "^2.0.3", "debug": "^4.3.1", @@ -3938,6 +3536,7 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -3947,6 +3546,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -3958,6 +3558,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, "engines": { "node": ">=12.22" }, @@ -3970,7 +3571,8 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", - "deprecated": "Use @eslint/object-schema instead" + "deprecated": "Use @eslint/object-schema instead", + "dev": true }, "node_modules/@isaacs/cliui": { "version": "8.0.2", @@ -4080,6 +3682,58 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, + "node_modules/@next/eslint-plugin-next": { + "version": "13.5.8", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-13.5.8.tgz", + "integrity": "sha512-rmNr6kz5g7x2CQ/5RMmav7/wTGOFIv4fcP+bxawNaJP+Y5Gb0Dvq+omBUvL66pDo/fhWurElatelEFpHX+tMSw==", + "dev": true, + "dependencies": { + "glob": "7.1.7" + } + }, + "node_modules/@next/eslint-plugin-next/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@next/eslint-plugin-next/node_modules/glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@next/eslint-plugin-next/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/@noble/curves": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.2.tgz", @@ -4106,6 +3760,7 @@ "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, "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" @@ -4118,6 +3773,7 @@ "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, "engines": { "node": ">= 8" } @@ -4126,6 +3782,7 @@ "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, "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" @@ -4134,9 +3791,18 @@ "node": ">= 8" } }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "node_modules/@nolyfill/is-core-module": { + "version": "1.0.39", + "resolved": "https://registry.npmjs.org/@nolyfill/is-core-module/-/is-core-module-1.0.39.tgz", + "integrity": "sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==", + "dev": true, + "engines": { + "node": ">=12.4.0" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", "dev": true, "optional": true, @@ -4313,6 +3979,12 @@ "win32" ] }, + "node_modules/@rushstack/eslint-patch": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.10.4.tgz", + "integrity": "sha512-WJgX9nzTqknM393q1QJDJmoW28kUfEnybeTfVNcNAPnIx210RXm2DiXiHzfNPJNIUUb1tJnz/l4QGtJ30PgWmA==", + "dev": true + }, "node_modules/@scure/base": { "version": "1.1.9", "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz", @@ -4621,10 +4293,195 @@ "@types/node": "*" } }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.19.0.tgz", + "integrity": "sha512-NggSaEZCdSrFddbctrVjkVZvFC6KGfKfNK0CU7mNK/iKHGKbzT4Wmgm08dKpcZECBu9f5FypndoMyRHkdqfT1Q==", + "dev": true, + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.19.0", + "@typescript-eslint/type-utils": "8.19.0", + "@typescript-eslint/utils": "8.19.0", + "@typescript-eslint/visitor-keys": "8.19.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", + "typescript": ">=4.8.4 <5.8.0" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "8.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.19.0.tgz", + "integrity": "sha512-6M8taKyOETY1TKHp0x8ndycipTVgmp4xtg5QpEZzXxDhNvvHOJi5rLRkLr8SK3jTgD5l4fTlvBiRdfsuWydxBw==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "8.19.0", + "@typescript-eslint/types": "8.19.0", + "@typescript-eslint/typescript-estree": "8.19.0", + "@typescript-eslint/visitor-keys": "8.19.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", + "typescript": ">=4.8.4 <5.8.0" + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.19.0.tgz", + "integrity": "sha512-hkoJiKQS3GQ13TSMEiuNmSCvhz7ujyqD1x3ShbaETATHrck+9RaDdUbt+osXaUuns9OFwrDTTrjtwsU8gJyyRA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "8.19.0", + "@typescript-eslint/visitor-keys": "8.19.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.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.19.0.tgz", + "integrity": "sha512-TZs0I0OSbd5Aza4qAMpp1cdCYVnER94IziudE3JU328YUHgWu9gwiwhag+fuLeJ2LkWLXI+F/182TbG+JaBdTg==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "8.19.0", + "@typescript-eslint/utils": "8.19.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" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.8.0" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "8.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.19.0.tgz", + "integrity": "sha512-8XQ4Ss7G9WX8oaYvD4OOLCjIQYgRQxO+qCiR2V2s2GxI9AUpo7riNwo6jDhKtTcaJjT8PY54j2Yb33kWtSJsmA==", + "dev": true, + "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.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.19.0.tgz", + "integrity": "sha512-WW9PpDaLIFW9LCbucMSdYUuGeFUz1OkWYS/5fwZwTA+l2RwlWFdJvReQqMUMBw4yJWJOfqd7An9uwut2Oj8sLw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "8.19.0", + "@typescript-eslint/visitor-keys": "8.19.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" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <5.8.0" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "8.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.19.0.tgz", + "integrity": "sha512-PTBG+0oEMPH9jCZlfg07LCB2nYI0I317yyvXGfxnvGvw4SHIOuRnQ3kadyyXY6tGdChusIHIbM5zfIbp4M6tCg==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@typescript-eslint/scope-manager": "8.19.0", + "@typescript-eslint/types": "8.19.0", + "@typescript-eslint/typescript-estree": "8.19.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", + "typescript": ">=4.8.4 <5.8.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.19.0.tgz", + "integrity": "sha512-mCFtBbFBJDCNCWUl5y6sZSCHXw1DEFEk3c/M3nRK2a4XUB8StGFtmcEMizdjKuBzB6e/smJAAWYug3VrdLMr1w==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "8.19.0", + "eslint-visitor-keys": "^4.2.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/visitor-keys/node_modules/eslint-visitor-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, "node_modules/@ungap/structured-clone": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==" + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true }, "node_modules/@vitejs/plugin-react": { "version": "4.3.4", @@ -4909,6 +4766,26 @@ "vitest": "^1.0.0" } }, + "node_modules/@vitest/eslint-plugin": { + "version": "1.1.24", + "resolved": "https://registry.npmjs.org/@vitest/eslint-plugin/-/eslint-plugin-1.1.24.tgz", + "integrity": "sha512-7IaENe4NNy33g0iuuy5bHY69JYYRjpv4lMx6H5Wp30W7ez2baLHwxsXF5TM4wa8JDYZt8ut99Ytoj7GiDO01hw==", + "dev": true, + "peerDependencies": { + "@typescript-eslint/utils": ">= 8.0", + "eslint": ">= 8.57.0", + "typescript": ">= 5.0.0", + "vitest": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + }, + "vitest": { + "optional": true + } + } + }, "node_modules/@vitest/expect": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-1.2.2.tgz", @@ -5107,6 +4984,7 @@ "version": "8.14.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", + "dev": true, "bin": { "acorn": "bin/acorn" }, @@ -5118,6 +4996,7 @@ "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } @@ -5135,6 +5014,7 @@ "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -5150,6 +5030,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, "engines": { "node": ">=8" } @@ -5173,6 +5054,15 @@ "node": ">= 8" } }, + "node_modules/are-docs-informative": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/are-docs-informative/-/are-docs-informative-0.0.2.tgz", + "integrity": "sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==", + "dev": true, + "engines": { + "node": ">=14" + } + }, "node_modules/arg": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", @@ -5182,16 +5072,29 @@ "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==" + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/aria-query": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", + "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", + "dev": true, + "engines": { + "node": ">= 0.4" + } }, "node_modules/array-buffer-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", - "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", + "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "is-array-buffer": "^3.0.1" + "call-bound": "^1.0.3", + "is-array-buffer": "^3.0.5" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -5203,15 +5106,16 @@ "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" }, "node_modules/array-includes": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", - "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==", + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", + "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", "is-string": "^1.0.7" }, "engines": { @@ -5230,6 +5134,26 @@ "node": ">=8" } }, + "node_modules/array.prototype.findlast": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", + "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/array.prototype.findlastindex": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz", @@ -5268,15 +5192,15 @@ } }, "node_modules/array.prototype.flatmap": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", - "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz", + "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -5285,19 +5209,35 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/array.prototype.tosorted": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", + "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz", - "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", + "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", "dev": true, "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", - "is-array-buffer": "^3.0.2", - "is-shared-array-buffer": "^1.0.2" + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "is-array-buffer": "^3.0.4" }, "engines": { "node": ">= 0.4" @@ -5315,6 +5255,12 @@ "node": "*" } }, + "node_modules/ast-types-flow": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz", + "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==", + "dev": true + }, "node_modules/automation-events": { "version": "7.1.4", "resolved": "https://registry.npmjs.org/automation-events/-/automation-events-7.1.4.tgz", @@ -5370,9 +5316,12 @@ } }, "node_modules/available-typed-arrays": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.6.tgz", - "integrity": "sha512-j1QzY8iPNPG4o4xmO3ptzpRxTciqD3MgEHtifP/YnJpIo58Xu+ne4BejlbkuaLfXn/nz6HFiw29bLpj2PNMdGg==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, "engines": { "node": ">= 0.4" }, @@ -5380,6 +5329,24 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/axe-core": { + "version": "4.10.2", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.10.2.tgz", + "integrity": "sha512-RE3mdQ7P3FRSe7eqCWoeQ/Z9QXrtniSjp1wUjt5nRC3WIpz5rSCve6o3fsZ2aCpJtrZjSZgjwXAoTO5k4tEI0w==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/axobject-query": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", + "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/babel-plugin-macros": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", @@ -5445,7 +5412,8 @@ "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==" + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true }, "node_modules/binary-extensions": { "version": "2.2.0", @@ -5496,6 +5464,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, "dependencies": { "balanced-match": "^1.0.0" } @@ -5504,6 +5473,7 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, "dependencies": { "fill-range": "^7.1.1" }, @@ -5615,13 +5585,17 @@ } }, "node_modules/call-bind": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", - "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", "dependencies": { - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.1", - "set-function-length": "^1.1.1" + "call-bind-apply-helpers": "^1.0.0", + "es-define-property": "^1.0.0", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -5847,10 +5821,20 @@ "node": ">= 6" } }, + "node_modules/comment-parser": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.3.1.tgz", + "integrity": "sha512-B52sN2VNghyq5ofvUsqZjmk6YkihBX5vMSChmSK9v4ShjKf3Vk5Xcmgpw4o+iIgtrnM/u5FiMpz9VKb8lpBveA==", + "dev": true, + "engines": { + "node": ">= 12.0.0" + } + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true }, "node_modules/content-disposition": { "version": "0.5.4", @@ -5955,6 +5939,7 @@ "version": "7.0.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -5989,9 +5974,66 @@ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" }, - "node_modules/debug": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "node_modules/damerau-levenshtein": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", + "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", + "dev": true + }, + "node_modules/data-view-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", + "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", + "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/inspect-js" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", + "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", "dependencies": { "ms": "^2.1.3" @@ -6020,19 +6062,23 @@ "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==" + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true }, "node_modules/define-data-property": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", - "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "dependencies": { - "get-intrinsic": "^1.2.1", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/define-properties": { @@ -6115,6 +6161,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, "dependencies": { "esutils": "^2.0.2" }, @@ -6143,11 +6190,11 @@ } }, "node_modules/dunder-proto": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.0.tgz", - "integrity": "sha512-9+Sj30DIu+4KvHqMfLUGLFYL2PkURSYMVXJyXe92nFRvlYq5hBjLEhblKB+vkd/WVlUYMWigiY07T91Fkk0+4A==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", "dependencies": { - "call-bind-apply-helpers": "^1.0.0", + "call-bind-apply-helpers": "^1.0.1", "es-errors": "^1.3.0", "gopd": "^1.2.0" }, @@ -6186,6 +6233,31 @@ "node": ">= 0.8" } }, + "node_modules/enhanced-resolve": { + "version": "5.18.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.0.tgz", + "integrity": "sha512-0/r0MySGYG8YqlayBZ6MuCfECmHFdJ5qyPh8s8wa5Hnm6SaFLSK1VYCbj+NKp090Nm1caZhD+QTnmxO7esYGyQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, "node_modules/error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -6195,50 +6267,62 @@ } }, "node_modules/es-abstract": { - "version": "1.22.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.3.tgz", - "integrity": "sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==", - "dev": true, - "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "arraybuffer.prototype.slice": "^1.0.2", - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.5", - "es-set-tostringtag": "^2.0.1", - "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.6", - "get-intrinsic": "^1.2.2", - "get-symbol-description": "^1.0.0", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0", - "internal-slot": "^1.0.5", - "is-array-buffer": "^3.0.2", + "version": "1.23.9", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.9.tgz", + "integrity": "sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.2", + "arraybuffer.prototype.slice": "^1.0.4", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "data-view-buffer": "^1.0.2", + "data-view-byte-length": "^1.0.2", + "data-view-byte-offset": "^1.0.1", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.1.0", + "es-to-primitive": "^1.3.0", + "function.prototype.name": "^1.1.8", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.0", + "get-symbol-description": "^1.1.0", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "internal-slot": "^1.1.0", + "is-array-buffer": "^3.0.5", "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-typed-array": "^1.1.12", - "is-weakref": "^1.0.2", - "object-inspect": "^1.13.1", + "is-data-view": "^1.0.2", + "is-regex": "^1.2.1", + "is-shared-array-buffer": "^1.0.4", + "is-string": "^1.1.1", + "is-typed-array": "^1.1.15", + "is-weakref": "^1.1.0", + "math-intrinsics": "^1.1.0", + "object-inspect": "^1.13.3", "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.5.1", - "safe-array-concat": "^1.0.1", - "safe-regex-test": "^1.0.0", - "string.prototype.trim": "^1.2.8", - "string.prototype.trimend": "^1.0.7", - "string.prototype.trimstart": "^1.0.7", - "typed-array-buffer": "^1.0.0", - "typed-array-byte-length": "^1.0.0", - "typed-array-byte-offset": "^1.0.0", - "typed-array-length": "^1.0.4", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.13" + "object.assign": "^4.1.7", + "own-keys": "^1.0.1", + "regexp.prototype.flags": "^1.5.3", + "safe-array-concat": "^1.1.3", + "safe-push-apply": "^1.0.0", + "safe-regex-test": "^1.1.0", + "set-proto": "^1.0.0", + "string.prototype.trim": "^1.2.10", + "string.prototype.trimend": "^1.0.9", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.3", + "typed-array-byte-length": "^1.0.3", + "typed-array-byte-offset": "^1.0.4", + "typed-array-length": "^1.0.7", + "unbox-primitive": "^1.1.0", + "which-typed-array": "^1.1.18" }, "engines": { "node": ">= 0.4" @@ -6263,6 +6347,33 @@ "node": ">= 0.4" } }, + "node_modules/es-iterator-helpers": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.1.tgz", + "integrity": "sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.6", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.0.3", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.6", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "iterator.prototype": "^1.1.4", + "safe-array-concat": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/es-module-lexer": { "version": "1.5.4", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz", @@ -6281,14 +6392,15 @@ } }, "node_modules/es-set-tostringtag": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz", - "integrity": "sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", "dev": true, "dependencies": { - "get-intrinsic": "^1.2.2", - "has-tostringtag": "^1.0.0", - "hasown": "^2.0.0" + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" }, "engines": { "node": ">= 0.4" @@ -6304,14 +6416,14 @@ } }, "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", + "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", "dev": true, "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" + "is-callable": "^1.2.7", + "is-date-object": "^1.0.5", + "is-symbol": "^1.0.4" }, "engines": { "node": ">= 0.4" @@ -6692,11 +6804,23 @@ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" }, + "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==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/eslint": { "version": "8.57.1", "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", + "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", @@ -6747,6 +6871,197 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/eslint-config-bloq": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/eslint-config-bloq/-/eslint-config-bloq-4.4.1.tgz", + "integrity": "sha512-LnNd+2kwkZCZmQVfGXz6pd3K5OGvElRJgWmmno5vNCQ48Ek/h3q90hZHRq/717QjO8tduIJ28ddI4IbaRu0e5w==", + "dev": true, + "dependencies": { + "@typescript-eslint/eslint-plugin": "^8.11.0", + "@typescript-eslint/parser": "^8.11.0", + "@vitest/eslint-plugin": "^1.1.7", + "eslint-config-next": "^13.0.0", + "eslint-config-prettier": "^8.0.0", + "eslint-plugin-import": "^2.0.0", + "eslint-plugin-jsdoc": "^43.0.0", + "eslint-plugin-markdownlint": "^0.6.0", + "eslint-plugin-mocha": "^10.0.0", + "eslint-plugin-node": "^11.0.0", + "eslint-plugin-prefer-arrow": "^1.0.0", + "eslint-plugin-promise": "^6.0.0" + }, + "peerDependencies": { + "eslint": "^8.0.0" + } + }, + "node_modules/eslint-config-next": { + "version": "13.5.8", + "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-13.5.8.tgz", + "integrity": "sha512-EpNu08GB4KT377oDOQ6bi6icQFBgXcynqCE2neCu138k2Hsfr2i+5goUrRhz3YReDXB3YhelvQJLxm2apr3Gdw==", + "dev": true, + "dependencies": { + "@next/eslint-plugin-next": "13.5.8", + "@rushstack/eslint-patch": "^1.3.3", + "@typescript-eslint/parser": "^5.4.2 || ^6.0.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-import-resolver-typescript": "^3.5.2", + "eslint-plugin-import": "^2.28.1", + "eslint-plugin-jsx-a11y": "^6.7.1", + "eslint-plugin-react": "^7.33.2", + "eslint-plugin-react-hooks": "^4.5.0 || 5.0.0-canary-7118f5dd7-20230705" + }, + "peerDependencies": { + "eslint": "^7.23.0 || ^8.0.0", + "typescript": ">=3.3.1" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/eslint-config-next/node_modules/@typescript-eslint/parser": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.21.0.tgz", + "integrity": "sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/typescript-estree": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/eslint-config-next/node_modules/@typescript-eslint/scope-manager": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz", + "integrity": "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/eslint-config-next/node_modules/@typescript-eslint/types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz", + "integrity": "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==", + "dev": true, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/eslint-config-next/node_modules/@typescript-eslint/typescript-estree": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz", + "integrity": "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "9.0.3", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/eslint-config-next/node_modules/@typescript-eslint/visitor-keys": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz", + "integrity": "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "6.21.0", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/eslint-config-next/node_modules/eslint-plugin-react-hooks": { + "version": "5.0.0-canary-7118f5dd7-20230705", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.0.0-canary-7118f5dd7-20230705.tgz", + "integrity": "sha512-AZYbMo/NW9chdL7vk6HQzQhT+PvTAEVqWk9ziruUoW2kAOcN5qNyelv70e0F1VNQAbvutOC9oc+xfWycI9FxDw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" + } + }, + "node_modules/eslint-config-next/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/eslint-config-prettier": { + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.10.0.tgz", + "integrity": "sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==", + "dev": true, + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, "node_modules/eslint-config-standard": { "version": "17.0.0", "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-17.0.0.tgz", @@ -6793,6 +7108,41 @@ "ms": "^2.1.1" } }, + "node_modules/eslint-import-resolver-typescript": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.7.0.tgz", + "integrity": "sha512-Vrwyi8HHxY97K5ebydMtffsWAn1SCR9eol49eCd5fJS4O1WV7PaAjbcjmbfJJSMz/t4Mal212Uz/fQZrOB8mow==", + "dev": true, + "dependencies": { + "@nolyfill/is-core-module": "1.0.39", + "debug": "^4.3.7", + "enhanced-resolve": "^5.15.0", + "fast-glob": "^3.3.2", + "get-tsconfig": "^4.7.5", + "is-bun-module": "^1.0.2", + "is-glob": "^4.0.3", + "stable-hash": "^0.0.4" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts/projects/eslint-import-resolver-ts" + }, + "peerDependencies": { + "eslint": "*", + "eslint-plugin-import": "*", + "eslint-plugin-import-x": "*" + }, + "peerDependenciesMeta": { + "eslint-plugin-import": { + "optional": true + }, + "eslint-plugin-import-x": { + "optional": true + } + } + }, "node_modules/eslint-module-utils": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", @@ -6810,19 +7160,342 @@ } } }, - "node_modules/eslint-module-utils/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-es": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-4.1.0.tgz", + "integrity": "sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ==", + "dev": true, + "dependencies": { + "eslint-utils": "^2.0.0", + "regexpp": "^3.0.0" + }, + "engines": { + "node": ">=8.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=4.19.1" + } + }, + "node_modules/eslint-plugin-es/node_modules/eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/eslint-plugin-es/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-plugin-import": { + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", + "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.7", + "array.prototype.findlastindex": "^1.2.3", + "array.prototype.flat": "^1.3.2", + "array.prototype.flatmap": "^1.3.2", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.8.0", + "hasown": "^2.0.0", + "is-core-module": "^2.13.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.7", + "object.groupby": "^1.0.1", + "object.values": "^1.1.7", + "semver": "^6.3.1", + "tsconfig-paths": "^3.15.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + } + }, + "node_modules/eslint-plugin-import/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/eslint-plugin-import/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, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-plugin-jsdoc": { + "version": "43.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-43.2.0.tgz", + "integrity": "sha512-Hst7XUfqh28UmPD52oTXmjaRN3d0KrmOZdgtp4h9/VHUJD3Evoo82ZGXi1TtRDWgWhvqDIRI63O49H0eH7NrZQ==", + "dev": true, + "dependencies": { + "@es-joy/jsdoccomment": "~0.38.0", + "are-docs-informative": "^0.0.2", + "comment-parser": "1.3.1", + "debug": "^4.3.4", + "escape-string-regexp": "^4.0.0", + "esquery": "^1.5.0", + "semver": "^7.5.0", + "spdx-expression-parse": "^3.0.1" + }, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + } + }, + "node_modules/eslint-plugin-jsx-a11y": { + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.2.tgz", + "integrity": "sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==", + "dev": true, + "dependencies": { + "aria-query": "^5.3.2", + "array-includes": "^3.1.8", + "array.prototype.flatmap": "^1.3.2", + "ast-types-flow": "^0.0.8", + "axe-core": "^4.10.0", + "axobject-query": "^4.1.0", + "damerau-levenshtein": "^1.0.8", + "emoji-regex": "^9.2.2", + "hasown": "^2.0.2", + "jsx-ast-utils": "^3.3.5", + "language-tags": "^1.0.9", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.8", + "safe-regex-test": "^1.0.3", + "string.prototype.includes": "^2.0.1" + }, + "engines": { + "node": ">=4.0" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9" + } + }, + "node_modules/eslint-plugin-jsx-a11y/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint-plugin-jsx-a11y/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/eslint-plugin-markdownlint": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-markdownlint/-/eslint-plugin-markdownlint-0.6.0.tgz", + "integrity": "sha512-idYAzR2k7tQ+zL6UC17I/zzkqM0t6/k50uGgO39tabryqVkJh8Qe57fhBhe7QN+17yqIVqFB9YJFzBCAOdSXjw==", + "dev": true, + "dependencies": { + "markdownlint": "0.34.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": ">=7.5.0" + } + }, + "node_modules/eslint-plugin-mocha": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-mocha/-/eslint-plugin-mocha-10.5.0.tgz", + "integrity": "sha512-F2ALmQVPT1GoP27O1JTZGrV9Pqg8k79OeIuvw63UxMtQKREZtmkK1NFgkZQ2TW7L2JSSFKHFPTtHu5z8R9QNRw==", + "dev": true, + "dependencies": { + "eslint-utils": "^3.0.0", + "globals": "^13.24.0", + "rambda": "^7.4.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-plugin-mocha/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint-plugin-n": { + "version": "15.7.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-15.7.0.tgz", + "integrity": "sha512-jDex9s7D/Qial8AGVIHq4W7NswpUD5DPDL2RH8Lzd9EloWUuvUkHfv4FRLMipH5q2UtyurorBkPeNi1wVWNh3Q==", + "dev": true, + "dependencies": { + "builtins": "^5.0.1", + "eslint-plugin-es": "^4.1.0", + "eslint-utils": "^3.0.0", + "ignore": "^5.1.1", + "is-core-module": "^2.11.0", + "minimatch": "^3.1.2", + "resolve": "^1.22.1", + "semver": "^7.3.8" + }, + "engines": { + "node": ">=12.22.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-plugin-n/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint-plugin-n/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/eslint-plugin-node": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz", + "integrity": "sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==", + "dev": true, + "dependencies": { + "eslint-plugin-es": "^3.0.0", + "eslint-utils": "^2.0.0", + "ignore": "^5.1.1", + "minimatch": "^3.0.4", + "resolve": "^1.10.1", + "semver": "^6.1.0" + }, + "engines": { + "node": ">=8.10.0" + }, + "peerDependencies": { + "eslint": ">=5.16.0" + } + }, + "node_modules/eslint-plugin-node/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "dependencies": { - "ms": "^2.1.1" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/eslint-plugin-es": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-4.1.0.tgz", - "integrity": "sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ==", + "node_modules/eslint-plugin-node/node_modules/eslint-plugin-es": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz", + "integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==", "dev": true, "dependencies": { "eslint-utils": "^2.0.0", @@ -6838,7 +7511,7 @@ "eslint": ">=4.19.1" } }, - "node_modules/eslint-plugin-es/node_modules/eslint-utils": { + "node_modules/eslint-plugin-node/node_modules/eslint-utils": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", @@ -6853,7 +7526,7 @@ "url": "https://github.com/sponsors/mysticatea" } }, - "node_modules/eslint-plugin-es/node_modules/eslint-visitor-keys": { + "node_modules/eslint-plugin-node/node_modules/eslint-visitor-keys": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", @@ -6862,69 +7535,7 @@ "node": ">=4" } }, - "node_modules/eslint-plugin-import": { - "version": "2.29.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", - "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", - "dev": true, - "dependencies": { - "array-includes": "^3.1.7", - "array.prototype.findlastindex": "^1.2.3", - "array.prototype.flat": "^1.3.2", - "array.prototype.flatmap": "^1.3.2", - "debug": "^3.2.7", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.9", - "eslint-module-utils": "^2.8.0", - "hasown": "^2.0.0", - "is-core-module": "^2.13.1", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.fromentries": "^2.0.7", - "object.groupby": "^1.0.1", - "object.values": "^1.1.7", - "semver": "^6.3.1", - "tsconfig-paths": "^3.15.0" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" - } - }, - "node_modules/eslint-plugin-import/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/eslint-plugin-import/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-plugin-import/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-import/node_modules/minimatch": { + "node_modules/eslint-plugin-node/node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", @@ -6936,7 +7547,7 @@ "node": "*" } }, - "node_modules/eslint-plugin-import/node_modules/semver": { + "node_modules/eslint-plugin-node/node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", @@ -6945,32 +7556,81 @@ "semver": "bin/semver.js" } }, - "node_modules/eslint-plugin-n": { - "version": "15.7.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-15.7.0.tgz", - "integrity": "sha512-jDex9s7D/Qial8AGVIHq4W7NswpUD5DPDL2RH8Lzd9EloWUuvUkHfv4FRLMipH5q2UtyurorBkPeNi1wVWNh3Q==", + "node_modules/eslint-plugin-prefer-arrow": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-prefer-arrow/-/eslint-plugin-prefer-arrow-1.2.3.tgz", + "integrity": "sha512-J9I5PKCOJretVuiZRGvPQxCbllxGAV/viI20JO3LYblAodofBxyMnZAJ+WGeClHgANnSJberTNoFWWjrWKBuXQ==", + "dev": true, + "peerDependencies": { + "eslint": ">=2.0.0" + } + }, + "node_modules/eslint-plugin-promise": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz", + "integrity": "sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + } + }, + "node_modules/eslint-plugin-react": { + "version": "7.37.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.3.tgz", + "integrity": "sha512-DomWuTQPFYZwF/7c9W2fkKkStqZmBd3uugfqBYLdkZ3Hii23WzZuOLUskGxB8qkSKqftxEeGL1TB2kMhrce0jA==", "dev": true, "dependencies": { - "builtins": "^5.0.1", - "eslint-plugin-es": "^4.1.0", - "eslint-utils": "^3.0.0", - "ignore": "^5.1.1", - "is-core-module": "^2.11.0", + "array-includes": "^3.1.8", + "array.prototype.findlast": "^1.2.5", + "array.prototype.flatmap": "^1.3.3", + "array.prototype.tosorted": "^1.1.4", + "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.2.1", + "estraverse": "^5.3.0", + "hasown": "^2.0.2", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", "minimatch": "^3.1.2", - "resolve": "^1.22.1", - "semver": "^7.3.8" + "object.entries": "^1.1.8", + "object.fromentries": "^2.0.8", + "object.values": "^1.2.1", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.5", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.12", + "string.prototype.repeat": "^1.0.0" }, "engines": { - "node": ">=12.22.0" + "node": ">=4" }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.1.0.tgz", + "integrity": "sha512-mpJRtPgHN2tNAvZ35AMfqeB3Xqeo273QxrHJsbBEPWODRM4r0yB6jfoROqKEYrOn27UtRPpcpHc2UqyBSuUNTw==", + "dev": true, + "engines": { + "node": ">=10" }, "peerDependencies": { - "eslint": ">=7.0.0" + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" } }, - "node_modules/eslint-plugin-n/node_modules/brace-expansion": { + "node_modules/eslint-plugin-react-refresh": { + "version": "0.4.16", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.16.tgz", + "integrity": "sha512-slterMlxAhov/DZO8NScf6mEeMBBXodFUolijDvrtTxyezyLoTQaa73FyYus/VbTdftd8wBgBxPMRk3poleXNQ==", + "dev": true, + "peerDependencies": { + "eslint": ">=8.40" + } + }, + "node_modules/eslint-plugin-react/node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", @@ -6980,7 +7640,19 @@ "concat-map": "0.0.1" } }, - "node_modules/eslint-plugin-n/node_modules/minimatch": { + "node_modules/eslint-plugin-react/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-react/node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", @@ -6992,37 +7664,30 @@ "node": "*" } }, - "node_modules/eslint-plugin-promise": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz", - "integrity": "sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==", + "node_modules/eslint-plugin-react/node_modules/resolve": { + "version": "2.0.0-next.5", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", + "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" - } - }, - "node_modules/eslint-plugin-react-hooks": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.1.0.tgz", - "integrity": "sha512-mpJRtPgHN2tNAvZ35AMfqeB3Xqeo273QxrHJsbBEPWODRM4r0yB6jfoROqKEYrOn27UtRPpcpHc2UqyBSuUNTw==", - "dev": true, - "engines": { - "node": ">=10" + "bin": { + "resolve": "bin/resolve" }, - "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint-plugin-react-refresh": { - "version": "0.4.16", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.16.tgz", - "integrity": "sha512-slterMlxAhov/DZO8NScf6mEeMBBXodFUolijDvrtTxyezyLoTQaa73FyYus/VbTdftd8wBgBxPMRk3poleXNQ==", + "node_modules/eslint-plugin-react/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, - "peerDependencies": { - "eslint": ">=8.40" + "bin": { + "semver": "bin/semver.js" } }, "node_modules/eslint-plugin-sonarjs": { @@ -7041,6 +7706,7 @@ "version": "7.2.2", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" @@ -7083,6 +7749,7 @@ "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, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, @@ -7094,6 +7761,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -7108,6 +7776,7 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -7117,6 +7786,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -7132,6 +7802,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "dependencies": { "color-name": "~1.1.4" }, @@ -7142,23 +7813,14 @@ "node_modules/eslint/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==" - }, - "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==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "node_modules/eslint/node_modules/globals": { "version": "13.24.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, "dependencies": { "type-fest": "^0.20.2" }, @@ -7173,6 +7835,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "engines": { "node": ">=8" } @@ -7181,6 +7844,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -7192,6 +7856,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -7203,6 +7868,7 @@ "version": "9.6.1", "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, "dependencies": { "acorn": "^8.9.0", "acorn-jsx": "^5.3.2", @@ -7219,6 +7885,7 @@ "version": "1.5.0", "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dev": true, "dependencies": { "estraverse": "^5.1.0" }, @@ -7230,6 +7897,7 @@ "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, "dependencies": { "estraverse": "^5.2.0" }, @@ -7241,6 +7909,7 @@ "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, "engines": { "node": ">=4.0" } @@ -7258,6 +7927,7 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -7379,12 +8049,14 @@ "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==" + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true }, "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, "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -7400,6 +8072,7 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, "dependencies": { "is-glob": "^4.0.1" }, @@ -7410,17 +8083,20 @@ "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==" + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true }, "node_modules/fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true }, "node_modules/fastq": { "version": "1.17.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.0.tgz", "integrity": "sha512-zGygtijUMT7jnk3h26kUms3BkSDp4IfIKjmnqI2tvx6nuBfiF1UqOxbnLfzdv+apBy+53oaImsKtMw/xYbW+1w==", + "dev": true, "dependencies": { "reusify": "^1.0.4" } @@ -7429,6 +8105,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, "dependencies": { "flat-cache": "^3.0.4" }, @@ -7440,6 +8117,7 @@ "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, "dependencies": { "to-regex-range": "^5.0.1" }, @@ -7486,6 +8164,7 @@ "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, "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -7501,6 +8180,7 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dev": true, "dependencies": { "flatted": "^3.2.9", "keyv": "^4.5.3", @@ -7513,7 +8193,8 @@ "node_modules/flatted": { "version": "3.2.9", "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", - "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==" + "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", + "dev": true }, "node_modules/for-each": { "version": "0.3.3", @@ -7571,7 +8252,8 @@ "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==" + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true }, "node_modules/fsevents": { "version": "2.3.3", @@ -7596,15 +8278,17 @@ } }, "node_modules/function.prototype.name": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", - "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", + "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "functions-have-names": "^1.2.3" + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "functions-have-names": "^1.2.3", + "hasown": "^2.0.2", + "is-callable": "^1.2.7" }, "engines": { "node": ">= 0.4" @@ -7650,20 +8334,20 @@ } }, "node_modules/get-intrinsic": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.6.tgz", - "integrity": "sha512-qxsEs+9A+u85HhllWJJFicJfPDhRmjzoYdl64aMWW9yRIJmSyxdn8IEkuIM530/7T+lv0TIHd8L6Q/ra0tEoeA==", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.7.tgz", + "integrity": "sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA==", "dependencies": { "call-bind-apply-helpers": "^1.0.1", - "dunder-proto": "^1.0.0", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0", "function-bind": "^1.1.2", + "get-proto": "^1.0.0", "gopd": "^1.2.0", "has-symbols": "^1.1.0", "hasown": "^2.0.2", - "math-intrinsics": "^1.0.0" + "math-intrinsics": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -7672,6 +8356,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/get-stream": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", @@ -7685,25 +8381,39 @@ } }, "node_modules/get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", + "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6" }, "engines": { "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/ljharb" + } + }, + "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, + "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==", + "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -7723,6 +8433,7 @@ "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, "dependencies": { "is-glob": "^4.0.3" }, @@ -7734,6 +8445,7 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -7743,6 +8455,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -7759,12 +8472,13 @@ } }, "node_modules/globalthis": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", - "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", "dev": true, "dependencies": { - "define-properties": "^1.1.3" + "define-properties": "^1.2.1", + "gopd": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -7804,16 +8518,26 @@ "url": "https://github.com/sponsors/ljharb" } }, + "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 + }, "node_modules/graphemer": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==" + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true }, "node_modules/has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", + "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", "dev": true, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -7828,21 +8552,24 @@ } }, "node_modules/has-property-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", - "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dependencies": { - "get-intrinsic": "^1.2.2" + "es-define-property": "^1.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", + "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", "dev": true, + "dependencies": { + "dunder-proto": "^1.0.0" + }, "engines": { "node": ">= 0.4" }, @@ -7952,6 +8679,7 @@ "version": "5.3.1", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "dev": true, "engines": { "node": ">= 4" } @@ -7981,6 +8709,7 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, "engines": { "node": ">=0.8.19" } @@ -7989,6 +8718,7 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -8000,14 +8730,14 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "node_modules/internal-slot": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.6.tgz", - "integrity": "sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", + "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", "dev": true, "dependencies": { - "get-intrinsic": "^1.2.2", - "hasown": "^2.0.0", - "side-channel": "^1.0.4" + "es-errors": "^1.3.0", + "hasown": "^2.0.2", + "side-channel": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -8037,14 +8767,17 @@ } }, "node_modules/is-array-buffer": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", - "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", + "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.0", - "is-typed-array": "^1.1.10" + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -8055,13 +8788,34 @@ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" }, + "node_modules/is-async-function": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.0.tgz", + "integrity": "sha512-GExz9MtyhlZyXYLxzlJRj5WUCE661zhDa1Yna52CN57AJsymh+DvXXjyveSioqSRdxvUrdKdvqB1b5cVKsNpWQ==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.3", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", + "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", "dev": true, "dependencies": { - "has-bigints": "^1.0.1" + "has-bigints": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -8080,13 +8834,13 @@ } }, "node_modules/is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.1.tgz", + "integrity": "sha512-l9qO6eFlUETHtuihLcYOaLKByJ1f+N4kthcU9YjHy3N+B3hWv0y/2Nd0mu/7lTFnRQHTrSdXF50HQ3bl5fEnng==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -8095,6 +8849,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-bun-module": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/is-bun-module/-/is-bun-module-1.3.0.tgz", + "integrity": "sha512-DgXeu5UWI0IsMQundYb5UAOzm6G2eVnarJ0byP6Tm55iZNKceD59LNPA2L4VvsScTtHcw0yEkVwSf7PC+QoLSA==", + "dev": true, + "dependencies": { + "semver": "^7.6.3" + } + }, "node_modules/is-callable": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", @@ -8117,13 +8880,31 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-data-view": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", + "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", "dev": true, "dependencies": { - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -8136,10 +8917,26 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, "engines": { "node": ">=0.10.0" } }, + "node_modules/is-finalizationregistry": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", + "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.3" + }, + "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", @@ -8167,6 +8964,7 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, "dependencies": { "is-extglob": "^2.1.1" }, @@ -8174,10 +8972,10 @@ "node": ">=0.10.0" } }, - "node_modules/is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "node_modules/is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", "dev": true, "engines": { "node": ">= 0.4" @@ -8190,17 +8988,19 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, "engines": { "node": ">=0.12.0" } }, "node_modules/is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", + "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", "dev": true, "dependencies": { - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -8213,19 +9013,34 @@ "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, "engines": { "node": ">=8" } }, "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "dev": true, "engines": { "node": ">= 0.4" }, @@ -8234,12 +9049,15 @@ } }, "node_modules/is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", + "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", "dev": true, "dependencies": { - "call-bind": "^1.0.2" + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -8258,12 +9076,13 @@ } }, "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", + "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", "dev": true, "dependencies": { - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -8273,12 +9092,14 @@ } }, "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", + "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", "dev": true, "dependencies": { - "has-symbols": "^1.0.2" + "call-bound": "^1.0.2", + "has-symbols": "^1.1.0", + "safe-regex-test": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -8288,11 +9109,11 @@ } }, "node_modules/is-typed-array": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", - "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", "dependencies": { - "which-typed-array": "^1.1.11" + "which-typed-array": "^1.1.16" }, "engines": { "node": ">= 0.4" @@ -8301,13 +9122,44 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.0.tgz", + "integrity": "sha512-SXM8Nwyys6nT5WP6pltOwKytLV7FqQ4UiibxVmW+EIosHcmCqkkjViTb5SNssDlkCiEYRP1/pdWUKVvZBmsR2Q==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", + "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2" + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -8322,7 +9174,8 @@ "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true }, "node_modules/isomorphic-ws": { "version": "5.0.0", @@ -8434,6 +9287,23 @@ "node": ">=8" } }, + "node_modules/iterator.prototype": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.5.tgz", + "integrity": "sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.4", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.6", + "get-proto": "^1.0.0", + "has-symbols": "^1.1.0", + "set-function-name": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/jackspeak": { "version": "2.3.6", "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", @@ -8470,6 +9340,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, "dependencies": { "argparse": "^2.0.1" }, @@ -8477,6 +9348,15 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/jsdoc-type-pratt-parser": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.0.0.tgz", + "integrity": "sha512-YtOli5Cmzy3q4dP26GraSOeAhqecewG04hoO8DY56CH4KJ9Fvv5qKWUCCo3HZob7esJQHCv6/+bnTy72xZZaVQ==", + "dev": true, + "engines": { + "node": ">=12.0.0" + } + }, "node_modules/jsesc": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", @@ -8491,7 +9371,8 @@ "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==" + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", @@ -8501,12 +9382,14 @@ "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==" + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true }, "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==" + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true }, "node_modules/json5": { "version": "2.2.3", @@ -8526,18 +9409,53 @@ "integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==", "dev": true }, + "node_modules/jsx-ast-utils": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" + }, + "engines": { + "node": ">=4.0" + } + }, "node_modules/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, "dependencies": { "json-buffer": "3.0.1" } }, + "node_modules/language-subtag-registry": { + "version": "0.3.23", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz", + "integrity": "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==", + "dev": true + }, + "node_modules/language-tags": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz", + "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==", + "dev": true, + "dependencies": { + "language-subtag-registry": "^0.3.20" + }, + "engines": { + "node": ">=0.10" + } + }, "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, "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" @@ -8563,6 +9481,15 @@ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" }, + "node_modules/linkify-it": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz", + "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==", + "dev": true, + "dependencies": { + "uc.micro": "^2.0.0" + } + }, "node_modules/local-pkg": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.5.0.tgz", @@ -8583,6 +9510,7 @@ "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, "dependencies": { "p-locate": "^5.0.0" }, @@ -8602,7 +9530,8 @@ "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==" + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true }, "node_modules/loose-envify": { "version": "1.4.0", @@ -8674,14 +9603,65 @@ "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", "dev": true }, + "node_modules/markdown-it": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz", + "integrity": "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1", + "entities": "^4.4.0", + "linkify-it": "^5.0.0", + "mdurl": "^2.0.0", + "punycode.js": "^2.3.1", + "uc.micro": "^2.1.0" + }, + "bin": { + "markdown-it": "bin/markdown-it.mjs" + } + }, + "node_modules/markdownlint": { + "version": "0.34.0", + "resolved": "https://registry.npmjs.org/markdownlint/-/markdownlint-0.34.0.tgz", + "integrity": "sha512-qwGyuyKwjkEMOJ10XN6OTKNOVYvOIi35RNvDLNxTof5s8UmyGHlCdpngRHoRGNvQVGuxO3BJ7uNSgdeX166WXw==", + "dev": true, + "dependencies": { + "markdown-it": "14.1.0", + "markdownlint-micromark": "0.1.9" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/DavidAnson" + } + }, + "node_modules/markdownlint-micromark": { + "version": "0.1.9", + "resolved": "https://registry.npmjs.org/markdownlint-micromark/-/markdownlint-micromark-0.1.9.tgz", + "integrity": "sha512-5hVs/DzAFa8XqYosbEAEg6ok6MF2smDj89ztn9pKkCtdKHVdPQuGMH7frFfYL9mLkvfFe4pTyAMffLbjf3/EyA==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/DavidAnson" + } + }, "node_modules/math-intrinsics": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.0.0.tgz", - "integrity": "sha512-4MqMiKP90ybymYvsut0CH2g4XWbfLtmlCkXmtmdcDCxNB+mQcu1w/1+L/VD7vi/PSv7X2JYV7SCcR+jiPXnQtA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", "engines": { "node": ">= 0.4" } }, + "node_modules/mdurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz", + "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==", + "dev": true + }, "node_modules/media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -8713,6 +9693,7 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, "engines": { "node": ">= 8" } @@ -8729,6 +9710,7 @@ "version": "4.0.8", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" @@ -8780,9 +9762,9 @@ } }, "node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, "dependencies": { "brace-expansion": "^2.0.1" @@ -8861,7 +9843,8 @@ "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true }, "node_modules/natural-compare-lite": { "version": "1.4.0", @@ -9050,32 +10033,49 @@ } }, "node_modules/object.assign": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", - "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.entries": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz", + "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.5", + "call-bind": "^1.0.7", "define-properties": "^1.2.1", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, "node_modules/object.fromentries": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz", - "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==", + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -9097,14 +10097,15 @@ } }, "node_modules/object.values": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz", - "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz", + "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -9128,6 +10129,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, "dependencies": { "wrappy": "1" } @@ -9151,6 +10153,7 @@ "version": "0.9.3", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "dev": true, "dependencies": { "@aashutoshrathi/word-wrap": "^1.2.3", "deep-is": "^0.1.3", @@ -9163,6 +10166,23 @@ "node": ">= 0.8.0" } }, + "node_modules/own-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", + "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.6", + "object-keys": "^1.1.1", + "safe-push-apply": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/ox": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/ox/-/ox-0.1.2.tgz", @@ -9292,6 +10312,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, "dependencies": { "yocto-queue": "^0.1.0" }, @@ -9306,6 +10327,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, "dependencies": { "p-limit": "^3.0.2" }, @@ -9362,6 +10384,7 @@ "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, "engines": { "node": ">=8" } @@ -9370,6 +10393,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -9378,6 +10402,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, "engines": { "node": ">=8" } @@ -9449,6 +10474,7 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, "engines": { "node": ">=8.6" }, @@ -9485,6 +10511,14 @@ "pathe": "^1.1.0" } }, + "node_modules/possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/postcss": { "version": "8.4.49", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.49.tgz", @@ -9632,14 +10666,15 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, "engines": { "node": ">= 0.8.0" } }, "node_modules/prettier": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.2.4.tgz", - "integrity": "sha512-FWu1oLHKCrtpO1ypU6J0SbK2d9Ckwysq6bHj/uaCP26DxrPpppCLQRGVuqAxSTvhF00AcvDRyYrLNW7ocBhFFQ==", + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.4.2.tgz", + "integrity": "sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ==", "dev": true, "bin": { "prettier": "bin/prettier.cjs" @@ -9714,6 +10749,16 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/punycode.js": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", + "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", + "dev": true, "engines": { "node": ">=6" } @@ -9736,6 +10781,7 @@ "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", @@ -9751,6 +10797,12 @@ } ] }, + "node_modules/rambda": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/rambda/-/rambda-7.5.0.tgz", + "integrity": "sha512-y/M9weqWAH4iopRd7EHDEQQvpFPHj1AA3oHozE9tfITHUtTR7Z9PSlIRRG2l1GuW7sefC1cXFfIcF+cgnShdBA==", + "dev": true + }, "node_modules/range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", @@ -9867,6 +10919,28 @@ "node": ">=8.10.0" } }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", + "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.1", + "which-builtin-type": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/regenerate": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", @@ -9900,14 +10974,17 @@ } }, "node_modules/regexp.prototype.flags": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz", - "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==", + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", + "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "set-function-name": "^2.0.0" + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "set-function-name": "^2.0.2" }, "engines": { "node": ">= 0.4" @@ -9999,10 +11076,20 @@ "node": ">=4" } }, + "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, + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, "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, "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" @@ -10012,6 +11099,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, "dependencies": { "glob": "^7.1.3" }, @@ -10058,6 +11146,7 @@ "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", @@ -10077,14 +11166,15 @@ } }, "node_modules/safe-array-concat": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.0.tgz", - "integrity": "sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", + "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", "dev": true, "dependencies": { - "call-bind": "^1.0.5", - "get-intrinsic": "^1.2.2", - "has-symbols": "^1.0.3", + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "has-symbols": "^1.1.0", "isarray": "^2.0.5" }, "engines": { @@ -10113,15 +11203,31 @@ } ] }, + "node_modules/safe-push-apply": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", + "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/safe-regex-test": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.2.tgz", - "integrity": "sha512-83S9w6eFq12BBIJYvjMux6/dkirb8+4zJRA9cxNBVb7Wq5fJBW+Xze48WqR8pxua7bDuAaaAxtVVd4Idjp1dBQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", "dev": true, "dependencies": { - "call-bind": "^1.0.5", - "get-intrinsic": "^1.2.2", - "is-regex": "^1.1.4" + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-regex": "^1.2.1" }, "engines": { "node": ">= 0.4" @@ -10147,6 +11253,7 @@ "version": "7.6.3", "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, "bin": { "semver": "bin/semver.js" }, @@ -10213,29 +11320,45 @@ } }, "node_modules/set-function-length": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.0.tgz", - "integrity": "sha512-4DBHDoyHlM1IRPGYcoxexgh67y4ueR53FKV1yyxwFMY7aCqcN/38M1+SwZ/qJQ8iLv7+ck385ot4CcisOAPT9w==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", "dependencies": { - "define-data-property": "^1.1.1", + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.2", + "get-intrinsic": "^1.2.4", "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.1" + "has-property-descriptors": "^1.0.2" }, "engines": { "node": ">= 0.4" } }, "node_modules/set-function-name": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", - "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", "dev": true, "dependencies": { - "define-data-property": "^1.0.1", + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", "functions-have-names": "^1.2.3", - "has-property-descriptors": "^1.0.0" + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-proto": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", + "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", + "dev": true, + "dependencies": { + "dunder-proto": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -10255,6 +11378,7 @@ "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, "dependencies": { "shebang-regex": "^3.0.0" }, @@ -10266,6 +11390,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, "engines": { "node": ">=8" } @@ -10395,6 +11520,34 @@ "node": ">=0.10.0" } }, + "node_modules/spdx-exceptions": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", + "dev": true + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.20", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.20.tgz", + "integrity": "sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw==", + "dev": true + }, + "node_modules/stable-hash": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/stable-hash/-/stable-hash-0.0.4.tgz", + "integrity": "sha512-LjdcbuBeLcdETCrPn9i8AYAZ1eCtu4ECAWtP7UleOiZ9LzVxRzzUZEoZ8zB24nhkQnDWyET0I+3sWokSDS3E7g==", + "dev": true + }, "node_modules/stackback": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", @@ -10495,15 +11648,70 @@ "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, + "node_modules/string.prototype.includes": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz", + "integrity": "sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/string.prototype.matchall": { + "version": "4.0.12", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz", + "integrity": "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.6", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.6", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "regexp.prototype.flags": "^1.5.3", + "set-function-name": "^2.0.2", + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.repeat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", + "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, "node_modules/string.prototype.trim": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", - "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", + "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-data-property": "^1.1.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-object-atoms": "^1.0.0", + "has-property-descriptors": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -10513,28 +11721,35 @@ } }, "node_modules/string.prototype.trimend": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", - "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", + "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trimstart": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", - "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -10544,6 +11759,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -10589,6 +11805,7 @@ "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, "engines": { "node": ">=8" }, @@ -10717,6 +11934,15 @@ "node": ">=14.0.0" } }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/test-exclude": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", @@ -10756,7 +11982,8 @@ "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==" + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true }, "node_modules/thenify": { "version": "3.3.1", @@ -10822,6 +12049,7 @@ "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, "dependencies": { "is-number": "^7.0.0" }, @@ -11034,6 +12262,7 @@ "version": "1.4.3", "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.3.tgz", "integrity": "sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==", + "dev": true, "engines": { "node": ">=16" }, @@ -11240,6 +12469,7 @@ "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, "dependencies": { "prelude-ls": "^1.2.1" }, @@ -11260,6 +12490,7 @@ "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, "engines": { "node": ">=10" }, @@ -11280,29 +12511,30 @@ } }, "node_modules/typed-array-buffer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", - "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1", - "is-typed-array": "^1.1.10" + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.14" }, "engines": { "node": ">= 0.4" } }, "node_modules/typed-array-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", - "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", + "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", + "call-bind": "^1.0.8", "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.14" }, "engines": { "node": ">= 0.4" @@ -11312,16 +12544,18 @@ } }, "node_modules/typed-array-byte-offset": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", - "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", + "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", "dev": true, "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.15", + "reflect.getprototypeof": "^1.0.9" }, "engines": { "node": ">= 0.4" @@ -11331,14 +12565,20 @@ } }, "node_modules/typed-array-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", - "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", + "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "is-typed-array": "^1.1.9" + "gopd": "^1.0.1", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0", + "reflect.getprototypeof": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -11356,6 +12596,12 @@ "node": ">=14.17" } }, + "node_modules/uc.micro": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", + "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==", + "dev": true + }, "node_modules/ufo": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.3.2.tgz", @@ -11363,15 +12609,18 @@ "dev": true }, "node_modules/unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", + "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", + "call-bound": "^1.0.3", "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" + "has-symbols": "^1.1.0", + "which-boxed-primitive": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -11471,6 +12720,7 @@ "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, "dependencies": { "punycode": "^2.1.0" } @@ -12241,6 +13491,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, "dependencies": { "isexe": "^2.0.0" }, @@ -12252,31 +13503,80 @@ } }, "node_modules/which-boxed-primitive": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", + "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", + "dev": true, + "dependencies": { + "is-bigint": "^1.1.0", + "is-boolean-object": "^1.2.1", + "is-number-object": "^1.1.1", + "is-string": "^1.1.1", + "is-symbol": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", + "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.2", + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", + "is-async-function": "^2.0.0", + "is-date-object": "^1.1.0", + "is-finalizationregistry": "^1.1.0", + "is-generator-function": "^1.0.10", + "is-regex": "^1.2.1", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.1.0", + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", "dev": true, "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/which-typed-array": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz", - "integrity": "sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==", + "version": "1.1.18", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.18.tgz", + "integrity": "sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA==", "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.4", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -12431,7 +13731,8 @@ "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==" + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true }, "node_modules/ws": { "version": "8.18.0", @@ -12537,6 +13838,7 @@ "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, "engines": { "node": ">=10" }, diff --git a/package.json b/package.json index dcd6a87..00e2a96 100644 --- a/package.json +++ b/package.json @@ -4,6 +4,8 @@ "scripts": { "build": "turbo build", "dev": "turbo dev", + "format:check": "turbo format:check", + "format:fix": "turbo format:fix", "lint": "turbo lint", "test": "turbo run test", "test:cov": "turbo run test --coverage", diff --git a/packages/shared/.eslintrc.js b/packages/shared/.eslintrc.js index b531cc2..a924db1 100644 --- a/packages/shared/.eslintrc.js +++ b/packages/shared/.eslintrc.js @@ -1,45 +1,48 @@ module.exports = { env: { es2021: true, - node: true + node: true, }, extends: 'standard-with-typescript', - overrides: [ - ], + overrides: [], parserOptions: { ecmaVersion: 'latest', sourceType: 'module', project: ['tsconfig.json'], - tsconfigRootDir: __dirname + tsconfigRootDir: __dirname, }, - plugins: [ - 'sonarjs' - ], + plugins: ['sonarjs'], rules: { '@typescript-eslint/triple-slash-reference': 'off', '@typescript-eslint/space-before-function-paren': 'off', '@typescript-eslint/strict-boolean-expressions': 'off', '@typescript-eslint/no-extraneous-class': 'off', - 'semi': ["error", "never"], - 'quotes': ["error", "single"], + 'semi': ['error', 'never'], + 'quotes': ['error', 'single'], 'import/extensions': 'off', 'import/prefer-default-export': 'off', - indent: ['error', 2], + 'indent': ['error', 2], 'class-methods-use-this': 'off', - complexity: ['error', 4], + 'complexity': ['error', 4], 'sonarjs/cognitive-complexity': ['error', 4], 'max-depth': ['error', 3], 'max-statements': ['error', 10], - 'max-lines': ['error', { - max: 130, - skipBlankLines: true, - skipComments: true - }], - 'max-lines-per-function': ['error', { - max: 35, - skipBlankLines: true, - skipComments: true - }], + 'max-lines': [ + 'error', + { + max: 130, + skipBlankLines: true, + skipComments: true, + }, + ], + 'max-lines-per-function': [ + 'error', + { + max: 35, + skipBlankLines: true, + skipComments: true, + }, + ], 'max-nested-callbacks': ['error', 3], 'max-params': ['error', 3], 'no-useless-constructor': 'off', @@ -48,21 +51,24 @@ module.exports = { 'error', 'always', { - exceptAfterSingleLine: true - } + exceptAfterSingleLine: true, + }, ], 'no-shadow': 'off', '@typescript-eslint/no-shadow': ['error'], - 'max-len': ['error', { - code: 80 - }], - overrides: [ + 'max-len': [ + 'error', + { + code: 80, + }, + ], + 'overrides': [ { files: ['*.spec.ts'], rules: { 'max-nested-callbacks': ['error', 5], - } - } - ] - } + }, + }, + ], + }, } diff --git a/packages/shared/.prettierrc.json b/packages/shared/.prettierrc.json new file mode 100644 index 0000000..21c021c --- /dev/null +++ b/packages/shared/.prettierrc.json @@ -0,0 +1,7 @@ +{ + "arrowParens": "avoid", + "quoteProps": "consistent", + "semi": false, + "singleQuote": true, + "tabWidth": 2 +} diff --git a/packages/shared/package.json b/packages/shared/package.json index 5a5e83d..29792bb 100644 --- a/packages/shared/package.json +++ b/packages/shared/package.json @@ -5,7 +5,7 @@ "main": "./dist/cjs/index.js", "types": "./dist/types/index.d.ts", "exports": { - ".": { + ".": { "require": { "types": "./dist/types/index.d.ts", "default": "./dist/cjs/index.js" diff --git a/packages/shared/src/domain/base/DomainError.spec.ts b/packages/shared/src/domain/base/DomainError.spec.ts index 254f0ff..ed70385 100644 --- a/packages/shared/src/domain/base/DomainError.spec.ts +++ b/packages/shared/src/domain/base/DomainError.spec.ts @@ -1,26 +1,26 @@ -import { describe, it, expect } from "vitest" -import { DomainError } from "./DomainError" +import { describe, it, expect } from 'vitest' +import { DomainError } from './DomainError' -describe("src/domain/DomainError", () => { - it("should be defined", () => { +describe('src/domain/DomainError', () => { + it('should be defined', () => { expect(DomainError).toBeDefined() }) - it("should be instance of Error", () => { - expect(new DomainError("TEST_ERROR")).toBeInstanceOf(Error) + it('should be instance of Error', () => { + expect(new DomainError('TEST_ERROR')).toBeInstanceOf(Error) }) - describe("constructor", () => { - it("should accept a code parameter", () => { - const errorCode = "TEST_ERROR" + describe('constructor', () => { + it('should accept a code parameter', () => { + const errorCode = 'TEST_ERROR' const domainError = new DomainError(errorCode) expect(domainError.toObject().code).toBe(errorCode) }) - it("should accept a exposable parameter", () => { + it('should accept a exposable parameter', () => { const exposable = true - const domainError = new DomainError("TEST_ERROR", exposable) + const domainError = new DomainError('TEST_ERROR', exposable) expect(domainError.toObject().exposable).toBe(exposable) }) diff --git a/packages/shared/src/domain/base/Entity.spec.ts b/packages/shared/src/domain/base/Entity.spec.ts index 42fe6da..18648bf 100644 --- a/packages/shared/src/domain/base/Entity.spec.ts +++ b/packages/shared/src/domain/base/Entity.spec.ts @@ -1,6 +1,6 @@ -import { describe, it, expect } from "vitest" -import { Entity } from "./Entity" -import { ValueObject } from "./ValueObject" +import { describe, it, expect } from 'vitest' +import { Entity } from './Entity' +import { ValueObject } from './ValueObject' import { Uuid } from '../valueObjects/Uuid' interface TestProps { @@ -19,26 +19,26 @@ class TestEntity extends Entity { const testId = Uuid.create() -describe("src/domain/Entity", () => { - it("should be defined", () => { +describe('src/domain/Entity', () => { + it('should be defined', () => { expect(Entity).toBeDefined() }) - it("should be instance of ValueObject", () => { - const entity = TestEntity.create({ value: "test" }, testId) + it('should be instance of ValueObject', () => { + const entity = TestEntity.create({ value: 'test' }, testId) expect(entity).toBeInstanceOf(ValueObject) }) - it("should generate a new id if none is passed to constructor", () => { - const entity = TestEntity.create({ value: "test" }, testId) + it('should generate a new id if none is passed to constructor', () => { + const entity = TestEntity.create({ value: 'test' }, testId) expect(entity.uuid).toBeDefined() }) - it("should set the id if it was passed to constructor", () => { + it('should set the id if it was passed to constructor', () => { const expectedId = testId - const entity = TestEntity.create({ value: "test" }, expectedId) + const entity = TestEntity.create({ value: 'test' }, expectedId) expect(entity.uuid).toBe(expectedId) }) diff --git a/packages/shared/src/domain/base/Entity.ts b/packages/shared/src/domain/base/Entity.ts index 83795ab..a7a179d 100644 --- a/packages/shared/src/domain/base/Entity.ts +++ b/packages/shared/src/domain/base/Entity.ts @@ -1,4 +1,4 @@ -import { ValueObject } from "./ValueObject" +import { ValueObject } from './ValueObject' import { Uuid } from '../valueObjects/Uuid' export class Entity extends ValueObject { diff --git a/packages/shared/src/domain/base/ValueObject.spec.ts b/packages/shared/src/domain/base/ValueObject.spec.ts index 7630d50..a7b2848 100644 --- a/packages/shared/src/domain/base/ValueObject.spec.ts +++ b/packages/shared/src/domain/base/ValueObject.spec.ts @@ -1,5 +1,5 @@ -import { describe, it, expect } from "vitest" -import { ValueObject } from "./ValueObject" +import { describe, it, expect } from 'vitest' +import { ValueObject } from './ValueObject' interface TestProps { value: string @@ -15,13 +15,13 @@ class TestValueObject extends ValueObject { } } -describe("src/domain/ValueObject", () => { - it("should be defined", () => { +describe('src/domain/ValueObject', () => { + it('should be defined', () => { expect(ValueObject).toBeDefined() }) - it("should set props attribute from the constructor", () => { - const expectedProps = { value: "test" } + it('should set props attribute from the constructor', () => { + const expectedProps = { value: 'test' } const entity = TestValueObject.create(expectedProps) expect(entity.value).toStrictEqual(expectedProps.value) diff --git a/packages/shared/src/domain/base/event/EventBus.ts b/packages/shared/src/domain/base/event/EventBus.ts index 6f9b706..c11b83e 100644 --- a/packages/shared/src/domain/base/event/EventBus.ts +++ b/packages/shared/src/domain/base/event/EventBus.ts @@ -9,11 +9,17 @@ export default class EventBus { this.instance.publish(event) } - static subscribe(eventKey: symbol, listener: EventSubscription): void { + static subscribe( + eventKey: symbol, + listener: EventSubscription, + ): void { this.instance.subscribe(eventKey, listener as EventSubscription) } - static unsubscribe(eventKey: symbol, listener: EventSubscription): void { + static unsubscribe( + eventKey: symbol, + listener: EventSubscription, + ): void { this.instance.unsubscribe(eventKey, listener) } } diff --git a/packages/shared/src/domain/base/event/EventBusInstance.ts b/packages/shared/src/domain/base/event/EventBusInstance.ts index 648a181..02bad6b 100644 --- a/packages/shared/src/domain/base/event/EventBusInstance.ts +++ b/packages/shared/src/domain/base/event/EventBusInstance.ts @@ -21,7 +21,10 @@ export class EventBusInstance { listeners.push(listener) } - public unsubscribe(eventKey: symbol, listener: EventSubscription): void { + public unsubscribe( + eventKey: symbol, + listener: EventSubscription, + ): void { const listeners = this.listeners.get(eventKey) if (listeners) { const index = listeners.indexOf(listener) diff --git a/packages/shared/src/domain/base/event/Observable.ts b/packages/shared/src/domain/base/event/Observable.ts index 7e85029..23ef7ac 100644 --- a/packages/shared/src/domain/base/event/Observable.ts +++ b/packages/shared/src/domain/base/event/Observable.ts @@ -3,4 +3,4 @@ import { EventSubscription } from './EventSubscription' export interface Observable { listen(listener: EventSubscription): void -} \ No newline at end of file +} diff --git a/packages/shared/src/domain/base/event/ObservableSet.ts b/packages/shared/src/domain/base/event/ObservableSet.ts index 4067db6..55b68eb 100644 --- a/packages/shared/src/domain/base/event/ObservableSet.ts +++ b/packages/shared/src/domain/base/event/ObservableSet.ts @@ -2,14 +2,14 @@ import { Event } from './Event' import { EventSubscription } from './EventSubscription' import { Observable } from './Observable' -export class ObservableSet implements Observable{ +export class ObservableSet implements Observable { private listeners: Observable[] = [] - - constructor(...listeners:Observable[]) { + + constructor(...listeners: Observable[]) { this.listeners = listeners } listen(listener: EventSubscription): void { this.listeners.forEach(l => l.listen(listener)) } -} \ No newline at end of file +} diff --git a/packages/shared/src/domain/entities/L2Block.spec.ts b/packages/shared/src/domain/entities/L2Block.spec.ts index 53c9c6b..f8f7327 100644 --- a/packages/shared/src/domain/entities/L2Block.spec.ts +++ b/packages/shared/src/domain/entities/L2Block.spec.ts @@ -6,8 +6,8 @@ import { Address } from '../valueObjects/Address' import { L2Block } from './L2Block' describe('src/domain/entities/L2Block', () => { - const txType = TxType.create(TxTypesEnum.Eth) - const address = Address.create("0xbhbfhudhuf") + const txType = TxType.create(TxTypesEnum.Eth) + const address = Address.create('0xbhbfhudhuf') it('should be defined', () => { expect(L2Block).toBeDefined() @@ -16,7 +16,7 @@ describe('src/domain/entities/L2Block', () => { it('should be an instance of Entity', () => { const l2Block = L2Block.create({ txType, - address + address, }) expect(l2Block).toBeInstanceOf(Entity) @@ -25,7 +25,7 @@ describe('src/domain/entities/L2Block', () => { describe('create', () => { const l2Block = L2Block.create({ txType, - address + address, }) it('should set the txType on tagname txType', () => { diff --git a/packages/shared/src/domain/entities/L2Block.ts b/packages/shared/src/domain/entities/L2Block.ts index 310addb..c76d9fb 100644 --- a/packages/shared/src/domain/entities/L2Block.ts +++ b/packages/shared/src/domain/entities/L2Block.ts @@ -27,7 +27,7 @@ export class L2Block extends Entity { static fromJSON(json: L2BlockJSON): L2Block { return L2Block.create({ txType: TxType.create(json.txType as TxTypesEnum), - address: Address.create(json.address) + address: Address.create(json.address), }) } diff --git a/packages/shared/src/domain/enums/NetworkEnum.ts b/packages/shared/src/domain/enums/NetworkEnum.ts index fefc579..ec5afae 100644 --- a/packages/shared/src/domain/enums/NetworkEnum.ts +++ b/packages/shared/src/domain/enums/NetworkEnum.ts @@ -1,4 +1,4 @@ export enum NetworkEnum { MAINNET = 'mainnet', - TESTNET = 'testnet' + TESTNET = 'testnet', } diff --git a/packages/shared/src/domain/enums/TxTypesEnum.ts b/packages/shared/src/domain/enums/TxTypesEnum.ts index d6f0bdd..5b95f2b 100644 --- a/packages/shared/src/domain/enums/TxTypesEnum.ts +++ b/packages/shared/src/domain/enums/TxTypesEnum.ts @@ -2,5 +2,5 @@ export enum TxTypesEnum { Block = 'block', Eth = 'eth', Btc = 'btc', - Pop = 'pop' + Pop = 'pop', } diff --git a/packages/shared/src/domain/valueObjects/Address.spec.ts b/packages/shared/src/domain/valueObjects/Address.spec.ts index fdfe3dd..429ed4d 100644 --- a/packages/shared/src/domain/valueObjects/Address.spec.ts +++ b/packages/shared/src/domain/valueObjects/Address.spec.ts @@ -1,19 +1,19 @@ -import { describe, it, expect } from 'vitest'; -import { Address } from './Address'; -import { InvalidAddressError } from '../errors/InvalidAddressError'; +import { describe, it, expect } from 'vitest' +import { Address } from './Address' +import { InvalidAddressError } from '../errors/InvalidAddressError' describe('Address', () => { it('should create a valid Address object', () => { - const addressValue = 'Valid Address'; - const address = Address.create(addressValue); - expect(address.value).toBe(addressValue); - }); + const addressValue = 'Valid Address' + const address = Address.create(addressValue) + expect(address.value).toBe(addressValue) + }) it('should throw InvalidAddressError for invalid input', () => { - const invalidInput = 123; + const invalidInput = 123 const createInvalidAddress = () => { - Address.create(invalidInput as unknown as string); - }; - expect(createInvalidAddress).toThrow(InvalidAddressError); - }); -}); + Address.create(invalidInput as unknown as string) + } + expect(createInvalidAddress).toThrow(InvalidAddressError) + }) +}) diff --git a/packages/shared/src/domain/valueObjects/Txtype.spec.ts b/packages/shared/src/domain/valueObjects/Txtype.spec.ts index d26eff8..6c4fb23 100644 --- a/packages/shared/src/domain/valueObjects/Txtype.spec.ts +++ b/packages/shared/src/domain/valueObjects/Txtype.spec.ts @@ -1,12 +1,12 @@ -import { describe, it, expect } from 'vitest'; -import { TxTypesEnum } from '../enums/TxTypesEnum'; -import { TxType } from './Txtype'; +import { describe, it, expect } from 'vitest' +import { TxTypesEnum } from '../enums/TxTypesEnum' +import { TxType } from './Txtype' describe('TxType', () => { it('should create a TxType object with a valid transaction type', () => { Object.values(TxTypesEnum).forEach(txTypeValue => { - const txType = TxType.create(txTypeValue); - expect(txType.value).toBe(txTypeValue); - }); - }); -}); + const txType = TxType.create(txTypeValue) + expect(txType.value).toBe(txTypeValue) + }) + }) +}) diff --git a/packages/shared/src/domain/valueObjects/Uuid.spec.ts b/packages/shared/src/domain/valueObjects/Uuid.spec.ts index 31d8530..1ca119f 100644 --- a/packages/shared/src/domain/valueObjects/Uuid.spec.ts +++ b/packages/shared/src/domain/valueObjects/Uuid.spec.ts @@ -10,7 +10,7 @@ describe('src/domain/valueObjects/Uuid', () => { }) it('should be instance of ValueObject', () => { - expect(Uuid.create()).toBeInstanceOf(ValueObject) + expect(Uuid.create()).toBeInstanceOf(ValueObject) }) describe('create', () => { @@ -19,8 +19,8 @@ describe('src/domain/valueObjects/Uuid', () => { const uuid = Uuid.create() expect(validate(uuid.value)).toBeTruthy() - }); - }); + }) + }) describe('when a valid id is provided', () => { it('should set the id as value', () => { @@ -28,8 +28,8 @@ describe('src/domain/valueObjects/Uuid', () => { const uuid = Uuid.create(validId) expect(uuid.value).toEqual(validId) - }); - }); + }) + }) describe('when an invalid id is provided', () => { it('should set the id as value', () => { @@ -39,7 +39,7 @@ describe('src/domain/valueObjects/Uuid', () => { } expect(test).toThrowError(InvalidUuidError) - }); - }); + }) + }) }) }) diff --git a/packages/shared/src/index.ts b/packages/shared/src/index.ts index 8de6a6a..47d5b10 100644 --- a/packages/shared/src/index.ts +++ b/packages/shared/src/index.ts @@ -1,18 +1,18 @@ -export * from "./domain/base/DomainError" -export * from "./domain/base/Entity" -export * from "./domain/base/ValueObject" -export * from "./domain/valueObjects/Uuid" -export * from "./domain/base/event/Event" -export * from "./domain/base/event/Observable" -export * from "./domain/base/event/ObservableSet" -export * from "./domain/base/event/EventSubscription" -export * from "./domain/base/event/EventBus" -export * from "./domain/base/event/EventBusInstance" -export * from "./domain/entities/L2Block" -export * from "./domain/valueObjects/Timestamp" -export * from "./domain/enums/TxTypesEnum" -export * from "./domain/valueObjects/Txtype" -export * from "./domain/valueObjects/Address" -export * from "./networks/HemiTestnet" -export * from "./networks/HemiMainnet" -export * from "./domain/enums/NetworkEnum" +export * from './domain/base/DomainError' +export * from './domain/base/Entity' +export * from './domain/base/ValueObject' +export * from './domain/valueObjects/Uuid' +export * from './domain/base/event/Event' +export * from './domain/base/event/Observable' +export * from './domain/base/event/ObservableSet' +export * from './domain/base/event/EventSubscription' +export * from './domain/base/event/EventBus' +export * from './domain/base/event/EventBusInstance' +export * from './domain/entities/L2Block' +export * from './domain/valueObjects/Timestamp' +export * from './domain/enums/TxTypesEnum' +export * from './domain/valueObjects/Txtype' +export * from './domain/valueObjects/Address' +export * from './networks/HemiTestnet' +export * from './networks/HemiMainnet' +export * from './domain/enums/NetworkEnum' diff --git a/packages/shared/tsconfig.build.json b/packages/shared/tsconfig.build.json index cb32f58..5417c7d 100644 --- a/packages/shared/tsconfig.build.json +++ b/packages/shared/tsconfig.build.json @@ -1,6 +1,4 @@ { "extends": "./tsconfig.json", - "exclude": [ - "src/**/*.spec.ts" - ] + "exclude": ["src/**/*.spec.ts"] } diff --git a/packages/shared/tsconfig.json b/packages/shared/tsconfig.json index f66e9c8..14f90f1 100644 --- a/packages/shared/tsconfig.json +++ b/packages/shared/tsconfig.json @@ -1,7 +1,5 @@ { - "include": [ - "src/**/*" - ], + "include": ["src/**/*"], "compilerOptions": { /* Visit https://aka.ms/tsconfig to read more about this file */ @@ -15,7 +13,7 @@ // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ /* Language and Environment */ - "target": "es2016", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ + "target": "es2016" /* 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 TC39 stage 2 draft decorators. */ @@ -29,9 +27,9 @@ // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ /* Modules */ - "module": "commonjs", /* Specify what module code is generated. */ - "rootDir": "./src", /* Specify the root folder within your source files. */ - "moduleResolution": "node", /* Specify how TypeScript looks up a file from a given module specifier. */ + "module": "commonjs" /* Specify what module code is generated. */, + "rootDir": "./src" /* Specify the root folder within your source files. */, + "moduleResolution": "node" /* 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. */ @@ -48,12 +46,12 @@ // "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. */ + "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. */ + "sourceMap": true /* Create source map files for emitted JavaScript files. */, // "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": "./dist", /* Specify an output folder for all emitted files. */ + "outDir": "./dist" /* Specify an output folder for all emitted files. */, // "removeComments": true, /* Disable emitting comments. */ // "noEmit": true, /* Disable emitting files from a compilation. */ // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ @@ -75,33 +73,33 @@ /* Interop Constraints */ // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ // "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. */ + "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. */ + "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. */ - "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": false, /* 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. */ + "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. */, + "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": false /* 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. */ + "skipLibCheck": true /* Skip type checking all .d.ts files. */ } } diff --git a/turbo.json b/turbo.json index a8b9320..9debc65 100644 --- a/turbo.json +++ b/turbo.json @@ -13,6 +13,14 @@ "cache": false, "persistent": true }, + "format:check": { + "cache": false, + "persistent": true + }, + "format:fix": { + "cache": false, + "persistent": true + }, "test": { "cache": false },
, S>(presenter: P): S { +export function usePresenter
, S>(presenter: P): S { const [state, setState] = useState(presenter.state) useEffect(() => { @@ -9,4 +9,4 @@ export function usePresenter
, S>(presenter: P): S { }, [presenter]) return state -} \ No newline at end of file +} diff --git a/apps/web/src/presentation/react/index.css b/apps/web/src/presentation/react/index.css index ae14df0..08a83dc 100644 --- a/apps/web/src/presentation/react/index.css +++ b/apps/web/src/presentation/react/index.css @@ -6,7 +6,7 @@ :root { color-scheme: light dark; - font-family: "Poppins", sans-serif; + font-family: 'Poppins', sans-serif; font-weight: 400; line-height: 100%; } diff --git a/apps/web/src/presentation/react/main.tsx b/apps/web/src/presentation/react/main.tsx index 44ed9f0..a9f109c 100644 --- a/apps/web/src/presentation/react/main.tsx +++ b/apps/web/src/presentation/react/main.tsx @@ -2,6 +2,4 @@ import ReactDOM from 'react-dom/client' import App from './App.tsx' import './index.css' -ReactDOM.createRoot(document.getElementById('root')!).render( - -) +ReactDOM.createRoot(document.getElementById('root')!).render() diff --git a/apps/web/tailwind.config.js b/apps/web/tailwind.config.js index 2761ad4..7141e45 100644 --- a/apps/web/tailwind.config.js +++ b/apps/web/tailwind.config.js @@ -1,14 +1,8 @@ /** @type {import('tailwindcss').Config} */ export default { - content: [ - "./index.html", - "./src/**/*.{js,ts,jsx,tsx}", - ], + content: ['./index.html', './src/**/*.{js,ts,jsx,tsx}'], theme: { - extend: { - - }, + extend: {}, }, plugins: [], } - diff --git a/apps/web/vitest.config.ts b/apps/web/vitest.config.ts index 1c0eacf..3e7c490 100644 --- a/apps/web/vitest.config.ts +++ b/apps/web/vitest.config.ts @@ -8,4 +8,4 @@ export default defineConfig({ include: ['src/**/*.ts'], }, }, -}) \ No newline at end of file +}) diff --git a/package-lock.json b/package-lock.json index cd0ff8b..facfd28 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,7 +23,6 @@ "license": "MIT", "dependencies": { "@cryptochords/shared": "*", - "@typescript-eslint/eslint-plugin": "8.18.0", "dotenv": "16.4.7", "express": "4.21.2", "web3": "4.16.0" @@ -33,221 +32,18 @@ "@types/express": "5.0.0", "@types/node": "22.10.2", "@types/ws": "8.5.13", + "@typescript-eslint/eslint-plugin": "^8.18.2", + "@typescript-eslint/parser": "^8.18.2", "@vitest/coverage-v8": "2.1.8", - "eslint": "8.56.0", + "eslint": "^8.57.1", + "eslint-config-bloq": "^4.4.1", "nodemon": "3.1.9", + "prettier": "^3.3.3", "ts-node": "10.9.2", "typescript": "5.3.3", "vitest": "2.1.8" } }, - "apps/api/node_modules/@eslint/js": { - "version": "8.56.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.56.0.tgz", - "integrity": "sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "apps/api/node_modules/@humanwhocodes/config-array": { - "version": "0.11.14", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", - "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", - "deprecated": "Use @eslint/config-array instead", - "dependencies": { - "@humanwhocodes/object-schema": "^2.0.2", - "debug": "^4.3.1", - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "apps/api/node_modules/@humanwhocodes/config-array/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==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "apps/api/node_modules/@humanwhocodes/config-array/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "apps/api/node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.18.0.tgz", - "integrity": "sha512-NR2yS7qUqCL7AIxdJUQf2MKKNDVNaig/dEB0GBLU7D+ZdHgK1NoH/3wsgO3OnPVipn51tG3MAwaODEGil70WEw==", - "dependencies": { - "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.18.0", - "@typescript-eslint/type-utils": "8.18.0", - "@typescript-eslint/utils": "8.18.0", - "@typescript-eslint/visitor-keys": "8.18.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", - "typescript": ">=4.8.4 <5.8.0" - } - }, - "apps/api/node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/type-utils": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.18.0.tgz", - "integrity": "sha512-er224jRepVAVLnMF2Q7MZJCq5CsdH2oqjP4dT7K6ij09Kyd+R21r7UVJrF0buMVdZS5QRhDzpvzAxHxabQadow==", - "dependencies": { - "@typescript-eslint/typescript-estree": "8.18.0", - "@typescript-eslint/utils": "8.18.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" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <5.8.0" - } - }, - "apps/api/node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/utils": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.18.0.tgz", - "integrity": "sha512-p6GLdY383i7h5b0Qrfbix3Vc3+J2k6QWw6UMUeY5JGfm3C5LbZ4QIZzJNoNOfgyRe0uuYKjvVOsO/jD4SJO+xg==", - "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "8.18.0", - "@typescript-eslint/types": "8.18.0", - "@typescript-eslint/typescript-estree": "8.18.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", - "typescript": ">=4.8.4 <5.8.0" - } - }, - "apps/api/node_modules/@typescript-eslint/parser": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.18.0.tgz", - "integrity": "sha512-hgUZ3kTEpVzKaK3uNibExUYm6SKKOmTU2BOxBSvOYwtJEPdVQ70kZJpPjstlnhCHcuc2WGfSbpKlb/69ttyN5Q==", - "peer": true, - "dependencies": { - "@typescript-eslint/scope-manager": "8.18.0", - "@typescript-eslint/types": "8.18.0", - "@typescript-eslint/typescript-estree": "8.18.0", - "@typescript-eslint/visitor-keys": "8.18.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", - "typescript": ">=4.8.4 <5.8.0" - } - }, - "apps/api/node_modules/@typescript-eslint/scope-manager": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.18.0.tgz", - "integrity": "sha512-PNGcHop0jkK2WVYGotk/hxj+UFLhXtGPiGtiaWgVBVP1jhMoMCHlTyJA+hEj4rszoSdLTK3fN4oOatrL0Cp+Xw==", - "dependencies": { - "@typescript-eslint/types": "8.18.0", - "@typescript-eslint/visitor-keys": "8.18.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "apps/api/node_modules/@typescript-eslint/types": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.18.0.tgz", - "integrity": "sha512-FNYxgyTCAnFwTrzpBGq+zrnoTO4x0c1CKYY5MuUTzpScqmY5fmsh2o3+57lqdI3NZucBDCzDgdEbIaNfAjAHQA==", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "apps/api/node_modules/@typescript-eslint/typescript-estree": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.18.0.tgz", - "integrity": "sha512-rqQgFRu6yPkauz+ms3nQpohwejS8bvgbPyIDq13cgEDbkXt4LH4OkDMT0/fN1RUtzG8e8AKJyDBoocuQh8qNeg==", - "dependencies": { - "@typescript-eslint/types": "8.18.0", - "@typescript-eslint/visitor-keys": "8.18.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" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <5.8.0" - } - }, - "apps/api/node_modules/@typescript-eslint/visitor-keys": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.18.0.tgz", - "integrity": "sha512-pCh/qEA8Lb1wVIqNvBke8UaRjJ6wrAWkJO5yyIbs8Yx6TNGYyfNjOo61tLv+WwLvoLPp4BQ8B7AHKijl8NGUfw==", - "dependencies": { - "@typescript-eslint/types": "8.18.0", - "eslint-visitor-keys": "^4.2.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, "apps/api/node_modules/@vitest/coverage-v8": { "version": "2.1.8", "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-2.1.8.tgz", @@ -348,20 +144,6 @@ "url": "https://opencollective.com/vitest" } }, - "apps/api/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==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, "apps/api/node_modules/assertion-error": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", @@ -387,21 +169,6 @@ "node": ">=12" } }, - "apps/api/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, "apps/api/node_modules/check-error": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz", @@ -411,22 +178,6 @@ "node": ">= 16" } }, - "apps/api/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==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "apps/api/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==" - }, "apps/api/node_modules/deep-eql": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz", @@ -436,183 +187,53 @@ "node": ">=6" } }, - "apps/api/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==", + "apps/api/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "apps/api/node_modules/istanbul-lib-source-maps": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-5.0.6.tgz", + "integrity": "sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.23", + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0" + }, "engines": { "node": ">=10" + } + }, + "apps/api/node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "dependencies": { + "@isaacs/cliui": "^8.0.2" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "apps/api/node_modules/eslint": { - "version": "8.56.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.56.0.tgz", - "integrity": "sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==", - "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.56.0", - "@humanwhocodes/config-array": "^0.11.13", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "apps/api/node_modules/eslint-visitor-keys": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", - "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "apps/api/node_modules/eslint/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==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "apps/api/node_modules/eslint/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==", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "apps/api/node_modules/eslint/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "apps/api/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "dev": true, - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "apps/api/node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "apps/api/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==", - "engines": { - "node": ">=8" - } - }, - "apps/api/node_modules/istanbul-lib-source-maps": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-5.0.6.tgz", - "integrity": "sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.23", - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "apps/api/node_modules/jackspeak": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", - "dev": true, - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" } }, "apps/api/node_modules/loupe": { @@ -621,20 +242,6 @@ "integrity": "sha512-23I4pFZHmAemUnz8WZXbYRSKYj801VDaNv9ETuMh7IrMc7VuVVSo+Z9iLE3ni30+U48iDWfi30d3twAXBYmnCg==", "dev": true }, - "apps/api/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "apps/api/node_modules/pathval": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.0.tgz", @@ -644,17 +251,6 @@ "node": ">= 14.16" } }, - "apps/api/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==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "apps/api/node_modules/test-exclude": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-7.0.1.tgz", @@ -691,6 +287,7 @@ "version": "5.3.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", + "dev": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -830,6 +427,7 @@ "eslint-plugin-react-hooks": "5.1.0", "eslint-plugin-react-refresh": "0.4.16", "postcss": "8.4.49", + "prettier": "^3.3.3", "tailwindcss": "3.4.16", "typescript": "5.2.2", "vite": "5.0.8", @@ -1197,18 +795,6 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "apps/web/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, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "apps/web/node_modules/eslint": { "version": "8.55.0", "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.55.0.tgz", @@ -1526,6 +1112,7 @@ "version": "1.2.6", "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -3324,17 +2911,6 @@ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" }, - "node_modules/@emotion/babel-plugin/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==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/@emotion/babel-plugin/node_modules/source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", @@ -3433,6 +3009,20 @@ "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.3.1.tgz", "integrity": "sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==" }, + "node_modules/@es-joy/jsdoccomment": { + "version": "0.38.0", + "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.38.0.tgz", + "integrity": "sha512-TFac4Bnv0ZYNkEeDnOWHQhaS1elWlvOCQxH06iHeu5iffs+hCaLVIZJwF+FqksQi68R4i66Pu+4DfFGvble+Uw==", + "dev": true, + "dependencies": { + "comment-parser": "1.3.1", + "esquery": "^1.5.0", + "jsdoc-type-pratt-parser": "~4.0.0" + }, + "engines": { + "node": ">=16" + } + }, "node_modules/@esbuild/aix-ppc64": { "version": "0.19.12", "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz", @@ -3805,6 +3395,7 @@ "version": "4.4.0", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, "dependencies": { "eslint-visitor-keys": "^3.3.0" }, @@ -3819,6 +3410,7 @@ "version": "4.12.1", "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "dev": true, "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } @@ -3827,6 +3419,7 @@ "version": "2.1.4", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dev": true, "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", @@ -3849,6 +3442,7 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -3858,6 +3452,7 @@ "version": "13.24.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, "dependencies": { "type-fest": "^0.20.2" }, @@ -3872,6 +3467,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -3883,6 +3479,7 @@ "version": "8.57.1", "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", + "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } @@ -3925,6 +3522,7 @@ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", "deprecated": "Use @eslint/config-array instead", + "dev": true, "dependencies": { "@humanwhocodes/object-schema": "^2.0.3", "debug": "^4.3.1", @@ -3938,6 +3536,7 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -3947,6 +3546,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -3958,6 +3558,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, "engines": { "node": ">=12.22" }, @@ -3970,7 +3571,8 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", - "deprecated": "Use @eslint/object-schema instead" + "deprecated": "Use @eslint/object-schema instead", + "dev": true }, "node_modules/@isaacs/cliui": { "version": "8.0.2", @@ -4080,6 +3682,58 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, + "node_modules/@next/eslint-plugin-next": { + "version": "13.5.8", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-13.5.8.tgz", + "integrity": "sha512-rmNr6kz5g7x2CQ/5RMmav7/wTGOFIv4fcP+bxawNaJP+Y5Gb0Dvq+omBUvL66pDo/fhWurElatelEFpHX+tMSw==", + "dev": true, + "dependencies": { + "glob": "7.1.7" + } + }, + "node_modules/@next/eslint-plugin-next/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@next/eslint-plugin-next/node_modules/glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@next/eslint-plugin-next/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/@noble/curves": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.2.tgz", @@ -4106,6 +3760,7 @@ "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, "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" @@ -4118,6 +3773,7 @@ "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, "engines": { "node": ">= 8" } @@ -4126,6 +3782,7 @@ "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, "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" @@ -4134,9 +3791,18 @@ "node": ">= 8" } }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "node_modules/@nolyfill/is-core-module": { + "version": "1.0.39", + "resolved": "https://registry.npmjs.org/@nolyfill/is-core-module/-/is-core-module-1.0.39.tgz", + "integrity": "sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==", + "dev": true, + "engines": { + "node": ">=12.4.0" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", "dev": true, "optional": true, @@ -4313,6 +3979,12 @@ "win32" ] }, + "node_modules/@rushstack/eslint-patch": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.10.4.tgz", + "integrity": "sha512-WJgX9nzTqknM393q1QJDJmoW28kUfEnybeTfVNcNAPnIx210RXm2DiXiHzfNPJNIUUb1tJnz/l4QGtJ30PgWmA==", + "dev": true + }, "node_modules/@scure/base": { "version": "1.1.9", "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz", @@ -4621,10 +4293,195 @@ "@types/node": "*" } }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.19.0.tgz", + "integrity": "sha512-NggSaEZCdSrFddbctrVjkVZvFC6KGfKfNK0CU7mNK/iKHGKbzT4Wmgm08dKpcZECBu9f5FypndoMyRHkdqfT1Q==", + "dev": true, + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.19.0", + "@typescript-eslint/type-utils": "8.19.0", + "@typescript-eslint/utils": "8.19.0", + "@typescript-eslint/visitor-keys": "8.19.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", + "typescript": ">=4.8.4 <5.8.0" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "8.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.19.0.tgz", + "integrity": "sha512-6M8taKyOETY1TKHp0x8ndycipTVgmp4xtg5QpEZzXxDhNvvHOJi5rLRkLr8SK3jTgD5l4fTlvBiRdfsuWydxBw==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "8.19.0", + "@typescript-eslint/types": "8.19.0", + "@typescript-eslint/typescript-estree": "8.19.0", + "@typescript-eslint/visitor-keys": "8.19.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", + "typescript": ">=4.8.4 <5.8.0" + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.19.0.tgz", + "integrity": "sha512-hkoJiKQS3GQ13TSMEiuNmSCvhz7ujyqD1x3ShbaETATHrck+9RaDdUbt+osXaUuns9OFwrDTTrjtwsU8gJyyRA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "8.19.0", + "@typescript-eslint/visitor-keys": "8.19.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.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.19.0.tgz", + "integrity": "sha512-TZs0I0OSbd5Aza4qAMpp1cdCYVnER94IziudE3JU328YUHgWu9gwiwhag+fuLeJ2LkWLXI+F/182TbG+JaBdTg==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "8.19.0", + "@typescript-eslint/utils": "8.19.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" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.8.0" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "8.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.19.0.tgz", + "integrity": "sha512-8XQ4Ss7G9WX8oaYvD4OOLCjIQYgRQxO+qCiR2V2s2GxI9AUpo7riNwo6jDhKtTcaJjT8PY54j2Yb33kWtSJsmA==", + "dev": true, + "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.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.19.0.tgz", + "integrity": "sha512-WW9PpDaLIFW9LCbucMSdYUuGeFUz1OkWYS/5fwZwTA+l2RwlWFdJvReQqMUMBw4yJWJOfqd7An9uwut2Oj8sLw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "8.19.0", + "@typescript-eslint/visitor-keys": "8.19.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" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <5.8.0" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "8.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.19.0.tgz", + "integrity": "sha512-PTBG+0oEMPH9jCZlfg07LCB2nYI0I317yyvXGfxnvGvw4SHIOuRnQ3kadyyXY6tGdChusIHIbM5zfIbp4M6tCg==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@typescript-eslint/scope-manager": "8.19.0", + "@typescript-eslint/types": "8.19.0", + "@typescript-eslint/typescript-estree": "8.19.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", + "typescript": ">=4.8.4 <5.8.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.19.0.tgz", + "integrity": "sha512-mCFtBbFBJDCNCWUl5y6sZSCHXw1DEFEk3c/M3nRK2a4XUB8StGFtmcEMizdjKuBzB6e/smJAAWYug3VrdLMr1w==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "8.19.0", + "eslint-visitor-keys": "^4.2.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/visitor-keys/node_modules/eslint-visitor-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, "node_modules/@ungap/structured-clone": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==" + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true }, "node_modules/@vitejs/plugin-react": { "version": "4.3.4", @@ -4909,6 +4766,26 @@ "vitest": "^1.0.0" } }, + "node_modules/@vitest/eslint-plugin": { + "version": "1.1.24", + "resolved": "https://registry.npmjs.org/@vitest/eslint-plugin/-/eslint-plugin-1.1.24.tgz", + "integrity": "sha512-7IaENe4NNy33g0iuuy5bHY69JYYRjpv4lMx6H5Wp30W7ez2baLHwxsXF5TM4wa8JDYZt8ut99Ytoj7GiDO01hw==", + "dev": true, + "peerDependencies": { + "@typescript-eslint/utils": ">= 8.0", + "eslint": ">= 8.57.0", + "typescript": ">= 5.0.0", + "vitest": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + }, + "vitest": { + "optional": true + } + } + }, "node_modules/@vitest/expect": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-1.2.2.tgz", @@ -5107,6 +4984,7 @@ "version": "8.14.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", + "dev": true, "bin": { "acorn": "bin/acorn" }, @@ -5118,6 +4996,7 @@ "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } @@ -5135,6 +5014,7 @@ "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -5150,6 +5030,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, "engines": { "node": ">=8" } @@ -5173,6 +5054,15 @@ "node": ">= 8" } }, + "node_modules/are-docs-informative": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/are-docs-informative/-/are-docs-informative-0.0.2.tgz", + "integrity": "sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==", + "dev": true, + "engines": { + "node": ">=14" + } + }, "node_modules/arg": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", @@ -5182,16 +5072,29 @@ "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==" + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/aria-query": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", + "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", + "dev": true, + "engines": { + "node": ">= 0.4" + } }, "node_modules/array-buffer-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", - "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", + "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "is-array-buffer": "^3.0.1" + "call-bound": "^1.0.3", + "is-array-buffer": "^3.0.5" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -5203,15 +5106,16 @@ "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" }, "node_modules/array-includes": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", - "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==", + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", + "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", "is-string": "^1.0.7" }, "engines": { @@ -5230,6 +5134,26 @@ "node": ">=8" } }, + "node_modules/array.prototype.findlast": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", + "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/array.prototype.findlastindex": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz", @@ -5268,15 +5192,15 @@ } }, "node_modules/array.prototype.flatmap": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", - "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz", + "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -5285,19 +5209,35 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/array.prototype.tosorted": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", + "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz", - "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", + "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", "dev": true, "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", - "is-array-buffer": "^3.0.2", - "is-shared-array-buffer": "^1.0.2" + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "is-array-buffer": "^3.0.4" }, "engines": { "node": ">= 0.4" @@ -5315,6 +5255,12 @@ "node": "*" } }, + "node_modules/ast-types-flow": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz", + "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==", + "dev": true + }, "node_modules/automation-events": { "version": "7.1.4", "resolved": "https://registry.npmjs.org/automation-events/-/automation-events-7.1.4.tgz", @@ -5370,9 +5316,12 @@ } }, "node_modules/available-typed-arrays": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.6.tgz", - "integrity": "sha512-j1QzY8iPNPG4o4xmO3ptzpRxTciqD3MgEHtifP/YnJpIo58Xu+ne4BejlbkuaLfXn/nz6HFiw29bLpj2PNMdGg==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, "engines": { "node": ">= 0.4" }, @@ -5380,6 +5329,24 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/axe-core": { + "version": "4.10.2", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.10.2.tgz", + "integrity": "sha512-RE3mdQ7P3FRSe7eqCWoeQ/Z9QXrtniSjp1wUjt5nRC3WIpz5rSCve6o3fsZ2aCpJtrZjSZgjwXAoTO5k4tEI0w==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/axobject-query": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", + "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/babel-plugin-macros": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", @@ -5445,7 +5412,8 @@ "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==" + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true }, "node_modules/binary-extensions": { "version": "2.2.0", @@ -5496,6 +5464,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, "dependencies": { "balanced-match": "^1.0.0" } @@ -5504,6 +5473,7 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, "dependencies": { "fill-range": "^7.1.1" }, @@ -5615,13 +5585,17 @@ } }, "node_modules/call-bind": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", - "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", "dependencies": { - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.1", - "set-function-length": "^1.1.1" + "call-bind-apply-helpers": "^1.0.0", + "es-define-property": "^1.0.0", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -5847,10 +5821,20 @@ "node": ">= 6" } }, + "node_modules/comment-parser": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.3.1.tgz", + "integrity": "sha512-B52sN2VNghyq5ofvUsqZjmk6YkihBX5vMSChmSK9v4ShjKf3Vk5Xcmgpw4o+iIgtrnM/u5FiMpz9VKb8lpBveA==", + "dev": true, + "engines": { + "node": ">= 12.0.0" + } + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true }, "node_modules/content-disposition": { "version": "0.5.4", @@ -5955,6 +5939,7 @@ "version": "7.0.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -5989,9 +5974,66 @@ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" }, - "node_modules/debug": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "node_modules/damerau-levenshtein": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", + "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", + "dev": true + }, + "node_modules/data-view-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", + "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", + "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/inspect-js" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", + "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", "dependencies": { "ms": "^2.1.3" @@ -6020,19 +6062,23 @@ "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==" + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true }, "node_modules/define-data-property": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", - "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "dependencies": { - "get-intrinsic": "^1.2.1", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/define-properties": { @@ -6115,6 +6161,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, "dependencies": { "esutils": "^2.0.2" }, @@ -6143,11 +6190,11 @@ } }, "node_modules/dunder-proto": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.0.tgz", - "integrity": "sha512-9+Sj30DIu+4KvHqMfLUGLFYL2PkURSYMVXJyXe92nFRvlYq5hBjLEhblKB+vkd/WVlUYMWigiY07T91Fkk0+4A==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", "dependencies": { - "call-bind-apply-helpers": "^1.0.0", + "call-bind-apply-helpers": "^1.0.1", "es-errors": "^1.3.0", "gopd": "^1.2.0" }, @@ -6186,6 +6233,31 @@ "node": ">= 0.8" } }, + "node_modules/enhanced-resolve": { + "version": "5.18.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.0.tgz", + "integrity": "sha512-0/r0MySGYG8YqlayBZ6MuCfECmHFdJ5qyPh8s8wa5Hnm6SaFLSK1VYCbj+NKp090Nm1caZhD+QTnmxO7esYGyQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, "node_modules/error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -6195,50 +6267,62 @@ } }, "node_modules/es-abstract": { - "version": "1.22.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.3.tgz", - "integrity": "sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==", - "dev": true, - "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "arraybuffer.prototype.slice": "^1.0.2", - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.5", - "es-set-tostringtag": "^2.0.1", - "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.6", - "get-intrinsic": "^1.2.2", - "get-symbol-description": "^1.0.0", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0", - "internal-slot": "^1.0.5", - "is-array-buffer": "^3.0.2", + "version": "1.23.9", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.9.tgz", + "integrity": "sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.2", + "arraybuffer.prototype.slice": "^1.0.4", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "data-view-buffer": "^1.0.2", + "data-view-byte-length": "^1.0.2", + "data-view-byte-offset": "^1.0.1", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.1.0", + "es-to-primitive": "^1.3.0", + "function.prototype.name": "^1.1.8", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.0", + "get-symbol-description": "^1.1.0", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "internal-slot": "^1.1.0", + "is-array-buffer": "^3.0.5", "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-typed-array": "^1.1.12", - "is-weakref": "^1.0.2", - "object-inspect": "^1.13.1", + "is-data-view": "^1.0.2", + "is-regex": "^1.2.1", + "is-shared-array-buffer": "^1.0.4", + "is-string": "^1.1.1", + "is-typed-array": "^1.1.15", + "is-weakref": "^1.1.0", + "math-intrinsics": "^1.1.0", + "object-inspect": "^1.13.3", "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.5.1", - "safe-array-concat": "^1.0.1", - "safe-regex-test": "^1.0.0", - "string.prototype.trim": "^1.2.8", - "string.prototype.trimend": "^1.0.7", - "string.prototype.trimstart": "^1.0.7", - "typed-array-buffer": "^1.0.0", - "typed-array-byte-length": "^1.0.0", - "typed-array-byte-offset": "^1.0.0", - "typed-array-length": "^1.0.4", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.13" + "object.assign": "^4.1.7", + "own-keys": "^1.0.1", + "regexp.prototype.flags": "^1.5.3", + "safe-array-concat": "^1.1.3", + "safe-push-apply": "^1.0.0", + "safe-regex-test": "^1.1.0", + "set-proto": "^1.0.0", + "string.prototype.trim": "^1.2.10", + "string.prototype.trimend": "^1.0.9", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.3", + "typed-array-byte-length": "^1.0.3", + "typed-array-byte-offset": "^1.0.4", + "typed-array-length": "^1.0.7", + "unbox-primitive": "^1.1.0", + "which-typed-array": "^1.1.18" }, "engines": { "node": ">= 0.4" @@ -6263,6 +6347,33 @@ "node": ">= 0.4" } }, + "node_modules/es-iterator-helpers": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.1.tgz", + "integrity": "sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.6", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.0.3", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.6", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "iterator.prototype": "^1.1.4", + "safe-array-concat": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/es-module-lexer": { "version": "1.5.4", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz", @@ -6281,14 +6392,15 @@ } }, "node_modules/es-set-tostringtag": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz", - "integrity": "sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", "dev": true, "dependencies": { - "get-intrinsic": "^1.2.2", - "has-tostringtag": "^1.0.0", - "hasown": "^2.0.0" + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" }, "engines": { "node": ">= 0.4" @@ -6304,14 +6416,14 @@ } }, "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", + "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", "dev": true, "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" + "is-callable": "^1.2.7", + "is-date-object": "^1.0.5", + "is-symbol": "^1.0.4" }, "engines": { "node": ">= 0.4" @@ -6692,11 +6804,23 @@ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" }, + "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==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/eslint": { "version": "8.57.1", "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", + "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", @@ -6747,6 +6871,197 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/eslint-config-bloq": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/eslint-config-bloq/-/eslint-config-bloq-4.4.1.tgz", + "integrity": "sha512-LnNd+2kwkZCZmQVfGXz6pd3K5OGvElRJgWmmno5vNCQ48Ek/h3q90hZHRq/717QjO8tduIJ28ddI4IbaRu0e5w==", + "dev": true, + "dependencies": { + "@typescript-eslint/eslint-plugin": "^8.11.0", + "@typescript-eslint/parser": "^8.11.0", + "@vitest/eslint-plugin": "^1.1.7", + "eslint-config-next": "^13.0.0", + "eslint-config-prettier": "^8.0.0", + "eslint-plugin-import": "^2.0.0", + "eslint-plugin-jsdoc": "^43.0.0", + "eslint-plugin-markdownlint": "^0.6.0", + "eslint-plugin-mocha": "^10.0.0", + "eslint-plugin-node": "^11.0.0", + "eslint-plugin-prefer-arrow": "^1.0.0", + "eslint-plugin-promise": "^6.0.0" + }, + "peerDependencies": { + "eslint": "^8.0.0" + } + }, + "node_modules/eslint-config-next": { + "version": "13.5.8", + "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-13.5.8.tgz", + "integrity": "sha512-EpNu08GB4KT377oDOQ6bi6icQFBgXcynqCE2neCu138k2Hsfr2i+5goUrRhz3YReDXB3YhelvQJLxm2apr3Gdw==", + "dev": true, + "dependencies": { + "@next/eslint-plugin-next": "13.5.8", + "@rushstack/eslint-patch": "^1.3.3", + "@typescript-eslint/parser": "^5.4.2 || ^6.0.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-import-resolver-typescript": "^3.5.2", + "eslint-plugin-import": "^2.28.1", + "eslint-plugin-jsx-a11y": "^6.7.1", + "eslint-plugin-react": "^7.33.2", + "eslint-plugin-react-hooks": "^4.5.0 || 5.0.0-canary-7118f5dd7-20230705" + }, + "peerDependencies": { + "eslint": "^7.23.0 || ^8.0.0", + "typescript": ">=3.3.1" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/eslint-config-next/node_modules/@typescript-eslint/parser": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.21.0.tgz", + "integrity": "sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/typescript-estree": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/eslint-config-next/node_modules/@typescript-eslint/scope-manager": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz", + "integrity": "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/eslint-config-next/node_modules/@typescript-eslint/types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz", + "integrity": "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==", + "dev": true, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/eslint-config-next/node_modules/@typescript-eslint/typescript-estree": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz", + "integrity": "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "9.0.3", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/eslint-config-next/node_modules/@typescript-eslint/visitor-keys": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz", + "integrity": "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "6.21.0", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/eslint-config-next/node_modules/eslint-plugin-react-hooks": { + "version": "5.0.0-canary-7118f5dd7-20230705", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.0.0-canary-7118f5dd7-20230705.tgz", + "integrity": "sha512-AZYbMo/NW9chdL7vk6HQzQhT+PvTAEVqWk9ziruUoW2kAOcN5qNyelv70e0F1VNQAbvutOC9oc+xfWycI9FxDw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" + } + }, + "node_modules/eslint-config-next/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/eslint-config-prettier": { + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.10.0.tgz", + "integrity": "sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==", + "dev": true, + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, "node_modules/eslint-config-standard": { "version": "17.0.0", "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-17.0.0.tgz", @@ -6793,6 +7108,41 @@ "ms": "^2.1.1" } }, + "node_modules/eslint-import-resolver-typescript": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.7.0.tgz", + "integrity": "sha512-Vrwyi8HHxY97K5ebydMtffsWAn1SCR9eol49eCd5fJS4O1WV7PaAjbcjmbfJJSMz/t4Mal212Uz/fQZrOB8mow==", + "dev": true, + "dependencies": { + "@nolyfill/is-core-module": "1.0.39", + "debug": "^4.3.7", + "enhanced-resolve": "^5.15.0", + "fast-glob": "^3.3.2", + "get-tsconfig": "^4.7.5", + "is-bun-module": "^1.0.2", + "is-glob": "^4.0.3", + "stable-hash": "^0.0.4" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts/projects/eslint-import-resolver-ts" + }, + "peerDependencies": { + "eslint": "*", + "eslint-plugin-import": "*", + "eslint-plugin-import-x": "*" + }, + "peerDependenciesMeta": { + "eslint-plugin-import": { + "optional": true + }, + "eslint-plugin-import-x": { + "optional": true + } + } + }, "node_modules/eslint-module-utils": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", @@ -6810,19 +7160,342 @@ } } }, - "node_modules/eslint-module-utils/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-es": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-4.1.0.tgz", + "integrity": "sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ==", + "dev": true, + "dependencies": { + "eslint-utils": "^2.0.0", + "regexpp": "^3.0.0" + }, + "engines": { + "node": ">=8.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=4.19.1" + } + }, + "node_modules/eslint-plugin-es/node_modules/eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/eslint-plugin-es/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-plugin-import": { + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", + "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.7", + "array.prototype.findlastindex": "^1.2.3", + "array.prototype.flat": "^1.3.2", + "array.prototype.flatmap": "^1.3.2", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.8.0", + "hasown": "^2.0.0", + "is-core-module": "^2.13.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.7", + "object.groupby": "^1.0.1", + "object.values": "^1.1.7", + "semver": "^6.3.1", + "tsconfig-paths": "^3.15.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + } + }, + "node_modules/eslint-plugin-import/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/eslint-plugin-import/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, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-plugin-jsdoc": { + "version": "43.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-43.2.0.tgz", + "integrity": "sha512-Hst7XUfqh28UmPD52oTXmjaRN3d0KrmOZdgtp4h9/VHUJD3Evoo82ZGXi1TtRDWgWhvqDIRI63O49H0eH7NrZQ==", + "dev": true, + "dependencies": { + "@es-joy/jsdoccomment": "~0.38.0", + "are-docs-informative": "^0.0.2", + "comment-parser": "1.3.1", + "debug": "^4.3.4", + "escape-string-regexp": "^4.0.0", + "esquery": "^1.5.0", + "semver": "^7.5.0", + "spdx-expression-parse": "^3.0.1" + }, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + } + }, + "node_modules/eslint-plugin-jsx-a11y": { + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.2.tgz", + "integrity": "sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==", + "dev": true, + "dependencies": { + "aria-query": "^5.3.2", + "array-includes": "^3.1.8", + "array.prototype.flatmap": "^1.3.2", + "ast-types-flow": "^0.0.8", + "axe-core": "^4.10.0", + "axobject-query": "^4.1.0", + "damerau-levenshtein": "^1.0.8", + "emoji-regex": "^9.2.2", + "hasown": "^2.0.2", + "jsx-ast-utils": "^3.3.5", + "language-tags": "^1.0.9", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.8", + "safe-regex-test": "^1.0.3", + "string.prototype.includes": "^2.0.1" + }, + "engines": { + "node": ">=4.0" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9" + } + }, + "node_modules/eslint-plugin-jsx-a11y/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint-plugin-jsx-a11y/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/eslint-plugin-markdownlint": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-markdownlint/-/eslint-plugin-markdownlint-0.6.0.tgz", + "integrity": "sha512-idYAzR2k7tQ+zL6UC17I/zzkqM0t6/k50uGgO39tabryqVkJh8Qe57fhBhe7QN+17yqIVqFB9YJFzBCAOdSXjw==", + "dev": true, + "dependencies": { + "markdownlint": "0.34.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": ">=7.5.0" + } + }, + "node_modules/eslint-plugin-mocha": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-mocha/-/eslint-plugin-mocha-10.5.0.tgz", + "integrity": "sha512-F2ALmQVPT1GoP27O1JTZGrV9Pqg8k79OeIuvw63UxMtQKREZtmkK1NFgkZQ2TW7L2JSSFKHFPTtHu5z8R9QNRw==", + "dev": true, + "dependencies": { + "eslint-utils": "^3.0.0", + "globals": "^13.24.0", + "rambda": "^7.4.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-plugin-mocha/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint-plugin-n": { + "version": "15.7.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-15.7.0.tgz", + "integrity": "sha512-jDex9s7D/Qial8AGVIHq4W7NswpUD5DPDL2RH8Lzd9EloWUuvUkHfv4FRLMipH5q2UtyurorBkPeNi1wVWNh3Q==", + "dev": true, + "dependencies": { + "builtins": "^5.0.1", + "eslint-plugin-es": "^4.1.0", + "eslint-utils": "^3.0.0", + "ignore": "^5.1.1", + "is-core-module": "^2.11.0", + "minimatch": "^3.1.2", + "resolve": "^1.22.1", + "semver": "^7.3.8" + }, + "engines": { + "node": ">=12.22.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-plugin-n/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint-plugin-n/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/eslint-plugin-node": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz", + "integrity": "sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==", + "dev": true, + "dependencies": { + "eslint-plugin-es": "^3.0.0", + "eslint-utils": "^2.0.0", + "ignore": "^5.1.1", + "minimatch": "^3.0.4", + "resolve": "^1.10.1", + "semver": "^6.1.0" + }, + "engines": { + "node": ">=8.10.0" + }, + "peerDependencies": { + "eslint": ">=5.16.0" + } + }, + "node_modules/eslint-plugin-node/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "dependencies": { - "ms": "^2.1.1" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/eslint-plugin-es": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-4.1.0.tgz", - "integrity": "sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ==", + "node_modules/eslint-plugin-node/node_modules/eslint-plugin-es": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz", + "integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==", "dev": true, "dependencies": { "eslint-utils": "^2.0.0", @@ -6838,7 +7511,7 @@ "eslint": ">=4.19.1" } }, - "node_modules/eslint-plugin-es/node_modules/eslint-utils": { + "node_modules/eslint-plugin-node/node_modules/eslint-utils": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", @@ -6853,7 +7526,7 @@ "url": "https://github.com/sponsors/mysticatea" } }, - "node_modules/eslint-plugin-es/node_modules/eslint-visitor-keys": { + "node_modules/eslint-plugin-node/node_modules/eslint-visitor-keys": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", @@ -6862,69 +7535,7 @@ "node": ">=4" } }, - "node_modules/eslint-plugin-import": { - "version": "2.29.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", - "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", - "dev": true, - "dependencies": { - "array-includes": "^3.1.7", - "array.prototype.findlastindex": "^1.2.3", - "array.prototype.flat": "^1.3.2", - "array.prototype.flatmap": "^1.3.2", - "debug": "^3.2.7", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.9", - "eslint-module-utils": "^2.8.0", - "hasown": "^2.0.0", - "is-core-module": "^2.13.1", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.fromentries": "^2.0.7", - "object.groupby": "^1.0.1", - "object.values": "^1.1.7", - "semver": "^6.3.1", - "tsconfig-paths": "^3.15.0" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" - } - }, - "node_modules/eslint-plugin-import/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/eslint-plugin-import/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-plugin-import/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-import/node_modules/minimatch": { + "node_modules/eslint-plugin-node/node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", @@ -6936,7 +7547,7 @@ "node": "*" } }, - "node_modules/eslint-plugin-import/node_modules/semver": { + "node_modules/eslint-plugin-node/node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", @@ -6945,32 +7556,81 @@ "semver": "bin/semver.js" } }, - "node_modules/eslint-plugin-n": { - "version": "15.7.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-15.7.0.tgz", - "integrity": "sha512-jDex9s7D/Qial8AGVIHq4W7NswpUD5DPDL2RH8Lzd9EloWUuvUkHfv4FRLMipH5q2UtyurorBkPeNi1wVWNh3Q==", + "node_modules/eslint-plugin-prefer-arrow": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-prefer-arrow/-/eslint-plugin-prefer-arrow-1.2.3.tgz", + "integrity": "sha512-J9I5PKCOJretVuiZRGvPQxCbllxGAV/viI20JO3LYblAodofBxyMnZAJ+WGeClHgANnSJberTNoFWWjrWKBuXQ==", + "dev": true, + "peerDependencies": { + "eslint": ">=2.0.0" + } + }, + "node_modules/eslint-plugin-promise": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz", + "integrity": "sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + } + }, + "node_modules/eslint-plugin-react": { + "version": "7.37.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.3.tgz", + "integrity": "sha512-DomWuTQPFYZwF/7c9W2fkKkStqZmBd3uugfqBYLdkZ3Hii23WzZuOLUskGxB8qkSKqftxEeGL1TB2kMhrce0jA==", "dev": true, "dependencies": { - "builtins": "^5.0.1", - "eslint-plugin-es": "^4.1.0", - "eslint-utils": "^3.0.0", - "ignore": "^5.1.1", - "is-core-module": "^2.11.0", + "array-includes": "^3.1.8", + "array.prototype.findlast": "^1.2.5", + "array.prototype.flatmap": "^1.3.3", + "array.prototype.tosorted": "^1.1.4", + "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.2.1", + "estraverse": "^5.3.0", + "hasown": "^2.0.2", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", "minimatch": "^3.1.2", - "resolve": "^1.22.1", - "semver": "^7.3.8" + "object.entries": "^1.1.8", + "object.fromentries": "^2.0.8", + "object.values": "^1.2.1", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.5", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.12", + "string.prototype.repeat": "^1.0.0" }, "engines": { - "node": ">=12.22.0" + "node": ">=4" }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.1.0.tgz", + "integrity": "sha512-mpJRtPgHN2tNAvZ35AMfqeB3Xqeo273QxrHJsbBEPWODRM4r0yB6jfoROqKEYrOn27UtRPpcpHc2UqyBSuUNTw==", + "dev": true, + "engines": { + "node": ">=10" }, "peerDependencies": { - "eslint": ">=7.0.0" + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" } }, - "node_modules/eslint-plugin-n/node_modules/brace-expansion": { + "node_modules/eslint-plugin-react-refresh": { + "version": "0.4.16", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.16.tgz", + "integrity": "sha512-slterMlxAhov/DZO8NScf6mEeMBBXodFUolijDvrtTxyezyLoTQaa73FyYus/VbTdftd8wBgBxPMRk3poleXNQ==", + "dev": true, + "peerDependencies": { + "eslint": ">=8.40" + } + }, + "node_modules/eslint-plugin-react/node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", @@ -6980,7 +7640,19 @@ "concat-map": "0.0.1" } }, - "node_modules/eslint-plugin-n/node_modules/minimatch": { + "node_modules/eslint-plugin-react/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-react/node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", @@ -6992,37 +7664,30 @@ "node": "*" } }, - "node_modules/eslint-plugin-promise": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz", - "integrity": "sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==", + "node_modules/eslint-plugin-react/node_modules/resolve": { + "version": "2.0.0-next.5", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", + "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" - } - }, - "node_modules/eslint-plugin-react-hooks": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.1.0.tgz", - "integrity": "sha512-mpJRtPgHN2tNAvZ35AMfqeB3Xqeo273QxrHJsbBEPWODRM4r0yB6jfoROqKEYrOn27UtRPpcpHc2UqyBSuUNTw==", - "dev": true, - "engines": { - "node": ">=10" + "bin": { + "resolve": "bin/resolve" }, - "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint-plugin-react-refresh": { - "version": "0.4.16", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.16.tgz", - "integrity": "sha512-slterMlxAhov/DZO8NScf6mEeMBBXodFUolijDvrtTxyezyLoTQaa73FyYus/VbTdftd8wBgBxPMRk3poleXNQ==", + "node_modules/eslint-plugin-react/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, - "peerDependencies": { - "eslint": ">=8.40" + "bin": { + "semver": "bin/semver.js" } }, "node_modules/eslint-plugin-sonarjs": { @@ -7041,6 +7706,7 @@ "version": "7.2.2", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" @@ -7083,6 +7749,7 @@ "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, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, @@ -7094,6 +7761,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -7108,6 +7776,7 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -7117,6 +7786,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -7132,6 +7802,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "dependencies": { "color-name": "~1.1.4" }, @@ -7142,23 +7813,14 @@ "node_modules/eslint/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==" - }, - "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==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "node_modules/eslint/node_modules/globals": { "version": "13.24.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, "dependencies": { "type-fest": "^0.20.2" }, @@ -7173,6 +7835,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "engines": { "node": ">=8" } @@ -7181,6 +7844,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -7192,6 +7856,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -7203,6 +7868,7 @@ "version": "9.6.1", "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, "dependencies": { "acorn": "^8.9.0", "acorn-jsx": "^5.3.2", @@ -7219,6 +7885,7 @@ "version": "1.5.0", "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dev": true, "dependencies": { "estraverse": "^5.1.0" }, @@ -7230,6 +7897,7 @@ "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, "dependencies": { "estraverse": "^5.2.0" }, @@ -7241,6 +7909,7 @@ "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, "engines": { "node": ">=4.0" } @@ -7258,6 +7927,7 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -7379,12 +8049,14 @@ "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==" + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true }, "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, "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -7400,6 +8072,7 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, "dependencies": { "is-glob": "^4.0.1" }, @@ -7410,17 +8083,20 @@ "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==" + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true }, "node_modules/fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true }, "node_modules/fastq": { "version": "1.17.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.0.tgz", "integrity": "sha512-zGygtijUMT7jnk3h26kUms3BkSDp4IfIKjmnqI2tvx6nuBfiF1UqOxbnLfzdv+apBy+53oaImsKtMw/xYbW+1w==", + "dev": true, "dependencies": { "reusify": "^1.0.4" } @@ -7429,6 +8105,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, "dependencies": { "flat-cache": "^3.0.4" }, @@ -7440,6 +8117,7 @@ "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, "dependencies": { "to-regex-range": "^5.0.1" }, @@ -7486,6 +8164,7 @@ "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, "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -7501,6 +8180,7 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dev": true, "dependencies": { "flatted": "^3.2.9", "keyv": "^4.5.3", @@ -7513,7 +8193,8 @@ "node_modules/flatted": { "version": "3.2.9", "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", - "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==" + "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", + "dev": true }, "node_modules/for-each": { "version": "0.3.3", @@ -7571,7 +8252,8 @@ "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==" + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true }, "node_modules/fsevents": { "version": "2.3.3", @@ -7596,15 +8278,17 @@ } }, "node_modules/function.prototype.name": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", - "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", + "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "functions-have-names": "^1.2.3" + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "functions-have-names": "^1.2.3", + "hasown": "^2.0.2", + "is-callable": "^1.2.7" }, "engines": { "node": ">= 0.4" @@ -7650,20 +8334,20 @@ } }, "node_modules/get-intrinsic": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.6.tgz", - "integrity": "sha512-qxsEs+9A+u85HhllWJJFicJfPDhRmjzoYdl64aMWW9yRIJmSyxdn8IEkuIM530/7T+lv0TIHd8L6Q/ra0tEoeA==", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.7.tgz", + "integrity": "sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA==", "dependencies": { "call-bind-apply-helpers": "^1.0.1", - "dunder-proto": "^1.0.0", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0", "function-bind": "^1.1.2", + "get-proto": "^1.0.0", "gopd": "^1.2.0", "has-symbols": "^1.1.0", "hasown": "^2.0.2", - "math-intrinsics": "^1.0.0" + "math-intrinsics": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -7672,6 +8356,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/get-stream": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", @@ -7685,25 +8381,39 @@ } }, "node_modules/get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", + "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6" }, "engines": { "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/ljharb" + } + }, + "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, + "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==", + "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -7723,6 +8433,7 @@ "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, "dependencies": { "is-glob": "^4.0.3" }, @@ -7734,6 +8445,7 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -7743,6 +8455,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -7759,12 +8472,13 @@ } }, "node_modules/globalthis": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", - "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", "dev": true, "dependencies": { - "define-properties": "^1.1.3" + "define-properties": "^1.2.1", + "gopd": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -7804,16 +8518,26 @@ "url": "https://github.com/sponsors/ljharb" } }, + "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 + }, "node_modules/graphemer": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==" + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true }, "node_modules/has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", + "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", "dev": true, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -7828,21 +8552,24 @@ } }, "node_modules/has-property-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", - "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dependencies": { - "get-intrinsic": "^1.2.2" + "es-define-property": "^1.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", + "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", "dev": true, + "dependencies": { + "dunder-proto": "^1.0.0" + }, "engines": { "node": ">= 0.4" }, @@ -7952,6 +8679,7 @@ "version": "5.3.1", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "dev": true, "engines": { "node": ">= 4" } @@ -7981,6 +8709,7 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, "engines": { "node": ">=0.8.19" } @@ -7989,6 +8718,7 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -8000,14 +8730,14 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "node_modules/internal-slot": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.6.tgz", - "integrity": "sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", + "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", "dev": true, "dependencies": { - "get-intrinsic": "^1.2.2", - "hasown": "^2.0.0", - "side-channel": "^1.0.4" + "es-errors": "^1.3.0", + "hasown": "^2.0.2", + "side-channel": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -8037,14 +8767,17 @@ } }, "node_modules/is-array-buffer": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", - "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", + "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.0", - "is-typed-array": "^1.1.10" + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -8055,13 +8788,34 @@ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" }, + "node_modules/is-async-function": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.0.tgz", + "integrity": "sha512-GExz9MtyhlZyXYLxzlJRj5WUCE661zhDa1Yna52CN57AJsymh+DvXXjyveSioqSRdxvUrdKdvqB1b5cVKsNpWQ==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.3", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", + "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", "dev": true, "dependencies": { - "has-bigints": "^1.0.1" + "has-bigints": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -8080,13 +8834,13 @@ } }, "node_modules/is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.1.tgz", + "integrity": "sha512-l9qO6eFlUETHtuihLcYOaLKByJ1f+N4kthcU9YjHy3N+B3hWv0y/2Nd0mu/7lTFnRQHTrSdXF50HQ3bl5fEnng==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -8095,6 +8849,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-bun-module": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/is-bun-module/-/is-bun-module-1.3.0.tgz", + "integrity": "sha512-DgXeu5UWI0IsMQundYb5UAOzm6G2eVnarJ0byP6Tm55iZNKceD59LNPA2L4VvsScTtHcw0yEkVwSf7PC+QoLSA==", + "dev": true, + "dependencies": { + "semver": "^7.6.3" + } + }, "node_modules/is-callable": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", @@ -8117,13 +8880,31 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-data-view": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", + "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", "dev": true, "dependencies": { - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -8136,10 +8917,26 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, "engines": { "node": ">=0.10.0" } }, + "node_modules/is-finalizationregistry": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", + "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.3" + }, + "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", @@ -8167,6 +8964,7 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, "dependencies": { "is-extglob": "^2.1.1" }, @@ -8174,10 +8972,10 @@ "node": ">=0.10.0" } }, - "node_modules/is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "node_modules/is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", "dev": true, "engines": { "node": ">= 0.4" @@ -8190,17 +8988,19 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, "engines": { "node": ">=0.12.0" } }, "node_modules/is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", + "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", "dev": true, "dependencies": { - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -8213,19 +9013,34 @@ "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, "engines": { "node": ">=8" } }, "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "dev": true, "engines": { "node": ">= 0.4" }, @@ -8234,12 +9049,15 @@ } }, "node_modules/is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", + "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", "dev": true, "dependencies": { - "call-bind": "^1.0.2" + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -8258,12 +9076,13 @@ } }, "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", + "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", "dev": true, "dependencies": { - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -8273,12 +9092,14 @@ } }, "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", + "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", "dev": true, "dependencies": { - "has-symbols": "^1.0.2" + "call-bound": "^1.0.2", + "has-symbols": "^1.1.0", + "safe-regex-test": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -8288,11 +9109,11 @@ } }, "node_modules/is-typed-array": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", - "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", "dependencies": { - "which-typed-array": "^1.1.11" + "which-typed-array": "^1.1.16" }, "engines": { "node": ">= 0.4" @@ -8301,13 +9122,44 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.0.tgz", + "integrity": "sha512-SXM8Nwyys6nT5WP6pltOwKytLV7FqQ4UiibxVmW+EIosHcmCqkkjViTb5SNssDlkCiEYRP1/pdWUKVvZBmsR2Q==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", + "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2" + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -8322,7 +9174,8 @@ "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true }, "node_modules/isomorphic-ws": { "version": "5.0.0", @@ -8434,6 +9287,23 @@ "node": ">=8" } }, + "node_modules/iterator.prototype": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.5.tgz", + "integrity": "sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.4", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.6", + "get-proto": "^1.0.0", + "has-symbols": "^1.1.0", + "set-function-name": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/jackspeak": { "version": "2.3.6", "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", @@ -8470,6 +9340,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, "dependencies": { "argparse": "^2.0.1" }, @@ -8477,6 +9348,15 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/jsdoc-type-pratt-parser": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.0.0.tgz", + "integrity": "sha512-YtOli5Cmzy3q4dP26GraSOeAhqecewG04hoO8DY56CH4KJ9Fvv5qKWUCCo3HZob7esJQHCv6/+bnTy72xZZaVQ==", + "dev": true, + "engines": { + "node": ">=12.0.0" + } + }, "node_modules/jsesc": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", @@ -8491,7 +9371,8 @@ "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==" + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", @@ -8501,12 +9382,14 @@ "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==" + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true }, "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==" + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true }, "node_modules/json5": { "version": "2.2.3", @@ -8526,18 +9409,53 @@ "integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==", "dev": true }, + "node_modules/jsx-ast-utils": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" + }, + "engines": { + "node": ">=4.0" + } + }, "node_modules/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, "dependencies": { "json-buffer": "3.0.1" } }, + "node_modules/language-subtag-registry": { + "version": "0.3.23", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz", + "integrity": "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==", + "dev": true + }, + "node_modules/language-tags": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz", + "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==", + "dev": true, + "dependencies": { + "language-subtag-registry": "^0.3.20" + }, + "engines": { + "node": ">=0.10" + } + }, "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, "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" @@ -8563,6 +9481,15 @@ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" }, + "node_modules/linkify-it": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz", + "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==", + "dev": true, + "dependencies": { + "uc.micro": "^2.0.0" + } + }, "node_modules/local-pkg": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.5.0.tgz", @@ -8583,6 +9510,7 @@ "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, "dependencies": { "p-locate": "^5.0.0" }, @@ -8602,7 +9530,8 @@ "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==" + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true }, "node_modules/loose-envify": { "version": "1.4.0", @@ -8674,14 +9603,65 @@ "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", "dev": true }, + "node_modules/markdown-it": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz", + "integrity": "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1", + "entities": "^4.4.0", + "linkify-it": "^5.0.0", + "mdurl": "^2.0.0", + "punycode.js": "^2.3.1", + "uc.micro": "^2.1.0" + }, + "bin": { + "markdown-it": "bin/markdown-it.mjs" + } + }, + "node_modules/markdownlint": { + "version": "0.34.0", + "resolved": "https://registry.npmjs.org/markdownlint/-/markdownlint-0.34.0.tgz", + "integrity": "sha512-qwGyuyKwjkEMOJ10XN6OTKNOVYvOIi35RNvDLNxTof5s8UmyGHlCdpngRHoRGNvQVGuxO3BJ7uNSgdeX166WXw==", + "dev": true, + "dependencies": { + "markdown-it": "14.1.0", + "markdownlint-micromark": "0.1.9" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/DavidAnson" + } + }, + "node_modules/markdownlint-micromark": { + "version": "0.1.9", + "resolved": "https://registry.npmjs.org/markdownlint-micromark/-/markdownlint-micromark-0.1.9.tgz", + "integrity": "sha512-5hVs/DzAFa8XqYosbEAEg6ok6MF2smDj89ztn9pKkCtdKHVdPQuGMH7frFfYL9mLkvfFe4pTyAMffLbjf3/EyA==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/DavidAnson" + } + }, "node_modules/math-intrinsics": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.0.0.tgz", - "integrity": "sha512-4MqMiKP90ybymYvsut0CH2g4XWbfLtmlCkXmtmdcDCxNB+mQcu1w/1+L/VD7vi/PSv7X2JYV7SCcR+jiPXnQtA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", "engines": { "node": ">= 0.4" } }, + "node_modules/mdurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz", + "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==", + "dev": true + }, "node_modules/media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -8713,6 +9693,7 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, "engines": { "node": ">= 8" } @@ -8729,6 +9710,7 @@ "version": "4.0.8", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" @@ -8780,9 +9762,9 @@ } }, "node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, "dependencies": { "brace-expansion": "^2.0.1" @@ -8861,7 +9843,8 @@ "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true }, "node_modules/natural-compare-lite": { "version": "1.4.0", @@ -9050,32 +10033,49 @@ } }, "node_modules/object.assign": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", - "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.entries": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz", + "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.5", + "call-bind": "^1.0.7", "define-properties": "^1.2.1", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, "node_modules/object.fromentries": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz", - "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==", + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -9097,14 +10097,15 @@ } }, "node_modules/object.values": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz", - "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz", + "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -9128,6 +10129,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, "dependencies": { "wrappy": "1" } @@ -9151,6 +10153,7 @@ "version": "0.9.3", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "dev": true, "dependencies": { "@aashutoshrathi/word-wrap": "^1.2.3", "deep-is": "^0.1.3", @@ -9163,6 +10166,23 @@ "node": ">= 0.8.0" } }, + "node_modules/own-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", + "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.6", + "object-keys": "^1.1.1", + "safe-push-apply": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/ox": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/ox/-/ox-0.1.2.tgz", @@ -9292,6 +10312,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, "dependencies": { "yocto-queue": "^0.1.0" }, @@ -9306,6 +10327,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, "dependencies": { "p-limit": "^3.0.2" }, @@ -9362,6 +10384,7 @@ "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, "engines": { "node": ">=8" } @@ -9370,6 +10393,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -9378,6 +10402,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, "engines": { "node": ">=8" } @@ -9449,6 +10474,7 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, "engines": { "node": ">=8.6" }, @@ -9485,6 +10511,14 @@ "pathe": "^1.1.0" } }, + "node_modules/possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/postcss": { "version": "8.4.49", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.49.tgz", @@ -9632,14 +10666,15 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, "engines": { "node": ">= 0.8.0" } }, "node_modules/prettier": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.2.4.tgz", - "integrity": "sha512-FWu1oLHKCrtpO1ypU6J0SbK2d9Ckwysq6bHj/uaCP26DxrPpppCLQRGVuqAxSTvhF00AcvDRyYrLNW7ocBhFFQ==", + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.4.2.tgz", + "integrity": "sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ==", "dev": true, "bin": { "prettier": "bin/prettier.cjs" @@ -9714,6 +10749,16 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/punycode.js": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", + "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", + "dev": true, "engines": { "node": ">=6" } @@ -9736,6 +10781,7 @@ "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", @@ -9751,6 +10797,12 @@ } ] }, + "node_modules/rambda": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/rambda/-/rambda-7.5.0.tgz", + "integrity": "sha512-y/M9weqWAH4iopRd7EHDEQQvpFPHj1AA3oHozE9tfITHUtTR7Z9PSlIRRG2l1GuW7sefC1cXFfIcF+cgnShdBA==", + "dev": true + }, "node_modules/range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", @@ -9867,6 +10919,28 @@ "node": ">=8.10.0" } }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", + "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.1", + "which-builtin-type": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/regenerate": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", @@ -9900,14 +10974,17 @@ } }, "node_modules/regexp.prototype.flags": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz", - "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==", + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", + "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "set-function-name": "^2.0.0" + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "set-function-name": "^2.0.2" }, "engines": { "node": ">= 0.4" @@ -9999,10 +11076,20 @@ "node": ">=4" } }, + "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, + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, "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, "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" @@ -10012,6 +11099,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, "dependencies": { "glob": "^7.1.3" }, @@ -10058,6 +11146,7 @@ "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", @@ -10077,14 +11166,15 @@ } }, "node_modules/safe-array-concat": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.0.tgz", - "integrity": "sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", + "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", "dev": true, "dependencies": { - "call-bind": "^1.0.5", - "get-intrinsic": "^1.2.2", - "has-symbols": "^1.0.3", + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "has-symbols": "^1.1.0", "isarray": "^2.0.5" }, "engines": { @@ -10113,15 +11203,31 @@ } ] }, + "node_modules/safe-push-apply": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", + "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/safe-regex-test": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.2.tgz", - "integrity": "sha512-83S9w6eFq12BBIJYvjMux6/dkirb8+4zJRA9cxNBVb7Wq5fJBW+Xze48WqR8pxua7bDuAaaAxtVVd4Idjp1dBQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", "dev": true, "dependencies": { - "call-bind": "^1.0.5", - "get-intrinsic": "^1.2.2", - "is-regex": "^1.1.4" + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-regex": "^1.2.1" }, "engines": { "node": ">= 0.4" @@ -10147,6 +11253,7 @@ "version": "7.6.3", "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, "bin": { "semver": "bin/semver.js" }, @@ -10213,29 +11320,45 @@ } }, "node_modules/set-function-length": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.0.tgz", - "integrity": "sha512-4DBHDoyHlM1IRPGYcoxexgh67y4ueR53FKV1yyxwFMY7aCqcN/38M1+SwZ/qJQ8iLv7+ck385ot4CcisOAPT9w==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", "dependencies": { - "define-data-property": "^1.1.1", + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.2", + "get-intrinsic": "^1.2.4", "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.1" + "has-property-descriptors": "^1.0.2" }, "engines": { "node": ">= 0.4" } }, "node_modules/set-function-name": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", - "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", "dev": true, "dependencies": { - "define-data-property": "^1.0.1", + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", "functions-have-names": "^1.2.3", - "has-property-descriptors": "^1.0.0" + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-proto": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", + "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", + "dev": true, + "dependencies": { + "dunder-proto": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -10255,6 +11378,7 @@ "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, "dependencies": { "shebang-regex": "^3.0.0" }, @@ -10266,6 +11390,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, "engines": { "node": ">=8" } @@ -10395,6 +11520,34 @@ "node": ">=0.10.0" } }, + "node_modules/spdx-exceptions": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", + "dev": true + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.20", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.20.tgz", + "integrity": "sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw==", + "dev": true + }, + "node_modules/stable-hash": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/stable-hash/-/stable-hash-0.0.4.tgz", + "integrity": "sha512-LjdcbuBeLcdETCrPn9i8AYAZ1eCtu4ECAWtP7UleOiZ9LzVxRzzUZEoZ8zB24nhkQnDWyET0I+3sWokSDS3E7g==", + "dev": true + }, "node_modules/stackback": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", @@ -10495,15 +11648,70 @@ "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, + "node_modules/string.prototype.includes": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz", + "integrity": "sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/string.prototype.matchall": { + "version": "4.0.12", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz", + "integrity": "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.6", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.6", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "regexp.prototype.flags": "^1.5.3", + "set-function-name": "^2.0.2", + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.repeat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", + "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, "node_modules/string.prototype.trim": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", - "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", + "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-data-property": "^1.1.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-object-atoms": "^1.0.0", + "has-property-descriptors": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -10513,28 +11721,35 @@ } }, "node_modules/string.prototype.trimend": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", - "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", + "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trimstart": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", - "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -10544,6 +11759,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -10589,6 +11805,7 @@ "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, "engines": { "node": ">=8" }, @@ -10717,6 +11934,15 @@ "node": ">=14.0.0" } }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/test-exclude": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", @@ -10756,7 +11982,8 @@ "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==" + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true }, "node_modules/thenify": { "version": "3.3.1", @@ -10822,6 +12049,7 @@ "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, "dependencies": { "is-number": "^7.0.0" }, @@ -11034,6 +12262,7 @@ "version": "1.4.3", "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.3.tgz", "integrity": "sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==", + "dev": true, "engines": { "node": ">=16" }, @@ -11240,6 +12469,7 @@ "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, "dependencies": { "prelude-ls": "^1.2.1" }, @@ -11260,6 +12490,7 @@ "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, "engines": { "node": ">=10" }, @@ -11280,29 +12511,30 @@ } }, "node_modules/typed-array-buffer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", - "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1", - "is-typed-array": "^1.1.10" + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.14" }, "engines": { "node": ">= 0.4" } }, "node_modules/typed-array-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", - "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", + "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", + "call-bind": "^1.0.8", "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.14" }, "engines": { "node": ">= 0.4" @@ -11312,16 +12544,18 @@ } }, "node_modules/typed-array-byte-offset": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", - "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", + "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", "dev": true, "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.15", + "reflect.getprototypeof": "^1.0.9" }, "engines": { "node": ">= 0.4" @@ -11331,14 +12565,20 @@ } }, "node_modules/typed-array-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", - "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", + "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "is-typed-array": "^1.1.9" + "gopd": "^1.0.1", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0", + "reflect.getprototypeof": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -11356,6 +12596,12 @@ "node": ">=14.17" } }, + "node_modules/uc.micro": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", + "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==", + "dev": true + }, "node_modules/ufo": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.3.2.tgz", @@ -11363,15 +12609,18 @@ "dev": true }, "node_modules/unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", + "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", + "call-bound": "^1.0.3", "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" + "has-symbols": "^1.1.0", + "which-boxed-primitive": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -11471,6 +12720,7 @@ "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, "dependencies": { "punycode": "^2.1.0" } @@ -12241,6 +13491,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, "dependencies": { "isexe": "^2.0.0" }, @@ -12252,31 +13503,80 @@ } }, "node_modules/which-boxed-primitive": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", + "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", + "dev": true, + "dependencies": { + "is-bigint": "^1.1.0", + "is-boolean-object": "^1.2.1", + "is-number-object": "^1.1.1", + "is-string": "^1.1.1", + "is-symbol": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", + "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.2", + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", + "is-async-function": "^2.0.0", + "is-date-object": "^1.1.0", + "is-finalizationregistry": "^1.1.0", + "is-generator-function": "^1.0.10", + "is-regex": "^1.2.1", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.1.0", + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", "dev": true, "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/which-typed-array": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz", - "integrity": "sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==", + "version": "1.1.18", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.18.tgz", + "integrity": "sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA==", "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.4", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -12431,7 +13731,8 @@ "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==" + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true }, "node_modules/ws": { "version": "8.18.0", @@ -12537,6 +13838,7 @@ "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, "engines": { "node": ">=10" }, diff --git a/package.json b/package.json index dcd6a87..00e2a96 100644 --- a/package.json +++ b/package.json @@ -4,6 +4,8 @@ "scripts": { "build": "turbo build", "dev": "turbo dev", + "format:check": "turbo format:check", + "format:fix": "turbo format:fix", "lint": "turbo lint", "test": "turbo run test", "test:cov": "turbo run test --coverage", diff --git a/packages/shared/.eslintrc.js b/packages/shared/.eslintrc.js index b531cc2..a924db1 100644 --- a/packages/shared/.eslintrc.js +++ b/packages/shared/.eslintrc.js @@ -1,45 +1,48 @@ module.exports = { env: { es2021: true, - node: true + node: true, }, extends: 'standard-with-typescript', - overrides: [ - ], + overrides: [], parserOptions: { ecmaVersion: 'latest', sourceType: 'module', project: ['tsconfig.json'], - tsconfigRootDir: __dirname + tsconfigRootDir: __dirname, }, - plugins: [ - 'sonarjs' - ], + plugins: ['sonarjs'], rules: { '@typescript-eslint/triple-slash-reference': 'off', '@typescript-eslint/space-before-function-paren': 'off', '@typescript-eslint/strict-boolean-expressions': 'off', '@typescript-eslint/no-extraneous-class': 'off', - 'semi': ["error", "never"], - 'quotes': ["error", "single"], + 'semi': ['error', 'never'], + 'quotes': ['error', 'single'], 'import/extensions': 'off', 'import/prefer-default-export': 'off', - indent: ['error', 2], + 'indent': ['error', 2], 'class-methods-use-this': 'off', - complexity: ['error', 4], + 'complexity': ['error', 4], 'sonarjs/cognitive-complexity': ['error', 4], 'max-depth': ['error', 3], 'max-statements': ['error', 10], - 'max-lines': ['error', { - max: 130, - skipBlankLines: true, - skipComments: true - }], - 'max-lines-per-function': ['error', { - max: 35, - skipBlankLines: true, - skipComments: true - }], + 'max-lines': [ + 'error', + { + max: 130, + skipBlankLines: true, + skipComments: true, + }, + ], + 'max-lines-per-function': [ + 'error', + { + max: 35, + skipBlankLines: true, + skipComments: true, + }, + ], 'max-nested-callbacks': ['error', 3], 'max-params': ['error', 3], 'no-useless-constructor': 'off', @@ -48,21 +51,24 @@ module.exports = { 'error', 'always', { - exceptAfterSingleLine: true - } + exceptAfterSingleLine: true, + }, ], 'no-shadow': 'off', '@typescript-eslint/no-shadow': ['error'], - 'max-len': ['error', { - code: 80 - }], - overrides: [ + 'max-len': [ + 'error', + { + code: 80, + }, + ], + 'overrides': [ { files: ['*.spec.ts'], rules: { 'max-nested-callbacks': ['error', 5], - } - } - ] - } + }, + }, + ], + }, } diff --git a/packages/shared/.prettierrc.json b/packages/shared/.prettierrc.json new file mode 100644 index 0000000..21c021c --- /dev/null +++ b/packages/shared/.prettierrc.json @@ -0,0 +1,7 @@ +{ + "arrowParens": "avoid", + "quoteProps": "consistent", + "semi": false, + "singleQuote": true, + "tabWidth": 2 +} diff --git a/packages/shared/package.json b/packages/shared/package.json index 5a5e83d..29792bb 100644 --- a/packages/shared/package.json +++ b/packages/shared/package.json @@ -5,7 +5,7 @@ "main": "./dist/cjs/index.js", "types": "./dist/types/index.d.ts", "exports": { - ".": { + ".": { "require": { "types": "./dist/types/index.d.ts", "default": "./dist/cjs/index.js" diff --git a/packages/shared/src/domain/base/DomainError.spec.ts b/packages/shared/src/domain/base/DomainError.spec.ts index 254f0ff..ed70385 100644 --- a/packages/shared/src/domain/base/DomainError.spec.ts +++ b/packages/shared/src/domain/base/DomainError.spec.ts @@ -1,26 +1,26 @@ -import { describe, it, expect } from "vitest" -import { DomainError } from "./DomainError" +import { describe, it, expect } from 'vitest' +import { DomainError } from './DomainError' -describe("src/domain/DomainError", () => { - it("should be defined", () => { +describe('src/domain/DomainError', () => { + it('should be defined', () => { expect(DomainError).toBeDefined() }) - it("should be instance of Error", () => { - expect(new DomainError("TEST_ERROR")).toBeInstanceOf(Error) + it('should be instance of Error', () => { + expect(new DomainError('TEST_ERROR')).toBeInstanceOf(Error) }) - describe("constructor", () => { - it("should accept a code parameter", () => { - const errorCode = "TEST_ERROR" + describe('constructor', () => { + it('should accept a code parameter', () => { + const errorCode = 'TEST_ERROR' const domainError = new DomainError(errorCode) expect(domainError.toObject().code).toBe(errorCode) }) - it("should accept a exposable parameter", () => { + it('should accept a exposable parameter', () => { const exposable = true - const domainError = new DomainError("TEST_ERROR", exposable) + const domainError = new DomainError('TEST_ERROR', exposable) expect(domainError.toObject().exposable).toBe(exposable) }) diff --git a/packages/shared/src/domain/base/Entity.spec.ts b/packages/shared/src/domain/base/Entity.spec.ts index 42fe6da..18648bf 100644 --- a/packages/shared/src/domain/base/Entity.spec.ts +++ b/packages/shared/src/domain/base/Entity.spec.ts @@ -1,6 +1,6 @@ -import { describe, it, expect } from "vitest" -import { Entity } from "./Entity" -import { ValueObject } from "./ValueObject" +import { describe, it, expect } from 'vitest' +import { Entity } from './Entity' +import { ValueObject } from './ValueObject' import { Uuid } from '../valueObjects/Uuid' interface TestProps { @@ -19,26 +19,26 @@ class TestEntity extends Entity { const testId = Uuid.create() -describe("src/domain/Entity", () => { - it("should be defined", () => { +describe('src/domain/Entity', () => { + it('should be defined', () => { expect(Entity).toBeDefined() }) - it("should be instance of ValueObject", () => { - const entity = TestEntity.create({ value: "test" }, testId) + it('should be instance of ValueObject', () => { + const entity = TestEntity.create({ value: 'test' }, testId) expect(entity).toBeInstanceOf(ValueObject) }) - it("should generate a new id if none is passed to constructor", () => { - const entity = TestEntity.create({ value: "test" }, testId) + it('should generate a new id if none is passed to constructor', () => { + const entity = TestEntity.create({ value: 'test' }, testId) expect(entity.uuid).toBeDefined() }) - it("should set the id if it was passed to constructor", () => { + it('should set the id if it was passed to constructor', () => { const expectedId = testId - const entity = TestEntity.create({ value: "test" }, expectedId) + const entity = TestEntity.create({ value: 'test' }, expectedId) expect(entity.uuid).toBe(expectedId) }) diff --git a/packages/shared/src/domain/base/Entity.ts b/packages/shared/src/domain/base/Entity.ts index 83795ab..a7a179d 100644 --- a/packages/shared/src/domain/base/Entity.ts +++ b/packages/shared/src/domain/base/Entity.ts @@ -1,4 +1,4 @@ -import { ValueObject } from "./ValueObject" +import { ValueObject } from './ValueObject' import { Uuid } from '../valueObjects/Uuid' export class Entity extends ValueObject { diff --git a/packages/shared/src/domain/base/ValueObject.spec.ts b/packages/shared/src/domain/base/ValueObject.spec.ts index 7630d50..a7b2848 100644 --- a/packages/shared/src/domain/base/ValueObject.spec.ts +++ b/packages/shared/src/domain/base/ValueObject.spec.ts @@ -1,5 +1,5 @@ -import { describe, it, expect } from "vitest" -import { ValueObject } from "./ValueObject" +import { describe, it, expect } from 'vitest' +import { ValueObject } from './ValueObject' interface TestProps { value: string @@ -15,13 +15,13 @@ class TestValueObject extends ValueObject { } } -describe("src/domain/ValueObject", () => { - it("should be defined", () => { +describe('src/domain/ValueObject', () => { + it('should be defined', () => { expect(ValueObject).toBeDefined() }) - it("should set props attribute from the constructor", () => { - const expectedProps = { value: "test" } + it('should set props attribute from the constructor', () => { + const expectedProps = { value: 'test' } const entity = TestValueObject.create(expectedProps) expect(entity.value).toStrictEqual(expectedProps.value) diff --git a/packages/shared/src/domain/base/event/EventBus.ts b/packages/shared/src/domain/base/event/EventBus.ts index 6f9b706..c11b83e 100644 --- a/packages/shared/src/domain/base/event/EventBus.ts +++ b/packages/shared/src/domain/base/event/EventBus.ts @@ -9,11 +9,17 @@ export default class EventBus { this.instance.publish(event) } - static subscribe(eventKey: symbol, listener: EventSubscription): void { + static subscribe( + eventKey: symbol, + listener: EventSubscription, + ): void { this.instance.subscribe(eventKey, listener as EventSubscription) } - static unsubscribe(eventKey: symbol, listener: EventSubscription): void { + static unsubscribe( + eventKey: symbol, + listener: EventSubscription, + ): void { this.instance.unsubscribe(eventKey, listener) } } diff --git a/packages/shared/src/domain/base/event/EventBusInstance.ts b/packages/shared/src/domain/base/event/EventBusInstance.ts index 648a181..02bad6b 100644 --- a/packages/shared/src/domain/base/event/EventBusInstance.ts +++ b/packages/shared/src/domain/base/event/EventBusInstance.ts @@ -21,7 +21,10 @@ export class EventBusInstance { listeners.push(listener) } - public unsubscribe(eventKey: symbol, listener: EventSubscription): void { + public unsubscribe( + eventKey: symbol, + listener: EventSubscription, + ): void { const listeners = this.listeners.get(eventKey) if (listeners) { const index = listeners.indexOf(listener) diff --git a/packages/shared/src/domain/base/event/Observable.ts b/packages/shared/src/domain/base/event/Observable.ts index 7e85029..23ef7ac 100644 --- a/packages/shared/src/domain/base/event/Observable.ts +++ b/packages/shared/src/domain/base/event/Observable.ts @@ -3,4 +3,4 @@ import { EventSubscription } from './EventSubscription' export interface Observable { listen(listener: EventSubscription): void -} \ No newline at end of file +} diff --git a/packages/shared/src/domain/base/event/ObservableSet.ts b/packages/shared/src/domain/base/event/ObservableSet.ts index 4067db6..55b68eb 100644 --- a/packages/shared/src/domain/base/event/ObservableSet.ts +++ b/packages/shared/src/domain/base/event/ObservableSet.ts @@ -2,14 +2,14 @@ import { Event } from './Event' import { EventSubscription } from './EventSubscription' import { Observable } from './Observable' -export class ObservableSet implements Observable{ +export class ObservableSet implements Observable { private listeners: Observable[] = [] - - constructor(...listeners:Observable[]) { + + constructor(...listeners: Observable[]) { this.listeners = listeners } listen(listener: EventSubscription): void { this.listeners.forEach(l => l.listen(listener)) } -} \ No newline at end of file +} diff --git a/packages/shared/src/domain/entities/L2Block.spec.ts b/packages/shared/src/domain/entities/L2Block.spec.ts index 53c9c6b..f8f7327 100644 --- a/packages/shared/src/domain/entities/L2Block.spec.ts +++ b/packages/shared/src/domain/entities/L2Block.spec.ts @@ -6,8 +6,8 @@ import { Address } from '../valueObjects/Address' import { L2Block } from './L2Block' describe('src/domain/entities/L2Block', () => { - const txType = TxType.create(TxTypesEnum.Eth) - const address = Address.create("0xbhbfhudhuf") + const txType = TxType.create(TxTypesEnum.Eth) + const address = Address.create('0xbhbfhudhuf') it('should be defined', () => { expect(L2Block).toBeDefined() @@ -16,7 +16,7 @@ describe('src/domain/entities/L2Block', () => { it('should be an instance of Entity', () => { const l2Block = L2Block.create({ txType, - address + address, }) expect(l2Block).toBeInstanceOf(Entity) @@ -25,7 +25,7 @@ describe('src/domain/entities/L2Block', () => { describe('create', () => { const l2Block = L2Block.create({ txType, - address + address, }) it('should set the txType on tagname txType', () => { diff --git a/packages/shared/src/domain/entities/L2Block.ts b/packages/shared/src/domain/entities/L2Block.ts index 310addb..c76d9fb 100644 --- a/packages/shared/src/domain/entities/L2Block.ts +++ b/packages/shared/src/domain/entities/L2Block.ts @@ -27,7 +27,7 @@ export class L2Block extends Entity { static fromJSON(json: L2BlockJSON): L2Block { return L2Block.create({ txType: TxType.create(json.txType as TxTypesEnum), - address: Address.create(json.address) + address: Address.create(json.address), }) } diff --git a/packages/shared/src/domain/enums/NetworkEnum.ts b/packages/shared/src/domain/enums/NetworkEnum.ts index fefc579..ec5afae 100644 --- a/packages/shared/src/domain/enums/NetworkEnum.ts +++ b/packages/shared/src/domain/enums/NetworkEnum.ts @@ -1,4 +1,4 @@ export enum NetworkEnum { MAINNET = 'mainnet', - TESTNET = 'testnet' + TESTNET = 'testnet', } diff --git a/packages/shared/src/domain/enums/TxTypesEnum.ts b/packages/shared/src/domain/enums/TxTypesEnum.ts index d6f0bdd..5b95f2b 100644 --- a/packages/shared/src/domain/enums/TxTypesEnum.ts +++ b/packages/shared/src/domain/enums/TxTypesEnum.ts @@ -2,5 +2,5 @@ export enum TxTypesEnum { Block = 'block', Eth = 'eth', Btc = 'btc', - Pop = 'pop' + Pop = 'pop', } diff --git a/packages/shared/src/domain/valueObjects/Address.spec.ts b/packages/shared/src/domain/valueObjects/Address.spec.ts index fdfe3dd..429ed4d 100644 --- a/packages/shared/src/domain/valueObjects/Address.spec.ts +++ b/packages/shared/src/domain/valueObjects/Address.spec.ts @@ -1,19 +1,19 @@ -import { describe, it, expect } from 'vitest'; -import { Address } from './Address'; -import { InvalidAddressError } from '../errors/InvalidAddressError'; +import { describe, it, expect } from 'vitest' +import { Address } from './Address' +import { InvalidAddressError } from '../errors/InvalidAddressError' describe('Address', () => { it('should create a valid Address object', () => { - const addressValue = 'Valid Address'; - const address = Address.create(addressValue); - expect(address.value).toBe(addressValue); - }); + const addressValue = 'Valid Address' + const address = Address.create(addressValue) + expect(address.value).toBe(addressValue) + }) it('should throw InvalidAddressError for invalid input', () => { - const invalidInput = 123; + const invalidInput = 123 const createInvalidAddress = () => { - Address.create(invalidInput as unknown as string); - }; - expect(createInvalidAddress).toThrow(InvalidAddressError); - }); -}); + Address.create(invalidInput as unknown as string) + } + expect(createInvalidAddress).toThrow(InvalidAddressError) + }) +}) diff --git a/packages/shared/src/domain/valueObjects/Txtype.spec.ts b/packages/shared/src/domain/valueObjects/Txtype.spec.ts index d26eff8..6c4fb23 100644 --- a/packages/shared/src/domain/valueObjects/Txtype.spec.ts +++ b/packages/shared/src/domain/valueObjects/Txtype.spec.ts @@ -1,12 +1,12 @@ -import { describe, it, expect } from 'vitest'; -import { TxTypesEnum } from '../enums/TxTypesEnum'; -import { TxType } from './Txtype'; +import { describe, it, expect } from 'vitest' +import { TxTypesEnum } from '../enums/TxTypesEnum' +import { TxType } from './Txtype' describe('TxType', () => { it('should create a TxType object with a valid transaction type', () => { Object.values(TxTypesEnum).forEach(txTypeValue => { - const txType = TxType.create(txTypeValue); - expect(txType.value).toBe(txTypeValue); - }); - }); -}); + const txType = TxType.create(txTypeValue) + expect(txType.value).toBe(txTypeValue) + }) + }) +}) diff --git a/packages/shared/src/domain/valueObjects/Uuid.spec.ts b/packages/shared/src/domain/valueObjects/Uuid.spec.ts index 31d8530..1ca119f 100644 --- a/packages/shared/src/domain/valueObjects/Uuid.spec.ts +++ b/packages/shared/src/domain/valueObjects/Uuid.spec.ts @@ -10,7 +10,7 @@ describe('src/domain/valueObjects/Uuid', () => { }) it('should be instance of ValueObject', () => { - expect(Uuid.create()).toBeInstanceOf(ValueObject) + expect(Uuid.create()).toBeInstanceOf(ValueObject) }) describe('create', () => { @@ -19,8 +19,8 @@ describe('src/domain/valueObjects/Uuid', () => { const uuid = Uuid.create() expect(validate(uuid.value)).toBeTruthy() - }); - }); + }) + }) describe('when a valid id is provided', () => { it('should set the id as value', () => { @@ -28,8 +28,8 @@ describe('src/domain/valueObjects/Uuid', () => { const uuid = Uuid.create(validId) expect(uuid.value).toEqual(validId) - }); - }); + }) + }) describe('when an invalid id is provided', () => { it('should set the id as value', () => { @@ -39,7 +39,7 @@ describe('src/domain/valueObjects/Uuid', () => { } expect(test).toThrowError(InvalidUuidError) - }); - }); + }) + }) }) }) diff --git a/packages/shared/src/index.ts b/packages/shared/src/index.ts index 8de6a6a..47d5b10 100644 --- a/packages/shared/src/index.ts +++ b/packages/shared/src/index.ts @@ -1,18 +1,18 @@ -export * from "./domain/base/DomainError" -export * from "./domain/base/Entity" -export * from "./domain/base/ValueObject" -export * from "./domain/valueObjects/Uuid" -export * from "./domain/base/event/Event" -export * from "./domain/base/event/Observable" -export * from "./domain/base/event/ObservableSet" -export * from "./domain/base/event/EventSubscription" -export * from "./domain/base/event/EventBus" -export * from "./domain/base/event/EventBusInstance" -export * from "./domain/entities/L2Block" -export * from "./domain/valueObjects/Timestamp" -export * from "./domain/enums/TxTypesEnum" -export * from "./domain/valueObjects/Txtype" -export * from "./domain/valueObjects/Address" -export * from "./networks/HemiTestnet" -export * from "./networks/HemiMainnet" -export * from "./domain/enums/NetworkEnum" +export * from './domain/base/DomainError' +export * from './domain/base/Entity' +export * from './domain/base/ValueObject' +export * from './domain/valueObjects/Uuid' +export * from './domain/base/event/Event' +export * from './domain/base/event/Observable' +export * from './domain/base/event/ObservableSet' +export * from './domain/base/event/EventSubscription' +export * from './domain/base/event/EventBus' +export * from './domain/base/event/EventBusInstance' +export * from './domain/entities/L2Block' +export * from './domain/valueObjects/Timestamp' +export * from './domain/enums/TxTypesEnum' +export * from './domain/valueObjects/Txtype' +export * from './domain/valueObjects/Address' +export * from './networks/HemiTestnet' +export * from './networks/HemiMainnet' +export * from './domain/enums/NetworkEnum' diff --git a/packages/shared/tsconfig.build.json b/packages/shared/tsconfig.build.json index cb32f58..5417c7d 100644 --- a/packages/shared/tsconfig.build.json +++ b/packages/shared/tsconfig.build.json @@ -1,6 +1,4 @@ { "extends": "./tsconfig.json", - "exclude": [ - "src/**/*.spec.ts" - ] + "exclude": ["src/**/*.spec.ts"] } diff --git a/packages/shared/tsconfig.json b/packages/shared/tsconfig.json index f66e9c8..14f90f1 100644 --- a/packages/shared/tsconfig.json +++ b/packages/shared/tsconfig.json @@ -1,7 +1,5 @@ { - "include": [ - "src/**/*" - ], + "include": ["src/**/*"], "compilerOptions": { /* Visit https://aka.ms/tsconfig to read more about this file */ @@ -15,7 +13,7 @@ // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ /* Language and Environment */ - "target": "es2016", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ + "target": "es2016" /* 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 TC39 stage 2 draft decorators. */ @@ -29,9 +27,9 @@ // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ /* Modules */ - "module": "commonjs", /* Specify what module code is generated. */ - "rootDir": "./src", /* Specify the root folder within your source files. */ - "moduleResolution": "node", /* Specify how TypeScript looks up a file from a given module specifier. */ + "module": "commonjs" /* Specify what module code is generated. */, + "rootDir": "./src" /* Specify the root folder within your source files. */, + "moduleResolution": "node" /* 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. */ @@ -48,12 +46,12 @@ // "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. */ + "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. */ + "sourceMap": true /* Create source map files for emitted JavaScript files. */, // "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": "./dist", /* Specify an output folder for all emitted files. */ + "outDir": "./dist" /* Specify an output folder for all emitted files. */, // "removeComments": true, /* Disable emitting comments. */ // "noEmit": true, /* Disable emitting files from a compilation. */ // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ @@ -75,33 +73,33 @@ /* Interop Constraints */ // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ // "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. */ + "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. */ + "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. */ - "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": false, /* 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. */ + "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. */, + "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": false /* 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. */ + "skipLibCheck": true /* Skip type checking all .d.ts files. */ } } diff --git a/turbo.json b/turbo.json index a8b9320..9debc65 100644 --- a/turbo.json +++ b/turbo.json @@ -13,6 +13,14 @@ "cache": false, "persistent": true }, + "format:check": { + "cache": false, + "persistent": true + }, + "format:fix": { + "cache": false, + "persistent": true + }, "test": { "cache": false },