diff --git a/.eslintrc.cjs b/.eslintrc.cjs deleted file mode 100644 index bbd29e1..0000000 --- a/.eslintrc.cjs +++ /dev/null @@ -1,23 +0,0 @@ -/* eslint-env node */ -require('@rushstack/eslint-patch/modern-module-resolution') - -module.exports = { - root: true, - extends: [ - '@vue/eslint-config-prettier/skip-formatting', - '@antfu', - ], - rules: { - 'no-tabs': ['off', { allowIndentationTabs: true }], - '@typescript-eslint/indent': ['error', 'tab'], - }, - overrides: [ - { - files: ['cypress/e2e/**/*.{cy,spec}.{js,ts,jsx,tsx}'], - extends: ['plugin:cypress/recommended'], - }, - ], - parserOptions: { - ecmaVersion: 'latest', - }, -} diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 813738a..0c25174 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -9,26 +9,23 @@ on: jobs: build: runs-on: ubuntu-latest + permissions: + contents: read + packages: write + env: + TOKEN: ${{ secrets.GITHUB_TOKEN }} steps: - - name: Checkout code - uses: actions/checkout@v2 - - - name: Set up Node.js - uses: actions/setup-node@v2 - with: - node-version: 16 - - - name: Install pnpm - uses: pnpm/action-setup@v2 + - uses: actions/checkout@v4 + - run: corepack enable + - uses: actions/setup-node@v4 with: - version: 8 - - - name: Install dependencies - run: pnpm install - - - name: Lint - run: pnpm lint + node-version: 18 + cache: pnpm + - name: Print npm config + run: npm config list + - run: pnpm install + - run: pnpm lint - name: Build run: pnpm build @@ -37,4 +34,4 @@ jobs: uses: actions/upload-artifact@v2 with: name: dist - path: dist/ \ No newline at end of file + path: dist/ diff --git a/.github/workflows/release-please.yml b/.github/workflows/release-please.yml index 09009d9..1c73a8f 100644 --- a/.github/workflows/release-please.yml +++ b/.github/workflows/release-please.yml @@ -36,4 +36,3 @@ jobs: asset_path: ./synco.crx asset_name: synco.crx asset_content_type: application/x-chrome-extension - diff --git a/.npmrc b/.npmrc index 1d9d622..6254d87 100644 --- a/.npmrc +++ b/.npmrc @@ -1,2 +1,2 @@ @gnugomez:registry=https://npm.pkg.github.com/ -//npm.pkg.github.com/:_authToken=${PAT} \ No newline at end of file +//npm.pkg.github.com/:_authToken=${TOKEN} \ No newline at end of file diff --git a/PRIVACY_POLICY.md b/PRIVACY_POLICY.md index 1015b28..276a04a 100644 --- a/PRIVACY_POLICY.md +++ b/PRIVACY_POLICY.md @@ -18,4 +18,4 @@ We may update our Privacy Policy from time to time. Therefore, you are advised t ## Contact -If you have any questions or suggestions about our Privacy Policy, do not hesitate to contact me creating an issue in this repository. \ No newline at end of file +If you have any questions or suggestions about our Privacy Policy, do not hesitate to contact me creating an issue in this repository. diff --git a/README.md b/README.md index 7cc4e2c..de32ffe 100644 --- a/README.md +++ b/README.md @@ -5,14 +5,16 @@ This repository contains the source code of "synco" a chrome extension that lets Is proudly made with [Vite](https://vitejs.dev/), [Vue 3](https://v3.vuejs.org/), [TypeScript](https://www.typescriptlang.org/), [Tailwind CSS](https://tailwindcss.com/) ## Features + - Multiple users per room (using peer to peer connections) - Low latency commands (play, pause, seek) depending on the network conditions -- Lauch the extension from any website that contaians a video. ___Some websites are not supported yet such as netflix that blocks any extension that tries to interact with their video player.___ +- Lauch the extension from any website that contaians a video. **_Some websites are not supported yet such as netflix that blocks any extension that tries to interact with their video player._** ## Things to improve -- [ ] This extension works completely peer to peer, however it needs to do a handshake with a server in order to know the other peers in the room. This handshake is done using firebase that is not ideal as it is a third party service. ___This can be improved by using a custom server that does the handshake and then the peers can communicate directly with each other.___ + +- [ ] This extension works completely peer to peer, however it needs to do a handshake with a server in order to know the other peers in the room. This handshake is done using firebase that is not ideal as it is a third party service. **_This can be improved by using a custom server that does the handshake and then the peers can communicate directly with each other._** - [ ] Tranform this into a monorepo to separate the extension from the core that uses webRTC to sync the videos. -- [ ] Add a way to create a room with a custom name ___this indeed is actually possible, you just only need to join a room that doesn't exist yet.___ +- [ ] Add a way to create a room with a custom name **_this indeed is actually possible, you just only need to join a room that doesn't exist yet._** - [ ] Add a way to share the room link with your colleagues without having to remove the current room id funcionaity as may be used as well. ## Recommended IDE Setup @@ -26,8 +28,8 @@ TypeScript cannot handle type information for `.vue` imports by default, so we r If the standalone TypeScript plugin doesn't feel fast enough to you, Volar has also implemented a [Take Over Mode](https://github.com/johnsoncodehk/volar/discussions/471#discussioncomment-1361669) that is more performant. You can enable it by the following steps: 1. Disable the built-in TypeScript Extension - 1) Run `Extensions: Show Built-in Extensions` from VSCode's command palette - 2) Find `TypeScript and JavaScript Language Features`, right click and select `Disable (Workspace)` + 1. Run `Extensions: Show Built-in Extensions` from VSCode's command palette + 2. Find `TypeScript and JavaScript Language Features`, right click and select `Disable (Workspace)` 2. Reload the VSCode window by running `Developer: Reload Window` from the command palette. ## Customize configuration diff --git a/cypress.config.ts b/cypress.config.ts index ad3c829..4a22885 100644 --- a/cypress.config.ts +++ b/cypress.config.ts @@ -1,8 +1,8 @@ import { defineConfig } from 'cypress' export default defineConfig({ - e2e: { - specPattern: 'cypress/e2e/**/*.{cy,spec}.{js,jsx,ts,tsx}', - baseUrl: 'http://localhost:4173', - }, + e2e: { + specPattern: 'cypress/e2e/**/*.{cy,spec}.{js,jsx,ts,tsx}', + baseUrl: 'http://localhost:4173', + }, }) diff --git a/cypress/e2e/example.cy.ts b/cypress/e2e/example.cy.ts index c36c2cc..7554c35 100644 --- a/cypress/e2e/example.cy.ts +++ b/cypress/e2e/example.cy.ts @@ -1,8 +1,8 @@ // https://on.cypress.io/api describe('My First Test', () => { - it('visits the app root url', () => { - cy.visit('/') - cy.contains('h1', 'You did it!') - }) + it('visits the app root url', () => { + cy.visit('/') + cy.contains('h1', 'You did it!') + }) }) diff --git a/cypress/e2e/tsconfig.json b/cypress/e2e/tsconfig.json index 37748fe..fdf9c69 100644 --- a/cypress/e2e/tsconfig.json +++ b/cypress/e2e/tsconfig.json @@ -1,10 +1,10 @@ { "extends": "@vue/tsconfig/tsconfig.dom.json", - "include": ["./**/*", "../support/**/*"], "compilerOptions": { - "isolatedModules": false, "target": "es5", "lib": ["es5", "dom"], - "types": ["cypress"] - } + "types": ["cypress"], + "isolatedModules": false + }, + "include": ["./**/*", "../support/**/*"] } diff --git a/eslint.config.js b/eslint.config.js new file mode 100644 index 0000000..72b012e --- /dev/null +++ b/eslint.config.js @@ -0,0 +1,7 @@ +import antfu from '@antfu/eslint-config' + +export default antfu( + { + formatters: true, + }, +) diff --git a/package.json b/package.json index e0d1cd3..5fbc64c 100644 --- a/package.json +++ b/package.json @@ -1,8 +1,9 @@ { - "name": "synco", + "name": "@gnugomez/synco", + "type": "module", "version": "1.2.1", "private": true, - "type": "module", + "repository": "gnugomez/synco", "scripts": { "dev": "vite", "build": "run-p type-check build-only", @@ -12,7 +13,7 @@ "test:e2e:dev": "start-server-and-test 'vite dev --port 4173' http://localhost:4173 'cypress open --e2e'", "build-only": "vite build", "type-check": "vue-tsc --noEmit -p tsconfig.vitest.json --composite false", - "lint": "eslint . --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix --ignore-path .gitignore", + "lint": "eslint .", "format": "prettier --write src/" }, "dependencies": { @@ -28,7 +29,7 @@ "webextension-polyfill": "^0.10.0" }, "devDependencies": { - "@antfu/eslint-config": "^0.39.3", + "@antfu/eslint-config": "^2.4.4", "@crxjs/vite-plugin": "2.0.0-beta.17", "@iconify/json": "^2.2.72", "@rushstack/eslint-patch": "^1.2.0", @@ -38,15 +39,14 @@ "@types/node": "^18.16.10", "@types/webextension-polyfill": "^0.10.2", "@vitejs/plugin-vue": "^4.2.3", - "@vue/eslint-config-prettier": "^7.1.0", "@vue/eslint-config-typescript": "^11.0.3", "@vue/test-utils": "^2.3.2", "@vue/tsconfig": "^0.4.0", "autoprefixer": "^10.4.14", "cypress": "^12.12.0", - "eslint": "^8.41.0", + "eslint": "^8.55.0", "eslint-plugin-cypress": "^2.13.3", - "eslint-plugin-vue": "^9.13.0", + "eslint-plugin-format": "^0.0.1", "jsdom": "^22.0.0", "npm-run-all": "^4.1.5", "postcss": "^8.4.31", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5039622..76ef74f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -38,8 +38,8 @@ dependencies: devDependencies: '@antfu/eslint-config': - specifier: ^0.39.3 - version: 0.39.3(eslint@8.41.0)(typescript@5.0.4) + specifier: ^2.4.4 + version: 2.4.5(@vue/compiler-sfc@3.3.9)(eslint-plugin-format@0.0.1)(eslint@8.55.0)(typescript@5.0.4)(vitest@0.31.0) '@crxjs/vite-plugin': specifier: 2.0.0-beta.17 version: 2.0.0-beta.17 @@ -67,12 +67,9 @@ devDependencies: '@vitejs/plugin-vue': specifier: ^4.2.3 version: 4.2.3(vite@4.5.1)(vue@3.3.9) - '@vue/eslint-config-prettier': - specifier: ^7.1.0 - version: 7.1.0(eslint@8.41.0)(prettier@2.8.8) '@vue/eslint-config-typescript': specifier: ^11.0.3 - version: 11.0.3(eslint-plugin-vue@9.13.0)(eslint@8.41.0)(typescript@5.0.4) + version: 11.0.3(eslint-plugin-vue@9.13.0)(eslint@8.55.0)(typescript@5.0.4) '@vue/test-utils': specifier: ^2.3.2 version: 2.3.2(vue@3.3.9) @@ -86,14 +83,14 @@ devDependencies: specifier: ^12.12.0 version: 12.12.0 eslint: - specifier: ^8.41.0 - version: 8.41.0 + specifier: ^8.55.0 + version: 8.55.0 eslint-plugin-cypress: specifier: ^2.13.3 - version: 2.13.3(eslint@8.41.0) - eslint-plugin-vue: - specifier: ^9.13.0 - version: 9.13.0(eslint@8.41.0) + version: 2.13.3(eslint@8.55.0) + eslint-plugin-format: + specifier: ^0.0.1 + version: 0.0.1(eslint@8.55.0) jsdom: specifier: ^22.0.0 version: 22.0.0 @@ -123,7 +120,7 @@ devDependencies: version: 5.0.4 unplugin-icons: specifier: ^0.16.1 - version: 0.16.1 + version: 0.16.1(@vue/compiler-sfc@3.3.9) vite: specifier: ^4.5.1 version: 4.5.1(@types/node@18.16.10)(sass@1.62.1) @@ -139,104 +136,91 @@ devDependencies: packages: + /@aashutoshrathi/word-wrap@1.2.6: + resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} + engines: {node: '>=0.10.0'} + dev: true + /@alloc/quick-lru@5.2.0: resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} engines: {node: '>=10'} - /@antfu/eslint-config-basic@0.39.3(@typescript-eslint/eslint-plugin@5.59.7)(@typescript-eslint/parser@5.59.7)(eslint@8.41.0)(typescript@5.0.4): - resolution: {integrity: sha512-cxV2jcVbLeTbZFgFXETAg2+Lbs0r2k/bU4FSEA9lQV7hVpJvfnfJvqph2w/CQllnIa7zoMmlUZN5JHapk11M9Q==} + /@antfu/eslint-config@2.4.5(@vue/compiler-sfc@3.3.9)(eslint-plugin-format@0.0.1)(eslint@8.55.0)(typescript@5.0.4)(vitest@0.31.0): + resolution: {integrity: sha512-vfngpXqPE935bqjp2eJeniV113d3TspyHvsSfqeUUDbCiof6AEVT7x+G4aCWHd/WJQPr+eSnUpYkTpGdvsk/aQ==} + hasBin: true peerDependencies: - eslint: '>=7.4.0' - dependencies: - eslint: 8.41.0 - eslint-plugin-antfu: 0.39.3(eslint@8.41.0)(typescript@5.0.4) - eslint-plugin-eslint-comments: 3.2.0(eslint@8.41.0) - eslint-plugin-html: 7.1.0 - eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.59.7)(eslint@8.41.0) - eslint-plugin-jsonc: 2.8.0(eslint@8.41.0) - eslint-plugin-markdown: 3.0.0(eslint@8.41.0) - eslint-plugin-n: 16.0.0(eslint@8.41.0) + '@unocss/eslint-plugin': '>=0.50.0' + eslint: '>=8.40.0' + eslint-plugin-format: '>=0.1.0' + eslint-plugin-react: ^7.33.2 + eslint-plugin-react-hooks: ^4.6.0 + eslint-plugin-react-refresh: ^0.4.4 + peerDependenciesMeta: + '@unocss/eslint-plugin': + optional: true + eslint-plugin-format: + optional: true + eslint-plugin-react: + optional: true + eslint-plugin-react-hooks: + optional: true + eslint-plugin-react-refresh: + optional: true + dependencies: + '@antfu/eslint-define-config': 1.23.0-2 + '@antfu/install-pkg': 0.3.1 + '@eslint-types/jsdoc': 46.8.2-1 + '@eslint-types/typescript-eslint': 6.12.0 + '@eslint-types/unicorn': 49.0.0 + '@stylistic/eslint-plugin': 1.5.1(eslint@8.55.0)(typescript@5.0.4) + '@typescript-eslint/eslint-plugin': 6.14.0(@typescript-eslint/parser@6.14.0)(eslint@8.55.0)(typescript@5.0.4) + '@typescript-eslint/parser': 6.14.0(eslint@8.55.0)(typescript@5.0.4) + eslint: 8.55.0 + eslint-config-flat-gitignore: 0.1.2 + eslint-merge-processors: 0.1.0(eslint@8.55.0) + eslint-parser-plain: 0.1.0 + eslint-plugin-antfu: 2.0.0(eslint@8.55.0) + eslint-plugin-eslint-comments: 3.2.0(eslint@8.55.0) + eslint-plugin-format: 0.0.1(eslint@8.55.0) + eslint-plugin-i: 2.29.0(@typescript-eslint/parser@6.14.0)(eslint@8.55.0) + eslint-plugin-jsdoc: 46.9.0(eslint@8.55.0) + eslint-plugin-jsonc: 2.10.0(eslint@8.55.0) + eslint-plugin-markdown: 3.0.1(eslint@8.55.0) + eslint-plugin-n: 16.4.0(eslint@8.55.0) eslint-plugin-no-only-tests: 3.1.0 - eslint-plugin-promise: 6.1.1(eslint@8.41.0) - eslint-plugin-unicorn: 47.0.0(eslint@8.41.0) - eslint-plugin-unused-imports: 2.0.0(@typescript-eslint/eslint-plugin@5.59.7)(eslint@8.41.0) - eslint-plugin-yml: 1.7.0(eslint@8.41.0) - jsonc-eslint-parser: 2.3.0 + eslint-plugin-perfectionist: 2.5.0(eslint@8.55.0)(typescript@5.0.4)(vue-eslint-parser@9.3.2) + eslint-plugin-toml: 0.7.1(eslint@8.55.0) + eslint-plugin-unicorn: 49.0.0(eslint@8.55.0) + eslint-plugin-unused-imports: 3.0.0(@typescript-eslint/eslint-plugin@6.14.0)(eslint@8.55.0) + eslint-plugin-vitest: 0.3.15(@typescript-eslint/eslint-plugin@6.14.0)(eslint@8.55.0)(typescript@5.0.4)(vitest@0.31.0) + eslint-plugin-vue: 9.19.2(eslint@8.55.0) + eslint-plugin-yml: 1.10.0(eslint@8.55.0) + eslint-processor-vue-blocks: 0.1.1(@vue/compiler-sfc@3.3.9)(eslint@8.55.0) + globals: 13.24.0 + jsonc-eslint-parser: 2.4.0 + local-pkg: 0.5.0 + parse-gitignore: 2.0.0 + picocolors: 1.0.0 + prompts: 2.4.2 + toml-eslint-parser: 0.9.3 + vue-eslint-parser: 9.3.2(eslint@8.55.0) yaml-eslint-parser: 1.2.2 + yargs: 17.7.2 transitivePeerDependencies: - - '@typescript-eslint/eslint-plugin' - - '@typescript-eslint/parser' - - eslint-import-resolver-typescript - - eslint-import-resolver-webpack - - supports-color - - typescript - dev: true - - /@antfu/eslint-config-ts@0.39.3(eslint@8.41.0)(typescript@5.0.4): - resolution: {integrity: sha512-c9lSYr3eWu+IImzYmUs1YrvMFZC98Xk9rlhX2JGf49SnUrAj2rOPzrmLmGG9VWYKiay5k8DiL57IuLFIkGWy9w==} - peerDependencies: - eslint: '>=7.4.0' - typescript: '>=3.9' - dependencies: - '@antfu/eslint-config-basic': 0.39.3(@typescript-eslint/eslint-plugin@5.59.7)(@typescript-eslint/parser@5.59.7)(eslint@8.41.0)(typescript@5.0.4) - '@typescript-eslint/eslint-plugin': 5.59.7(@typescript-eslint/parser@5.59.7)(eslint@8.41.0)(typescript@5.0.4) - '@typescript-eslint/parser': 5.59.7(eslint@8.41.0)(typescript@5.0.4) - eslint: 8.41.0 - eslint-plugin-jest: 27.2.1(@typescript-eslint/eslint-plugin@5.59.7)(eslint@8.41.0)(typescript@5.0.4) - typescript: 5.0.4 - transitivePeerDependencies: - - eslint-import-resolver-typescript - - eslint-import-resolver-webpack - - jest - - supports-color - dev: true - - /@antfu/eslint-config-vue@0.39.3(@typescript-eslint/eslint-plugin@5.59.7)(@typescript-eslint/parser@5.59.7)(eslint@8.41.0)(typescript@5.0.4): - resolution: {integrity: sha512-Q3qOobJHfqq/tZg5aBDylA96oEUfb54UWdovSFhn8s6FjJMIO7Otecxe8fTynpHKrEHmx38jnnx3JvTLAR+BAg==} - peerDependencies: - eslint: '>=7.4.0' - dependencies: - '@antfu/eslint-config-basic': 0.39.3(@typescript-eslint/eslint-plugin@5.59.7)(@typescript-eslint/parser@5.59.7)(eslint@8.41.0)(typescript@5.0.4) - '@antfu/eslint-config-ts': 0.39.3(eslint@8.41.0)(typescript@5.0.4) - eslint: 8.41.0 - eslint-plugin-vue: 9.14.0(eslint@8.41.0) - local-pkg: 0.4.3 - transitivePeerDependencies: - - '@typescript-eslint/eslint-plugin' - - '@typescript-eslint/parser' + - '@vue/compiler-sfc' + - astro-eslint-parser - eslint-import-resolver-typescript - eslint-import-resolver-webpack - - jest - supports-color + - svelte + - svelte-eslint-parser - typescript + - vitest dev: true - /@antfu/eslint-config@0.39.3(eslint@8.41.0)(typescript@5.0.4): - resolution: {integrity: sha512-0z6PKnK/H88ECd3Qq4vKWyi7ptUhGM9C6Rp28edJVQIA4305ofOXlo6O7v8eyD3sT72PCWUB85k54lo8slwWDw==} - peerDependencies: - eslint: '>=7.4.0' - dependencies: - '@antfu/eslint-config-vue': 0.39.3(@typescript-eslint/eslint-plugin@5.59.7)(@typescript-eslint/parser@5.59.7)(eslint@8.41.0)(typescript@5.0.4) - '@typescript-eslint/eslint-plugin': 5.59.7(@typescript-eslint/parser@5.59.7)(eslint@8.41.0)(typescript@5.0.4) - '@typescript-eslint/parser': 5.59.7(eslint@8.41.0)(typescript@5.0.4) - eslint: 8.41.0 - eslint-plugin-eslint-comments: 3.2.0(eslint@8.41.0) - eslint-plugin-html: 7.1.0 - eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.59.7)(eslint@8.41.0) - eslint-plugin-jsonc: 2.8.0(eslint@8.41.0) - eslint-plugin-n: 16.0.0(eslint@8.41.0) - eslint-plugin-promise: 6.1.1(eslint@8.41.0) - eslint-plugin-unicorn: 47.0.0(eslint@8.41.0) - eslint-plugin-vue: 9.14.0(eslint@8.41.0) - eslint-plugin-yml: 1.7.0(eslint@8.41.0) - jsonc-eslint-parser: 2.3.0 - yaml-eslint-parser: 1.2.2 - transitivePeerDependencies: - - eslint-import-resolver-typescript - - eslint-import-resolver-webpack - - jest - - supports-color - - typescript + /@antfu/eslint-define-config@1.23.0-2: + resolution: {integrity: sha512-LvxY21+ZhpuBf/aHeBUtGQhSEfad4PkNKXKvDOSvukaM3XVTfBhwmHX2EKwAsdq5DlfjbT3qqYyMiueBIO5iDQ==} + engines: {node: '>=18.0.0', npm: '>=9.0.0', pnpm: '>= 8.6.0'} dev: true /@antfu/install-pkg@0.1.1: @@ -246,6 +230,12 @@ packages: find-up: 5.0.0 dev: true + /@antfu/install-pkg@0.3.1: + resolution: {integrity: sha512-A3zWY9VeTPnxlMiZtsGHw2lSd3ghwvL8s9RiGOtqvDxhhFfZ781ynsGBa/iUnDJ5zBrmTFQrJDud3TGgRISaxw==} + dependencies: + execa: 8.0.1 + dev: true + /@antfu/utils@0.7.4: resolution: {integrity: sha512-qe8Nmh9rYI/HIspLSTwtbMFPj6dISG6+dJnOguTlPNXtCvS2uezdxscVBb7/3DrmNbQK49TDqpkSQ1chbRGdpQ==} dev: true @@ -267,11 +257,6 @@ packages: engines: {node: '>=6.9.0'} requiresBuild: true - /@babel/helper-validator-identifier@7.19.1: - resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==} - engines: {node: '>=6.9.0'} - dev: true - /@babel/helper-validator-identifier@7.22.20: resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} engines: {node: '>=6.9.0'} @@ -286,7 +271,7 @@ packages: resolution: {integrity: sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-validator-identifier': 7.19.1 + '@babel/helper-validator-identifier': 7.22.20 chalk: 2.4.2 js-tokens: 4.0.0 dev: true @@ -387,6 +372,27 @@ packages: - supports-color dev: true + /@dprint/formatter@0.2.0: + resolution: {integrity: sha512-E1q1JaOPeEUBhG//IUayqJQvNpqprZ0OCF8B/bIhUqSsMIp0Y74PgF8JPvDCrOdq43qiGUYAavVO8iCBHOoU/A==} + dev: true + + /@dprint/markdown@0.16.3: + resolution: {integrity: sha512-KvwUrCdHR1spFk0EcdW33KEGFLfkcdx6hJN8mwipGBw0b40sl5oPtVUTgRiH70eV7VUhPfycDfIsDutWNHb17w==} + dev: true + + /@dprint/toml@0.5.4: + resolution: {integrity: sha512-d+5GwwzztZD0QixmOBhaO6nWVLsAeYsJ1HJYNxDoDRbASFCpza9BBVshG5ctBRXCkkIHhD9BO1SnbOoRQltUQw==} + dev: true + + /@es-joy/jsdoccomment@0.41.0: + resolution: {integrity: sha512-aKUhyn1QI5Ksbqcr3fFJj16p99QdjUxXAEuFst1Z47DRyoiMwivIH9MV/ARcJOCXVjPfjITciej8ZD2O/6qUmw==} + engines: {node: '>=16'} + dependencies: + comment-parser: 1.4.1 + esquery: 1.5.0 + jsdoc-type-pratt-parser: 4.0.0 + dev: true + /@esbuild/android-arm64@0.18.20: resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} engines: {node: '>=12'} @@ -585,28 +591,45 @@ packages: dev: true optional: true - /@eslint-community/eslint-utils@4.4.0(eslint@8.41.0): + /@eslint-community/eslint-utils@4.4.0(eslint@8.55.0): resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 dependencies: - eslint: 8.41.0 + eslint: 8.55.0 eslint-visitor-keys: 3.4.1 dev: true + /@eslint-community/regexpp@4.10.0: + resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + dev: true + /@eslint-community/regexpp@4.5.1: resolution: {integrity: sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} dev: true - /@eslint/eslintrc@2.0.3: - resolution: {integrity: sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ==} + /@eslint-types/jsdoc@46.8.2-1: + resolution: {integrity: sha512-FwD7V0xX0jyaqj8Ul5ZY+TAAPohDfVqtbuXJNHb+OIv1aTIqZi5+Zn3F2UwQ5O3BnQd2mTduyK0+HjGx3/AMFg==} + dev: true + + /@eslint-types/typescript-eslint@6.12.0: + resolution: {integrity: sha512-N8cbOYjyFl2BFgDhDgHhTGpgiMkFg0CoITG5hdBm9ZGmcEgUvFBnHvHG7qJl3qVEmFnoKUdfSAcr7MRb2/Jxvw==} + dev: true + + /@eslint-types/unicorn@49.0.0: + resolution: {integrity: sha512-NfXSZIsPFRD2fwTDZQj8SaXqS/rXjB5foxMraLovyrYGXiQK2y0780drDKYYSVbqvco29QIYoZNmnKTUkzZMvQ==} + dev: true + + /@eslint/eslintrc@2.1.4: + resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: ajv: 6.12.6 debug: 4.3.4(supports-color@8.1.1) - espree: 9.5.2 + espree: 9.6.1 globals: 13.20.0 ignore: 5.2.4 import-fresh: 3.3.0 @@ -617,8 +640,8 @@ packages: - supports-color dev: true - /@eslint/js@8.41.0: - resolution: {integrity: sha512-LxcyMGxwmTh2lY9FwHPGWOHmYFCZvbrFCBZL4FzSSsxsRPuhrYUg/49/0KDfW8tnIEaEHtfmn6+NPN+1DqaNmA==} + /@eslint/js@8.55.0: + resolution: {integrity: sha512-qQfo2mxH5yVom1kacMtZZJFVdW+E70mqHMJvVg6WTLo+VBuQJ4TojZlfWBjK0ve5BdEeNAVxOsl/nvNMpJOaJA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true @@ -1109,11 +1132,11 @@ packages: '@hapi/hoek': 9.3.0 dev: true - /@humanwhocodes/config-array@0.11.8: - resolution: {integrity: sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==} + /@humanwhocodes/config-array@0.11.13: + resolution: {integrity: sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==} engines: {node: '>=10.10.0'} dependencies: - '@humanwhocodes/object-schema': 1.2.1 + '@humanwhocodes/object-schema': 2.0.1 debug: 4.3.4(supports-color@8.1.1) minimatch: 3.1.2 transitivePeerDependencies: @@ -1125,8 +1148,8 @@ packages: engines: {node: '>=12.22'} dev: true - /@humanwhocodes/object-schema@1.2.1: - resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} + /@humanwhocodes/object-schema@2.0.1: + resolution: {integrity: sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==} dev: true /@iconify/json@2.2.72: @@ -1218,6 +1241,18 @@ packages: '@nodelib/fs.scandir': 2.1.5 fastq: 1.15.0 + /@pkgr/utils@2.4.2: + resolution: {integrity: sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw==} + engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + dependencies: + cross-spawn: 7.0.3 + fast-glob: 3.3.2 + is-glob: 4.0.3 + open: 9.1.0 + picocolors: 1.0.0 + tslib: 2.6.2 + dev: true + /@protobufjs/aspromise@1.1.2: resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==} dev: false @@ -1287,6 +1322,72 @@ packages: resolution: {integrity: sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==} dev: true + /@stylistic/eslint-plugin-js@1.5.1(eslint@8.55.0): + resolution: {integrity: sha512-iZF0rF+uOhAmOJYOJx1Yvmm3CZ1uz9n0SRd9dpBYHA3QAvfABUORh9LADWwZCigjHJkp2QbCZelGFJGwGz7Siw==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: '>=8.40.0' + dependencies: + acorn: 8.11.2 + escape-string-regexp: 4.0.0 + eslint: 8.55.0 + eslint-visitor-keys: 3.4.3 + espree: 9.6.1 + dev: true + + /@stylistic/eslint-plugin-jsx@1.5.1(eslint@8.55.0): + resolution: {integrity: sha512-JuX+jsbVdpZ6EZXkbxYr9ERcGc0ndSMFgOuwEPHhOWPZ+7F8JP/nzpBjrRf7dUPMX7ezTYLZ2a3KRGRNme6rWQ==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: '>=8.40.0' + dependencies: + '@stylistic/eslint-plugin-js': 1.5.1(eslint@8.55.0) + eslint: 8.55.0 + estraverse: 5.3.0 + dev: true + + /@stylistic/eslint-plugin-plus@1.5.1(eslint@8.55.0)(typescript@5.0.4): + resolution: {integrity: sha512-yxkFHsUgoqEf/j1Og0FGkpEmeQoqx0CMmtgoyZGr34hka0ElCy9fRpsFkLcwx60SfiHXspbvs2YUMXiWIffnjg==} + peerDependencies: + eslint: '*' + dependencies: + '@typescript-eslint/utils': 6.14.0(eslint@8.55.0)(typescript@5.0.4) + eslint: 8.55.0 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /@stylistic/eslint-plugin-ts@1.5.1(eslint@8.55.0)(typescript@5.0.4): + resolution: {integrity: sha512-oXM1V7Jp8G9+udxQTy+Igo79LR2e5HXiWqlA/3v+/PAqWxniR9nJqJSBjtQKJTPsGplDqn/ASpHUOETP4EI/4A==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: '>=8.40.0' + dependencies: + '@stylistic/eslint-plugin-js': 1.5.1(eslint@8.55.0) + '@typescript-eslint/utils': 6.14.0(eslint@8.55.0)(typescript@5.0.4) + eslint: 8.55.0 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /@stylistic/eslint-plugin@1.5.1(eslint@8.55.0)(typescript@5.0.4): + resolution: {integrity: sha512-y7ynUMh5Hq1MhYApAccl1iuQem5Sf2JSEIjV/qsBfmW1WfRDs74V+0kLkcOn1Y600W3t8orIFrrEuWmJSetAgw==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: '>=8.40.0' + dependencies: + '@stylistic/eslint-plugin-js': 1.5.1(eslint@8.55.0) + '@stylistic/eslint-plugin-jsx': 1.5.1(eslint@8.55.0) + '@stylistic/eslint-plugin-plus': 1.5.1(eslint@8.55.0)(typescript@5.0.4) + '@stylistic/eslint-plugin-ts': 1.5.1(eslint@8.55.0)(typescript@5.0.4) + eslint: 8.55.0 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + /@tailwindcss/aspect-ratio@0.4.2(tailwindcss@3.3.2): resolution: {integrity: sha512-8QPrypskfBa7QIMuKHg2TA7BqES6vhBrDLOv8Unb6FcFyd3TjKbc6lcmb9UPQHxfl24sXoJ41ux/H7qQQvfaSQ==} peerDependencies: @@ -1378,10 +1479,6 @@ packages: resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} dev: true - /@types/json5@0.0.29: - resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} - dev: true - /@types/mdast@3.0.11: resolution: {integrity: sha512-Y/uImid8aAwrEA24/1tcRZwpxX3pIFTSilcNDKSPn+Y2iDywSEachzRuvgAYYLR3wpGXAsMbv5lvKLDZLeYPAw==} dependencies: @@ -1441,7 +1538,7 @@ packages: dev: true optional: true - /@typescript-eslint/eslint-plugin@5.59.6(@typescript-eslint/parser@5.59.6)(eslint@8.41.0)(typescript@5.0.4): + /@typescript-eslint/eslint-plugin@5.59.6(@typescript-eslint/parser@5.59.6)(eslint@8.55.0)(typescript@5.0.4): resolution: {integrity: sha512-sXtOgJNEuRU5RLwPUb1jxtToZbgvq3M6FPpY4QENxoOggK+UpTxUBpj6tD8+Qh2g46Pi9We87E+eHnUw8YcGsw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -1453,12 +1550,12 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.5.1 - '@typescript-eslint/parser': 5.59.6(eslint@8.41.0)(typescript@5.0.4) + '@typescript-eslint/parser': 5.59.6(eslint@8.55.0)(typescript@5.0.4) '@typescript-eslint/scope-manager': 5.59.6 - '@typescript-eslint/type-utils': 5.59.6(eslint@8.41.0)(typescript@5.0.4) - '@typescript-eslint/utils': 5.59.6(eslint@8.41.0)(typescript@5.0.4) + '@typescript-eslint/type-utils': 5.59.6(eslint@8.55.0)(typescript@5.0.4) + '@typescript-eslint/utils': 5.59.6(eslint@8.55.0)(typescript@5.0.4) debug: 4.3.4(supports-color@8.1.1) - eslint: 8.41.0 + eslint: 8.55.0 grapheme-splitter: 1.0.4 ignore: 5.2.4 natural-compare-lite: 1.4.0 @@ -1469,35 +1566,36 @@ packages: - supports-color dev: true - /@typescript-eslint/eslint-plugin@5.59.7(@typescript-eslint/parser@5.59.7)(eslint@8.41.0)(typescript@5.0.4): - resolution: {integrity: sha512-BL+jYxUFIbuYwy+4fF86k5vdT9lT0CNJ6HtwrIvGh0PhH8s0yy5rjaKH2fDCrz5ITHy07WCzVGNvAmjJh4IJFA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@typescript-eslint/eslint-plugin@6.14.0(@typescript-eslint/parser@6.14.0)(eslint@8.55.0)(typescript@5.0.4): + resolution: {integrity: sha512-1ZJBykBCXaSHG94vMMKmiHoL0MhNHKSVlcHVYZNw+BKxufhqQVTOawNpwwI1P5nIFZ/4jLVop0mcY6mJJDFNaw==} + engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: - '@typescript-eslint/parser': ^5.0.0 - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha + eslint: ^7.0.0 || ^8.0.0 typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: '@eslint-community/regexpp': 4.5.1 - '@typescript-eslint/parser': 5.59.7(eslint@8.41.0)(typescript@5.0.4) - '@typescript-eslint/scope-manager': 5.59.7 - '@typescript-eslint/type-utils': 5.59.7(eslint@8.41.0)(typescript@5.0.4) - '@typescript-eslint/utils': 5.59.7(eslint@8.41.0)(typescript@5.0.4) + '@typescript-eslint/parser': 6.14.0(eslint@8.55.0)(typescript@5.0.4) + '@typescript-eslint/scope-manager': 6.14.0 + '@typescript-eslint/type-utils': 6.14.0(eslint@8.55.0)(typescript@5.0.4) + '@typescript-eslint/utils': 6.14.0(eslint@8.55.0)(typescript@5.0.4) + '@typescript-eslint/visitor-keys': 6.14.0 debug: 4.3.4(supports-color@8.1.1) - eslint: 8.41.0 - grapheme-splitter: 1.0.4 + eslint: 8.55.0 + graphemer: 1.4.0 ignore: 5.2.4 - natural-compare-lite: 1.4.0 - semver: 7.5.1 - tsutils: 3.21.0(typescript@5.0.4) + natural-compare: 1.4.0 + semver: 7.5.4 + ts-api-utils: 1.0.3(typescript@5.0.4) typescript: 5.0.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/parser@5.59.6(eslint@8.41.0)(typescript@5.0.4): + /@typescript-eslint/parser@5.59.6(eslint@8.55.0)(typescript@5.0.4): resolution: {integrity: sha512-7pCa6al03Pv1yf/dUg/s1pXz/yGMUBAw5EeWqNTFiSueKvRNonze3hma3lhdsOrQcaOXhbk5gKu2Fludiho9VA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -1511,27 +1609,28 @@ packages: '@typescript-eslint/types': 5.59.6 '@typescript-eslint/typescript-estree': 5.59.6(typescript@5.0.4) debug: 4.3.4(supports-color@8.1.1) - eslint: 8.41.0 + eslint: 8.55.0 typescript: 5.0.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/parser@5.59.7(eslint@8.41.0)(typescript@5.0.4): - resolution: {integrity: sha512-VhpsIEuq/8i5SF+mPg9jSdIwgMBBp0z9XqjiEay+81PYLJuroN+ET1hM5IhkiYMJd9MkTz8iJLt7aaGAgzWUbQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@typescript-eslint/parser@6.14.0(eslint@8.55.0)(typescript@5.0.4): + resolution: {integrity: sha512-QjToC14CKacd4Pa7JK4GeB/vHmWFJckec49FR4hmIRf97+KXole0T97xxu9IFiPxVQ1DBWrQ5wreLwAGwWAVQA==} + engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + eslint: ^7.0.0 || ^8.0.0 typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 5.59.7 - '@typescript-eslint/types': 5.59.7 - '@typescript-eslint/typescript-estree': 5.59.7(typescript@5.0.4) + '@typescript-eslint/scope-manager': 6.14.0 + '@typescript-eslint/types': 6.14.0 + '@typescript-eslint/typescript-estree': 6.14.0(typescript@5.0.4) + '@typescript-eslint/visitor-keys': 6.14.0 debug: 4.3.4(supports-color@8.1.1) - eslint: 8.41.0 + eslint: 8.55.0 typescript: 5.0.4 transitivePeerDependencies: - supports-color @@ -1545,15 +1644,15 @@ packages: '@typescript-eslint/visitor-keys': 5.59.6 dev: true - /@typescript-eslint/scope-manager@5.59.7: - resolution: {integrity: sha512-FL6hkYWK9zBGdxT2wWEd2W8ocXMu3K94i3gvMrjXpx+koFYdYV7KprKfirpgY34vTGzEPPuKoERpP8kD5h7vZQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@typescript-eslint/scope-manager@6.14.0: + resolution: {integrity: sha512-VT7CFWHbZipPncAZtuALr9y3EuzY1b1t1AEkIq2bTXUPKw+pHoXflGNG5L+Gv6nKul1cz1VH8fz16IThIU0tdg==} + engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 5.59.7 - '@typescript-eslint/visitor-keys': 5.59.7 + '@typescript-eslint/types': 6.14.0 + '@typescript-eslint/visitor-keys': 6.14.0 dev: true - /@typescript-eslint/type-utils@5.59.6(eslint@8.41.0)(typescript@5.0.4): + /@typescript-eslint/type-utils@5.59.6(eslint@8.55.0)(typescript@5.0.4): resolution: {integrity: sha512-A4tms2Mp5yNvLDlySF+kAThV9VTBPCvGf0Rp8nl/eoDX9Okun8byTKoj3fJ52IJitjWOk0fKPNQhXEB++eNozQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -1564,30 +1663,30 @@ packages: optional: true dependencies: '@typescript-eslint/typescript-estree': 5.59.6(typescript@5.0.4) - '@typescript-eslint/utils': 5.59.6(eslint@8.41.0)(typescript@5.0.4) + '@typescript-eslint/utils': 5.59.6(eslint@8.55.0)(typescript@5.0.4) debug: 4.3.4(supports-color@8.1.1) - eslint: 8.41.0 + eslint: 8.55.0 tsutils: 3.21.0(typescript@5.0.4) typescript: 5.0.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/type-utils@5.59.7(eslint@8.41.0)(typescript@5.0.4): - resolution: {integrity: sha512-ozuz/GILuYG7osdY5O5yg0QxXUAEoI4Go3Do5xeu+ERH9PorHBPSdvD3Tjp2NN2bNLh1NJQSsQu2TPu/Ly+HaQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@typescript-eslint/type-utils@6.14.0(eslint@8.55.0)(typescript@5.0.4): + resolution: {integrity: sha512-x6OC9Q7HfYKqjnuNu5a7kffIYs3No30isapRBJl1iCHLitD8O0lFbRcVGiOcuyN837fqXzPZ1NS10maQzZMKqw==} + engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: - eslint: '*' + eslint: ^7.0.0 || ^8.0.0 typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 5.59.7(typescript@5.0.4) - '@typescript-eslint/utils': 5.59.7(eslint@8.41.0)(typescript@5.0.4) + '@typescript-eslint/typescript-estree': 6.14.0(typescript@5.0.4) + '@typescript-eslint/utils': 6.14.0(eslint@8.55.0)(typescript@5.0.4) debug: 4.3.4(supports-color@8.1.1) - eslint: 8.41.0 - tsutils: 3.21.0(typescript@5.0.4) + eslint: 8.55.0 + ts-api-utils: 1.0.3(typescript@5.0.4) typescript: 5.0.4 transitivePeerDependencies: - supports-color @@ -1598,9 +1697,9 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /@typescript-eslint/types@5.59.7: - resolution: {integrity: sha512-UnVS2MRRg6p7xOSATscWkKjlf/NDKuqo5TdbWck6rIRZbmKpVNTLALzNvcjIfHBE7736kZOFc/4Z3VcZwuOM/A==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@typescript-eslint/types@6.14.0: + resolution: {integrity: sha512-uty9H2K4Xs8E47z3SnXEPRNDfsis8JO27amp2GNCnzGETEW3yTqEIVg5+AI7U276oGF/tw6ZA+UesxeQ104ceA==} + engines: {node: ^16.0.0 || >=18.0.0} dev: true /@typescript-eslint/typescript-estree@5.59.6(typescript@5.0.4): @@ -1624,40 +1723,40 @@ packages: - supports-color dev: true - /@typescript-eslint/typescript-estree@5.59.7(typescript@5.0.4): - resolution: {integrity: sha512-4A1NtZ1I3wMN2UGDkU9HMBL+TIQfbrh4uS0WDMMpf3xMRursDbqEf1ahh6vAAe3mObt8k3ZATnezwG4pdtWuUQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@typescript-eslint/typescript-estree@6.14.0(typescript@5.0.4): + resolution: {integrity: sha512-yPkaLwK0yH2mZKFE/bXkPAkkFgOv15GJAUzgUVonAbv0Hr4PK/N2yaA/4XQbTZQdygiDkpt5DkxPELqHguNvyw==} + engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: - '@typescript-eslint/types': 5.59.7 - '@typescript-eslint/visitor-keys': 5.59.7 + '@typescript-eslint/types': 6.14.0 + '@typescript-eslint/visitor-keys': 6.14.0 debug: 4.3.4(supports-color@8.1.1) globby: 11.1.0 is-glob: 4.0.3 - semver: 7.5.1 - tsutils: 3.21.0(typescript@5.0.4) + semver: 7.5.4 + ts-api-utils: 1.0.3(typescript@5.0.4) typescript: 5.0.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/utils@5.59.6(eslint@8.41.0)(typescript@5.0.4): + /@typescript-eslint/utils@5.59.6(eslint@8.55.0)(typescript@5.0.4): resolution: {integrity: sha512-vzaaD6EXbTS29cVH0JjXBdzMt6VBlv+hE31XktDRMX1j3462wZCJa7VzO2AxXEXcIl8GQqZPcOPuW/Z1tZVogg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.41.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.55.0) '@types/json-schema': 7.0.11 '@types/semver': 7.5.0 '@typescript-eslint/scope-manager': 5.59.6 '@typescript-eslint/types': 5.59.6 '@typescript-eslint/typescript-estree': 5.59.6(typescript@5.0.4) - eslint: 8.41.0 + eslint: 8.55.0 eslint-scope: 5.1.1 semver: 7.5.1 transitivePeerDependencies: @@ -1665,21 +1764,20 @@ packages: - typescript dev: true - /@typescript-eslint/utils@5.59.7(eslint@8.41.0)(typescript@5.0.4): - resolution: {integrity: sha512-yCX9WpdQKaLufz5luG4aJbOpdXf/fjwGMcLFXZVPUz3QqLirG5QcwwnIHNf8cjLjxK4qtzTO8udUtMQSAToQnQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@typescript-eslint/utils@6.14.0(eslint@8.55.0)(typescript@5.0.4): + resolution: {integrity: sha512-XwRTnbvRr7Ey9a1NT6jqdKX8y/atWG+8fAIu3z73HSP8h06i3r/ClMhmaF/RGWGW1tHJEwij1uEg2GbEmPYvYg==} + engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + eslint: ^7.0.0 || ^8.0.0 dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.41.0) - '@types/json-schema': 7.0.11 + '@eslint-community/eslint-utils': 4.4.0(eslint@8.55.0) + '@types/json-schema': 7.0.15 '@types/semver': 7.5.0 - '@typescript-eslint/scope-manager': 5.59.7 - '@typescript-eslint/types': 5.59.7 - '@typescript-eslint/typescript-estree': 5.59.7(typescript@5.0.4) - eslint: 8.41.0 - eslint-scope: 5.1.1 - semver: 7.5.1 + '@typescript-eslint/scope-manager': 6.14.0 + '@typescript-eslint/types': 6.14.0 + '@typescript-eslint/typescript-estree': 6.14.0(typescript@5.0.4) + eslint: 8.55.0 + semver: 7.5.4 transitivePeerDependencies: - supports-color - typescript @@ -1693,14 +1791,18 @@ packages: eslint-visitor-keys: 3.4.1 dev: true - /@typescript-eslint/visitor-keys@5.59.7: - resolution: {integrity: sha512-tyN+X2jvMslUszIiYbF0ZleP+RqQsFVpGrKI6e0Eet1w8WmhsAtmzaqm8oM8WJQ1ysLwhnsK/4hYHJjOgJVfQQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@typescript-eslint/visitor-keys@6.14.0: + resolution: {integrity: sha512-fB5cw6GRhJUz03MrROVuj5Zm/Q+XWlVdIsFj+Zb1Hvqouc8t+XP2H5y53QYU/MGtd2dPg6/vJJlhoX3xc2ehfw==} + engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 5.59.7 + '@typescript-eslint/types': 6.14.0 eslint-visitor-keys: 3.4.1 dev: true + /@ungap/structured-clone@1.2.0: + resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + dev: true + /@vitejs/plugin-vue@4.2.3(vite@4.5.1)(vue@3.3.9): resolution: {integrity: sha512-R6JDUfiZbJA9cMiguQ7jxALsgiprjBeHL5ikpXfJCH62pPHtI+JdJ5xWj6Ev73yXSlYl86+blXn1kZHQ7uElxw==} engines: {node: ^14.18.0 || >=16.0.0} @@ -1872,19 +1974,7 @@ packages: resolution: {integrity: sha512-o9KfBeaBmCKl10usN4crU53fYtC1r7jJwdGKjPT24t348rHxgfpZ0xL3Xm/gLUYnc0oTp8LAmrxOeLyu6tbk2Q==} dev: false - /@vue/eslint-config-prettier@7.1.0(eslint@8.41.0)(prettier@2.8.8): - resolution: {integrity: sha512-Pv/lVr0bAzSIHLd9iz0KnvAr4GKyCEl+h52bc4e5yWuDVtLgFwycF7nrbWTAQAS+FU6q1geVd07lc6EWfJiWKQ==} - peerDependencies: - eslint: '>= 7.28.0' - prettier: '>= 2.0.0' - dependencies: - eslint: 8.41.0 - eslint-config-prettier: 8.8.0(eslint@8.41.0) - eslint-plugin-prettier: 4.2.1(eslint-config-prettier@8.8.0)(eslint@8.41.0)(prettier@2.8.8) - prettier: 2.8.8 - dev: true - - /@vue/eslint-config-typescript@11.0.3(eslint-plugin-vue@9.13.0)(eslint@8.41.0)(typescript@5.0.4): + /@vue/eslint-config-typescript@11.0.3(eslint-plugin-vue@9.13.0)(eslint@8.55.0)(typescript@5.0.4): resolution: {integrity: sha512-dkt6W0PX6H/4Xuxg/BlFj5xHvksjpSlVjtkQCpaYJBIEuKj2hOVU7r+TIe+ysCwRYFz/lGqvklntRkCAibsbPw==} engines: {node: ^14.17.0 || >=16.0.0} peerDependencies: @@ -1895,12 +1985,12 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/eslint-plugin': 5.59.6(@typescript-eslint/parser@5.59.6)(eslint@8.41.0)(typescript@5.0.4) - '@typescript-eslint/parser': 5.59.6(eslint@8.41.0)(typescript@5.0.4) - eslint: 8.41.0 - eslint-plugin-vue: 9.13.0(eslint@8.41.0) + '@typescript-eslint/eslint-plugin': 5.59.6(@typescript-eslint/parser@5.59.6)(eslint@8.55.0)(typescript@5.0.4) + '@typescript-eslint/parser': 5.59.6(eslint@8.55.0)(typescript@5.0.4) + eslint: 8.55.0 + eslint-plugin-vue: 9.13.0(eslint@8.55.0) typescript: 5.0.4 - vue-eslint-parser: 9.3.0(eslint@8.41.0) + vue-eslint-parser: 9.3.0(eslint@8.55.0) transitivePeerDependencies: - supports-color dev: true @@ -2152,6 +2242,14 @@ packages: acorn: 8.11.2 dev: true + /acorn-jsx@5.3.2(acorn@8.11.2): + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + acorn: 8.11.2 + dev: true + /acorn-jsx@5.3.2(acorn@8.8.2): resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: @@ -2259,6 +2357,11 @@ packages: resolution: {integrity: sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==} dev: true + /are-docs-informative@0.0.2: + resolution: {integrity: sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==} + engines: {node: '>=14'} + dev: true + /arg@5.0.2: resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} @@ -2273,42 +2376,11 @@ packages: is-array-buffer: 3.0.2 dev: true - /array-includes@3.1.6: - resolution: {integrity: sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.21.2 - get-intrinsic: 1.2.1 - is-string: 1.0.7 - dev: true - /array-union@2.1.0: resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} engines: {node: '>=8'} dev: true - /array.prototype.flat@1.3.1: - resolution: {integrity: sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.21.2 - es-shim-unscopables: 1.0.0 - dev: true - - /array.prototype.flatmap@1.3.1: - resolution: {integrity: sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.21.2 - es-shim-unscopables: 1.0.0 - dev: true - /asn1@0.2.6: resolution: {integrity: sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==} dependencies: @@ -2393,6 +2465,11 @@ packages: tweetnacl: 0.14.5 dev: true + /big-integer@1.6.52: + resolution: {integrity: sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==} + engines: {node: '>=0.6'} + dev: true + /binary-extensions@2.2.0: resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} engines: {node: '>=8'} @@ -2413,6 +2490,13 @@ packages: resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} dev: true + /bplist-parser@0.2.0: + resolution: {integrity: sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==} + engines: {node: '>= 5.10.0'} + dependencies: + big-integer: 1.6.52 + dev: true + /brace-expansion@1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} dependencies: @@ -2476,7 +2560,14 @@ packages: /builtins@5.0.1: resolution: {integrity: sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==} dependencies: - semver: 7.5.1 + semver: 7.5.4 + dev: true + + /bundle-name@3.0.0: + resolution: {integrity: sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==} + engines: {node: '>=12'} + dependencies: + run-applescript: 5.0.0 dev: true /cac@6.7.14: @@ -2655,7 +2746,6 @@ packages: string-width: 4.2.3 strip-ansi: 6.0.1 wrap-ansi: 7.0.0 - dev: false /color-convert@1.9.3: resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} @@ -2700,6 +2790,11 @@ packages: engines: {node: '>= 6'} dev: true + /comment-parser@1.4.1: + resolution: {integrity: sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==} + engines: {node: '>= 12.0.0'} + dev: true + /common-tags@1.8.2: resolution: {integrity: sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==} engines: {node: '>=4.0.0'} @@ -2940,6 +3035,29 @@ packages: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} dev: true + /default-browser-id@3.0.0: + resolution: {integrity: sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==} + engines: {node: '>=12'} + dependencies: + bplist-parser: 0.2.0 + untildify: 4.0.0 + dev: true + + /default-browser@4.0.0: + resolution: {integrity: sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==} + engines: {node: '>=14.16'} + dependencies: + bundle-name: 3.0.0 + default-browser-id: 3.0.0 + execa: 7.2.0 + titleize: 3.0.0 + dev: true + + /define-lazy-prop@3.0.0: + resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} + engines: {node: '>=12'} + dev: true + /define-properties@1.2.0: resolution: {integrity: sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==} engines: {node: '>= 0.4'} @@ -3135,12 +3253,6 @@ packages: has-tostringtag: 1.0.0 dev: true - /es-shim-unscopables@1.0.0: - resolution: {integrity: sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==} - dependencies: - has: 1.0.3 - dev: true - /es-to-primitive@1.2.1: resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} engines: {node: '>= 0.4'} @@ -3194,26 +3306,49 @@ packages: engines: {node: '>=10'} dev: true - /eslint-config-prettier@8.8.0(eslint@8.41.0): - resolution: {integrity: sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA==} - hasBin: true + /eslint-compat-utils@0.1.2(eslint@8.55.0): + resolution: {integrity: sha512-Jia4JDldWnFNIru1Ehx1H5s9/yxiRHY/TimCuUc0jNexew3cF1gI6CYZil1ociakfWO3rRqFjl1mskBblB3RYg==} + engines: {node: '>=12'} peerDependencies: - eslint: '>=7.0.0' + eslint: '>=6.0.0' dependencies: - eslint: 8.41.0 + eslint: 8.55.0 dev: true - /eslint-import-resolver-node@0.3.7: - resolution: {integrity: sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==} + /eslint-config-flat-gitignore@0.1.2: + resolution: {integrity: sha512-PcBsqtd5QHEZH4ROvpnRN4EP0qcHh9voCCHgtyHxnJZHGspJREcZn7oPqRG/GfWt9m3C0fkC2l5CuBtMig2wXQ==} + dependencies: + parse-gitignore: 2.0.0 + dev: true + + /eslint-formatting-reporter@0.0.0(eslint@8.55.0): + resolution: {integrity: sha512-k9RdyTqxqN/wNYVaTk/ds5B5rA8lgoAmvceYN7bcZMBwU7TuXx5ntewJv81eF3pIL/CiJE+pJZm36llG8yhyyw==} + peerDependencies: + eslint: '>=8.40.0' + dependencies: + eslint: 8.55.0 + prettier-linter-helpers: 1.0.0 + dev: true + + /eslint-import-resolver-node@0.3.9: + resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} dependencies: debug: 3.2.7(supports-color@8.1.1) - is-core-module: 2.12.0 - resolve: 1.22.2 + is-core-module: 2.13.1 + resolve: 1.22.8 transitivePeerDependencies: - supports-color dev: true - /eslint-module-utils@2.8.0(@typescript-eslint/parser@5.59.7)(eslint-import-resolver-node@0.3.7)(eslint@8.41.0): + /eslint-merge-processors@0.1.0(eslint@8.55.0): + resolution: {integrity: sha512-IvRXXtEajLeyssvW4wJcZ2etxkR9mUf4zpNwgI+m/Uac9RfXHskuJefkHUcawVzePnd6xp24enp5jfgdHzjRdQ==} + peerDependencies: + eslint: '*' + dependencies: + eslint: 8.55.0 + dev: true + + /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-node@0.3.9)(eslint@8.55.0): resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} engines: {node: '>=4'} peerDependencies: @@ -3234,154 +3369,158 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 5.59.7(eslint@8.41.0)(typescript@5.0.4) + '@typescript-eslint/parser': 6.14.0(eslint@8.55.0)(typescript@5.0.4) debug: 3.2.7(supports-color@8.1.1) - eslint: 8.41.0 - eslint-import-resolver-node: 0.3.7 + eslint: 8.55.0 + eslint-import-resolver-node: 0.3.9 transitivePeerDependencies: - supports-color dev: true - /eslint-plugin-antfu@0.39.3(eslint@8.41.0)(typescript@5.0.4): - resolution: {integrity: sha512-aHOwS1ou+1xWKhxMVjR2/ScXEYGs5qAXHiHbYD+Ps9Ld1+G0OyjZDKT7w+vXLAgGb1bPV8abwJ8XBaJMoQ6qOA==} + /eslint-parser-plain@0.1.0: + resolution: {integrity: sha512-oOeA6FWU0UJT/Rxc3XF5Cq0nbIZbylm7j8+plqq0CZoE6m4u32OXJrR+9iy4srGMmF6v6pmgvP1zPxSRIGh3sg==} + dev: true + + /eslint-plugin-antfu@2.0.0(eslint@8.55.0): + resolution: {integrity: sha512-jbJqri3bDxZ3Eel//ncXI3NXRNYbY0ckckmaWxk4I+nxR5PorOVyLHu/QL69UaPI7qvqAlI0B9GmlAA3hypoHQ==} + peerDependencies: + eslint: '*' dependencies: - '@typescript-eslint/utils': 5.59.7(eslint@8.41.0)(typescript@5.0.4) - transitivePeerDependencies: - - eslint - - supports-color - - typescript + eslint: 8.55.0 dev: true - /eslint-plugin-cypress@2.13.3(eslint@8.41.0): + /eslint-plugin-cypress@2.13.3(eslint@8.55.0): resolution: {integrity: sha512-nAPjZE5WopCsgJwl3vHm5iafpV+ZRO76Z9hMyRygWhmg5ODXDPd+9MaPl7kdJ2azj+sO87H3P1PRnggIrz848g==} peerDependencies: eslint: '>= 3.2.1' dependencies: - eslint: 8.41.0 + eslint: 8.55.0 globals: 11.12.0 dev: true - /eslint-plugin-es-x@6.2.1(eslint@8.41.0): - resolution: {integrity: sha512-uR34zUhZ9EBoiSD2DdV5kHLpydVEvwWqjteUr9sXRgJknwbKZJZhdJ7uFnaTtd+Nr/2G3ceJHnHXrFhJ67n3Tw==} + /eslint-plugin-es-x@7.5.0(eslint@8.55.0): + resolution: {integrity: sha512-ODswlDSO0HJDzXU0XvgZ3lF3lS3XAZEossh15Q2UHjwrJggWeBoKqqEsLTZLXl+dh5eOAozG0zRcYtuE35oTuQ==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: eslint: '>=8' dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.41.0) - '@eslint-community/regexpp': 4.5.1 - eslint: 8.41.0 + '@eslint-community/eslint-utils': 4.4.0(eslint@8.55.0) + '@eslint-community/regexpp': 4.10.0 + eslint: 8.55.0 + eslint-compat-utils: 0.1.2(eslint@8.55.0) dev: true - /eslint-plugin-eslint-comments@3.2.0(eslint@8.41.0): + /eslint-plugin-eslint-comments@3.2.0(eslint@8.55.0): resolution: {integrity: sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ==} engines: {node: '>=6.5.0'} peerDependencies: eslint: '>=4.19.1' dependencies: escape-string-regexp: 1.0.5 - eslint: 8.41.0 + eslint: 8.55.0 ignore: 5.2.4 dev: true - /eslint-plugin-html@7.1.0: - resolution: {integrity: sha512-fNLRraV/e6j8e3XYOC9xgND4j+U7b1Rq+OygMlLcMg+wI/IpVbF+ubQa3R78EjKB9njT6TQOlcK5rFKBVVtdfg==} + /eslint-plugin-format@0.0.1(eslint@8.55.0): + resolution: {integrity: sha512-kWoK+1qIetogweHy0n3jPb5VPTfOulLGklh0JkjmSvzwY4qeBXqc4VA5gJaYWR1u8UrUSoqgf0F7QXnKQDXPfg==} + peerDependencies: + eslint: ^8.40.0 dependencies: - htmlparser2: 8.0.2 + '@dprint/formatter': 0.2.0 + '@dprint/markdown': 0.16.3 + '@dprint/toml': 0.5.4 + eslint: 8.55.0 + eslint-formatting-reporter: 0.0.0(eslint@8.55.0) + eslint-parser-plain: 0.1.0 + prettier: 3.1.1 + synckit: 0.8.6 dev: true - /eslint-plugin-import@2.27.5(@typescript-eslint/parser@5.59.7)(eslint@8.41.0): - resolution: {integrity: sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==} - engines: {node: '>=4'} + /eslint-plugin-i@2.29.0(@typescript-eslint/parser@6.14.0)(eslint@8.55.0): + resolution: {integrity: sha512-slGeTS3GQzx9267wLJnNYNO8X9EHGsc75AKIAFvnvMYEcTJKotPKL1Ru5PIGVHIVet+2DsugePWp8Oxpx8G22w==} + engines: {node: '>=12'} peerDependencies: - '@typescript-eslint/parser': '*' - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true + eslint: ^7.2.0 || ^8 dependencies: - '@typescript-eslint/parser': 5.59.7(eslint@8.41.0)(typescript@5.0.4) - array-includes: 3.1.6 - array.prototype.flat: 1.3.1 - array.prototype.flatmap: 1.3.1 debug: 3.2.7(supports-color@8.1.1) doctrine: 2.1.0 - eslint: 8.41.0 - eslint-import-resolver-node: 0.3.7 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.59.7)(eslint-import-resolver-node@0.3.7)(eslint@8.41.0) - has: 1.0.3 - is-core-module: 2.12.0 + eslint: 8.55.0 + eslint-import-resolver-node: 0.3.9 + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-node@0.3.9)(eslint@8.55.0) + get-tsconfig: 4.7.2 is-glob: 4.0.3 minimatch: 3.1.2 - object.values: 1.1.6 - resolve: 1.22.2 - semver: 6.3.0 - tsconfig-paths: 3.14.2 + resolve: 1.22.8 + semver: 7.5.4 transitivePeerDependencies: + - '@typescript-eslint/parser' - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color dev: true - /eslint-plugin-jest@27.2.1(@typescript-eslint/eslint-plugin@5.59.7)(eslint@8.41.0)(typescript@5.0.4): - resolution: {integrity: sha512-l067Uxx7ZT8cO9NJuf+eJHvt6bqJyz2Z29wykyEdz/OtmcELQl2MQGQLX8J94O1cSJWAwUSEvCjwjA7KEK3Hmg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + /eslint-plugin-jsdoc@46.9.0(eslint@8.55.0): + resolution: {integrity: sha512-UQuEtbqLNkPf5Nr/6PPRCtr9xypXY+g8y/Q7gPa0YK7eDhh0y2lWprXRnaYbW7ACgIUvpDKy9X2bZqxtGzBG9Q==} + engines: {node: '>=16'} peerDependencies: - '@typescript-eslint/eslint-plugin': ^5.0.0 eslint: ^7.0.0 || ^8.0.0 - jest: '*' - peerDependenciesMeta: - '@typescript-eslint/eslint-plugin': - optional: true - jest: - optional: true dependencies: - '@typescript-eslint/eslint-plugin': 5.59.7(@typescript-eslint/parser@5.59.7)(eslint@8.41.0)(typescript@5.0.4) - '@typescript-eslint/utils': 5.59.7(eslint@8.41.0)(typescript@5.0.4) - eslint: 8.41.0 + '@es-joy/jsdoccomment': 0.41.0 + are-docs-informative: 0.0.2 + comment-parser: 1.4.1 + debug: 4.3.4(supports-color@8.1.1) + escape-string-regexp: 4.0.0 + eslint: 8.55.0 + esquery: 1.5.0 + is-builtin-module: 3.2.1 + semver: 7.5.4 + spdx-expression-parse: 3.0.1 transitivePeerDependencies: - supports-color - - typescript dev: true - /eslint-plugin-jsonc@2.8.0(eslint@8.41.0): - resolution: {integrity: sha512-K4VsnztnNwpm+V49CcCu5laq8VjclJpuhfI9LFkOrOyK+BKdQHMzkWo43B4X4rYaVrChm4U9kw/tTU5RHh5Wtg==} + /eslint-plugin-jsonc@2.10.0(eslint@8.55.0): + resolution: {integrity: sha512-9d//o6Jyh4s1RxC9fNSt1+MMaFN2ruFdXPG9XZcb/mR2KkfjADYiNL/hbU6W0Cyxfg3tS/XSFuhl5LgtMD8hmw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: '>=6.0.0' dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.41.0) - eslint: 8.41.0 - jsonc-eslint-parser: 2.3.0 + '@eslint-community/eslint-utils': 4.4.0(eslint@8.55.0) + eslint: 8.55.0 + eslint-compat-utils: 0.1.2(eslint@8.55.0) + jsonc-eslint-parser: 2.4.0 natural-compare: 1.4.0 dev: true - /eslint-plugin-markdown@3.0.0(eslint@8.41.0): - resolution: {integrity: sha512-hRs5RUJGbeHDLfS7ELanT0e29Ocyssf/7kBM+p7KluY5AwngGkDf8Oyu4658/NZSGTTq05FZeWbkxXtbVyHPwg==} + /eslint-plugin-markdown@3.0.1(eslint@8.55.0): + resolution: {integrity: sha512-8rqoc148DWdGdmYF6WSQFT3uQ6PO7zXYgeBpHAOAakX/zpq+NvFYbDA/H7PYzHajwtmaOzAwfxyl++x0g1/N9A==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - eslint: 8.41.0 + eslint: 8.55.0 mdast-util-from-markdown: 0.8.5 transitivePeerDependencies: - supports-color dev: true - /eslint-plugin-n@16.0.0(eslint@8.41.0): - resolution: {integrity: sha512-akkZTE3hsHBrq6CwmGuYCzQREbVUrA855kzcHqe6i0FLBkeY7Y/6tThCVkjUnjhvRBAlc+8lILcSe5QvvDpeZQ==} + /eslint-plugin-n@16.4.0(eslint@8.55.0): + resolution: {integrity: sha512-IkqJjGoWYGskVaJA7WQuN8PINIxc0N/Pk/jLeYT4ees6Fo5lAhpwGsYek6gS9tCUxgDC4zJ+OwY2bY/6/9OMKQ==} engines: {node: '>=16.0.0'} peerDependencies: eslint: '>=7.0.0' dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.41.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.55.0) builtins: 5.0.1 - eslint: 8.41.0 - eslint-plugin-es-x: 6.2.1(eslint@8.41.0) + eslint: 8.55.0 + eslint-plugin-es-x: 7.5.0(eslint@8.55.0) + get-tsconfig: 4.7.2 ignore: 5.2.4 - is-core-module: 2.12.0 + is-builtin-module: 3.2.1 + is-core-module: 2.13.1 minimatch: 3.1.2 resolve: 1.22.2 - semver: 7.5.1 + semver: 7.5.4 dev: true /eslint-plugin-no-only-tests@3.1.0: @@ -3389,116 +3528,154 @@ packages: engines: {node: '>=5.0.0'} dev: true - /eslint-plugin-prettier@4.2.1(eslint-config-prettier@8.8.0)(eslint@8.41.0)(prettier@2.8.8): - resolution: {integrity: sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==} - engines: {node: '>=12.0.0'} + /eslint-plugin-perfectionist@2.5.0(eslint@8.55.0)(typescript@5.0.4)(vue-eslint-parser@9.3.2): + resolution: {integrity: sha512-F6XXcq4mKKUe/SREoMGQqzgw6cgCgf3pFzkFfQVIGtqD1yXVpQjnhTepzhBeZfxZwgMzR9HO4yH4CUhIQ2WBcQ==} peerDependencies: - eslint: '>=7.28.0' - eslint-config-prettier: '*' - prettier: '>=2.0.0' + astro-eslint-parser: ^0.16.0 + eslint: '>=8.0.0' + svelte: '>=3.0.0' + svelte-eslint-parser: ^0.33.0 + vue-eslint-parser: '>=9.0.0' peerDependenciesMeta: - eslint-config-prettier: + astro-eslint-parser: + optional: true + svelte: + optional: true + svelte-eslint-parser: + optional: true + vue-eslint-parser: optional: true dependencies: - eslint: 8.41.0 - eslint-config-prettier: 8.8.0(eslint@8.41.0) - prettier: 2.8.8 - prettier-linter-helpers: 1.0.0 + '@typescript-eslint/utils': 6.14.0(eslint@8.55.0)(typescript@5.0.4) + eslint: 8.55.0 + minimatch: 9.0.3 + natural-compare-lite: 1.4.0 + vue-eslint-parser: 9.3.2(eslint@8.55.0) + transitivePeerDependencies: + - supports-color + - typescript dev: true - /eslint-plugin-promise@6.1.1(eslint@8.41.0): - resolution: {integrity: sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==} + /eslint-plugin-toml@0.7.1(eslint@8.55.0): + resolution: {integrity: sha512-0AOZSBZInz0qFeWSlTZgRURD0BzEkJXE627aF0kS5t3PnUjjifPipkjnSYiHOtJYjHmGaoT7WwcTFSEZ/I3Zfg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: - eslint: ^7.0.0 || ^8.0.0 + eslint: '>=6.0.0' dependencies: - eslint: 8.41.0 + debug: 4.3.4(supports-color@8.1.1) + eslint: 8.55.0 + eslint-compat-utils: 0.1.2(eslint@8.55.0) + lodash: 4.17.21 + toml-eslint-parser: 0.9.3 + transitivePeerDependencies: + - supports-color dev: true - /eslint-plugin-unicorn@47.0.0(eslint@8.41.0): - resolution: {integrity: sha512-ivB3bKk7fDIeWOUmmMm9o3Ax9zbMz1Bsza/R2qm46ufw4T6VBFBaJIR1uN3pCKSmSXm8/9Nri8V+iUut1NhQGA==} + /eslint-plugin-unicorn@49.0.0(eslint@8.55.0): + resolution: {integrity: sha512-0fHEa/8Pih5cmzFW5L7xMEfUTvI9WKeQtjmKpTUmY+BiFCDxkxrTdnURJOHKykhtwIeyYsxnecbGvDCml++z4Q==} engines: {node: '>=16'} peerDependencies: - eslint: '>=8.38.0' + eslint: '>=8.52.0' dependencies: - '@babel/helper-validator-identifier': 7.19.1 - '@eslint-community/eslint-utils': 4.4.0(eslint@8.41.0) + '@babel/helper-validator-identifier': 7.22.20 + '@eslint-community/eslint-utils': 4.4.0(eslint@8.55.0) ci-info: 3.8.0 clean-regexp: 1.0.0 - eslint: 8.41.0 + eslint: 8.55.0 esquery: 1.5.0 indent-string: 4.0.0 is-builtin-module: 3.2.1 jsesc: 3.0.2 - lodash: 4.17.21 pluralize: 8.0.0 read-pkg-up: 7.0.1 regexp-tree: 0.1.27 regjsparser: 0.10.0 - safe-regex: 2.1.1 - semver: 7.5.1 + semver: 7.5.4 strip-indent: 3.0.0 dev: true - /eslint-plugin-unused-imports@2.0.0(@typescript-eslint/eslint-plugin@5.59.7)(eslint@8.41.0): - resolution: {integrity: sha512-3APeS/tQlTrFa167ThtP0Zm0vctjr4M44HMpeg1P4bK6wItarumq0Ma82xorMKdFsWpphQBlRPzw/pxiVELX1A==} + /eslint-plugin-unused-imports@3.0.0(@typescript-eslint/eslint-plugin@6.14.0)(eslint@8.55.0): + resolution: {integrity: sha512-sduiswLJfZHeeBJ+MQaG+xYzSWdRXoSw61DpU13mzWumCkR0ufD0HmO4kdNokjrkluMHpj/7PJeN35pgbhW3kw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: - '@typescript-eslint/eslint-plugin': ^5.0.0 + '@typescript-eslint/eslint-plugin': ^6.0.0 eslint: ^8.0.0 peerDependenciesMeta: '@typescript-eslint/eslint-plugin': optional: true dependencies: - '@typescript-eslint/eslint-plugin': 5.59.7(@typescript-eslint/parser@5.59.7)(eslint@8.41.0)(typescript@5.0.4) - eslint: 8.41.0 + '@typescript-eslint/eslint-plugin': 6.14.0(@typescript-eslint/parser@6.14.0)(eslint@8.55.0)(typescript@5.0.4) + eslint: 8.55.0 eslint-rule-composer: 0.3.0 dev: true - /eslint-plugin-vue@9.13.0(eslint@8.41.0): + /eslint-plugin-vitest@0.3.15(@typescript-eslint/eslint-plugin@6.14.0)(eslint@8.55.0)(typescript@5.0.4)(vitest@0.31.0): + resolution: {integrity: sha512-ZUUd9ARKR3p0W7zoWg0irmQW9aM+SlJYZOoFOBemmgwQIHLxtdRLodQGP48nYf8jLdCGFDQqPyaltQQKsa9UMw==} + engines: {node: ^18.0.0 || >= 20.0.0} + peerDependencies: + '@typescript-eslint/eslint-plugin': '*' + eslint: '>=8.0.0' + vitest: '*' + peerDependenciesMeta: + '@typescript-eslint/eslint-plugin': + optional: true + vitest: + optional: true + dependencies: + '@typescript-eslint/eslint-plugin': 6.14.0(@typescript-eslint/parser@6.14.0)(eslint@8.55.0)(typescript@5.0.4) + '@typescript-eslint/utils': 6.14.0(eslint@8.55.0)(typescript@5.0.4) + eslint: 8.55.0 + vitest: 0.31.0(jsdom@22.0.0)(sass@1.62.1) + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /eslint-plugin-vue@9.13.0(eslint@8.55.0): resolution: {integrity: sha512-aBz9A8WB4wmpnVv0pYUt86cmH9EkcwWzgEwecBxMoRNhQjTL5i4sqadnwShv/hOdr8Hbl8XANGV7dtX9UQIAyA==} engines: {node: ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.2.0 || ^7.0.0 || ^8.0.0 dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.41.0) - eslint: 8.41.0 + '@eslint-community/eslint-utils': 4.4.0(eslint@8.55.0) + eslint: 8.55.0 natural-compare: 1.4.0 nth-check: 2.1.1 postcss-selector-parser: 6.0.13 semver: 7.5.1 - vue-eslint-parser: 9.3.0(eslint@8.41.0) + vue-eslint-parser: 9.3.0(eslint@8.55.0) xml-name-validator: 4.0.0 transitivePeerDependencies: - supports-color dev: true - /eslint-plugin-vue@9.14.0(eslint@8.41.0): - resolution: {integrity: sha512-4O7EuiqPGVQA1wYCzLvCzsBTv9JIPHLHhrf0k55DLzbwtmJbSw2TKS0G/l7pOwi9RWMSkjIT7ftChU5gZpgnJw==} + /eslint-plugin-vue@9.19.2(eslint@8.55.0): + resolution: {integrity: sha512-CPDqTOG2K4Ni2o4J5wixkLVNwgctKXFu6oBpVJlpNq7f38lh9I80pRTouZSJ2MAebPJlINU/KTFSXyQfBUlymA==} engines: {node: ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.2.0 || ^7.0.0 || ^8.0.0 dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.41.0) - eslint: 8.41.0 + '@eslint-community/eslint-utils': 4.4.0(eslint@8.55.0) + eslint: 8.55.0 natural-compare: 1.4.0 nth-check: 2.1.1 postcss-selector-parser: 6.0.13 - semver: 7.5.1 - vue-eslint-parser: 9.3.0(eslint@8.41.0) + semver: 7.5.4 + vue-eslint-parser: 9.3.2(eslint@8.55.0) xml-name-validator: 4.0.0 transitivePeerDependencies: - supports-color dev: true - /eslint-plugin-yml@1.7.0(eslint@8.41.0): - resolution: {integrity: sha512-qq61FQJk+qIgWl0R06bec7UQQEIBrUH22jS+MroTbFUKu+3/iVlGRpZd8mjpOAm/+H/WEDFwy4x/+kKgVGbsWw==} + /eslint-plugin-yml@1.10.0(eslint@8.55.0): + resolution: {integrity: sha512-53SUwuNDna97lVk38hL/5++WXDuugPM9SUQ1T645R0EHMRCdBIIxGye/oOX2qO3FQ7aImxaUZJU/ju+NMUBrLQ==} engines: {node: ^14.17.0 || >=16.0.0} peerDependencies: eslint: '>=6.0.0' dependencies: debug: 4.3.4(supports-color@8.1.1) - eslint: 8.41.0 + eslint: 8.55.0 + eslint-compat-utils: 0.1.2(eslint@8.55.0) lodash: 4.17.21 natural-compare: 1.4.0 yaml-eslint-parser: 1.2.2 @@ -3506,6 +3683,16 @@ packages: - supports-color dev: true + /eslint-processor-vue-blocks@0.1.1(@vue/compiler-sfc@3.3.9)(eslint@8.55.0): + resolution: {integrity: sha512-9+dU5lU881log570oBwpelaJmOfOzSniben7IWEDRYQPPWwlvaV7NhOtsTuUWDqpYT+dtKKWPsgz4OkOi+aZnA==} + peerDependencies: + '@vue/compiler-sfc': ^3.3.0 + eslint: ^8.50.0 + dependencies: + '@vue/compiler-sfc': 3.3.9 + eslint: 8.55.0 + dev: true + /eslint-rule-composer@0.3.0: resolution: {integrity: sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg==} engines: {node: '>=4.0.0'} @@ -3527,32 +3714,46 @@ packages: estraverse: 5.3.0 dev: true + /eslint-scope@7.2.2: + resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + dev: true + /eslint-visitor-keys@3.4.1: resolution: {integrity: sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /eslint@8.41.0: - resolution: {integrity: sha512-WQDQpzGBOP5IrXPo4Hc0814r4/v2rrIsB0rhT7jtunIalgg6gYXWhRMOejVO8yH21T/FGaxjmFjBMNqcIlmH1Q==} + /eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + + /eslint@8.55.0: + resolution: {integrity: sha512-iyUUAM0PCKj5QpwGfmCAG9XXbZCWsqP/eWAWrG/W0umvjuLRBECwSFdt+rCntju0xEH7teIABPwXpahftIaTdA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} hasBin: true dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.41.0) - '@eslint-community/regexpp': 4.5.1 - '@eslint/eslintrc': 2.0.3 - '@eslint/js': 8.41.0 - '@humanwhocodes/config-array': 0.11.8 + '@eslint-community/eslint-utils': 4.4.0(eslint@8.55.0) + '@eslint-community/regexpp': 4.10.0 + '@eslint/eslintrc': 2.1.4 + '@eslint/js': 8.55.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.6 chalk: 4.1.2 cross-spawn: 7.0.3 debug: 4.3.4(supports-color@8.1.1) doctrine: 3.0.0 escape-string-regexp: 4.0.0 - eslint-scope: 7.2.0 - eslint-visitor-keys: 3.4.1 - espree: 9.5.2 + eslint-scope: 7.2.2 + eslint-visitor-keys: 3.4.3 + espree: 9.6.1 esquery: 1.5.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 @@ -3562,7 +3763,6 @@ packages: globals: 13.20.0 graphemer: 1.4.0 ignore: 5.2.4 - import-fresh: 3.3.0 imurmurhash: 0.1.4 is-glob: 4.0.3 is-path-inside: 3.0.3 @@ -3572,9 +3772,8 @@ packages: lodash.merge: 4.6.2 minimatch: 3.1.2 natural-compare: 1.4.0 - optionator: 0.9.1 + optionator: 0.9.3 strip-ansi: 6.0.1 - strip-json-comments: 3.1.1 text-table: 0.2.0 transitivePeerDependencies: - supports-color @@ -3589,6 +3788,15 @@ packages: eslint-visitor-keys: 3.4.1 dev: true + /espree@9.6.1: + resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + acorn: 8.11.2 + acorn-jsx: 5.3.2(acorn@8.11.2) + eslint-visitor-keys: 3.4.3 + dev: true + /esquery@1.5.0: resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} engines: {node: '>=0.10'} @@ -3672,6 +3880,36 @@ packages: strip-final-newline: 2.0.0 dev: true + /execa@7.2.0: + resolution: {integrity: sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==} + engines: {node: ^14.18.0 || ^16.14.0 || >=18.0.0} + dependencies: + cross-spawn: 7.0.3 + get-stream: 6.0.1 + human-signals: 4.3.1 + is-stream: 3.0.0 + merge-stream: 2.0.0 + npm-run-path: 5.1.0 + onetime: 6.0.0 + signal-exit: 3.0.7 + strip-final-newline: 3.0.0 + dev: true + + /execa@8.0.1: + resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} + engines: {node: '>=16.17'} + dependencies: + cross-spawn: 7.0.3 + get-stream: 8.0.1 + human-signals: 5.0.0 + is-stream: 3.0.0 + merge-stream: 2.0.0 + npm-run-path: 5.1.0 + onetime: 6.0.0 + signal-exit: 4.1.0 + strip-final-newline: 3.0.0 + dev: true + /executable@4.1.1: resolution: {integrity: sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==} engines: {node: '>=4'} @@ -3720,6 +3958,17 @@ packages: merge2: 1.4.1 micromatch: 4.0.5 + /fast-glob@3.3.2: + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} + engines: {node: '>=8.6.0'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.5 + dev: true + /fast-json-stable-stringify@2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} dev: true @@ -3907,6 +4156,10 @@ packages: /function-bind@1.1.1: resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} + /function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + dev: true + /function.prototype.name@1.1.5: resolution: {integrity: sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==} engines: {node: '>= 0.4'} @@ -3924,7 +4177,6 @@ packages: /get-caller-file@2.0.5: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} - dev: false /get-func-name@2.0.2: resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} @@ -3951,6 +4203,11 @@ packages: engines: {node: '>=10'} dev: true + /get-stream@8.0.1: + resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} + engines: {node: '>=16'} + dev: true + /get-symbol-description@1.0.0: resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} engines: {node: '>= 0.4'} @@ -3959,6 +4216,12 @@ packages: get-intrinsic: 1.2.1 dev: true + /get-tsconfig@4.7.2: + resolution: {integrity: sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==} + dependencies: + resolve-pkg-maps: 1.0.0 + dev: true + /getos@3.2.1: resolution: {integrity: sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q==} dependencies: @@ -4038,6 +4301,13 @@ packages: type-fest: 0.20.2 dev: true + /globals@13.24.0: + resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} + engines: {node: '>=8'} + dependencies: + type-fest: 0.20.2 + dev: true + /globalthis@1.0.3: resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} engines: {node: '>= 0.4'} @@ -4118,6 +4388,13 @@ packages: dependencies: function-bind: 1.1.1 + /hasown@2.0.0: + resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} + engines: {node: '>= 0.4'} + dependencies: + function-bind: 1.1.2 + dev: true + /he@1.2.0: resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} hasBin: true @@ -4187,6 +4464,16 @@ packages: engines: {node: '>=10.17.0'} dev: true + /human-signals@4.3.1: + resolution: {integrity: sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==} + engines: {node: '>=14.18.0'} + dev: true + + /human-signals@5.0.0: + resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} + engines: {node: '>=16.17.0'} + dev: true + /iconv-lite@0.6.3: resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} engines: {node: '>=0.10.0'} @@ -4327,6 +4614,12 @@ packages: dependencies: has: 1.0.3 + /is-core-module@2.13.1: + resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} + dependencies: + hasown: 2.0.0 + dev: true + /is-date-object@1.0.5: resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} engines: {node: '>= 0.4'} @@ -4338,6 +4631,18 @@ packages: resolution: {integrity: sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==} dev: true + /is-docker@2.2.1: + resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} + engines: {node: '>=8'} + hasBin: true + dev: true + + /is-docker@3.0.0: + resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + hasBin: true + dev: true + /is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} @@ -4356,6 +4661,14 @@ packages: resolution: {integrity: sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==} dev: true + /is-inside-container@1.0.0: + resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} + engines: {node: '>=14.16'} + hasBin: true + dependencies: + is-docker: 3.0.0 + dev: true + /is-installed-globally@0.4.0: resolution: {integrity: sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==} engines: {node: '>=10'} @@ -4408,6 +4721,11 @@ packages: engines: {node: '>=8'} dev: true + /is-stream@3.0.0: + resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: true + /is-string@1.0.7: resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} engines: {node: '>= 0.4'} @@ -4448,6 +4766,13 @@ packages: call-bind: 1.0.2 dev: true + /is-wsl@2.2.0: + resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} + engines: {node: '>=8'} + dependencies: + is-docker: 2.2.1 + dev: true + /isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} dev: true @@ -4510,6 +4835,11 @@ packages: resolution: {integrity: sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==} dev: true + /jsdoc-type-pratt-parser@4.0.0: + resolution: {integrity: sha512-YtOli5Cmzy3q4dP26GraSOeAhqecewG04hoO8DY56CH4KJ9Fvv5qKWUCCo3HZob7esJQHCv6/+bnTy72xZZaVQ==} + engines: {node: '>=12.0.0'} + dev: true + /jsdom@22.0.0: resolution: {integrity: sha512-p5ZTEb5h+O+iU02t0GfEjAnkdYPrQSkfuTSMkMYyIoMvUNEHsbG0bHHbfXIcfTqD2UfvjQX7mmgiFsyRwGscVw==} engines: {node: '>=16'} @@ -4583,18 +4913,11 @@ packages: resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} dev: true - /json5@1.0.2: - resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} - hasBin: true - dependencies: - minimist: 1.2.8 - dev: true - - /jsonc-eslint-parser@2.3.0: - resolution: {integrity: sha512-9xZPKVYp9DxnM3sd1yAsh/d59iIaswDkai8oTxbursfKYbg/ibjX0IzFt35+VZ8iEW453TVTXztnRvYUQlAfUQ==} + /jsonc-eslint-parser@2.4.0: + resolution: {integrity: sha512-WYDyuc/uFcGp6YtM2H0uKmUwieOuzeE/5YocFJLnLfclZ4inf3mRn8ZVy1s7Hxji7Jxm6Ss8gqpexD/GlKoGgg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - acorn: 8.8.2 + acorn: 8.11.2 eslint-visitor-keys: 3.4.1 espree: 9.5.2 semver: 7.5.1 @@ -4622,6 +4945,11 @@ packages: verror: 1.10.0 dev: true + /kleur@3.0.3: + resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} + engines: {node: '>=6'} + dev: true + /klona@2.0.6: resolution: {integrity: sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==} engines: {node: '>= 8'} @@ -4691,6 +5019,14 @@ packages: engines: {node: '>=14'} dev: true + /local-pkg@0.5.0: + resolution: {integrity: sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==} + engines: {node: '>=14'} + dependencies: + mlly: 1.4.2 + pkg-types: 1.0.3 + dev: true + /locate-path@5.0.0: resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} engines: {node: '>=8'} @@ -4863,6 +5199,11 @@ packages: engines: {node: '>=6'} dev: true + /mimic-fn@4.0.0: + resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} + engines: {node: '>=12'} + dev: true + /min-indent@1.0.1: resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} engines: {node: '>=4'} @@ -4892,6 +5233,13 @@ packages: brace-expansion: 2.0.1 dev: true + /minimatch@9.0.3: + resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} + engines: {node: '>=16 || 14 >=14.17'} + dependencies: + brace-expansion: 2.0.1 + dev: true + /minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} dev: true @@ -4905,6 +5253,15 @@ packages: ufo: 1.1.2 dev: true + /mlly@1.4.2: + resolution: {integrity: sha512-i/Ykufi2t1EZ6NaPLdfnZk2AX8cs0d+mTzVKuPfqPKPatxLApaBoxJQ9x1/uckXtrS/U5oisPMDkNs0yQTaBRg==} + dependencies: + acorn: 8.11.2 + pathe: 1.1.1 + pkg-types: 1.0.3 + ufo: 1.3.2 + dev: true + /ms@2.0.0: resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} dev: true @@ -5006,6 +5363,13 @@ packages: path-key: 3.1.1 dev: true + /npm-run-path@5.1.0: + resolution: {integrity: sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + path-key: 4.0.0 + dev: true + /nth-check@2.1.1: resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} dependencies: @@ -5043,15 +5407,6 @@ packages: object-keys: 1.1.1 dev: true - /object.values@1.1.6: - resolution: {integrity: sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.21.2 - dev: true - /once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} dependencies: @@ -5064,16 +5419,33 @@ packages: mimic-fn: 2.1.0 dev: true - /optionator@0.9.1: - resolution: {integrity: sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==} + /onetime@6.0.0: + resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} + engines: {node: '>=12'} + dependencies: + mimic-fn: 4.0.0 + dev: true + + /open@9.1.0: + resolution: {integrity: sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==} + engines: {node: '>=14.16'} + dependencies: + default-browser: 4.0.0 + define-lazy-prop: 3.0.0 + is-inside-container: 1.0.0 + is-wsl: 2.2.0 + dev: true + + /optionator@0.9.3: + resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} engines: {node: '>= 0.8.0'} dependencies: + '@aashutoshrathi/word-wrap': 1.2.6 deep-is: 0.1.4 fast-levenshtein: 2.0.6 levn: 0.4.1 prelude-ls: 1.2.1 type-check: 0.4.0 - word-wrap: 1.2.5 dev: true /ospath@1.2.2: @@ -5145,6 +5517,11 @@ packages: is-hexadecimal: 1.0.4 dev: true + /parse-gitignore@2.0.0: + resolution: {integrity: sha512-RmVuCHWsfu0QPNW+mraxh/xjQVw/lhUCUru8Zni3Ctq3AoMhpDTq0OVdKS6iesd6Kqb7viCV3isAL43dciOSog==} + engines: {node: '>=14'} + dev: true + /parse-json@4.0.0: resolution: {integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==} engines: {node: '>=4'} @@ -5195,6 +5572,11 @@ packages: engines: {node: '>=8'} dev: true + /path-key@4.0.0: + resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} + engines: {node: '>=12'} + dev: true + /path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} @@ -5214,6 +5596,10 @@ packages: resolution: {integrity: sha512-ODbEPR0KKHqECXW1GoxdDb+AZvULmXjVPy4rt+pGo2+TnjJTIPJQSVS6N63n8T2Ip+syHhbn52OewKicV0373w==} dev: true + /pathe@1.1.1: + resolution: {integrity: sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==} + dev: true + /pathval@1.1.1: resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} dev: true @@ -5370,6 +5756,12 @@ packages: hasBin: true dev: true + /prettier@3.1.1: + resolution: {integrity: sha512-22UbSzg8luF4UuZtzgiUOfcGM8s4tjBv6dJRT7j275NXsy2jb4aJa4NNveul5x4eqlF1wuhuR2RElK71RvmVaw==} + engines: {node: '>=14'} + hasBin: true + dev: true + /pretty-bytes@5.6.0: resolution: {integrity: sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==} engines: {node: '>=6'} @@ -5384,6 +5776,14 @@ packages: react-is: 17.0.2 dev: true + /prompts@2.4.2: + resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} + engines: {node: '>= 6'} + dependencies: + kleur: 3.0.3 + sisteransi: 1.0.5 + dev: true + /proto-list@1.2.4: resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==} dev: true @@ -5542,7 +5942,6 @@ packages: /require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} - dev: false /requires-port@1.0.0: resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} @@ -5553,6 +5952,10 @@ packages: engines: {node: '>=4'} dev: true + /resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + dev: true + /resolve@1.22.2: resolution: {integrity: sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==} hasBin: true @@ -5561,6 +5964,15 @@ packages: path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 + /resolve@1.22.8: + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} + hasBin: true + dependencies: + is-core-module: 2.13.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + dev: true + /restore-cursor@3.1.0: resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} engines: {node: '>=8'} @@ -5604,6 +6016,13 @@ packages: resolution: {integrity: sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==} dev: true + /run-applescript@5.0.0: + resolution: {integrity: sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==} + engines: {node: '>=12'} + dependencies: + execa: 5.1.1 + dev: true + /run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} dependencies: @@ -5631,12 +6050,6 @@ packages: is-regex: 1.1.4 dev: true - /safe-regex@2.1.1: - resolution: {integrity: sha512-rx+x8AMzKb5Q5lQ95Zoi6ZbJqwCLkqi3XuJXp5P3rT8OEc6sZCJG5AE5dU3lsgRr/F4Bs31jSlVN+j5KrsGu9A==} - dependencies: - regexp-tree: 0.1.27 - dev: true - /safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} dev: true @@ -5697,13 +6110,16 @@ packages: hasBin: true dev: true - /semver@6.3.0: - resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} + /semver@7.5.1: + resolution: {integrity: sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==} + engines: {node: '>=10'} hasBin: true + dependencies: + lru-cache: 6.0.0 dev: true - /semver@7.5.1: - resolution: {integrity: sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==} + /semver@7.5.4: + resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} engines: {node: '>=10'} hasBin: true dependencies: @@ -5764,6 +6180,15 @@ packages: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} dev: true + /signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + dev: true + + /sisteransi@1.0.5: + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + dev: true + /slash@3.0.0: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} @@ -5946,6 +6371,11 @@ packages: engines: {node: '>=6'} dev: true + /strip-final-newline@3.0.0: + resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} + engines: {node: '>=12'} + dev: true + /strip-indent@3.0.0: resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} engines: {node: '>=8'} @@ -6006,6 +6436,14 @@ packages: resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} dev: true + /synckit@0.8.6: + resolution: {integrity: sha512-laHF2savN6sMeHCjLRkheIU4wo3Zg9Ln5YOjOo7sZ5dVQW8yF5pPE5SIw1dsPhq3TRp1jisKRCdPhfs/1WMqDA==} + engines: {node: ^14.18.0 || >=16.0.0} + dependencies: + '@pkgr/utils': 2.4.2 + tslib: 2.6.2 + dev: true + /tailwindcss@3.3.2: resolution: {integrity: sha512-9jPkMiIBXvPc2KywkraqsUfbfj+dHDb+JPWtSJa9MLFdrPyazI7q6WX2sUrm7R9eVR7qqv3Pas7EvQFzxKnI6w==} engines: {node: '>=14.0.0'} @@ -6119,6 +6557,11 @@ packages: engines: {node: '>=14.0.0'} dev: true + /titleize@3.0.0: + resolution: {integrity: sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==} + engines: {node: '>=12'} + dev: true + /tmp@0.2.1: resolution: {integrity: sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==} engines: {node: '>=8.17.0'} @@ -6136,6 +6579,13 @@ packages: dependencies: is-number: 7.0.0 + /toml-eslint-parser@0.9.3: + resolution: {integrity: sha512-moYoCvkNUAPCxSW9jmHmRElhm4tVJpHL8ItC/+uYD0EpPSFXbck7yREz9tNdJVTSpHVod8+HoipcpbQ0oE6gsw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + eslint-visitor-keys: 3.4.1 + dev: true + /tough-cookie@2.5.0: resolution: {integrity: sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==} engines: {node: '>=0.8'} @@ -6161,18 +6611,18 @@ packages: punycode: 2.3.0 dev: true - /ts-interface-checker@0.1.13: - resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} - - /tsconfig-paths@3.14.2: - resolution: {integrity: sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==} + /ts-api-utils@1.0.3(typescript@5.0.4): + resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==} + engines: {node: '>=16.13.0'} + peerDependencies: + typescript: '>=4.2.0' dependencies: - '@types/json5': 0.0.29 - json5: 1.0.2 - minimist: 1.2.8 - strip-bom: 3.0.0 + typescript: 5.0.4 dev: true + /ts-interface-checker@0.1.13: + resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + /tslib@1.14.1: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} dev: true @@ -6180,6 +6630,10 @@ packages: /tslib@2.5.0: resolution: {integrity: sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==} + /tslib@2.6.2: + resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + dev: true + /tsutils@3.21.0(typescript@5.0.4): resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} engines: {node: '>= 6'} @@ -6253,6 +6707,10 @@ packages: resolution: {integrity: sha512-TrY6DsjTQQgyS3E3dBaOXf0TpPD8u9FVrVYmKVegJuFw51n/YB9XPt+U6ydzFG5ZIN7+DIjPbNmXoBj9esYhgQ==} dev: true + /ufo@1.3.2: + resolution: {integrity: sha512-o+ORpgGwaYQXgqGDwd+hkS4PuZ3QnmqMMxRuajK/a38L6fTpcE5GPIfrf+L/KemFzfUpeUQc1rRS1iDBozvnFA==} + dev: true + /unbox-primitive@1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: @@ -6288,7 +6746,7 @@ packages: engines: {node: '>= 10.0.0'} dev: true - /unplugin-icons@0.16.1: + /unplugin-icons@0.16.1(@vue/compiler-sfc@3.3.9): resolution: {integrity: sha512-qTunFUkpAyDnwzwV7YV1ZgCWRYfLuURcCurhhXOWMy2ipY88qx1pADvral2hJu4Xymh0X0t3Zcll3BIru2AVLQ==} peerDependencies: '@svgr/core': '>=7.0.0' @@ -6308,6 +6766,7 @@ packages: '@antfu/install-pkg': 0.1.1 '@antfu/utils': 0.7.4 '@iconify/utils': 2.1.5 + '@vue/compiler-sfc': 3.3.9 debug: 4.3.4(supports-color@8.1.1) kolorist: 1.8.0 local-pkg: 0.4.3 @@ -6538,14 +6997,32 @@ packages: vue: 3.3.9(typescript@5.0.4) dev: false - /vue-eslint-parser@9.3.0(eslint@8.41.0): + /vue-eslint-parser@9.3.0(eslint@8.55.0): resolution: {integrity: sha512-48IxT9d0+wArT1+3wNIy0tascRoywqSUe2E1YalIC1L8jsUGe5aJQItWfRok7DVFGz3UYvzEI7n5wiTXsCMAcQ==} engines: {node: ^14.17.0 || >=16.0.0} peerDependencies: eslint: '>=6.0.0' dependencies: debug: 4.3.4(supports-color@8.1.1) - eslint: 8.41.0 + eslint: 8.55.0 + eslint-scope: 7.2.0 + eslint-visitor-keys: 3.4.1 + espree: 9.5.2 + esquery: 1.5.0 + lodash: 4.17.21 + semver: 7.5.1 + transitivePeerDependencies: + - supports-color + dev: true + + /vue-eslint-parser@9.3.2(eslint@8.55.0): + resolution: {integrity: sha512-q7tWyCVaV9f8iQyIA5Mkj/S6AoJ9KBN8IeUSf3XEmBrOtxOZnfTg5s4KClbZBCK3GtnT/+RyCLZyDHuZwTuBjg==} + engines: {node: ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: '>=6.0.0' + dependencies: + debug: 4.3.4(supports-color@8.1.1) + eslint: 8.55.0 eslint-scope: 7.2.0 eslint-visitor-keys: 3.4.1 espree: 9.5.2 @@ -6771,11 +7248,6 @@ packages: stackback: 0.0.2 dev: true - /word-wrap@1.2.5: - resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} - engines: {node: '>=0.10.0'} - dev: true - /wrap-ansi@6.2.0: resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} engines: {node: '>=8'} @@ -6821,7 +7293,6 @@ packages: /y18n@5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} - dev: false /yallist@2.1.2: resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==} @@ -6847,7 +7318,6 @@ packages: /yargs-parser@21.1.1: resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} engines: {node: '>=12'} - dev: false /yargs@17.7.2: resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} @@ -6860,7 +7330,6 @@ packages: string-width: 4.2.3 y18n: 5.0.8 yargs-parser: 21.1.1 - dev: false /yauzl@2.10.0: resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==} diff --git a/postcss.config.js b/postcss.config.js index 1a52624..2e7af2b 100644 --- a/postcss.config.js +++ b/postcss.config.js @@ -1,6 +1,6 @@ export default { - plugins: { - tailwindcss: {}, - autoprefixer: {}, - }, + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, } diff --git a/src/app/browser/Worker.ts b/src/app/browser/Worker.ts index 891f345..1fcc069 100644 --- a/src/app/browser/Worker.ts +++ b/src/app/browser/Worker.ts @@ -4,9 +4,9 @@ import { WorkerActions } from './WorkerActions' consola.info('Loading worker...') chrome.action.onClicked.addListener((tab) => { - consola.info(`Action button clicked on tab ${tab.id}`) - tab.id - && chrome.tabs.sendMessage<{ action: WorkerActions }>(tab.id, { action: WorkerActions.INIT_UI_CONTEXT }) + consola.info(`Action button clicked on tab ${tab.id}`) + tab.id + && chrome.tabs.sendMessage<{ action: WorkerActions }>(tab.id, { action: WorkerActions.INIT_UI_CONTEXT }) }) consola.info('Worker has been loaded') diff --git a/src/app/browser/WorkerActions.ts b/src/app/browser/WorkerActions.ts index e34d151..a037194 100644 --- a/src/app/browser/WorkerActions.ts +++ b/src/app/browser/WorkerActions.ts @@ -1,3 +1,3 @@ export enum WorkerActions { - INIT_UI_CONTEXT = 'initUIContext', + INIT_UI_CONTEXT = 'initUIContext', } diff --git a/src/app/common/Helpers.ts b/src/app/common/Helpers.ts index 9b9737f..b3ffa6d 100644 --- a/src/app/common/Helpers.ts +++ b/src/app/common/Helpers.ts @@ -1,3 +1,3 @@ export function orElse(optionalValue: T | null | undefined, defaultValue: T): T { - return (optionalValue !== null && optionalValue !== undefined) ? optionalValue : defaultValue + return (optionalValue !== null && optionalValue !== undefined) ? optionalValue : defaultValue } diff --git a/src/app/menu/Main.ts b/src/app/menu/Main.ts index a377fb5..ddf59b2 100644 --- a/src/app/menu/Main.ts +++ b/src/app/menu/Main.ts @@ -11,65 +11,65 @@ import App from './App.vue' let hasStarted = false if (import.meta.env.DEV) - consola.level = Number.POSITIVE_INFINITY + consola.level = Number.POSITIVE_INFINITY const { INIT_UI_CONTEXT } = WorkerActions consola.debug('Vue content script loaded') chrome.runtime.onMessage.addListener((request, sender) => { - if (hasStarted) - return - if (request.action === INIT_UI_CONTEXT) { - window.postMessage({ action: INIT_UI_CONTEXT }, '*') - try { - consola.debug('Initiating menu UI: ', sender) - const elRoot = document.createElement('div') - elRoot.id = 'synco-root' + if (hasStarted) + return + if (request.action === INIT_UI_CONTEXT) { + window.postMessage({ action: INIT_UI_CONTEXT }, '*') + try { + consola.debug('Initiating menu UI: ', sender) + const elRoot = document.createElement('div') + elRoot.id = 'synco-root' - const elApp = document.createElement('div') - elApp.id = 'synco-app' + const elApp = document.createElement('div') + elApp.id = 'synco-app' - // create a shadow root to encapsulate styles + // create a shadow root to encapsulate styles - const shadowRoot = elRoot.attachShadow({ mode: 'open' }) - shadowRoot.appendChild(elApp) + const shadowRoot = elRoot.attachShadow({ mode: 'open' }) + shadowRoot.appendChild(elApp) - document.body.appendChild(elRoot) + document.body.appendChild(elRoot) - // move the head styles to the shadow root + // move the head styles to the shadow root - let stylesSelector = 'style#sync-vide-rtc-styles' + let stylesSelector = 'style#sync-vide-rtc-styles' - if (import.meta.env.DEV) - stylesSelector = 'style[data-vite-dev-id]' + if (import.meta.env.DEV) + stylesSelector = 'style[data-vite-dev-id]' - const existingStyles = document.querySelectorAll(stylesSelector) + const existingStyles = document.querySelectorAll(stylesSelector) - const styles = Array.from(existingStyles).concat( - Array.of(mainStyle).map((style) => { - const elStyle = document.createElement('style') - elStyle.textContent = style - shadowRoot.appendChild(elStyle) - return elStyle - }), - ) + const styles = Array.from(existingStyles).concat( + Array.of(mainStyle).map((style) => { + const elStyle = document.createElement('style') + elStyle.textContent = style + shadowRoot.appendChild(elStyle) + return elStyle + }), + ) - styles.forEach((style) => { - shadowRoot.appendChild(style) - }) + styles.forEach((style) => { + shadowRoot.appendChild(style) + }) - const app = createApp(App) + const app = createApp(App) - app.use(createPinia()) - app.use(router) + app.use(createPinia()) + app.use(router) - app.mount(elApp) + app.mount(elApp) - consola.debug('Menu UI initiated') - hasStarted = true - } - catch (error) { - consola.error('There was an error initiating menu UI: ', error) - } - } + consola.debug('Menu UI initiated') + hasStarted = true + } + catch (error) { + consola.error('There was an error initiating menu UI: ', error) + } + } }) diff --git a/src/app/menu/common/FloatingMenu.vue b/src/app/menu/common/FloatingMenu.vue index 2a006c7..abb63c4 100644 --- a/src/app/menu/common/FloatingMenu.vue +++ b/src/app/menu/common/FloatingMenu.vue @@ -15,12 +15,12 @@ const [closed, toggleClose] = useToggle(false) const { x, y } = usePointer() const isPointerActive = ref(false) watch([x, y], ([x, y], [oldX, oldY]) => { - if (!isPointerActive.value && (x !== oldX || y !== oldY)) { - isPointerActive.value = true - setTimeout(() => { - isPointerActive.value = false - }, 5000) - } + if (!isPointerActive.value && (x !== oldX || y !== oldY)) { + isPointerActive.value = true + setTimeout(() => { + isPointerActive.value = false + }, 5000) + } }) diff --git a/src/app/menu/room/Connection.vue b/src/app/menu/room/Connection.vue index d82e80d..c707a87 100644 --- a/src/app/menu/room/Connection.vue +++ b/src/app/menu/room/Connection.vue @@ -9,17 +9,17 @@ const state = useObservable(props.connection.connectionState) const signalingState = useObservable(props.connection.signalingState) const isGreen = computed(() => { - return PeerConnectionState.CONNECTED === state.value + return PeerConnectionState.CONNECTED === state.value }) const isRed = computed(() => { - return ( - PeerConnectionState.DISCONNECTED === state.value + return ( + PeerConnectionState.DISCONNECTED === state.value || PeerConnectionState.FAILED === state.value || PeerConnectionState.CLOSED === state.value - ) + ) }) const isYellow = computed(() => { - return !isGreen.value && !isRed.value + return !isGreen.value && !isRed.value }) diff --git a/src/app/menu/room/JoinView.vue b/src/app/menu/room/JoinView.vue index 9d681b8..a0caa44 100644 --- a/src/app/menu/room/JoinView.vue +++ b/src/app/menu/room/JoinView.vue @@ -6,12 +6,12 @@ const { createRoom } = useRoomStore() const roomName = ref() const isNameValid = computed(() => { - return roomName.value?.length > 0 + return roomName.value?.length > 0 }) function join() { - if (isNameValid.value) - createRoom(roomName.value) + if (isNameValid.value) + createRoom(roomName.value) } diff --git a/src/app/menu/room/RoomDashboard.vue b/src/app/menu/room/RoomDashboard.vue index ede1397..d8538b2 100644 --- a/src/app/menu/room/RoomDashboard.vue +++ b/src/app/menu/room/RoomDashboard.vue @@ -16,55 +16,55 @@ const { leaveRoom } = useRoomStore() const connections = useObservable(room.peerConnections) const hasConnections = computed(() => { - return connections.value && connections.value.length > 0 + return connections.value && connections.value.length > 0 }) const { - duration, - currentTime, - playing, - onManualJump, - ignoreManualJumpUpdates, - onPlaying, - ignoreManualPlayingUpdates, + duration, + currentTime, + playing, + onManualJump, + ignoreManualJumpUpdates, + onPlaying, + ignoreManualPlayingUpdates, } = useVideoControls() // TODO: move this to a better place such as RoomStore onManualJump((time) => { - room.broadcastManualJump(time) + room.broadcastManualJump(time) }) onPlaying((value) => { - room.broadcastPlaying(value, currentTime.value) + room.broadcastPlaying(value, currentTime.value) }) room.onManualJump((value) => { - ignoreManualJumpUpdates(() => { - currentTime.value = value.time - }) + ignoreManualJumpUpdates(() => { + currentTime.value = value.time + }) }) room.onPlaying((value) => { - ignoreManualPlayingUpdates(() => { - playing.value = value.isPlaying - }) - ignoreManualJumpUpdates(() => { - currentTime.value = value.time - }) + ignoreManualPlayingUpdates(() => { + playing.value = value.isPlaying + }) + ignoreManualJumpUpdates(() => { + currentTime.value = value.time + }) }) // -- const currentProgress = computed(() => { - if (!duration.value || !currentTime.value) - return 0 - return (currentTime.value / duration.value) * 100 + if (!duration.value || !currentTime.value) + return 0 + return (currentTime.value / duration.value) * 100 }) const [copyed, toggleCopyed] = useToggle(false) function copy() { - navigator.clipboard.writeText(room.id).then(() => { - toggleCopyed() - setTimeout(() => { - toggleCopyed() - }, 1000) - }) + navigator.clipboard.writeText(room.id).then(() => { + toggleCopyed() + setTimeout(() => { + toggleCopyed() + }, 1000) + }) } diff --git a/src/app/menu/room/RoomStore.ts b/src/app/menu/room/RoomStore.ts index 426fc77..4fb5aff 100644 --- a/src/app/menu/room/RoomStore.ts +++ b/src/app/menu/room/RoomStore.ts @@ -6,37 +6,37 @@ import type { Room } from '@gnugomez/synco-room' import { roomFactory } from '@/app/comunication/context/Context' export const useRoomStore = defineStore('room', () => { - const { push } = useRouter() - const currentRoom = ref() - - watch(currentRoom, (room) => { - consola.debug(`Current room changed to ${room?.id}`) - - if (room) - push({ name: 'room' }) - }) - - const createRoom = (roomId: string) => { - currentRoom.value = roomFactory.createRoom(roomId) - } - - const generateRandomStringSecuence = () => { - return Math.random().toString(36).substring(2, 15) - } - - const createRandomRoom = () => { - return createRoom(`room-${generateRandomStringSecuence()}`) - } - - const leaveRoom = () => { - currentRoom.value = undefined - push({ name: 'default' }) - } - - return { - createRandomRoom, - createRoom, - leaveRoom, - currentRoom, - } + const { push } = useRouter() + const currentRoom = ref() + + watch(currentRoom, (room) => { + consola.debug(`Current room changed to ${room?.id}`) + + if (room) + push({ name: 'room' }) + }) + + const createRoom = (roomId: string) => { + currentRoom.value = roomFactory.createRoom(roomId) + } + + const generateRandomStringSecuence = () => { + return Math.random().toString(36).substring(2, 15) + } + + const createRandomRoom = () => { + return createRoom(`room-${generateRandomStringSecuence()}`) + } + + const leaveRoom = () => { + currentRoom.value = undefined + push({ name: 'default' }) + } + + return { + createRandomRoom, + createRoom, + leaveRoom, + currentRoom, + } }) diff --git a/src/app/menu/room/composables/useVideoControls.ts b/src/app/menu/room/composables/useVideoControls.ts index e0a61d6..47fd25b 100644 --- a/src/app/menu/room/composables/useVideoControls.ts +++ b/src/app/menu/room/composables/useVideoControls.ts @@ -5,123 +5,122 @@ import { useCurrentPlayer } from '@/app/player/application/useCurrentPlayer' import type Player from '@/app/player/domain/Player' export function useVideoControls() { - const videoElement = ref() - const player = ref() - const { - currentTime, - duration, - playing, - seeking, - ignoreCurrentTimeUpdates, - ignorePlayingUpdates, - } = createVideoEventHooks(videoElement, player) - const { onManualJump, ignoreManualJumpUpdates } = createManualJumpConsumer(currentTime) - const { onPlaying, ignoreManualPlayingUpdates } = createPlayingConsumer(playing) - - function findPlayer() { - player.value = useCurrentPlayer() - const video = player.value.initialize() - if (video) { - videoElement.value = video - duration.value = video.duration - ignoreManualJumpUpdates(() => ignoreCurrentTimeUpdates(() => (currentTime.value = video.currentTime))) - ignoreManualPlayingUpdates(() => ignorePlayingUpdates(() => (playing.value = !video.paused))) - } - } - - onMounted(() => { - findPlayer() - }) - - return { - currentTime, - duration, - playing, - seeking, - onManualJump, - onPlaying, - ignoreManualJumpUpdates, - ignoreCurrentTimeUpdates, - ignoreManualPlayingUpdates, - } + const videoElement = ref() + const player = ref() + const { + currentTime, + duration, + playing, + seeking, + ignoreCurrentTimeUpdates, + ignorePlayingUpdates, + } = createVideoEventHooks(videoElement, player) + const { onManualJump, ignoreManualJumpUpdates } = createManualJumpConsumer(currentTime) + const { onPlaying, ignoreManualPlayingUpdates } = createPlayingConsumer(playing) + + function findPlayer() { + player.value = useCurrentPlayer() + const video = player.value.initialize() + if (video) { + videoElement.value = video + duration.value = video.duration + ignoreManualJumpUpdates(() => ignoreCurrentTimeUpdates(() => (currentTime.value = video.currentTime))) + ignoreManualPlayingUpdates(() => ignorePlayingUpdates(() => (playing.value = !video.paused))) + } + } + + onMounted(() => { + findPlayer() + }) + + return { + currentTime, + duration, + playing, + seeking, + onManualJump, + onPlaying, + ignoreManualJumpUpdates, + ignoreCurrentTimeUpdates, + ignoreManualPlayingUpdates, + } } function createManualJumpConsumer(currentTime: Ref): { - onManualJump: (consumer: (time: number) => void) => void - ignoreManualJumpUpdates: IgnoredUpdater + onManualJump: (consumer: (time: number) => void) => void + ignoreManualJumpUpdates: IgnoredUpdater } { - let currentTimeManualJumpConsumer: (time: number) => void = () => {} - - const onManualJump = (consumer: (time: number) => void) => { - currentTimeManualJumpConsumer = consumer - } - - const { ignoreUpdates: ignoreManualJumpUpdates } = watchIgnorable( - currentTime, - (time, prevTime) => { - if (Math.abs(time - prevTime) > 1) { - consola.debug('Manual jump detected') - currentTimeManualJumpConsumer(time) - } - }, - ) - - return { - onManualJump, - ignoreManualJumpUpdates, - } + let currentTimeManualJumpConsumer: (time: number) => void = () => {} + + const onManualJump = (consumer: (time: number) => void) => { + currentTimeManualJumpConsumer = consumer + } + + const { ignoreUpdates: ignoreManualJumpUpdates } = watchIgnorable( + currentTime, + (time, prevTime) => { + if (Math.abs(time - prevTime) > 1) { + consola.debug('Manual jump detected') + currentTimeManualJumpConsumer(time) + } + }, + ) + + return { + onManualJump, + ignoreManualJumpUpdates, + } } function createPlayingConsumer(playing: Ref): { - onPlaying: (consumer: (isPlaying: boolean) => void) => void - ignoreManualPlayingUpdates: IgnoredUpdater + onPlaying: (consumer: (isPlaying: boolean) => void) => void + ignoreManualPlayingUpdates: IgnoredUpdater } { - let playingConsumer: (isPlaying: boolean) => void = () => {} + let playingConsumer: (isPlaying: boolean) => void = () => {} - const onPlaying = (consumer: (isPlaying: boolean) => void) => { - playingConsumer = consumer - } + const onPlaying = (consumer: (isPlaying: boolean) => void) => { + playingConsumer = consumer + } - const { ignoreUpdates: ignoreManualPlayingUpdates } = watchIgnorable(playing, (isPlaying) => { - playingConsumer(isPlaying) - }) + const { ignoreUpdates: ignoreManualPlayingUpdates } = watchIgnorable(playing, (isPlaying) => { + playingConsumer(isPlaying) + }) - return { - onPlaying, - ignoreManualPlayingUpdates, - } + return { + onPlaying, + ignoreManualPlayingUpdates, + } } function createVideoEventHooks(target: Ref, player: Ref) { - const currentTime = ref(0) - const duration = ref(0) - const playing = ref(false) - const seeking = ref(false) - - const { ignoreUpdates: ignoreCurrentTimeUpdates } = watchIgnorable(currentTime, (time) => { - const p = toValue(player) - if (!p) - return - - p.seek(time) - }) - - const { ignoreUpdates: ignorePlayingUpdates } = watchIgnorable(playing, (isPlaying) => { - const p = toValue(player) - if (!p) - return - - isPlaying ? p.play() : p.pause() - }) - - useEventListener(target, 'timeupdate', () => - ignoreCurrentTimeUpdates(() => (currentTime.value = toValue(target)!.currentTime)), - ) - useEventListener(target, 'durationchange', () => (duration.value = toValue(target)!.duration)) - useEventListener(target, 'pause', () => ignorePlayingUpdates(() => (playing.value = false))) - useEventListener(target, 'play', () => ignorePlayingUpdates(() => (playing.value = true))) - useEventListener(target, 'seeking', () => (seeking.value = true)) - useEventListener(target, 'seeked', () => (seeking.value = false)) - - return { currentTime, duration, playing, seeking, ignoreCurrentTimeUpdates, ignorePlayingUpdates } + const currentTime = ref(0) + const duration = ref(0) + const playing = ref(false) + const seeking = ref(false) + + const { ignoreUpdates: ignoreCurrentTimeUpdates } = watchIgnorable(currentTime, (time) => { + const p = toValue(player) + if (!p) + return + + p.seek(time) + }) + + const { ignoreUpdates: ignorePlayingUpdates } = watchIgnorable(playing, (isPlaying) => { + const p = toValue(player) + if (!p) + return + + isPlaying ? p.play() : p.pause() + }) + + useEventListener(target, 'timeupdate', () => + ignoreCurrentTimeUpdates(() => (currentTime.value = toValue(target)!.currentTime))) + useEventListener(target, 'durationchange', () => (duration.value = toValue(target)!.duration)) + useEventListener(target, 'pause', () => ignorePlayingUpdates(() => (playing.value = false))) + useEventListener(target, 'play', () => ignorePlayingUpdates(() => (playing.value = true))) + useEventListener(target, 'seeking', () => (seeking.value = true)) + useEventListener(target, 'seeked', () => (seeking.value = false)) + + return { currentTime, duration, playing, seeking, ignoreCurrentTimeUpdates, ignorePlayingUpdates } } diff --git a/src/app/menu/router/RoomIsUndefined.ts b/src/app/menu/router/RoomIsUndefined.ts index 2d36a79..acb1920 100644 --- a/src/app/menu/router/RoomIsUndefined.ts +++ b/src/app/menu/router/RoomIsUndefined.ts @@ -3,12 +3,12 @@ import { storeToRefs } from 'pinia' import { useRoomStore } from '../room/RoomStore' export const roomIsUndefined: NavigationGuard = (to, from, next) => { - const { currentRoom } = storeToRefs(useRoomStore()) + const { currentRoom } = storeToRefs(useRoomStore()) - if (currentRoom.value) { - next(from) - return - } + if (currentRoom.value) { + next(from) + return + } - next() + next() } diff --git a/src/app/menu/router/Router.ts b/src/app/menu/router/Router.ts index b20d4bb..2586df9 100644 --- a/src/app/menu/router/Router.ts +++ b/src/app/menu/router/Router.ts @@ -5,26 +5,26 @@ import JoinView from '../room/JoinView.vue' import { roomIsUndefined } from './RoomIsUndefined' const router = createRouter({ - history: createMemoryHistory(import.meta.env.BASE_URL), - routes: [ - { - path: '', - name: 'default', - component: DefaultView, - beforeEnter: [roomIsUndefined], - }, - { - path: '/room', - name: 'room', - component: RoomView, - }, - { - path: '/join', - name: 'join', - component: JoinView, - beforeEnter: [roomIsUndefined], - }, - ], + history: createMemoryHistory(import.meta.env.BASE_URL), + routes: [ + { + path: '', + name: 'default', + component: DefaultView, + beforeEnter: [roomIsUndefined], + }, + { + path: '/room', + name: 'room', + component: RoomView, + }, + { + path: '/join', + name: 'join', + component: JoinView, + beforeEnter: [roomIsUndefined], + }, + ], }) export default router diff --git a/src/app/player/application/useCurrentPlayer.ts b/src/app/player/application/useCurrentPlayer.ts index ba125ca..a952e74 100644 --- a/src/app/player/application/useCurrentPlayer.ts +++ b/src/app/player/application/useCurrentPlayer.ts @@ -3,6 +3,6 @@ import { usePlayers } from '../infrastructure' import { orElse } from '@/app/common/Helpers' export function useCurrentPlayer(): Player { - const { players, defaultPlayer } = usePlayers() - return orElse(players.find(player => player.isCurrentPlayer()), defaultPlayer) + const { players, defaultPlayer } = usePlayers() + return orElse(players.find(player => player.isCurrentPlayer()), defaultPlayer) } diff --git a/src/app/player/domain/Player.ts b/src/app/player/domain/Player.ts index 39a17f1..c8d26db 100644 --- a/src/app/player/domain/Player.ts +++ b/src/app/player/domain/Player.ts @@ -1,7 +1,7 @@ export default interface Player { - play(): void - pause(): void - seek(time: number): void - initialize(): HTMLVideoElement - isCurrentPlayer(): boolean + play(): void + pause(): void + seek(time: number): void + initialize(): HTMLVideoElement + isCurrentPlayer(): boolean } diff --git a/src/app/player/domain/PlayerInitializationException.ts b/src/app/player/domain/PlayerInitializationException.ts index 12bb511..c8aadc6 100644 --- a/src/app/player/domain/PlayerInitializationException.ts +++ b/src/app/player/domain/PlayerInitializationException.ts @@ -1,5 +1,5 @@ export default class PlayerInitializationException extends Error { - constructor(message: string) { - super(message) - } + constructor(message: string) { + super(message) + } } diff --git a/src/app/player/infrastructure/NetflixPlayer.ts b/src/app/player/infrastructure/NetflixPlayer.ts index 6d2cae2..6e437c0 100644 --- a/src/app/player/infrastructure/NetflixPlayer.ts +++ b/src/app/player/infrastructure/NetflixPlayer.ts @@ -3,50 +3,49 @@ import type Player from '../domain/Player' import PlayerInitializationException from '../domain/PlayerInitializationException' export default class NetflixPlayer implements Player { - private video?: HTMLVideoElement - - initialize(): HTMLVideoElement { - consola.debug('NetflixPlayer is being initialized') - const video = document.querySelector('video') - if (!video) - throw new PlayerInitializationException('Video element not found') - - this.video = video as HTMLVideoElement - - consola.debug(window) - - return video as HTMLVideoElement - } - - play(): void { - const videoIsActive = document.querySelector('.watch-video .active') !== null - if (this.video?.paused) { - if (videoIsActive) { - this.video!.click() - } - else { - this.video!.click() - setTimeout(() => { - this.video!.click() - } - , 1000) - } - } - } - - pause(): void { - !this.video?.paused && this.video!.click() - } - - seek(_time: number): void { - // not implemented - } - - isCurrentPlayer(): boolean { - return window.location.hostname.includes('netflix') - } - - private getTimeFromEnd(time: number): number { - return this.video!.duration - time - } + private video?: HTMLVideoElement + + initialize(): HTMLVideoElement { + consola.debug('NetflixPlayer is being initialized') + const video = document.querySelector('video') + if (!video) + throw new PlayerInitializationException('Video element not found') + + this.video = video as HTMLVideoElement + + consola.debug(window) + + return video as HTMLVideoElement + } + + play(): void { + const videoIsActive = document.querySelector('.watch-video .active') !== null + if (this.video?.paused) { + if (videoIsActive) { + this.video!.click() + } + else { + this.video!.click() + setTimeout(() => { + this.video!.click() + }, 1000) + } + } + } + + pause(): void { + !this.video?.paused && this.video!.click() + } + + seek(_time: number): void { + // not implemented + } + + isCurrentPlayer(): boolean { + return window.location.hostname.includes('netflix') + } + + private getTimeFromEnd(time: number): number { + return this.video!.duration - time + } } diff --git a/src/app/player/infrastructure/VideoElementPlayer.ts b/src/app/player/infrastructure/VideoElementPlayer.ts index e4ad9ab..b7cc211 100644 --- a/src/app/player/infrastructure/VideoElementPlayer.ts +++ b/src/app/player/infrastructure/VideoElementPlayer.ts @@ -2,30 +2,30 @@ import type Player from '../domain/Player' import PlayerInitializationException from '../domain/PlayerInitializationException' export default class VideoElementPlayer implements Player { - private video?: HTMLVideoElement + private video?: HTMLVideoElement - initialize(): HTMLVideoElement { - const video = document.querySelector('video') - if (!video) - throw new PlayerInitializationException('Video element not found') + initialize(): HTMLVideoElement { + const video = document.querySelector('video') + if (!video) + throw new PlayerInitializationException('Video element not found') - this.video = video as HTMLVideoElement - return video as HTMLVideoElement - } + this.video = video as HTMLVideoElement + return video as HTMLVideoElement + } - play(): void { - this.video?.play() - } + play(): void { + this.video?.play() + } - pause(): void { - this.video?.pause() - } + pause(): void { + this.video?.pause() + } - seek(time: number): void { - this.video!.currentTime = time - } + seek(time: number): void { + this.video!.currentTime = time + } - isCurrentPlayer(): boolean { - return false - } + isCurrentPlayer(): boolean { + return false + } } diff --git a/src/app/player/infrastructure/index.ts b/src/app/player/infrastructure/index.ts index 9ee215d..05c61fd 100644 --- a/src/app/player/infrastructure/index.ts +++ b/src/app/player/infrastructure/index.ts @@ -2,11 +2,11 @@ import type Player from '../domain/Player' import NetflixPlayer from './NetflixPlayer' import VideoElementPlayer from './VideoElementPlayer' -export function usePlayers(): { players: Player[]; defaultPlayer: Player } { - const players = [new VideoElementPlayer(), new NetflixPlayer()] - const defaultPlayer = new VideoElementPlayer() - return { - players, - defaultPlayer, - } +export function usePlayers(): { players: Player[], defaultPlayer: Player } { + const players = [new VideoElementPlayer(), new NetflixPlayer()] + const defaultPlayer = new VideoElementPlayer() + return { + players, + defaultPlayer, + } } diff --git a/tailwind.config.js b/tailwind.config.js index 4dc2eb3..3262bb4 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -1,146 +1,146 @@ /** @type {import('tailwindcss').Config} */ export default { - content: ['./src/**/*.{vue,js,ts,jsx,tsx}'], - theme: { - extend: { - fontFamily: { - poppins: ['Poppins', 'sans-serif'], - }, - }, - /** - * Default tailwind values converted from rem to px: - * */ - borderRadius: { - 'none': '0px', - 'sm': '2px', - 'DEFAULT': '4px', - 'md': '6px', - 'lg': '8px', - 'xl': '12px', - '2xl': '16px', - '3xl': '24px', - 'full': '9999px', - }, - columns: { - 'auto': 'auto', - '1': '1', - '2': '2', - '3': '3', - '4': '4', - '5': '5', - '6': '6', - '7': '7', - '8': '8', - '9': '9', - '10': '10', - '11': '11', - '12': '12', - '3xs': '256px', - '2xs': '288px', - 'xs': '320px', - 'sm': '384px', - 'md': '448px', - 'lg': '512px', - 'xl': '576px', - '2xl': '672px', - '3xl': '768px', - '4xl': '896px', - '5xl': '1024px', - '6xl': '1152px', - '7xl': '1280px', - }, - fontSize: { - 'xs': ['12px', { lineHeight: '16px' }], - 'sm': ['14px', { lineHeight: '20px' }], - 'base': ['16px', { lineHeight: '24px' }], - 'lg': ['18px', { lineHeight: '28px' }], - 'xl': ['20px', { lineHeight: '28px' }], - '2xl': ['24px', { lineHeight: '32px' }], - '3xl': ['30px', { lineHeight: '36px' }], - '4xl': ['36px', { lineHeight: '36px' }], - '5xl': ['48px', { lineHeight: '1' }], - '6xl': ['60px', { lineHeight: '1' }], - '7xl': ['72px', { lineHeight: '1' }], - '8xl': ['96px', { lineHeight: '1' }], - '9xl': ['144px', { lineHeight: '1' }], - }, - lineHeight: { - none: '1', - tight: '1.25', - snug: '1.375', - normal: '1.5', - relaxed: '1.625', - loose: '2', - 3: '12px', - 4: '16px', - 5: '20px', - 6: '24px', - 7: '28px', - 8: '32px', - 9: '36px', - 10: '40px', - }, - maxWidth: ({ theme, breakpoints }) => ({ - 'none': 'none', - '0': '0px', - 'xs': '320px', - 'sm': '384px', - 'md': '448px', - 'lg': '512px', - 'xl': '576px', - '2xl': '672px', - '3xl': '768px', - '4xl': '896px', - '5xl': '1024px', - '6xl': '1152px', - '7xl': '1280px', - 'full': '100%', - 'min': 'min-content', - 'max': 'max-content', - 'fit': 'fit-content', - 'prose': '65ch', - ...breakpoints(theme('screens')), - }), - spacing: { - px: '1px', - 0: '0', - 0.5: '2px', - 1: '4px', - 1.5: '6px', - 2: '8px', - 2.5: '10px', - 3: '12px', - 3.5: '14px', - 4: '16px', - 5: '20px', - 6: '24px', - 7: '28px', - 8: '32px', - 9: '36px', - 10: '40px', - 11: '44px', - 12: '48px', - 14: '56px', - 16: '64px', - 20: '80px', - 24: '96px', - 28: '112px', - 32: '128px', - 36: '144px', - 40: '160px', - 44: '176px', - 48: '192px', - 52: '208px', - 56: '224px', - 60: '240px', - 64: '256px', - 72: '288px', - 80: '320px', - 96: '384px', - }, - }, - plugins: [ - require('@tailwindcss/aspect-ratio'), - require('@tailwindcss/forms'), - ], + content: ['./src/**/*.{vue,js,ts,jsx,tsx}'], + theme: { + extend: { + fontFamily: { + poppins: ['Poppins', 'sans-serif'], + }, + }, + /** + * Default tailwind values converted from rem to px: + */ + borderRadius: { + 'none': '0px', + 'sm': '2px', + 'DEFAULT': '4px', + 'md': '6px', + 'lg': '8px', + 'xl': '12px', + '2xl': '16px', + '3xl': '24px', + 'full': '9999px', + }, + columns: { + 'auto': 'auto', + '1': '1', + '2': '2', + '3': '3', + '4': '4', + '5': '5', + '6': '6', + '7': '7', + '8': '8', + '9': '9', + '10': '10', + '11': '11', + '12': '12', + '3xs': '256px', + '2xs': '288px', + 'xs': '320px', + 'sm': '384px', + 'md': '448px', + 'lg': '512px', + 'xl': '576px', + '2xl': '672px', + '3xl': '768px', + '4xl': '896px', + '5xl': '1024px', + '6xl': '1152px', + '7xl': '1280px', + }, + fontSize: { + 'xs': ['12px', { lineHeight: '16px' }], + 'sm': ['14px', { lineHeight: '20px' }], + 'base': ['16px', { lineHeight: '24px' }], + 'lg': ['18px', { lineHeight: '28px' }], + 'xl': ['20px', { lineHeight: '28px' }], + '2xl': ['24px', { lineHeight: '32px' }], + '3xl': ['30px', { lineHeight: '36px' }], + '4xl': ['36px', { lineHeight: '36px' }], + '5xl': ['48px', { lineHeight: '1' }], + '6xl': ['60px', { lineHeight: '1' }], + '7xl': ['72px', { lineHeight: '1' }], + '8xl': ['96px', { lineHeight: '1' }], + '9xl': ['144px', { lineHeight: '1' }], + }, + lineHeight: { + none: '1', + tight: '1.25', + snug: '1.375', + normal: '1.5', + relaxed: '1.625', + loose: '2', + 3: '12px', + 4: '16px', + 5: '20px', + 6: '24px', + 7: '28px', + 8: '32px', + 9: '36px', + 10: '40px', + }, + maxWidth: ({ theme, breakpoints }) => ({ + 'none': 'none', + '0': '0px', + 'xs': '320px', + 'sm': '384px', + 'md': '448px', + 'lg': '512px', + 'xl': '576px', + '2xl': '672px', + '3xl': '768px', + '4xl': '896px', + '5xl': '1024px', + '6xl': '1152px', + '7xl': '1280px', + 'full': '100%', + 'min': 'min-content', + 'max': 'max-content', + 'fit': 'fit-content', + 'prose': '65ch', + ...breakpoints(theme('screens')), + }), + spacing: { + px: '1px', + 0: '0', + 0.5: '2px', + 1: '4px', + 1.5: '6px', + 2: '8px', + 2.5: '10px', + 3: '12px', + 3.5: '14px', + 4: '16px', + 5: '20px', + 6: '24px', + 7: '28px', + 8: '32px', + 9: '36px', + 10: '40px', + 11: '44px', + 12: '48px', + 14: '56px', + 16: '64px', + 20: '80px', + 24: '96px', + 28: '112px', + 32: '128px', + 36: '144px', + 40: '160px', + 44: '176px', + 48: '192px', + 52: '208px', + 56: '224px', + 60: '240px', + 64: '256px', + 72: '288px', + 80: '320px', + 96: '384px', + }, + }, + plugins: [ + require('@tailwindcss/aspect-ratio'), + require('@tailwindcss/forms'), + ], } diff --git a/tsconfig.app.json b/tsconfig.app.json index da94b30..e6b342f 100644 --- a/tsconfig.app.json +++ b/tsconfig.app.json @@ -1,7 +1,5 @@ { "extends": "@vue/tsconfig/tsconfig.dom.json", - "include": ["env.d.ts", "src/**/*", "src/**/*.vue", "public/background.ts"], - "exclude": ["src/**/__tests__/*"], "compilerOptions": { "composite": true, "baseUrl": ".", @@ -10,4 +8,6 @@ }, "types": ["chrome", "unplugin-icons/types/vue"] }, + "include": ["env.d.ts", "src/**/*", "src/**/*.vue", "public/background.ts"], + "exclude": ["src/**/__tests__/*"] } diff --git a/tsconfig.json b/tsconfig.json index e3e9530..7542181 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,5 +1,7 @@ { - "files": [], + "compilerOptions": { + "types": ["chrome"] + }, "references": [ { "path": "./tsconfig.node.json" @@ -11,7 +13,5 @@ "path": "./tsconfig.vitest.json" } ], - "compilerOptions": { - "types": ["chrome"] - } + "files": [] } diff --git a/tsconfig.node.json b/tsconfig.node.json index f60c50c..671368e 100644 --- a/tsconfig.node.json +++ b/tsconfig.node.json @@ -1,9 +1,9 @@ { "extends": "@tsconfig/node18/tsconfig.json", - "include": ["vite.config.*", "vitest.config.*", "cypress.config.*", "playwright.config.*"], "compilerOptions": { "composite": true, "module": "ESNext", "types": ["node", "chrome", "jsdom"] - } + }, + "include": ["vite.config.*", "vitest.config.*", "cypress.config.*", "playwright.config.*"] } diff --git a/tsconfig.vitest.json b/tsconfig.vitest.json index 38daf91..57f2d66 100644 --- a/tsconfig.vitest.json +++ b/tsconfig.vitest.json @@ -1,9 +1,9 @@ { "extends": "./tsconfig.app.json", - "exclude": [], "compilerOptions": { "composite": true, "lib": [], "types": ["node", "vite/client", "jsdom", "unplugin-icons/types/vue", "chrome"] - } + }, + "exclude": [] } diff --git a/vite.config.ts b/vite.config.ts index 16cb054..ba3c7f0 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -1,4 +1,5 @@ import { resolve } from 'node:path' +import process from 'node:process' import { defineConfig } from 'vite' import vue from '@vitejs/plugin-vue' import { crx, defineManifest } from '@crxjs/vite-plugin' @@ -8,42 +9,42 @@ import cssInjectedByJsPlugin from 'vite-plugin-css-injected-by-js' const version = process.env.npm_package_version || '0.0.0' // https://vitejs.dev/config/ export default defineConfig({ - plugins: [ - vue(), - cssInjectedByJsPlugin({ styleId: 'sync-vide-rtc-styles' }), - icons({ - autoInstall: true, - }), - crx({ - manifest: defineManifest(async () => ({ - name: 'synco', - version, - description: 'synco', - manifest_version: 3, - icons: { - 16: 'icons/16.png', - 48: 'icons/48.png', - 128: 'icons/128.png', - }, - background: { - service_worker: 'src/app/browser/Worker.ts', - type: 'module', - }, - content_scripts: [ - { - matches: ['*://*/*'], - js: ['src/app/menu/Main.ts'], - }, - ], - action: { - default_title: 'synco', - }, - })), - }), - ], - resolve: { - alias: { - '@': resolve(__dirname, 'src/'), - }, - }, + plugins: [ + vue(), + cssInjectedByJsPlugin({ styleId: 'sync-vide-rtc-styles' }), + icons({ + autoInstall: true, + }), + crx({ + manifest: defineManifest(async () => ({ + name: 'synco', + version, + description: 'synco', + manifest_version: 3, + icons: { + 16: 'icons/16.png', + 48: 'icons/48.png', + 128: 'icons/128.png', + }, + background: { + service_worker: 'src/app/browser/Worker.ts', + type: 'module', + }, + content_scripts: [ + { + matches: ['*://*/*'], + js: ['src/app/menu/Main.ts'], + }, + ], + action: { + default_title: 'synco', + }, + })), + }), + ], + resolve: { + alias: { + '@': resolve(__dirname, 'src/'), + }, + }, }) diff --git a/vitest.config.ts b/vitest.config.ts index 7264e56..e2d6f25 100644 --- a/vitest.config.ts +++ b/vitest.config.ts @@ -4,15 +4,15 @@ import { configDefaults, defineConfig } from 'vitest/config' import viteConfig from './vite.config' export default mergeConfig( - viteConfig, - defineConfig({ - test: { - environment: 'jsdom', - exclude: [...configDefaults.exclude, 'e2e/*'], - root: fileURLToPath(new URL('./', import.meta.url)), - transformMode: { - web: [/\.[jt]sx$/], - }, - }, - }), + viteConfig, + defineConfig({ + test: { + environment: 'jsdom', + exclude: [...configDefaults.exclude, 'e2e/*'], + root: fileURLToPath(new URL('./', import.meta.url)), + transformMode: { + web: [/\.[jt]sx$/], + }, + }, + }), )