From 800d3f9294b2f1fd59000eee4c197663aa6b4f29 Mon Sep 17 00:00:00 2001 From: WombatFromHell Date: Mon, 5 Feb 2024 21:34:04 -0700 Subject: [PATCH 01/18] Revamp of E2E testing workflows --- .dockerignore | 2 + .github/workflows/tests.yaml | 37 +++++++++ .gitignore | 11 +-- CONTRIBUTING.md | 11 +-- Dockerfile.e2etest | 19 +++++ package.json | 7 +- playwright.config.ts | 9 ++- pnpm-lock.yaml | 141 +++++++++++++++++++---------------- seccomp_profile.json | 12 +++ test.sh | 76 +++++++++++++++++++ tests/fixtures/index.ts | 30 ++++---- utils/testlogin.js | 7 +- 12 files changed, 258 insertions(+), 104 deletions(-) create mode 100644 .github/workflows/tests.yaml create mode 100644 Dockerfile.e2etest create mode 100644 seccomp_profile.json create mode 100755 test.sh diff --git a/.dockerignore b/.dockerignore index 4eb56ae6..bc448422 100644 --- a/.dockerignore +++ b/.dockerignore @@ -4,3 +4,5 @@ node_modules dist dist-firefox artifacts +results +seccomp_profile.json diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml new file mode 100644 index 00000000..0d5bb68d --- /dev/null +++ b/.github/workflows/tests.yaml @@ -0,0 +1,37 @@ +name: Playwright Tests +on: + push: + branches: [master, testing] + pull_request: + branches: [master, testing] + +jobs: + playwright: + name: "Playwright Tests" + runs-on: ubuntu-latest + container: + image: mcr.microsoft.com/playwright:v1.41.1-jammy + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 + with: + node-version: 21 + - name: Install PNPM + run: corepack enable + - name: Install project dependencies + run: pnpm install + - name: Install test dependencies + run: pnpm test:deps + - name: Build in prod mode + run: pnpm build + - name: Run the test suite against Chromium + run: pnpm test + env: + HOME: /root + CI: true + E2E_SHACKLI: ${{ secrets.E2E_SHACKLI }} + - name: Upload test report + uses: actions/upload-artifact@v2 + with: + name: test-report + path: results/* diff --git a/.gitignore b/.gitignore index 0e4d7204..a0df8efe 100644 --- a/.gitignore +++ b/.gitignore @@ -1,25 +1,16 @@ .idea* node_modules -coverage-ts dist -dist-chrome dist-firefox artifacts # make sure to use --id option when signing! .web-extension-id -Session.vim dist.crx dist.pem tsconfig.tsbuildinfo -mochawesome-report -/cypress/screenshots/ -/cypress/fixtures/_shack_li_.txt -debug.log .DS_Store .envrc .env .direnv -/test-results/ -/playwright-report/ -/playwright/.cache/ +results _shack_li_.json diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index de020764..455f208d 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -39,13 +39,14 @@ If you're interested in contributing a new content script or feature suggestion: - The WinChatty notifications' `processNotifyEvent` exposes the latest event message retrieved from the server (see: [WinChatty API](http://winchatty.com/v2/readme)). - Content scripts have to be registered in `content.ts`. Make sure to put event-dependent handlers **_before_** the `ChromeShack.install()` line. -## Running integration tests +## Running integration tests locally -The E2E integration test suite requires a login cookie fixture in order to run all tests successfully. To setup the local testing environment do the following: +The E2E integration test suite requires a valid Shacknews login cookie fixture loaded into the environment var `E2E_SHACKLI` in order to run all tests successfully. This variable can be loaded from a `.env` file placed in the project root or exported from your shell. To setup the local testing environment and generate the fixture from scratch do the following: - If you haven't already, make sure to do: `pnpm install` +- **STRONGLY RECOMMENDED**: Use the included `test.sh` in the project root to leverage Docker/Podman for containerized testing! - Make sure you're running on a supported OS version, see [this doc](https://playwright.dev/docs/intro#system-requirements) for details. Typically Windows, MacOS, or an LTS version of Ubuntu are supported. -- Verify that Cypress and Chrome are installed and can run: `pnpm exec playwright install --with-deps chromium` +- Verify that Playwright and Chromium are installed with: `pnpm test:deps` - Put your test credentials in an `.env` file in the project root in the following format: ```text @@ -53,8 +54,8 @@ The E2E integration test suite requires a login cookie fixture in order to run a TESTPW=password ``` -- Create the login cookie fixture: `pnpm generate-cookie` -- Run the test suite (NOTE: this can take significant machine resources): `pnpm test` +- Authenticate your credentials and create the login cookie fixture in `.env`: `pnpm testlogin` +- Run the test suite (NOTE: this can take significant machine resources): `pnpm build && pnpm test` or `./test.sh` in the project root. ## Release procedure diff --git a/Dockerfile.e2etest b/Dockerfile.e2etest new file mode 100644 index 00000000..7563dcf0 --- /dev/null +++ b/Dockerfile.e2etest @@ -0,0 +1,19 @@ +# Pull the base image +FROM mcr.microsoft.com/playwright:v1.41.1-jammy + +ARG SCOOKIE +ARG CI + +ENV CI=$CI +ENV E2E_SHACKLI=$SCOOKIE +ENV PNPM_HOME="/pnpm" +ENV PATH="$PNPM_HOME:$PATH" +RUN corepack enable + +WORKDIR /code/ +COPY . /code/ +RUN --mount=type=cache,id=pnpm,target=/pnpm/store pnpm install --frozen-lockfile +RUN pnpm test:deps && \ + pnpm build + +CMD ["/bin/bash"] diff --git a/package.json b/package.json index afcc9e79..e80c9954 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,7 @@ "build:popup": "vite build --config vite.popup.config.ts", "build:permissions": "vite build --config vite.permissions.config.ts", "build:js": "run-p build:serviceWorker build:content build:popup build:permissions", - "clean": "rm -rf dist-firefox/* dist/* artifacts/dist/* artifacts/dist-firefox/* playwright-report/ test-results/", + "clean": "rm -rf dist-firefox/* dist/* artifacts/dist/* artifacts/dist-firefox/*", "dev:crxjs": "vite dev", "dev:firefoxjs": "NODE_ENV=development run-p build:js", "dev": "run-s clean lint && tsc && run-p dev:crxjs dev:firefoxjs", @@ -21,6 +21,7 @@ "build:ffxcrxjs": "run-s build:js", "build": "run-s clean lint && tsc && run-p build:crxjs build:ffxcrxjs", "build:pkg": "run-s build pkgsrc", + "test:deps": "playwright install chromium --with-deps", "test": "playwright test", "pretty": "prettier -w ./src/*.html ./src/styles/*.css ./public/*.html", "lint": "biome lint .", @@ -55,7 +56,7 @@ "@types/jquery": "^3.5.29", "@types/lodash.isequal": "^4.5.8", "@types/node": "^20.11.16", - "@types/react": "^18.2.51", + "@types/react": "^18.2.54", "@types/react-dom": "^18.2.18", "adm-zip": "^0.5.10", "dotenv": "^16.4.1", @@ -64,7 +65,7 @@ "jest": "^29.7.0", "license-checker": "^25.0.1", "npm-run-all": "^4.1.5", - "prettier": "^3.2.4", + "prettier": "^3.2.5", "typescript": "^5.3.3", "vite": "^5.0.12" } diff --git a/playwright.config.ts b/playwright.config.ts index 3608f05b..744a4a64 100644 --- a/playwright.config.ts +++ b/playwright.config.ts @@ -17,9 +17,13 @@ export default defineConfig({ forbidOnly: !!process.env.CI, retries: process.env.CI ? 0 : 1, /* Opt out of parallel tests on CI */ - workers: process.env.CI ? 1 : 2, + workers: process.env.CI ? 1 : 3, /* Reporter to use. See https://playwright.dev/docs/test-reporters */ - reporter: [["html"], ["list"]], + reporter: [ + ["list", { printSteps: true, outputFolder: "results/reports" }], + ["html", { open: "never", outputFolder: "results/reports" }], + ], + outputDir: "results/tests", /* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */ use: { @@ -28,6 +32,7 @@ export default defineConfig({ screenshot: "only-on-failure", trace: "retain-on-failure", video: "retain-on-failure", + headless: true, }, /* Configure projects for major browsers */ diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5196bcd3..f4359985 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -52,7 +52,7 @@ dependencies: version: 1.0.14 zustand: specifier: ^4.5.0 - version: 4.5.0(@types/react@18.2.51)(react@18.2.0) + version: 4.5.0(@types/react@18.2.54)(react@18.2.0) devDependencies: '@biomejs/biome': @@ -83,8 +83,8 @@ devDependencies: specifier: ^20.11.16 version: 20.11.16 '@types/react': - specifier: ^18.2.51 - version: 18.2.51 + specifier: ^18.2.54 + version: 18.2.54 '@types/react-dom': specifier: ^18.2.18 version: 18.2.18 @@ -110,8 +110,8 @@ devDependencies: specifier: ^4.1.5 version: 4.1.5 prettier: - specifier: ^3.2.4 - version: 3.2.4 + specifier: ^3.2.5 + version: 3.2.5 typescript: specifier: ^5.3.3 version: 5.3.3 @@ -1139,7 +1139,7 @@ packages: engines: {node: '>= 8'} dependencies: '@nodelib/fs.scandir': 2.1.5 - fastq: 1.17.0 + fastq: 1.17.1 dev: true /@pkgjs/parseargs@0.11.0: @@ -1451,11 +1451,11 @@ packages: /@types/react-dom@18.2.18: resolution: {integrity: sha512-TJxDm6OfAX2KJWJdMEVTwWke5Sc/E/RlnPGvGfS0W7+6ocy2xhDVQVh/KvC2Uf7kACs+gDytdusDSdWfWkaNzw==} dependencies: - '@types/react': 18.2.51 + '@types/react': 18.2.54 dev: true - /@types/react@18.2.51: - resolution: {integrity: sha512-XeoMaU4CzyjdRr3c4IQQtiH7Rpo18V07rYZUucEZQwOUEtGgTXv7e6igQiQ+xnV6MbMe1qjEmKdgMNnfppnXfg==} + /@types/react@18.2.54: + resolution: {integrity: sha512-039k+vrVJymDoe2y+HLk3O3oI3sa+C8KNjuDKofqrIJK26ramnqLNj9VJTaxAzFGMvpW/79HrrAJapHzpQ9fGQ==} dependencies: '@types/prop-types': 15.7.11 '@types/scheduler': 0.16.8 @@ -1559,11 +1559,12 @@ packages: sprintf-js: 1.0.3 dev: true - /array-buffer-byte-length@1.0.0: - resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} + /array-buffer-byte-length@1.0.1: + resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.5 - is-array-buffer: 3.0.2 + is-array-buffer: 3.0.4 dev: true /array-find-index@1.0.2: @@ -1571,16 +1572,17 @@ packages: engines: {node: '>=0.10.0'} dev: true - /arraybuffer.prototype.slice@1.0.2: - resolution: {integrity: sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==} + /arraybuffer.prototype.slice@1.0.3: + resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} engines: {node: '>= 0.4'} dependencies: - array-buffer-byte-length: 1.0.0 + array-buffer-byte-length: 1.0.1 call-bind: 1.0.5 define-properties: 1.2.1 es-abstract: 1.22.3 - get-intrinsic: 1.2.2 - is-array-buffer: 3.0.2 + es-errors: 1.3.0 + get-intrinsic: 1.2.3 + is-array-buffer: 3.0.4 is-shared-array-buffer: 1.0.2 dev: true @@ -1706,8 +1708,8 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001582 - electron-to-chromium: 1.4.654 + caniuse-lite: 1.0.30001584 + electron-to-chromium: 1.4.657 node-releases: 2.0.14 update-browserslist-db: 1.0.13(browserslist@4.22.3) dev: true @@ -1726,7 +1728,7 @@ packages: resolution: {integrity: sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==} dependencies: function-bind: 1.1.2 - get-intrinsic: 1.2.2 + get-intrinsic: 1.2.3 set-function-length: 1.2.0 dev: true @@ -1745,8 +1747,8 @@ packages: engines: {node: '>=10'} dev: true - /caniuse-lite@1.0.30001582: - resolution: {integrity: sha512-vsJG3V5vgfduaQGVxL53uSX/HUzxyr2eA8xCo36OLal7sRcSZbibJtLeh0qja4sFOr/QQGt4opB4tOy+eOgAxg==} + /caniuse-lite@1.0.30001584: + resolution: {integrity: sha512-LOz7CCQ9M1G7OjJOF9/mzmqmj3jE/7VOmrfw6Mgs0E8cjOsbRXQJHsPBfmBOXDskXKrHLyyW3n7kpDW/4BsfpQ==} dev: true /chalk@2.4.2: @@ -1989,7 +1991,7 @@ packages: resolution: {integrity: sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==} engines: {node: '>= 0.4'} dependencies: - get-intrinsic: 1.2.2 + get-intrinsic: 1.2.3 gopd: 1.0.1 has-property-descriptors: 1.0.1 dev: true @@ -2056,8 +2058,8 @@ packages: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} dev: true - /electron-to-chromium@1.4.654: - resolution: {integrity: sha512-hjfFa+Vj4WGLRVTlCQa+IivBkpcp+boGxMQfusOC/me5Y5NfU4wX7wyw+K9p8Cw4tl0BVIZGH2n7y/jMc3w4pg==} + /electron-to-chromium@1.4.657: + resolution: {integrity: sha512-On2ymeleg6QbRuDk7wNgDdXtNqlJLM2w4Agx1D/RiTmItiL+a9oq5p7HUa2ZtkAtGBe/kil2dq/7rPfkbe0r5w==} dev: true /embla-carousel-react@8.0.0-rc19(react@18.2.0): @@ -2108,15 +2110,15 @@ packages: resolution: {integrity: sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==} engines: {node: '>= 0.4'} dependencies: - array-buffer-byte-length: 1.0.0 - arraybuffer.prototype.slice: 1.0.2 + array-buffer-byte-length: 1.0.1 + arraybuffer.prototype.slice: 1.0.3 available-typed-arrays: 1.0.6 call-bind: 1.0.5 es-set-tostringtag: 2.0.2 es-to-primitive: 1.2.1 function.prototype.name: 1.1.6 - get-intrinsic: 1.2.2 - get-symbol-description: 1.0.0 + get-intrinsic: 1.2.3 + get-symbol-description: 1.0.1 globalthis: 1.0.3 gopd: 1.0.1 has-property-descriptors: 1.0.1 @@ -2124,7 +2126,7 @@ packages: has-symbols: 1.0.3 hasown: 2.0.0 internal-slot: 1.0.6 - is-array-buffer: 3.0.2 + is-array-buffer: 3.0.4 is-callable: 1.2.7 is-negative-zero: 2.0.2 is-regex: 1.1.4 @@ -2149,6 +2151,11 @@ packages: which-typed-array: 1.1.14 dev: true + /es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + dev: true + /es-module-lexer@0.10.5: resolution: {integrity: sha512-+7IwY/kiGAacQfY+YBhKMvEmyAJnw5grTUgjG85Pe7vcUI/6b7pZjZG8nQ7+48YhzEAEqrEgD2dCz/JIK+AYvw==} dev: true @@ -2157,7 +2164,7 @@ packages: resolution: {integrity: sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==} engines: {node: '>= 0.4'} dependencies: - get-intrinsic: 1.2.2 + get-intrinsic: 1.2.3 has-tostringtag: 1.0.2 hasown: 2.0.0 dev: true @@ -2202,8 +2209,8 @@ packages: '@esbuild/win32-x64': 0.19.12 dev: true - /escalade@3.1.1: - resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} + /escalade@3.1.2: + resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} engines: {node: '>=6'} dev: true @@ -2273,8 +2280,8 @@ packages: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} dev: true - /fastq@1.17.0: - resolution: {integrity: sha512-zGygtijUMT7jnk3h26kUms3BkSDp4IfIKjmnqI2tvx6nuBfiF1UqOxbnLfzdv+apBy+53oaImsKtMw/xYbW+1w==} + /fastq@1.17.1: + resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} dependencies: reusify: 1.0.4 dev: true @@ -2371,9 +2378,11 @@ packages: engines: {node: 6.* || 8.* || >= 10.*} dev: true - /get-intrinsic@1.2.2: - resolution: {integrity: sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==} + /get-intrinsic@1.2.3: + resolution: {integrity: sha512-JIcZczvcMVE7AUOP+X72bh8HqHBRxFdz5PDHYtNG/lE3yk9b3KZBJlwFcTyPYjg3L4RLLmZJzvjxhaZVapxFrQ==} + engines: {node: '>= 0.4'} dependencies: + es-errors: 1.3.0 function-bind: 1.1.2 has-proto: 1.0.1 has-symbols: 1.0.3 @@ -2390,12 +2399,12 @@ packages: engines: {node: '>=10'} dev: true - /get-symbol-description@1.0.0: - resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} + /get-symbol-description@1.0.1: + resolution: {integrity: sha512-KmuibvwbWaM4BHcBRYwJfZ1JxyJeBwB8ct9YYu67SvYdbEIlcQ2e56dHxfbobqW38GXo8/zDFqJeGtHiVbWyQw==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.5 - get-intrinsic: 1.2.2 + es-errors: 1.3.0 dev: true /glob-parent@5.1.2: @@ -2443,7 +2452,7 @@ packages: /gopd@1.0.1: resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} dependencies: - get-intrinsic: 1.2.2 + get-intrinsic: 1.2.3 dev: true /graceful-fs@4.2.11: @@ -2467,7 +2476,7 @@ packages: /has-property-descriptors@1.0.1: resolution: {integrity: sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==} dependencies: - get-intrinsic: 1.2.2 + get-intrinsic: 1.2.3 dev: true /has-proto@1.0.1: @@ -2582,17 +2591,17 @@ packages: resolution: {integrity: sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==} engines: {node: '>= 0.4'} dependencies: - get-intrinsic: 1.2.2 + get-intrinsic: 1.2.3 hasown: 2.0.0 side-channel: 1.0.4 dev: true - /is-array-buffer@3.0.2: - resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} + /is-array-buffer@3.0.4: + resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.5 - get-intrinsic: 1.2.2 - is-typed-array: 1.1.13 + get-intrinsic: 1.2.3 dev: true /is-arrayish@0.2.1: @@ -2750,7 +2759,7 @@ packages: '@babel/parser': 7.23.9 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 - semver: 7.5.4 + semver: 7.6.0 transitivePeerDependencies: - supports-color dev: true @@ -3128,7 +3137,7 @@ packages: jest-util: 29.7.0 natural-compare: 1.4.0 pretty-format: 29.7.0 - semver: 7.5.4 + semver: 7.6.0 transitivePeerDependencies: - supports-color dev: true @@ -3356,7 +3365,7 @@ packages: resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} engines: {node: '>=10'} dependencies: - semver: 7.5.4 + semver: 7.6.0 dev: true /makeerror@1.0.12: @@ -3715,8 +3724,8 @@ packages: fsevents: 2.3.2 dev: true - /postcss@8.4.33: - resolution: {integrity: sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg==} + /postcss@8.4.34: + resolution: {integrity: sha512-4eLTO36woPSocqZ1zIrFD2K1v6wH7pY1uBh0JIM2KKfrVtGvPFiAku6aNOP0W1Wr9qwnaCsF0Z+CrVnryB2A8Q==} engines: {node: ^10 || ^12 || >=14} dependencies: nanoid: 3.3.7 @@ -3727,8 +3736,8 @@ packages: /preact@10.19.3: resolution: {integrity: sha512-nHHTeFVBTHRGxJXKkKu5hT8C/YWBkPso4/Gad6xuj5dbptt9iF9NZr9pHbPhBrnT2klheu7mHTxTZ/LjwJiEiQ==} - /prettier@3.2.4: - resolution: {integrity: sha512-FWu1oLHKCrtpO1ypU6J0SbK2d9Ckwysq6bHj/uaCP26DxrPpppCLQRGVuqAxSTvhF00AcvDRyYrLNW7ocBhFFQ==} + /prettier@3.2.5: + resolution: {integrity: sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==} engines: {node: '>=14'} hasBin: true dev: true @@ -3929,7 +3938,7 @@ packages: engines: {node: '>=0.4'} dependencies: call-bind: 1.0.5 - get-intrinsic: 1.2.2 + get-intrinsic: 1.2.3 has-symbols: 1.0.3 isarray: 2.0.5 dev: true @@ -3939,7 +3948,7 @@ packages: engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.5 - get-intrinsic: 1.2.2 + get-intrinsic: 1.2.3 is-regex: 1.1.4 dev: true @@ -3953,8 +3962,8 @@ packages: hasBin: true dev: true - /semver@7.5.4: - resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} + /semver@7.6.0: + resolution: {integrity: sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==} engines: {node: '>=10'} hasBin: true dependencies: @@ -3967,7 +3976,7 @@ packages: dependencies: define-data-property: 1.1.1 function-bind: 1.1.2 - get-intrinsic: 1.2.2 + get-intrinsic: 1.2.3 gopd: 1.0.1 has-property-descriptors: 1.0.1 dev: true @@ -4013,7 +4022,7 @@ packages: resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} dependencies: call-bind: 1.0.5 - get-intrinsic: 1.2.2 + get-intrinsic: 1.2.3 object-inspect: 1.13.1 dev: true @@ -4309,7 +4318,7 @@ packages: engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.5 - get-intrinsic: 1.2.2 + get-intrinsic: 1.2.3 is-typed-array: 1.1.13 dev: true @@ -4377,7 +4386,7 @@ packages: browserslist: '>= 4.21.0' dependencies: browserslist: 4.22.3 - escalade: 3.1.1 + escalade: 3.1.2 picocolors: 1.0.0 dev: true @@ -4439,7 +4448,7 @@ packages: dependencies: '@types/node': 20.11.16 esbuild: 0.19.12 - postcss: 8.4.33 + postcss: 8.4.34 rollup: 4.9.6 optionalDependencies: fsevents: 2.3.3 @@ -4549,7 +4558,7 @@ packages: engines: {node: '>=12'} dependencies: cliui: 8.0.1 - escalade: 3.1.1 + escalade: 3.1.2 get-caller-file: 2.0.5 require-directory: 2.1.1 string-width: 4.2.3 @@ -4562,7 +4571,7 @@ packages: engines: {node: '>=10'} dev: true - /zustand@4.5.0(@types/react@18.2.51)(react@18.2.0): + /zustand@4.5.0(@types/react@18.2.54)(react@18.2.0): resolution: {integrity: sha512-zlVFqS5TQ21nwijjhJlx4f9iGrXSL0o/+Dpy4txAP22miJ8Ti6c1Ol1RLNN98BMib83lmDH/2KmLwaNXpjrO1A==} engines: {node: '>=12.7.0'} peerDependencies: @@ -4577,7 +4586,7 @@ packages: react: optional: true dependencies: - '@types/react': 18.2.51 + '@types/react': 18.2.54 react: 18.2.0 use-sync-external-store: 1.2.0(react@18.2.0) dev: false diff --git a/seccomp_profile.json b/seccomp_profile.json new file mode 100644 index 00000000..bfeea36c --- /dev/null +++ b/seccomp_profile.json @@ -0,0 +1,12 @@ +{ + "comment": "Allow create user namespaces", + "names": [ + "clone", + "setns", + "unshare" + ], + "action": "SCMP_ACT_ALLOW", + "args": [], + "includes": {}, + "excludes": {} +} diff --git a/test.sh b/test.sh new file mode 100755 index 00000000..bf907533 --- /dev/null +++ b/test.sh @@ -0,0 +1,76 @@ +#!/bin/bash + +# import env vars from the .env in this project root +while IFS= read -r line; do + if [[ "$line" =~ ^\s*#.*$ || -z "$line" ]]; then + continue + fi + key=$(echo "$line" | cut -d '=' -f 1) + value=$(echo "$line" | cut -d '=' -f 2-) + # skip comments + value=$(echo "$value" | sed -e "s/^'//" -e "s/'$//" -e 's/^"//' -e 's/"$//' -e 's/^[ \t]*//;s/[ \t]*$//') + export "$key=$value" +done <".env" + +IMAGE_NAME="chromeshack-e2e" + +if [ -z "${E2E_SHACKLI+x}" ]; then + echo + echo "ERROR: a cookie fixture in the env variable \"E2E_SHACKLI\" is required for the E2E suite!" + echo "Install a valid \".env\" in the project root and generate one with: pnpm testlogin" + echo "For more information, see CONTRIBUTING.md..." + echo + exit 1 +fi + +build() { + docker build -f ./Dockerfile.e2etest -t "$IMAGE_NAME" --build-arg SCOOKIE="$E2E_SHACKLI" +} + +run() { + mkdir -p "results/" && rm -rf "results/*" + docker run --rm --replace -it \ + --ipc=host --security-opt seccomp=seccomp_profile.json \ + -v "./results:/code/results" \ + --name "$IMAGE_NAME" "$IMAGE_NAME" \ + "${@}" +} + +help() { + echo + echo "Usage: $0 [--build | -b] [--run | -r] [--shell | -s] [--test] [--help | -h]" + echo + echo " --build, -b rebuild the image" + echo " --run, -r run the tests" + echo " --shell, -s open a shell inside the image" + echo " --test rerun the tests" + echo " --help, -h this message" + echo + exit 1 +} + +CMD=${@:-""} +case "$CMD" in + "--help" | "-h") + help + ;; + "--build" | "-b") + build + ;; + "--run" | "-r") + run pnpm test + ;; + "--shell" | "-s") + run /bin/bash + ;; + "--test") + build + run pnpm test + ;; + *) + echo "Error: Invalid argument" + help + ;; +esac + +exit 0 diff --git a/tests/fixtures/index.ts b/tests/fixtures/index.ts index 14f48012..ed617932 100644 --- a/tests/fixtures/index.ts +++ b/tests/fixtures/index.ts @@ -5,9 +5,6 @@ import path from "path"; import { test as base, chromium, type BrowserContext, type Page } from "@playwright/test"; -// @ts-ignore -import cookieFixture from "./_shack_li_.json" assert { type: "json" }; - export const loadExtensionDefaults = async (page: Page, opts?: any, data?: any) => { const _data = { enabled_suboptions: ["testing_mode"], ...data }; const _opts = { defaults: true, ...opts }; @@ -20,17 +17,20 @@ export const loadExtensionDefaults = async (page: Page, opts?: any, data?: any) ); }; export const setTestCookie = async (context: BrowserContext) => { - if (cookieFixture == null) return; - const shackli: any = Object.values(cookieFixture); - - await context.addCookies([ - { - name: "_shack_li_", - value: shackli[2]?._shack_li_ as string, - domain: ".shacknews.com", - path: "/", - }, - ]); + // only load secure cookie from a trusted source + try { + const shackli = JSON.parse(process.env.E2E_SHACKLI) as any; + await context.addCookies([ + { + name: "_shack_li_", + value: shackli[2]?._shack_li_ as string, + domain: ".shacknews.com", + path: "/", + }, + ]); + } catch (e) { + console.error("Failed to parse the secure cookie from E2E_SHACKLI: ", e); + } return context; }; export const navigate = async (page: Page, url: string, opts?: { o?: any; d?: any }, context?: BrowserContext) => { @@ -54,7 +54,7 @@ export const test = base.extend<{ const pathToExtension = fs.existsSync(prodPath) ? prodPath : devPath; const context = await chromium.launchPersistentContext("", { headless: false, - args: [`--disable-extensions-except=${pathToExtension}`, `--load-extension=${pathToExtension}`], + args: [`--disable-extensions-except=${pathToExtension}`, `--load-extension=${pathToExtension}`, "--headless=new"], }); await use(context); await context.close(); diff --git a/utils/testlogin.js b/utils/testlogin.js index 11cbc50c..bdb7a61a 100644 --- a/utils/testlogin.js +++ b/utils/testlogin.js @@ -6,7 +6,7 @@ import process from "process"; dotenv.config(); const _login = process.env.TESTUSR; const _pass = process.env.TESTPW; -const outputPath = path.resolve("./tests/fixtures/_shack_li_.json"); +const outputPath = path.resolve("./.env"); const body = `get_fields%5B%5D=result&user-identifier=${_login}&supplied-pass=${_pass}&remember-login=0`; const serializeCookie = (vals) => { @@ -31,8 +31,9 @@ fetch("https://www.shacknews.com/account/signin", { const setCookies = res.headers.getSetCookie(); const outCookies = serializeCookie(setCookies); if (outCookies) { - fs.writeFileSync(outputPath, JSON.stringify(outCookies)); - console.log("cookie written:", outputPath); + // overwrite the contents of the file "./.env" under the key "E2E_SHACKLI" with cookie data + fs.writeFileSync(outputPath, `E2E_SHACKLI=${JSON.stringify(outCookies)}`); + console.log("cookie written in .env format to:", outputPath); } else throw Error("No cookie data received from server!"); }) .catch((e) => { From f1a1ce3a0f82e7422fdc798e5bdd3402f7478a8d Mon Sep 17 00:00:00 2001 From: WombatFromHell Date: Mon, 5 Feb 2024 23:25:24 -0700 Subject: [PATCH 02/18] Some test suite workflow improvements --- .github/workflows/tests.yaml | 17 +++++++++-------- Dockerfile.e2etest | 7 ++++--- playwright.config.ts | 24 +----------------------- test.sh | 2 +- 4 files changed, 15 insertions(+), 35 deletions(-) diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml index 0d5bb68d..b1799150 100644 --- a/.github/workflows/tests.yaml +++ b/.github/workflows/tests.yaml @@ -1,23 +1,24 @@ name: Playwright Tests on: push: - branches: [master, testing] - pull_request: - branches: [master, testing] + branches: ["master", "testing"] jobs: playwright: name: "Playwright Tests" runs-on: ubuntu-latest container: - image: mcr.microsoft.com/playwright:v1.41.1-jammy + # make sure to match this version to what's in package.json + image: mcr.microsoft.com/playwright:v1.40.1-jammy steps: - - uses: actions/checkout@v3 - - uses: actions/setup-node@v3 + - uses: actions/checkout@v4 + - uses: pnpm/action-setup@v2 + with: + version: 8.15.1 + - uses: actions/setup-node@v4 with: node-version: 21 - - name: Install PNPM - run: corepack enable + cache: 'pnpm' - name: Install project dependencies run: pnpm install - name: Install test dependencies diff --git a/Dockerfile.e2etest b/Dockerfile.e2etest index 7563dcf0..b1d62b74 100644 --- a/Dockerfile.e2etest +++ b/Dockerfile.e2etest @@ -1,5 +1,5 @@ # Pull the base image -FROM mcr.microsoft.com/playwright:v1.41.1-jammy +FROM mcr.microsoft.com/playwright:v1.40.1-jammy ARG SCOOKIE ARG CI @@ -12,8 +12,9 @@ RUN corepack enable WORKDIR /code/ COPY . /code/ + RUN --mount=type=cache,id=pnpm,target=/pnpm/store pnpm install --frozen-lockfile -RUN pnpm test:deps && \ - pnpm build +RUN pnpm test:deps +RUN pnpm build CMD ["/bin/bash"] diff --git a/playwright.config.ts b/playwright.config.ts index 744a4a64..e9802da4 100644 --- a/playwright.config.ts +++ b/playwright.config.ts @@ -1,23 +1,12 @@ import { defineConfig, devices } from "@playwright/test"; -/** - * Read environment variables from file. - * https://github.com/motdotla/dotenv - */ -// require('dotenv').config(); - -/** - * See https://playwright.dev/docs/test-configuration. - */ export default defineConfig({ testDir: "./tests/e2e", - /* Run tests in files in parallel */ fullyParallel: true, /* Fail the build on CI if you accidentally left test.only in the source code. */ forbidOnly: !!process.env.CI, retries: process.env.CI ? 0 : 1, - /* Opt out of parallel tests on CI */ - workers: process.env.CI ? 1 : 3, + workers: 4, /* Reporter to use. See https://playwright.dev/docs/test-reporters */ reporter: [ ["list", { printSteps: true, outputFolder: "results/reports" }], @@ -25,28 +14,17 @@ export default defineConfig({ ], outputDir: "results/tests", - /* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */ use: { - /* Base URL to use in actions like `await page.goto('/')`. */ - // baseURL: 'http://127.0.0.1:3000', screenshot: "only-on-failure", trace: "retain-on-failure", video: "retain-on-failure", headless: true, }, - /* Configure projects for major browsers */ projects: [ { name: "chromium", use: { ...devices["Desktop Chrome"] }, }, ], - - /* Run your local dev server before starting the tests */ - // webServer: { - // command: 'npm run start', - // url: 'http://127.0.0.1:3000', - // reuseExistingServer: !process.env.CI, - // }, }); diff --git a/test.sh b/test.sh index bf907533..1afa05f0 100755 --- a/test.sh +++ b/test.sh @@ -63,7 +63,7 @@ case "$CMD" in "--shell" | "-s") run /bin/bash ;; - "--test") + "--test" | "") build run pnpm test ;; From 50966ee43ec2ad5cc95d35d6d9818a4fb75f77bf Mon Sep 17 00:00:00 2001 From: WombatFromHell Date: Mon, 5 Feb 2024 23:31:04 -0700 Subject: [PATCH 03/18] Restrict e2e workflow to master branch --- .github/workflows/tests.yaml | 3 ++- playwright.config.ts | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml index b1799150..32a745c6 100644 --- a/.github/workflows/tests.yaml +++ b/.github/workflows/tests.yaml @@ -1,7 +1,8 @@ name: Playwright Tests on: push: - branches: ["master", "testing"] + branches: + - master jobs: playwright: diff --git a/playwright.config.ts b/playwright.config.ts index e9802da4..e9404a9c 100644 --- a/playwright.config.ts +++ b/playwright.config.ts @@ -6,7 +6,7 @@ export default defineConfig({ /* Fail the build on CI if you accidentally left test.only in the source code. */ forbidOnly: !!process.env.CI, retries: process.env.CI ? 0 : 1, - workers: 4, + workers: process.env.CI ? 2 : 4, /* Reporter to use. See https://playwright.dev/docs/test-reporters */ reporter: [ ["list", { printSteps: true, outputFolder: "results/reports" }], From 12bdaca2a414e347aee76d82552d14b8c42d59ef Mon Sep 17 00:00:00 2001 From: WombatFromHell Date: Wed, 7 Feb 2024 21:15:30 -0700 Subject: [PATCH 04/18] Disable tests action workflow for now --- .github/workflows/tests.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml index 32a745c6..9469b7b2 100644 --- a/.github/workflows/tests.yaml +++ b/.github/workflows/tests.yaml @@ -7,6 +7,7 @@ on: jobs: playwright: name: "Playwright Tests" + if: false # disable for now runs-on: ubuntu-latest container: # make sure to match this version to what's in package.json From ff1c9cbbc4f35a912e83fada119c66dedc41ffb8 Mon Sep 17 00:00:00 2001 From: WombatFromHell Date: Wed, 7 Feb 2024 21:19:36 -0700 Subject: [PATCH 05/18] Fixed a case where NCH would never be stale --- src/optional/new_comment_highlighter.ts | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/optional/new_comment_highlighter.ts b/src/optional/new_comment_highlighter.ts index c030c739..9b0dc1e0 100644 --- a/src/optional/new_comment_highlighter.ts +++ b/src/optional/new_comment_highlighter.ts @@ -18,7 +18,6 @@ export const NewCommentHighlighter = { async highlight(args?: PostEventArgs) { const { root } = args || {}; const isEnabled = await enabledContains(["new_comment_highlighter"]); - const isChatty = !!document.getElementById("newcommentbutton"); if (!isEnabled) return; const recents = NewCommentHighlighter.getRecentsCache(); @@ -94,9 +93,16 @@ export const NewCommentHighlighter = { await setSetting("last_highlight_time", now); return false; } - const lastHighlightTime = await getSetting("last_highlight_time", now); + + let lastHighlightTime = await getSetting("last_highlight_time", now); + if (lastHighlightTime === -1) { + await setSetting("last_highlight_time", now); + console.log(`checkStaleTime corrected invalid lastHighlightTime: ${lastHighlightTime}`); + lastHighlightTime = now; + } + const overThresh = delayInMs ? timeOverThresh(lastHighlightTime, delayInMs) : false; - if (!overThresh || lastHighlightTime === -1) { + if (!overThresh) { console.log(`checkStaleTime fresh: ${lastHighlightTime + delayInMs} > ${now}`); return false; } From ee6cf60d15fd837e1448da563a1cbb4b8a7b547c Mon Sep 17 00:00:00 2001 From: WombatFromHell Date: Thu, 8 Feb 2024 07:35:44 -0700 Subject: [PATCH 06/18] Better test coverage for NCH stale id with stale time --- tests/e2e/DOM.spec.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/e2e/DOM.spec.ts b/tests/e2e/DOM.spec.ts index 68d024fe..454adffd 100644 --- a/tests/e2e/DOM.spec.ts +++ b/tests/e2e/DOM.spec.ts @@ -179,18 +179,18 @@ test.describe("NewCommentHighlighter - time validated highlighting", () => { // NCH minimum highlight stale time threshold is <=4 hours const staleThresh = 1000 * 60 * 60 * 4 + 60000; const staleTime = Date.now() + staleThresh; - + // this would normally highlight the whole thread await navigate( page, url, { o: { append: true }, - d: { new_comment_highlighter_last_id: { "42269502": 42270595 }, last_highlight_time: staleTime }, + d: { new_comment_highlighter_last_id: { "42269502": 42269502 }, last_highlight_time: staleTime }, }, context ); const highlights = page.locator(".newcommenthighlighter"); - // should never highlight here unless we're refreshing via the root-refresh button + // shouldn't highlight here due to stale time unless we're refreshing via the root-refresh button await expect(highlights).toHaveCount(0); }); test("stale id with unset time case", async ({ page, context }) => { From 707fd315ef661f678f70ffcf89bb03290ccc5ac1 Mon Sep 17 00:00:00 2001 From: WombatFromHell Date: Thu, 8 Feb 2024 07:41:07 -0700 Subject: [PATCH 07/18] Updated release notes --- package.json | 10 +- pnpm-lock.yaml | 217 ++++++++++++++++++++------------------ public/release_notes.html | 4 + src/manifestv3.ffx.json | 2 +- 4 files changed, 122 insertions(+), 111 deletions(-) diff --git a/package.json b/package.json index e80c9954..ab2d0aad 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "chromeshack", - "version": "1.75.0", + "version": "1.76.0", "description": "Collection of scripts for Shacknews.", "repository": "https://github.com/latestchatty/chromeshack", "type": "module", @@ -39,7 +39,7 @@ "jquery": "^3.7.1", "lodash.isequal": "^4.5.0", "lz-string": "^1.5.0", - "preact": "^10.19.3", + "preact": "^10.19.4", "prop-types": "15.8.1", "text-field-edit": "^4.0.0", "ts-debounce": "^4.0.0", @@ -56,8 +56,8 @@ "@types/jquery": "^3.5.29", "@types/lodash.isequal": "^4.5.8", "@types/node": "^20.11.16", - "@types/react": "^18.2.54", - "@types/react-dom": "^18.2.18", + "@types/react": "^18.2.55", + "@types/react-dom": "^18.2.19", "adm-zip": "^0.5.10", "dotenv": "^16.4.1", "embla-carousel": "8.0.0-rc19", @@ -67,6 +67,6 @@ "npm-run-all": "^4.1.5", "prettier": "^3.2.5", "typescript": "^5.3.3", - "vite": "^5.0.12" + "vite": "^5.1.0" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f4359985..662d52d8 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -36,8 +36,8 @@ dependencies: specifier: ^1.5.0 version: 1.5.0 preact: - specifier: ^10.19.3 - version: 10.19.3 + specifier: ^10.19.4 + version: 10.19.4 prop-types: specifier: 15.8.1 version: 15.8.1 @@ -52,7 +52,7 @@ dependencies: version: 1.0.14 zustand: specifier: ^4.5.0 - version: 4.5.0(@types/react@18.2.54)(react@18.2.0) + version: 4.5.0(@types/react@18.2.55)(react@18.2.0) devDependencies: '@biomejs/biome': @@ -66,7 +66,7 @@ devDependencies: version: 1.40.1 '@preact/preset-vite': specifier: ^2.8.1 - version: 2.8.1(@babel/core@7.23.9)(preact@10.19.3)(vite@5.0.12) + version: 2.8.1(@babel/core@7.23.9)(preact@10.19.4)(vite@5.1.0) '@types/chrome': specifier: ^0.0.246 version: 0.0.246 @@ -83,11 +83,11 @@ devDependencies: specifier: ^20.11.16 version: 20.11.16 '@types/react': - specifier: ^18.2.54 - version: 18.2.54 + specifier: ^18.2.55 + version: 18.2.55 '@types/react-dom': - specifier: ^18.2.18 - version: 18.2.18 + specifier: ^18.2.19 + version: 18.2.19 adm-zip: specifier: ^0.5.10 version: 0.5.10 @@ -116,8 +116,8 @@ devDependencies: specifier: ^5.3.3 version: 5.3.3 vite: - specifier: ^5.0.12 - version: 5.0.12(@types/node@20.11.16) + specifier: ^5.1.0 + version: 5.1.0(@types/node@20.11.16) packages: @@ -1157,7 +1157,7 @@ packages: playwright: 1.40.1 dev: true - /@preact/preset-vite@2.8.1(@babel/core@7.23.9)(preact@10.19.3)(vite@5.0.12): + /@preact/preset-vite@2.8.1(@babel/core@7.23.9)(preact@10.19.4)(vite@5.1.0): resolution: {integrity: sha512-a9KV4opdj17X2gOFuGup0aE+sXYABX/tJi/QDptOrleX4FlnoZgDWvz45tHOdVfrZX+3uvVsIYPHxRsTerkDNA==} peerDependencies: '@babel/core': 7.x @@ -1166,7 +1166,7 @@ packages: '@babel/core': 7.23.9 '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.23.9) '@babel/plugin-transform-react-jsx-development': 7.22.5(@babel/core@7.23.9) - '@prefresh/vite': 2.4.5(preact@10.19.3)(vite@5.0.12) + '@prefresh/vite': 2.4.5(preact@10.19.4)(vite@5.1.0) '@rollup/pluginutils': 4.2.1 babel-plugin-transform-hook-names: 1.0.2(@babel/core@7.23.9) debug: 4.3.4 @@ -1174,7 +1174,7 @@ packages: magic-string: 0.30.5 node-html-parser: 6.1.12 resolve: 1.22.8 - vite: 5.0.12(@types/node@20.11.16) + vite: 5.1.0(@types/node@20.11.16) transitivePeerDependencies: - preact - supports-color @@ -1184,19 +1184,19 @@ packages: resolution: {integrity: sha512-uG3jGEAysxWoyG3XkYfjYHgaySFrSsaEb4GagLzYaxlydbuREtaX+FTxuIidp241RaLl85XoHg9Ej6E4+V1pcg==} dev: true - /@prefresh/core@1.5.2(preact@10.19.3): + /@prefresh/core@1.5.2(preact@10.19.4): resolution: {integrity: sha512-A/08vkaM1FogrCII5PZKCrygxSsc11obExBScm3JF1CryK2uDS3ZXeni7FeKCx1nYdUkj4UcJxzPzc1WliMzZA==} peerDependencies: preact: ^10.0.0 dependencies: - preact: 10.19.3 + preact: 10.19.4 dev: true /@prefresh/utils@1.2.0: resolution: {integrity: sha512-KtC/fZw+oqtwOLUFM9UtiitB0JsVX0zLKNyRTA332sqREqSALIIQQxdUCS1P3xR/jT1e2e8/5rwH6gdcMLEmsQ==} dev: true - /@prefresh/vite@2.4.5(preact@10.19.3)(vite@5.0.12): + /@prefresh/vite@2.4.5(preact@10.19.4)(vite@5.1.0): resolution: {integrity: sha512-iForDVJ2M8gQYnm5pHumvTEJjGGc7YNYC0GVKnHFL+GvFfKHfH9Rpq67nUAzNbjuLEpqEOUuQVQajMazWu2ZNQ==} peerDependencies: preact: ^10.4.0 @@ -1204,11 +1204,11 @@ packages: dependencies: '@babel/core': 7.23.9 '@prefresh/babel-plugin': 0.5.1 - '@prefresh/core': 1.5.2(preact@10.19.3) + '@prefresh/core': 1.5.2(preact@10.19.4) '@prefresh/utils': 1.2.0 '@rollup/pluginutils': 4.2.1 - preact: 10.19.3 - vite: 5.0.12(@types/node@20.11.16) + preact: 10.19.4 + vite: 5.1.0(@types/node@20.11.16) transitivePeerDependencies: - supports-color dev: true @@ -1448,14 +1448,14 @@ packages: /@types/prop-types@15.7.11: resolution: {integrity: sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==} - /@types/react-dom@18.2.18: - resolution: {integrity: sha512-TJxDm6OfAX2KJWJdMEVTwWke5Sc/E/RlnPGvGfS0W7+6ocy2xhDVQVh/KvC2Uf7kACs+gDytdusDSdWfWkaNzw==} + /@types/react-dom@18.2.19: + resolution: {integrity: sha512-aZvQL6uUbIJpjZk4U8JZGbau9KDeAwMfmhyWorxgBkqDIEf6ROjRozcmPIicqsUwPUjbkDfHKgGee1Lq65APcA==} dependencies: - '@types/react': 18.2.54 + '@types/react': 18.2.55 dev: true - /@types/react@18.2.54: - resolution: {integrity: sha512-039k+vrVJymDoe2y+HLk3O3oI3sa+C8KNjuDKofqrIJK26ramnqLNj9VJTaxAzFGMvpW/79HrrAJapHzpQ9fGQ==} + /@types/react@18.2.55: + resolution: {integrity: sha512-Y2Tz5P4yz23brwm2d7jNon39qoAtMMmalOQv6+fEFt1mT+FcM3D841wDpoUvFXhaYenuROCy3FZYqdTjM7qVyA==} dependencies: '@types/prop-types': 15.7.11 '@types/scheduler': 0.16.8 @@ -1563,7 +1563,7 @@ packages: resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.6 is-array-buffer: 3.0.4 dev: true @@ -1577,11 +1577,11 @@ packages: engines: {node: '>= 0.4'} dependencies: array-buffer-byte-length: 1.0.1 - call-bind: 1.0.5 + call-bind: 1.0.6 define-properties: 1.2.1 es-abstract: 1.22.3 es-errors: 1.3.0 - get-intrinsic: 1.2.3 + get-intrinsic: 1.2.4 is-array-buffer: 3.0.4 is-shared-array-buffer: 1.0.2 dev: true @@ -1708,8 +1708,8 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001584 - electron-to-chromium: 1.4.657 + caniuse-lite: 1.0.30001585 + electron-to-chromium: 1.4.661 node-releases: 2.0.14 update-browserslist-db: 1.0.13(browserslist@4.22.3) dev: true @@ -1724,12 +1724,14 @@ packages: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} dev: true - /call-bind@1.0.5: - resolution: {integrity: sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==} + /call-bind@1.0.6: + resolution: {integrity: sha512-Mj50FLHtlsoVfRfnHaZvyrooHcrlceNZdL/QBvJJVd9Ta55qCQK0gs4ss2oZDeV9zFCs6ewzYgVE5yfVmfFpVg==} + engines: {node: '>= 0.4'} dependencies: + es-errors: 1.3.0 function-bind: 1.1.2 - get-intrinsic: 1.2.3 - set-function-length: 1.2.0 + get-intrinsic: 1.2.4 + set-function-length: 1.2.1 dev: true /callsites@3.1.0: @@ -1747,8 +1749,8 @@ packages: engines: {node: '>=10'} dev: true - /caniuse-lite@1.0.30001584: - resolution: {integrity: sha512-LOz7CCQ9M1G7OjJOF9/mzmqmj3jE/7VOmrfw6Mgs0E8cjOsbRXQJHsPBfmBOXDskXKrHLyyW3n7kpDW/4BsfpQ==} + /caniuse-lite@1.0.30001585: + resolution: {integrity: sha512-yr2BWR1yLXQ8fMpdS/4ZZXpseBgE7o4g41x3a6AJOqZuOi+iE/WdJYAuZ6Y95i4Ohd2Y+9MzIWRR+uGABH4s3Q==} dev: true /chalk@2.4.2: @@ -1987,11 +1989,12 @@ packages: engines: {node: '>=0.10.0'} dev: true - /define-data-property@1.1.1: - resolution: {integrity: sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==} + /define-data-property@1.1.2: + resolution: {integrity: sha512-SRtsSqsDbgpJBbW3pABMCOt6rQyeM8s8RiyeSN8jYG8sYmt/kGJejbydttUsnDs1tadr19tvhT4ShwMyoqAm4g==} engines: {node: '>= 0.4'} dependencies: - get-intrinsic: 1.2.3 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 gopd: 1.0.1 has-property-descriptors: 1.0.1 dev: true @@ -2000,7 +2003,7 @@ packages: resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} engines: {node: '>= 0.4'} dependencies: - define-data-property: 1.1.1 + define-data-property: 1.1.2 has-property-descriptors: 1.0.1 object-keys: 1.1.1 dev: true @@ -2058,8 +2061,8 @@ packages: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} dev: true - /electron-to-chromium@1.4.657: - resolution: {integrity: sha512-On2ymeleg6QbRuDk7wNgDdXtNqlJLM2w4Agx1D/RiTmItiL+a9oq5p7HUa2ZtkAtGBe/kil2dq/7rPfkbe0r5w==} + /electron-to-chromium@1.4.661: + resolution: {integrity: sha512-AFg4wDHSOk5F+zA8aR+SVIOabu7m0e7BiJnigCvPXzIGy731XENw/lmNxTySpVFtkFEy+eyt4oHhh5FF3NjQNw==} dev: true /embla-carousel-react@8.0.0-rc19(react@18.2.0): @@ -2113,19 +2116,19 @@ packages: array-buffer-byte-length: 1.0.1 arraybuffer.prototype.slice: 1.0.3 available-typed-arrays: 1.0.6 - call-bind: 1.0.5 + call-bind: 1.0.6 es-set-tostringtag: 2.0.2 es-to-primitive: 1.2.1 function.prototype.name: 1.1.6 - get-intrinsic: 1.2.3 - get-symbol-description: 1.0.1 + get-intrinsic: 1.2.4 + get-symbol-description: 1.0.2 globalthis: 1.0.3 gopd: 1.0.1 has-property-descriptors: 1.0.1 has-proto: 1.0.1 has-symbols: 1.0.3 hasown: 2.0.0 - internal-slot: 1.0.6 + internal-slot: 1.0.7 is-array-buffer: 3.0.4 is-callable: 1.2.7 is-negative-zero: 2.0.2 @@ -2139,11 +2142,11 @@ packages: object.assign: 4.1.5 regexp.prototype.flags: 1.5.1 safe-array-concat: 1.1.0 - safe-regex-test: 1.0.2 + safe-regex-test: 1.0.3 string.prototype.trim: 1.2.8 string.prototype.trimend: 1.0.7 string.prototype.trimstart: 1.0.7 - typed-array-buffer: 1.0.0 + typed-array-buffer: 1.0.1 typed-array-byte-length: 1.0.0 typed-array-byte-offset: 1.0.0 typed-array-length: 1.0.4 @@ -2164,7 +2167,7 @@ packages: resolution: {integrity: sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==} engines: {node: '>= 0.4'} dependencies: - get-intrinsic: 1.2.3 + get-intrinsic: 1.2.4 has-tostringtag: 1.0.2 hasown: 2.0.0 dev: true @@ -2358,7 +2361,7 @@ packages: resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.6 define-properties: 1.2.1 es-abstract: 1.22.3 functions-have-names: 1.2.3 @@ -2378,8 +2381,8 @@ packages: engines: {node: 6.* || 8.* || >= 10.*} dev: true - /get-intrinsic@1.2.3: - resolution: {integrity: sha512-JIcZczvcMVE7AUOP+X72bh8HqHBRxFdz5PDHYtNG/lE3yk9b3KZBJlwFcTyPYjg3L4RLLmZJzvjxhaZVapxFrQ==} + /get-intrinsic@1.2.4: + resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} engines: {node: '>= 0.4'} dependencies: es-errors: 1.3.0 @@ -2399,12 +2402,13 @@ packages: engines: {node: '>=10'} dev: true - /get-symbol-description@1.0.1: - resolution: {integrity: sha512-KmuibvwbWaM4BHcBRYwJfZ1JxyJeBwB8ct9YYu67SvYdbEIlcQ2e56dHxfbobqW38GXo8/zDFqJeGtHiVbWyQw==} + /get-symbol-description@1.0.2: + resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.6 es-errors: 1.3.0 + get-intrinsic: 1.2.4 dev: true /glob-parent@5.1.2: @@ -2452,7 +2456,7 @@ packages: /gopd@1.0.1: resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} dependencies: - get-intrinsic: 1.2.3 + get-intrinsic: 1.2.4 dev: true /graceful-fs@4.2.11: @@ -2476,7 +2480,7 @@ packages: /has-property-descriptors@1.0.1: resolution: {integrity: sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==} dependencies: - get-intrinsic: 1.2.3 + get-intrinsic: 1.2.4 dev: true /has-proto@1.0.1: @@ -2587,21 +2591,21 @@ packages: resolution: {integrity: sha512-EcKzdTHVe8wFVOGEYXiW9WmJXPjqi1T+234YpJr98RiFYKHV3cdy1+3mkTE+KHTHxFFLH51SfaGOoUdW+v7ViQ==} dev: false - /internal-slot@1.0.6: - resolution: {integrity: sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==} + /internal-slot@1.0.7: + resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} engines: {node: '>= 0.4'} dependencies: - get-intrinsic: 1.2.3 + es-errors: 1.3.0 hasown: 2.0.0 - side-channel: 1.0.4 + side-channel: 1.0.5 dev: true /is-array-buffer@3.0.4: resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.3 + call-bind: 1.0.6 + get-intrinsic: 1.2.4 dev: true /is-arrayish@0.2.1: @@ -2618,7 +2622,7 @@ packages: resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.6 has-tostringtag: 1.0.2 dev: true @@ -2683,14 +2687,14 @@ packages: resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.6 has-tostringtag: 1.0.2 dev: true /is-shared-array-buffer@1.0.2: resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.6 dev: true /is-stream@2.0.1: @@ -2722,7 +2726,7 @@ packages: /is-weakref@1.0.2: resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.6 dev: true /isarray@2.0.5: @@ -3544,7 +3548,7 @@ packages: resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.6 define-properties: 1.2.1 has-symbols: 1.0.3 object-keys: 1.1.1 @@ -3724,8 +3728,8 @@ packages: fsevents: 2.3.2 dev: true - /postcss@8.4.34: - resolution: {integrity: sha512-4eLTO36woPSocqZ1zIrFD2K1v6wH7pY1uBh0JIM2KKfrVtGvPFiAku6aNOP0W1Wr9qwnaCsF0Z+CrVnryB2A8Q==} + /postcss@8.4.35: + resolution: {integrity: sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==} engines: {node: ^10 || ^12 || >=14} dependencies: nanoid: 3.3.7 @@ -3733,8 +3737,8 @@ packages: source-map-js: 1.0.2 dev: true - /preact@10.19.3: - resolution: {integrity: sha512-nHHTeFVBTHRGxJXKkKu5hT8C/YWBkPso4/Gad6xuj5dbptt9iF9NZr9pHbPhBrnT2klheu7mHTxTZ/LjwJiEiQ==} + /preact@10.19.4: + resolution: {integrity: sha512-dwaX5jAh0Ga8uENBX1hSOujmKWgx9RtL80KaKUFLc6jb4vCEAc3EeZ0rnQO/FO4VgjfPMfoLFWnNG8bHuZ9VLw==} /prettier@3.2.5: resolution: {integrity: sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==} @@ -3849,7 +3853,7 @@ packages: resolution: {integrity: sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.6 define-properties: 1.2.1 set-function-name: 2.0.1 dev: true @@ -3937,18 +3941,18 @@ packages: resolution: {integrity: sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg==} engines: {node: '>=0.4'} dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.3 + call-bind: 1.0.6 + get-intrinsic: 1.2.4 has-symbols: 1.0.3 isarray: 2.0.5 dev: true - /safe-regex-test@1.0.2: - resolution: {integrity: sha512-83S9w6eFq12BBIJYvjMux6/dkirb8+4zJRA9cxNBVb7Wq5fJBW+Xze48WqR8pxua7bDuAaaAxtVVd4Idjp1dBQ==} + /safe-regex-test@1.0.3: + resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.3 + call-bind: 1.0.6 + es-errors: 1.3.0 is-regex: 1.1.4 dev: true @@ -3970,13 +3974,14 @@ packages: lru-cache: 6.0.0 dev: true - /set-function-length@1.2.0: - resolution: {integrity: sha512-4DBHDoyHlM1IRPGYcoxexgh67y4ueR53FKV1yyxwFMY7aCqcN/38M1+SwZ/qJQ8iLv7+ck385ot4CcisOAPT9w==} + /set-function-length@1.2.1: + resolution: {integrity: sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g==} engines: {node: '>= 0.4'} dependencies: - define-data-property: 1.1.1 + define-data-property: 1.1.2 + es-errors: 1.3.0 function-bind: 1.1.2 - get-intrinsic: 1.2.3 + get-intrinsic: 1.2.4 gopd: 1.0.1 has-property-descriptors: 1.0.1 dev: true @@ -3985,7 +3990,7 @@ packages: resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==} engines: {node: '>= 0.4'} dependencies: - define-data-property: 1.1.1 + define-data-property: 1.1.2 functions-have-names: 1.2.3 has-property-descriptors: 1.0.1 dev: true @@ -4018,11 +4023,13 @@ packages: resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==} dev: true - /side-channel@1.0.4: - resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} + /side-channel@1.0.5: + resolution: {integrity: sha512-QcgiIWV4WV7qWExbN5llt6frQB/lBven9pqliLXfGPB+K9ZYXxDozp0wLkHS24kWCm+6YXH/f0HhnObZnZOBnQ==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.3 + call-bind: 1.0.6 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 object-inspect: 1.13.1 dev: true @@ -4158,7 +4165,7 @@ packages: resolution: {integrity: sha512-DOB27b/2UTTD+4myKUFh+/fXWcu/UDyASIXfg+7VzoCNNGOfWvoyU/x5pvVHr++ztyt/oSYI1BcWBBG/hmlNjA==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.6 define-properties: 1.2.1 es-abstract: 1.22.3 dev: true @@ -4167,7 +4174,7 @@ packages: resolution: {integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.6 define-properties: 1.2.1 es-abstract: 1.22.3 dev: true @@ -4175,7 +4182,7 @@ packages: /string.prototype.trimend@1.0.7: resolution: {integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.6 define-properties: 1.2.1 es-abstract: 1.22.3 dev: true @@ -4183,7 +4190,7 @@ packages: /string.prototype.trimstart@1.0.7: resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.6 define-properties: 1.2.1 es-abstract: 1.22.3 dev: true @@ -4313,12 +4320,12 @@ packages: engines: {node: '>=10'} dev: true - /typed-array-buffer@1.0.0: - resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==} + /typed-array-buffer@1.0.1: + resolution: {integrity: sha512-RSqu1UEuSlrBhHTWC8O9FnPjOduNs4M7rJ4pRKoEjtx1zUNOPN2sSXHLDX+Y2WPbHIxbvg4JFo2DNAEfPIKWoQ==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.3 + call-bind: 1.0.6 + es-errors: 1.3.0 is-typed-array: 1.1.13 dev: true @@ -4326,7 +4333,7 @@ packages: resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.6 for-each: 0.3.3 has-proto: 1.0.1 is-typed-array: 1.1.13 @@ -4337,7 +4344,7 @@ packages: engines: {node: '>= 0.4'} dependencies: available-typed-arrays: 1.0.6 - call-bind: 1.0.5 + call-bind: 1.0.6 for-each: 0.3.3 has-proto: 1.0.1 is-typed-array: 1.1.13 @@ -4346,7 +4353,7 @@ packages: /typed-array-length@1.0.4: resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.6 for-each: 0.3.3 is-typed-array: 1.1.13 dev: true @@ -4364,7 +4371,7 @@ packages: /unbox-primitive@1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.6 has-bigints: 1.0.2 has-symbols: 1.0.3 which-boxed-primitive: 1.0.2 @@ -4418,8 +4425,8 @@ packages: spdx-expression-parse: 3.0.1 dev: true - /vite@5.0.12(@types/node@20.11.16): - resolution: {integrity: sha512-4hsnEkG3q0N4Tzf1+t6NdN9dg/L3BM+q8SWgbSPnJvrgH2kgdyzfVJwbR1ic69/4uMJJ/3dqDZZE5/WwqW8U1w==} + /vite@5.1.0(@types/node@20.11.16): + resolution: {integrity: sha512-STmSFzhY4ljuhz14bg9LkMTk3d98IO6DIArnTY6MeBwiD1Za2StcQtz7fzOUnRCqrHSD5+OS2reg4HOz1eoLnw==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: @@ -4448,7 +4455,7 @@ packages: dependencies: '@types/node': 20.11.16 esbuild: 0.19.12 - postcss: 8.4.34 + postcss: 8.4.35 rollup: 4.9.6 optionalDependencies: fsevents: 2.3.3 @@ -4475,7 +4482,7 @@ packages: engines: {node: '>= 0.4'} dependencies: available-typed-arrays: 1.0.6 - call-bind: 1.0.5 + call-bind: 1.0.6 for-each: 0.3.3 gopd: 1.0.1 has-tostringtag: 1.0.2 @@ -4571,7 +4578,7 @@ packages: engines: {node: '>=10'} dev: true - /zustand@4.5.0(@types/react@18.2.54)(react@18.2.0): + /zustand@4.5.0(@types/react@18.2.55)(react@18.2.0): resolution: {integrity: sha512-zlVFqS5TQ21nwijjhJlx4f9iGrXSL0o/+Dpy4txAP22miJ8Ti6c1Ol1RLNN98BMib83lmDH/2KmLwaNXpjrO1A==} engines: {node: '>=12.7.0'} peerDependencies: @@ -4586,7 +4593,7 @@ packages: react: optional: true dependencies: - '@types/react': 18.2.54 + '@types/react': 18.2.55 react: 18.2.0 use-sync-external-store: 1.2.0(react@18.2.0) dev: false diff --git a/public/release_notes.html b/public/release_notes.html index 950063eb..8e412047 100644 --- a/public/release_notes.html +++ b/public/release_notes.html @@ -17,6 +17,10 @@

Chrome Shack Release Notes

+

Version 1.76

+
    +
  • Fixed: "Highlight New Posts" squashed another bug causing excessive highlighting due to invalid timestamp (WombatFromHell)
  • +

Version 1.75

  • Added: "Color Gauge" re-colors progress gauge bars on root posts based on time remaining (TroZ)
  • diff --git a/src/manifestv3.ffx.json b/src/manifestv3.ffx.json index 935db386..1160a67d 100644 --- a/src/manifestv3.ffx.json +++ b/src/manifestv3.ffx.json @@ -1,7 +1,7 @@ { "manifest_version": 3, "name": "Chrome Shack", - "version": "1.75", + "version": "1.76", "description": "Collection of scripts for Shacknews.", "browser_specific_settings": { "gecko": { From 454b8ba7f99bbea1ed0a90a84c75d85fa99be90f Mon Sep 17 00:00:00 2001 From: WombatFromHell Date: Mon, 12 Feb 2024 15:58:40 -0700 Subject: [PATCH 08/18] Update the cross-browser local settings storage limit --- src/core/settings.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/settings.ts b/src/core/settings.ts index 66d54391..63ab3ba4 100644 --- a/src/core/settings.ts +++ b/src/core/settings.ts @@ -25,7 +25,7 @@ export const setSetting = async (key: SettingKey, val: any) => { // Check each time we set a key that the val will fit within the storage limit // ... if we don't do this then the settings store can become corrupted // ... causing data loss of some kv-pairs. - const maxSize = 5000000; // the limit is 5MiB for chrome.storage.local + const maxSize = 10000000; // the limit is 10MiB for chrome.storage.local const _settings = await getSettings(); const _newVal = { [key]: val }; const _withVal = { ..._settings, ..._newVal }; From d34d88ef1db77f05973aac622efde9cb127aaee0 Mon Sep 17 00:00:00 2001 From: WombatFromHell Date: Mon, 12 Feb 2024 15:59:23 -0700 Subject: [PATCH 09/18] Refactored SentenceParser for readability --- src/core/common/sentence_parser.ts | 76 +++++++++++++++--------------- 1 file changed, 37 insertions(+), 39 deletions(-) diff --git a/src/core/common/sentence_parser.ts b/src/core/common/sentence_parser.ts index 1cdacd72..d41a7239 100644 --- a/src/core/common/sentence_parser.ts +++ b/src/core/common/sentence_parser.ts @@ -1,46 +1,44 @@ import { stripHtml, superTrim } from "./dom"; +const LINK_REGEX = /(.*?)([\n|\r]*?)<\/a>/gim; +const SPOILER_REGEX = /(|.|\r|\n)*?<\/span>/i; +const SENTENCE_REGEX = /.+?(!|\.(?!\w|\.|\])|\?|$)+/gm; + +const LINK_PLACEHOLDER = "%%link%%"; +const SPOILER_PLACEHOLDER = "%%spoiler%%"; + export const SentenceParser = { - parseIntoLines(html: string) { - let _html = html; - const LINK_PLACEHOLDER = "%%link%%"; - const SPOILER_PLACEHOLDER = "%%spoiler%%"; - // Extract all the links, store them in links[] and replace the link with a %%link%% placeholder in the post - const link_regex = new RegExp(/(.*?)([\n|\r]*?)<\/a>/gim); - const links = html.match(link_regex); - _html = html.replace(link_regex, LINK_PLACEHOLDER); - // Extract all the spoilers, store them in spoilers[] and replace the spoilers with a %%spoiler%% placeholder in the post - const spoiler_regex = new RegExp( - /(|.|\r|\n)*?<\/span>/i - ); - const spoilers = html.match(spoiler_regex); - _html = html.replace(spoiler_regex, SPOILER_PLACEHOLDER); - // remove the rest of the html from the post - const post = stripHtml(html); - // match a sentence as: - // 1. anything (non-greedy) - // 2. one or more punctuation (unless it is a . followed by a number, letter, another . or a ]), or the end of the line - const sentence_regex = new RegExp(/.+?(!|\.(?!\w|\.|\])|\?|$)+/gm); - const link_replace_regex = new RegExp(LINK_PLACEHOLDER, "i"); - const spoiler_replace_regex = new RegExp(SPOILER_PLACEHOLDER, "i"); - const sentences: string[] = []; - // Get sentences from paragraphs - const matches = post.match(sentence_regex); - for (let i = 0; i < matches.length; i++) { - const match = matches[i]; - let tmp = superTrim(match); - if (tmp?.length > 0) { - // replace placeholders with items - // do spoilers first, because spoilers could contain links! - while (tmp.indexOf(SPOILER_PLACEHOLDER) >= 0 && spoilers?.length > 0) - tmp = tmp.replace(spoiler_replace_regex, spoilers.shift()); - - while (tmp.indexOf(LINK_PLACEHOLDER) >= 0 && links?.length > 0) - tmp = tmp.replace(link_replace_regex, links.shift()); - - sentences.push(tmp); + extractElements(html: string, regex: RegExp): string[] { + return html.match(regex)!; + }, + + replacePlaceholders(text: string, placeholder: string, replacements: string[]): string { + return text.replace(new RegExp(placeholder, "gi"), () => replacements.shift() || ""); + }, + + cleanHtml(html: string): string { + return html.replace(LINK_REGEX, LINK_PLACEHOLDER).replace(SPOILER_REGEX, SPOILER_PLACEHOLDER); + }, + + processSentences(post: string, links: string[], spoilers: string[]): string[] { + return post.match(SENTENCE_REGEX)!.reduce((acc: string[], sentence: string) => { + const trimmedSentence = superTrim(sentence); + if (trimmedSentence) { + let processedSentence = this.replacePlaceholders(trimmedSentence, SPOILER_PLACEHOLDER, spoilers); + processedSentence = this.replacePlaceholders(processedSentence, LINK_PLACEHOLDER, links); + acc.push(processedSentence); } - } + return acc; + }, []); + }, + + parseIntoLines(html: string): string[] { + const links = this.extractElements(html, LINK_REGEX); + const spoilers = this.extractElements(html, SPOILER_REGEX); + const cleanedHtml = this.cleanHtml(html); + const post = stripHtml(cleanedHtml); + const sentences = this.processSentences(post, links, spoilers); + return sentences; }, }; From 8eecc6f984d23cd8be94b23ea26d712134eae293 Mon Sep 17 00:00:00 2001 From: WombatFromHell Date: Mon, 12 Feb 2024 20:50:16 -0700 Subject: [PATCH 10/18] Refactored to remove jQuery dependency in EmojiPoster --- src/builtin/emoji_poster.ts | 45 ++++++++++++++++++++++------------- src/core/observer_handlers.ts | 6 +++-- 2 files changed, 32 insertions(+), 19 deletions(-) diff --git a/src/builtin/emoji_poster.ts b/src/builtin/emoji_poster.ts index b6ebc7cb..450d9a49 100644 --- a/src/builtin/emoji_poster.ts +++ b/src/builtin/emoji_poster.ts @@ -1,9 +1,5 @@ -/*eslint no-control-regex: 0*/ -import jQuery from "jquery"; -import { parseToElement } from "../core/common/dom"; -import { processPostBoxEvent, submitFormEvent } from "../core/events"; - -const $ = jQuery; +import { elementIsVisible, parseToElement, scrollToElement } from "../core/common/dom"; +import { processPostBoxEvent, processReplyEvent, submitFormEvent } from "../core/events"; /* * Encodes string Astrals (Emoji's) into prefixed HTML entities to @@ -37,7 +33,7 @@ export const EmojiPoster = { _clonedPostBtn?.setAttribute("cloned", ""); _postBtn?.parentNode?.replaceChild(_clonedPostBtn, _postBtn); - const handleSubmit = (e: MouseEvent | Event) => { + const handleSubmitWrapper = (e: MouseEvent | Event) => { const this_elem = e.target as HTMLElement; const isSubmit = this_elem?.matches("#frm_submit"); const _postBox = document.getElementById("frm_body") as HTMLInputElement; @@ -48,11 +44,11 @@ export const EmojiPoster = { submitFormEvent.raise(e); _postBox.value = EmojiPoster.handleEncoding(_postBox.value); const result = EmojiPoster.handleSubmit(_postBox.value); - if (!result) document.removeEventListener("click", handleSubmit); + if (!result) document.removeEventListener("click", handleSubmitWrapper); } }; - document.removeEventListener("click", handleSubmit); - document.addEventListener("click", handleSubmit); + document.removeEventListener("click", handleSubmitWrapper); + document.addEventListener("click", handleSubmitWrapper); // educate the user on how to open the OS' Emoji Picker const _rulesParent = postbox?.querySelector("p.rules") as HTMLElement; @@ -62,17 +58,32 @@ export const EmojiPoster = { } }, + handleReplyAdded(args: PostEventArgs) { + const { post } = args || {}; + if (!post) return; + // scroll to the new reply similar to what the Chatty normally does + scrollToElement(post); + // cleanup after ourselves + processReplyEvent.removeHandler(EmojiPoster.handleReplyAdded); + }, + handleSubmit(postText: string) { - const $submitBtn = $("#frm_submit"); + const submitBtn = document.getElementById("frm_submit"); + const postForm = document.getElementById("postform") as HTMLFormElement; + if (!submitBtn || !postForm) return; + if (EmojiPoster.countText(postText) > 5 || EmojiPoster.countAstrals(postText).astralsCount > 0) { - // normal post (either a single astral or some text) - $submitBtn.attr("disabled", "disabled").css("color", "#E9E9DE"); - $("#postform").submit(); - $("body").trigger("chatty-new-post-reply", [$submitBtn.closest("div.root > ul > li").first().attr("id")]); + // Disable the submit button and change its color + submitBtn.setAttribute("disabled", "true"); + submitBtn.style.color = "#E9E9DE"; + // catch the reply-added mutation + processReplyEvent.addHandler(EmojiPoster.handleReplyAdded); + postForm.submit(); return false; } - // the server doesn't know that an astral is a single character - return alert("Please post something at least 5 characters long."); + + alert("Please post something at least 5 characters long."); + return true; }, handleEncoding(text: string) { diff --git a/src/core/observer_handlers.ts b/src/core/observer_handlers.ts index 6378c40c..0083c26b 100644 --- a/src/core/observer_handlers.ts +++ b/src/core/observer_handlers.ts @@ -106,14 +106,16 @@ export const handleRootAdded = async (mutation: RefreshMutation) => { const { postid, rootid, parentid } = mutation || {}; const root = document.querySelector(`li#item_${rootid}`); const post = document.querySelector(`li#item_${postid || parentid}`); - const reply = parentid && post?.querySelector("li.sel.last"); + const reply = parentid && post?.querySelector("li.sel"); const raisedArgs = { post: reply || post, postid: parentid || postid, root, rootid, } as PostEventArgs; - if (reply && root && !(await getEnabled("hide_tagging_buttons"))) processReplyEvent.raise(raisedArgs, mutation); + + if (reply && root) return processReplyEvent.raise(raisedArgs, mutation); + if (post && root) await handleTagsEvent(raisedArgs) .then((neArgs) => handlePostRefresh(neArgs, mutation)) From cb591ec1157bf92e9c73ba47ce885563e15baf42 Mon Sep 17 00:00:00 2001 From: WombatFromHell Date: Mon, 12 Feb 2024 20:59:31 -0700 Subject: [PATCH 11/18] Refactored DOM helpers to remove jQuery dependency --- README.md | 1 - package.json | 7 +- pnpm-lock.yaml | 234 ++++--- public/ThirdPartyLicenses.txt | 1127 +++++++++++++++++++-------------- src/core/common/dom.ts | 54 +- 5 files changed, 793 insertions(+), 630 deletions(-) diff --git a/README.md b/README.md index d19ffec5..557529d6 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,6 @@ NOTE: See the `ThirdPartyLicenses.txt` in the `public/` folder that is generated - [Preact](https://github.com/preactjs/preact) - [Embla](https://github.com/davidcetinkaya/embla-carousel) -- [jQuery](https://github.com/jquery/jquery) - [DOMPurify](https://github.com/cure53/DOMPurify) - [ts-debounce](https://github.com/chodorowicz/ts-debounce) - [react-fontawesome](https://github.com/FortAwesome/react-fontawesome) diff --git a/package.json b/package.json index ab2d0aad..cb61ef3a 100644 --- a/package.json +++ b/package.json @@ -36,7 +36,6 @@ "dompurify": "^3.0.8", "embla-carousel-react": "8.0.0-rc19", "html-react-parser": "^4.2.10", - "jquery": "^3.7.1", "lodash.isequal": "^4.5.0", "lz-string": "^1.5.0", "preact": "^10.19.4", @@ -55,11 +54,11 @@ "@types/dompurify": "^3.0.5", "@types/jquery": "^3.5.29", "@types/lodash.isequal": "^4.5.8", - "@types/node": "^20.11.16", + "@types/node": "^20.11.17", "@types/react": "^18.2.55", "@types/react-dom": "^18.2.19", "adm-zip": "^0.5.10", - "dotenv": "^16.4.1", + "dotenv": "^16.4.3", "embla-carousel": "8.0.0-rc19", "glob": "^10.3.10", "jest": "^29.7.0", @@ -67,6 +66,6 @@ "npm-run-all": "^4.1.5", "prettier": "^3.2.5", "typescript": "^5.3.3", - "vite": "^5.1.0" + "vite": "^5.1.1" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 662d52d8..cb1fd112 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -26,9 +26,6 @@ dependencies: html-react-parser: specifier: ^4.2.10 version: 4.2.10(react@18.2.0) - jquery: - specifier: ^3.7.1 - version: 3.7.1 lodash.isequal: specifier: ^4.5.0 version: 4.5.0 @@ -66,7 +63,7 @@ devDependencies: version: 1.40.1 '@preact/preset-vite': specifier: ^2.8.1 - version: 2.8.1(@babel/core@7.23.9)(preact@10.19.4)(vite@5.1.0) + version: 2.8.1(@babel/core@7.23.9)(preact@10.19.4)(vite@5.1.1) '@types/chrome': specifier: ^0.0.246 version: 0.0.246 @@ -80,8 +77,8 @@ devDependencies: specifier: ^4.5.8 version: 4.5.8 '@types/node': - specifier: ^20.11.16 - version: 20.11.16 + specifier: ^20.11.17 + version: 20.11.17 '@types/react': specifier: ^18.2.55 version: 18.2.55 @@ -92,8 +89,8 @@ devDependencies: specifier: ^0.5.10 version: 0.5.10 dotenv: - specifier: ^16.4.1 - version: 16.4.1 + specifier: ^16.4.3 + version: 16.4.3 embla-carousel: specifier: 8.0.0-rc19 version: 8.0.0-rc19 @@ -102,7 +99,7 @@ devDependencies: version: 10.3.10 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@20.11.16) + version: 29.7.0(@types/node@20.11.17) license-checker: specifier: ^25.0.1 version: 25.0.1 @@ -116,8 +113,8 @@ devDependencies: specifier: ^5.3.3 version: 5.3.3 vite: - specifier: ^5.1.0 - version: 5.1.0(@types/node@20.11.16) + specifier: ^5.1.1 + version: 5.1.1(@types/node@20.11.17) packages: @@ -882,7 +879,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 20.11.16 + '@types/node': 20.11.17 chalk: 4.1.2 jest-message-util: 29.7.0 jest-util: 29.7.0 @@ -903,14 +900,14 @@ packages: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.11.16 + '@types/node': 20.11.17 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 3.9.0 exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@20.11.16) + jest-config: 29.7.0(@types/node@20.11.17) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -938,7 +935,7 @@ packages: dependencies: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.11.16 + '@types/node': 20.11.17 jest-mock: 29.7.0 dev: true @@ -965,7 +962,7 @@ packages: dependencies: '@jest/types': 29.6.3 '@sinonjs/fake-timers': 10.3.0 - '@types/node': 20.11.16 + '@types/node': 20.11.17 jest-message-util: 29.7.0 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -998,7 +995,7 @@ packages: '@jest/transform': 29.7.0 '@jest/types': 29.6.3 '@jridgewell/trace-mapping': 0.3.22 - '@types/node': 20.11.16 + '@types/node': 20.11.17 chalk: 4.1.2 collect-v8-coverage: 1.0.2 exit: 0.1.2 @@ -1086,7 +1083,7 @@ packages: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 20.11.16 + '@types/node': 20.11.17 '@types/yargs': 17.0.32 chalk: 4.1.2 dev: true @@ -1157,7 +1154,7 @@ packages: playwright: 1.40.1 dev: true - /@preact/preset-vite@2.8.1(@babel/core@7.23.9)(preact@10.19.4)(vite@5.1.0): + /@preact/preset-vite@2.8.1(@babel/core@7.23.9)(preact@10.19.4)(vite@5.1.1): resolution: {integrity: sha512-a9KV4opdj17X2gOFuGup0aE+sXYABX/tJi/QDptOrleX4FlnoZgDWvz45tHOdVfrZX+3uvVsIYPHxRsTerkDNA==} peerDependencies: '@babel/core': 7.x @@ -1166,7 +1163,7 @@ packages: '@babel/core': 7.23.9 '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.23.9) '@babel/plugin-transform-react-jsx-development': 7.22.5(@babel/core@7.23.9) - '@prefresh/vite': 2.4.5(preact@10.19.4)(vite@5.1.0) + '@prefresh/vite': 2.4.5(preact@10.19.4)(vite@5.1.1) '@rollup/pluginutils': 4.2.1 babel-plugin-transform-hook-names: 1.0.2(@babel/core@7.23.9) debug: 4.3.4 @@ -1174,7 +1171,7 @@ packages: magic-string: 0.30.5 node-html-parser: 6.1.12 resolve: 1.22.8 - vite: 5.1.0(@types/node@20.11.16) + vite: 5.1.1(@types/node@20.11.17) transitivePeerDependencies: - preact - supports-color @@ -1196,7 +1193,7 @@ packages: resolution: {integrity: sha512-KtC/fZw+oqtwOLUFM9UtiitB0JsVX0zLKNyRTA332sqREqSALIIQQxdUCS1P3xR/jT1e2e8/5rwH6gdcMLEmsQ==} dev: true - /@prefresh/vite@2.4.5(preact@10.19.4)(vite@5.1.0): + /@prefresh/vite@2.4.5(preact@10.19.4)(vite@5.1.1): resolution: {integrity: sha512-iForDVJ2M8gQYnm5pHumvTEJjGGc7YNYC0GVKnHFL+GvFfKHfH9Rpq67nUAzNbjuLEpqEOUuQVQajMazWu2ZNQ==} peerDependencies: preact: ^10.4.0 @@ -1208,7 +1205,7 @@ packages: '@prefresh/utils': 1.2.0 '@rollup/pluginutils': 4.2.1 preact: 10.19.4 - vite: 5.1.0(@types/node@20.11.16) + vite: 5.1.1(@types/node@20.11.17) transitivePeerDependencies: - supports-color dev: true @@ -1221,104 +1218,104 @@ packages: picomatch: 2.3.1 dev: true - /@rollup/rollup-android-arm-eabi@4.9.6: - resolution: {integrity: sha512-MVNXSSYN6QXOulbHpLMKYi60ppyO13W9my1qogeiAqtjb2yR4LSmfU2+POvDkLzhjYLXz9Rf9+9a3zFHW1Lecg==} + /@rollup/rollup-android-arm-eabi@4.10.0: + resolution: {integrity: sha512-/MeDQmcD96nVoRumKUljsYOLqfv1YFJps+0pTrb2Z9Nl/w5qNUysMaWQsrd1mvAlNT4yza1iVyIu4Q4AgF6V3A==} cpu: [arm] os: [android] requiresBuild: true dev: true optional: true - /@rollup/rollup-android-arm64@4.9.6: - resolution: {integrity: sha512-T14aNLpqJ5wzKNf5jEDpv5zgyIqcpn1MlwCrUXLrwoADr2RkWA0vOWP4XxbO9aiO3dvMCQICZdKeDrFl7UMClw==} + /@rollup/rollup-android-arm64@4.10.0: + resolution: {integrity: sha512-lvu0jK97mZDJdpZKDnZI93I0Om8lSDaiPx3OiCk0RXn3E8CMPJNS/wxjAvSJJzhhZpfjXsjLWL8LnS6qET4VNQ==} cpu: [arm64] os: [android] requiresBuild: true dev: true optional: true - /@rollup/rollup-darwin-arm64@4.9.6: - resolution: {integrity: sha512-CqNNAyhRkTbo8VVZ5R85X73H3R5NX9ONnKbXuHisGWC0qRbTTxnF1U4V9NafzJbgGM0sHZpdO83pLPzq8uOZFw==} + /@rollup/rollup-darwin-arm64@4.10.0: + resolution: {integrity: sha512-uFpayx8I8tyOvDkD7X6n0PriDRWxcqEjqgtlxnUA/G9oS93ur9aZ8c8BEpzFmsed1TH5WZNG5IONB8IiW90TQg==} cpu: [arm64] os: [darwin] requiresBuild: true dev: true optional: true - /@rollup/rollup-darwin-x64@4.9.6: - resolution: {integrity: sha512-zRDtdJuRvA1dc9Mp6BWYqAsU5oeLixdfUvkTHuiYOHwqYuQ4YgSmi6+/lPvSsqc/I0Omw3DdICx4Tfacdzmhog==} + /@rollup/rollup-darwin-x64@4.10.0: + resolution: {integrity: sha512-nIdCX03qFKoR/MwQegQBK+qZoSpO3LESurVAC6s6jazLA1Mpmgzo3Nj3H1vydXp/JM29bkCiuF7tDuToj4+U9Q==} cpu: [x64] os: [darwin] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-arm-gnueabihf@4.9.6: - resolution: {integrity: sha512-oNk8YXDDnNyG4qlNb6is1ojTOGL/tRhbbKeE/YuccItzerEZT68Z9gHrY3ROh7axDc974+zYAPxK5SH0j/G+QQ==} + /@rollup/rollup-linux-arm-gnueabihf@4.10.0: + resolution: {integrity: sha512-Fz7a+y5sYhYZMQFRkOyCs4PLhICAnxRX/GnWYReaAoruUzuRtcf+Qnw+T0CoAWbHCuz2gBUwmWnUgQ67fb3FYw==} cpu: [arm] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-arm64-gnu@4.9.6: - resolution: {integrity: sha512-Z3O60yxPtuCYobrtzjo0wlmvDdx2qZfeAWTyfOjEDqd08kthDKexLpV97KfAeUXPosENKd8uyJMRDfFMxcYkDQ==} + /@rollup/rollup-linux-arm64-gnu@4.10.0: + resolution: {integrity: sha512-yPtF9jIix88orwfTi0lJiqINnlWo6p93MtZEoaehZnmCzEmLL0eqjA3eGVeyQhMtxdV+Mlsgfwhh0+M/k1/V7Q==} cpu: [arm64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-arm64-musl@4.9.6: - resolution: {integrity: sha512-gpiG0qQJNdYEVad+1iAsGAbgAnZ8j07FapmnIAQgODKcOTjLEWM9sRb+MbQyVsYCnA0Im6M6QIq6ax7liws6eQ==} + /@rollup/rollup-linux-arm64-musl@4.10.0: + resolution: {integrity: sha512-9GW9yA30ib+vfFiwjX+N7PnjTnCMiUffhWj4vkG4ukYv1kJ4T9gHNg8zw+ChsOccM27G9yXrEtMScf1LaCuoWQ==} cpu: [arm64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-riscv64-gnu@4.9.6: - resolution: {integrity: sha512-+uCOcvVmFUYvVDr27aiyun9WgZk0tXe7ThuzoUTAukZJOwS5MrGbmSlNOhx1j80GdpqbOty05XqSl5w4dQvcOA==} + /@rollup/rollup-linux-riscv64-gnu@4.10.0: + resolution: {integrity: sha512-X1ES+V4bMq2ws5fF4zHornxebNxMXye0ZZjUrzOrf7UMx1d6wMQtfcchZ8SqUnQPPHdOyOLW6fTcUiFgHFadRA==} cpu: [riscv64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-x64-gnu@4.9.6: - resolution: {integrity: sha512-HUNqM32dGzfBKuaDUBqFB7tP6VMN74eLZ33Q9Y1TBqRDn+qDonkAUyKWwF9BR9unV7QUzffLnz9GrnKvMqC/fw==} + /@rollup/rollup-linux-x64-gnu@4.10.0: + resolution: {integrity: sha512-w/5OpT2EnI/Xvypw4FIhV34jmNqU5PZjZue2l2Y3ty1Ootm3SqhI+AmfhlUYGBTd9JnpneZCDnt3uNOiOBkMyw==} cpu: [x64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-x64-musl@4.9.6: - resolution: {integrity: sha512-ch7M+9Tr5R4FK40FHQk8VnML0Szi2KRujUgHXd/HjuH9ifH72GUmw6lStZBo3c3GB82vHa0ZoUfjfcM7JiiMrQ==} + /@rollup/rollup-linux-x64-musl@4.10.0: + resolution: {integrity: sha512-q/meftEe3QlwQiGYxD9rWwB21DoKQ9Q8wA40of/of6yGHhZuGfZO0c3WYkN9dNlopHlNT3mf5BPsUSxoPuVQaw==} cpu: [x64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-win32-arm64-msvc@4.9.6: - resolution: {integrity: sha512-VD6qnR99dhmTQ1mJhIzXsRcTBvTjbfbGGwKAHcu+52cVl15AC/kplkhxzW/uT0Xl62Y/meBKDZvoJSJN+vTeGA==} + /@rollup/rollup-win32-arm64-msvc@4.10.0: + resolution: {integrity: sha512-NrR6667wlUfP0BHaEIKgYM/2va+Oj+RjZSASbBMnszM9k+1AmliRjHc3lJIiOehtSSjqYiO7R6KLNrWOX+YNSQ==} cpu: [arm64] os: [win32] requiresBuild: true dev: true optional: true - /@rollup/rollup-win32-ia32-msvc@4.9.6: - resolution: {integrity: sha512-J9AFDq/xiRI58eR2NIDfyVmTYGyIZmRcvcAoJ48oDld/NTR8wyiPUu2X/v1navJ+N/FGg68LEbX3Ejd6l8B7MQ==} + /@rollup/rollup-win32-ia32-msvc@4.10.0: + resolution: {integrity: sha512-FV0Tpt84LPYDduIDcXvEC7HKtyXxdvhdAOvOeWMWbQNulxViH2O07QXkT/FffX4FqEI02jEbCJbr+YcuKdyyMg==} cpu: [ia32] os: [win32] requiresBuild: true dev: true optional: true - /@rollup/rollup-win32-x64-msvc@4.9.6: - resolution: {integrity: sha512-jqzNLhNDvIZOrt69Ce4UjGRpXJBzhUBzawMwnaDAwyHriki3XollsewxWzOzz+4yOFDkuJHtTsZFwMxhYJWmLQ==} + /@rollup/rollup-win32-x64-msvc@4.10.0: + resolution: {integrity: sha512-OZoJd+o5TaTSQeFFQ6WjFCiltiYVjIdsXxwu/XZ8qRpsvMQr4UsVrE5UyT9RIvsnuF47DqkJKhhVZ2Q9YW9IpQ==} cpu: [x64] os: [win32] requiresBuild: true @@ -1400,7 +1397,7 @@ packages: /@types/graceful-fs@4.1.9: resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} dependencies: - '@types/node': 20.11.16 + '@types/node': 20.11.17 dev: true /@types/har-format@1.2.15: @@ -1439,8 +1436,8 @@ packages: resolution: {integrity: sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ==} dev: true - /@types/node@20.11.16: - resolution: {integrity: sha512-gKb0enTmRCzXSSUJDq6/sPcqrfCv2mkkG6Jt/clpn5eiCbKTY+SgZUxo+p8ZKMof5dCp9vHQUAB7wOUTod22wQ==} + /@types/node@20.11.17: + resolution: {integrity: sha512-QmgQZGWu1Yw9TDyAP9ZzpFJKynYNeOvwMJmaxABfieQoVoiVOS6MN1WSpqpRcbeA5+RW82kraAVxCCJg+780Qw==} dependencies: undici-types: 5.26.5 dev: true @@ -1708,8 +1705,8 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001585 - electron-to-chromium: 1.4.661 + caniuse-lite: 1.0.30001587 + electron-to-chromium: 1.4.667 node-releases: 2.0.14 update-browserslist-db: 1.0.13(browserslist@4.22.3) dev: true @@ -1749,8 +1746,8 @@ packages: engines: {node: '>=10'} dev: true - /caniuse-lite@1.0.30001585: - resolution: {integrity: sha512-yr2BWR1yLXQ8fMpdS/4ZZXpseBgE7o4g41x3a6AJOqZuOi+iE/WdJYAuZ6Y95i4Ohd2Y+9MzIWRR+uGABH4s3Q==} + /caniuse-lite@1.0.30001587: + resolution: {integrity: sha512-HMFNotUmLXn71BQxg8cijvqxnIAofforZOwGsxyXJ0qugTdspUF4sPSJ2vhgprHCB996tIDzEq1ubumPDV8ULA==} dev: true /chalk@2.4.2: @@ -1875,7 +1872,7 @@ packages: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} dev: true - /create-jest@29.7.0(@types/node@20.11.16): + /create-jest@29.7.0(@types/node@20.11.17): resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -1884,7 +1881,7 @@ packages: chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@20.11.16) + jest-config: 29.7.0(@types/node@20.11.17) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -1989,8 +1986,8 @@ packages: engines: {node: '>=0.10.0'} dev: true - /define-data-property@1.1.2: - resolution: {integrity: sha512-SRtsSqsDbgpJBbW3pABMCOt6rQyeM8s8RiyeSN8jYG8sYmt/kGJejbydttUsnDs1tadr19tvhT4ShwMyoqAm4g==} + /define-data-property@1.1.3: + resolution: {integrity: sha512-h3GBouC+RPtNX2N0hHVLo2ZwPYurq8mLmXpOLTsw71gr7lHt5VaI4vVkDUNOfiWmm48JEXe3VM7PmLX45AMmmg==} engines: {node: '>= 0.4'} dependencies: es-errors: 1.3.0 @@ -2003,7 +2000,7 @@ packages: resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} engines: {node: '>= 0.4'} dependencies: - define-data-property: 1.1.2 + define-data-property: 1.1.3 has-property-descriptors: 1.0.1 object-keys: 1.1.1 dev: true @@ -2052,8 +2049,8 @@ packages: domelementtype: 2.3.0 domhandler: 5.0.3 - /dotenv@16.4.1: - resolution: {integrity: sha512-CjA3y+Dr3FyFDOAMnxZEGtnW9KBR2M0JvvUtXNW+dYJL5ROWxP9DUHCwgFqpMk0OXCc0ljhaNTr2w/kutYIcHQ==} + /dotenv@16.4.3: + resolution: {integrity: sha512-II98GFrje5psQTSve0E7bnwMFybNLqT8Vu8JIFWRjsE3khyNUm/loZupuy5DVzG2IXf/ysxvrixYOQnM6mjD3A==} engines: {node: '>=12'} dev: true @@ -2061,8 +2058,8 @@ packages: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} dev: true - /electron-to-chromium@1.4.661: - resolution: {integrity: sha512-AFg4wDHSOk5F+zA8aR+SVIOabu7m0e7BiJnigCvPXzIGy731XENw/lmNxTySpVFtkFEy+eyt4oHhh5FF3NjQNw==} + /electron-to-chromium@1.4.667: + resolution: {integrity: sha512-66L3pLlWhTNVUhnmSA5+qDM3fwnXsM6KAqE36e2w4KN0g6pkEtlT5bs41FQtQwVwKnfhNBXiWRLPs30HSxd7Kw==} dev: true /embla-carousel-react@8.0.0-rc19(react@18.2.0): @@ -2127,7 +2124,7 @@ packages: has-property-descriptors: 1.0.1 has-proto: 1.0.1 has-symbols: 1.0.3 - hasown: 2.0.0 + hasown: 2.0.1 internal-slot: 1.0.7 is-array-buffer: 3.0.4 is-callable: 1.2.7 @@ -2140,7 +2137,7 @@ packages: object-inspect: 1.13.1 object-keys: 1.1.1 object.assign: 4.1.5 - regexp.prototype.flags: 1.5.1 + regexp.prototype.flags: 1.5.2 safe-array-concat: 1.1.0 safe-regex-test: 1.0.3 string.prototype.trim: 1.2.8 @@ -2169,7 +2166,7 @@ packages: dependencies: get-intrinsic: 1.2.4 has-tostringtag: 1.0.2 - hasown: 2.0.0 + hasown: 2.0.1 dev: true /es-to-primitive@1.2.1: @@ -2389,7 +2386,7 @@ packages: function-bind: 1.1.2 has-proto: 1.0.1 has-symbols: 1.0.3 - hasown: 2.0.0 + hasown: 2.0.1 dev: true /get-package-type@0.1.0: @@ -2500,8 +2497,8 @@ packages: has-symbols: 1.0.3 dev: true - /hasown@2.0.0: - resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} + /hasown@2.0.1: + resolution: {integrity: sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==} engines: {node: '>= 0.4'} dependencies: function-bind: 1.1.2 @@ -2596,7 +2593,7 @@ packages: engines: {node: '>= 0.4'} dependencies: es-errors: 1.3.0 - hasown: 2.0.0 + hasown: 2.0.1 side-channel: 1.0.5 dev: true @@ -2634,7 +2631,7 @@ packages: /is-core-module@2.13.1: resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} dependencies: - hasown: 2.0.0 + hasown: 2.0.1 dev: true /is-date-object@1.0.5: @@ -2822,7 +2819,7 @@ packages: '@jest/expect': 29.7.0 '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.11.16 + '@types/node': 20.11.17 chalk: 4.1.2 co: 4.6.0 dedent: 1.5.1 @@ -2843,7 +2840,7 @@ packages: - supports-color dev: true - /jest-cli@29.7.0(@types/node@20.11.16): + /jest-cli@29.7.0(@types/node@20.11.17): resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -2857,10 +2854,10 @@ packages: '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 chalk: 4.1.2 - create-jest: 29.7.0(@types/node@20.11.16) + create-jest: 29.7.0(@types/node@20.11.17) exit: 0.1.2 import-local: 3.1.0 - jest-config: 29.7.0(@types/node@20.11.16) + jest-config: 29.7.0(@types/node@20.11.17) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.2 @@ -2871,7 +2868,7 @@ packages: - ts-node dev: true - /jest-config@29.7.0(@types/node@20.11.16): + /jest-config@29.7.0(@types/node@20.11.17): resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -2886,7 +2883,7 @@ packages: '@babel/core': 7.23.9 '@jest/test-sequencer': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.11.16 + '@types/node': 20.11.17 babel-jest: 29.7.0(@babel/core@7.23.9) chalk: 4.1.2 ci-info: 3.9.0 @@ -2946,7 +2943,7 @@ packages: '@jest/environment': 29.7.0 '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.11.16 + '@types/node': 20.11.17 jest-mock: 29.7.0 jest-util: 29.7.0 dev: true @@ -2962,7 +2959,7 @@ packages: dependencies: '@jest/types': 29.6.3 '@types/graceful-fs': 4.1.9 - '@types/node': 20.11.16 + '@types/node': 20.11.17 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -3013,7 +3010,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 20.11.16 + '@types/node': 20.11.17 jest-util: 29.7.0 dev: true @@ -3068,7 +3065,7 @@ packages: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.11.16 + '@types/node': 20.11.17 chalk: 4.1.2 emittery: 0.13.1 graceful-fs: 4.2.11 @@ -3099,7 +3096,7 @@ packages: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.11.16 + '@types/node': 20.11.17 chalk: 4.1.2 cjs-module-lexer: 1.2.3 collect-v8-coverage: 1.0.2 @@ -3151,7 +3148,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 20.11.16 + '@types/node': 20.11.17 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 @@ -3176,7 +3173,7 @@ packages: dependencies: '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.11.16 + '@types/node': 20.11.17 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 @@ -3188,13 +3185,13 @@ packages: resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@types/node': 20.11.16 + '@types/node': 20.11.17 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 dev: true - /jest@29.7.0(@types/node@20.11.16): + /jest@29.7.0(@types/node@20.11.17): resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -3207,7 +3204,7 @@ packages: '@jest/core': 29.7.0 '@jest/types': 29.6.3 import-local: 3.1.0 - jest-cli: 29.7.0(@types/node@20.11.16) + jest-cli: 29.7.0(@types/node@20.11.17) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -3215,10 +3212,6 @@ packages: - ts-node dev: true - /jquery@3.7.1: - resolution: {integrity: sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==} - dev: false - /js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -3849,12 +3842,13 @@ packages: once: 1.4.0 dev: true - /regexp.prototype.flags@1.5.1: - resolution: {integrity: sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==} + /regexp.prototype.flags@1.5.2: + resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.6 define-properties: 1.2.1 + es-errors: 1.3.0 set-function-name: 2.0.1 dev: true @@ -3902,26 +3896,26 @@ packages: fsevents: 2.3.3 dev: true - /rollup@4.9.6: - resolution: {integrity: sha512-05lzkCS2uASX0CiLFybYfVkwNbKZG5NFQ6Go0VWyogFTXXbR039UVsegViTntkk4OglHBdF54ccApXRRuXRbsg==} + /rollup@4.10.0: + resolution: {integrity: sha512-t2v9G2AKxcQ8yrG+WGxctBes1AomT0M4ND7jTFBCVPXQ/WFTvNSefIrNSmLKhIKBrvN8SG+CZslimJcT3W2u2g==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true dependencies: '@types/estree': 1.0.5 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.9.6 - '@rollup/rollup-android-arm64': 4.9.6 - '@rollup/rollup-darwin-arm64': 4.9.6 - '@rollup/rollup-darwin-x64': 4.9.6 - '@rollup/rollup-linux-arm-gnueabihf': 4.9.6 - '@rollup/rollup-linux-arm64-gnu': 4.9.6 - '@rollup/rollup-linux-arm64-musl': 4.9.6 - '@rollup/rollup-linux-riscv64-gnu': 4.9.6 - '@rollup/rollup-linux-x64-gnu': 4.9.6 - '@rollup/rollup-linux-x64-musl': 4.9.6 - '@rollup/rollup-win32-arm64-msvc': 4.9.6 - '@rollup/rollup-win32-ia32-msvc': 4.9.6 - '@rollup/rollup-win32-x64-msvc': 4.9.6 + '@rollup/rollup-android-arm-eabi': 4.10.0 + '@rollup/rollup-android-arm64': 4.10.0 + '@rollup/rollup-darwin-arm64': 4.10.0 + '@rollup/rollup-darwin-x64': 4.10.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.10.0 + '@rollup/rollup-linux-arm64-gnu': 4.10.0 + '@rollup/rollup-linux-arm64-musl': 4.10.0 + '@rollup/rollup-linux-riscv64-gnu': 4.10.0 + '@rollup/rollup-linux-x64-gnu': 4.10.0 + '@rollup/rollup-linux-x64-musl': 4.10.0 + '@rollup/rollup-win32-arm64-msvc': 4.10.0 + '@rollup/rollup-win32-ia32-msvc': 4.10.0 + '@rollup/rollup-win32-x64-msvc': 4.10.0 fsevents: 2.3.3 dev: true @@ -3978,7 +3972,7 @@ packages: resolution: {integrity: sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g==} engines: {node: '>= 0.4'} dependencies: - define-data-property: 1.1.2 + define-data-property: 1.1.3 es-errors: 1.3.0 function-bind: 1.1.2 get-intrinsic: 1.2.4 @@ -3990,7 +3984,7 @@ packages: resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==} engines: {node: '>= 0.4'} dependencies: - define-data-property: 1.1.2 + define-data-property: 1.1.3 functions-have-names: 1.2.3 has-property-descriptors: 1.0.1 dev: true @@ -4089,7 +4083,7 @@ packages: resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} dependencies: spdx-expression-parse: 3.0.1 - spdx-license-ids: 3.0.16 + spdx-license-ids: 3.0.17 dev: true /spdx-exceptions@2.4.0: @@ -4100,11 +4094,11 @@ packages: resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} dependencies: spdx-exceptions: 2.4.0 - spdx-license-ids: 3.0.16 + spdx-license-ids: 3.0.17 dev: true - /spdx-license-ids@3.0.16: - resolution: {integrity: sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==} + /spdx-license-ids@3.0.17: + resolution: {integrity: sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg==} dev: true /spdx-ranges@2.1.1: @@ -4425,8 +4419,8 @@ packages: spdx-expression-parse: 3.0.1 dev: true - /vite@5.1.0(@types/node@20.11.16): - resolution: {integrity: sha512-STmSFzhY4ljuhz14bg9LkMTk3d98IO6DIArnTY6MeBwiD1Za2StcQtz7fzOUnRCqrHSD5+OS2reg4HOz1eoLnw==} + /vite@5.1.1(@types/node@20.11.17): + resolution: {integrity: sha512-wclpAgY3F1tR7t9LL5CcHC41YPkQIpKUGeIuT8MdNwNZr6OqOTLs7JX5vIHAtzqLWXts0T+GDrh9pN2arneKqg==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: @@ -4453,10 +4447,10 @@ packages: terser: optional: true dependencies: - '@types/node': 20.11.16 + '@types/node': 20.11.17 esbuild: 0.19.12 postcss: 8.4.35 - rollup: 4.9.6 + rollup: 4.10.0 optionalDependencies: fsevents: 2.3.3 dev: true diff --git a/public/ThirdPartyLicenses.txt b/public/ThirdPartyLicenses.txt index 95b6f6b1..bd6f556c 100644 --- a/public/ThirdPartyLicenses.txt +++ b/public/ThirdPartyLicenses.txt @@ -1,4 +1,4 @@ -Package: @biomejs/biome@1.4.1 +Package: @biomejs/biome@1.5.3 License: MIT OR Apache-2.0 Apache License @@ -189,7 +189,7 @@ APPENDIX: How to apply the Apache License to your work. same "printed page" as the copyright notice for easier identification within third-party archives. -Copyright [yyyy] [name of copyright owner] +Copyright (c) 2023 Biome Developers and Contributors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -203,7 +203,8 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. -Package: @crxjs/vite-plugin@2.0.0-beta.21 + +Package: @crxjs/vite-plugin@2.0.0-beta.23 License: MIT MIT License @@ -969,7 +970,7 @@ License: Apache-2.0 limitations under the License. -Package: @preact/preset-vite@2.7.0 +Package: @preact/preset-vite@2.8.1 License: MIT MIT License @@ -1073,7 +1074,33 @@ License: MIT SOFTWARE -Package: @types/node@20.10.4 +Package: @types/lodash.isequal@4.5.8 +License: MIT + + MIT License + + Copyright (c) Microsoft Corporation. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE + + +Package: @types/node@20.11.17 License: MIT MIT License @@ -1099,7 +1126,7 @@ License: MIT SOFTWARE -Package: @types/react-dom@18.2.17 +Package: @types/react-dom@18.2.19 License: MIT MIT License @@ -1125,7 +1152,7 @@ License: MIT SOFTWARE -Package: @types/react@18.2.42 +Package: @types/react@18.2.55 License: MIT MIT License @@ -1177,7 +1204,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -Package: chromeshack@1.74.0 +Package: chromeshack@1.76.0 License: MIT* Copyright (c) 2009 Adam Hughes @@ -1201,7 +1228,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -Package: dompurify@3.0.6 +Package: dompurify@3.0.8 License: (MPL-2.0 OR Apache-2.0) DOMPurify @@ -1774,7 +1801,7 @@ Exhibit B - “Incompatible With Secondary Licenses” Notice -Package: dotenv@16.3.1 +Package: dotenv@16.4.3 License: BSD-2-Clause Copyright (c) 2015, Scott Motte @@ -1802,7 +1829,7 @@ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -Package: embla-carousel-react@8.0.0-rc14 +Package: embla-carousel-react@8.0.0-rc19 License: MIT
    @@ -1872,10 +1899,200 @@ License: MIT   + +   + + + +   + + + +

    + + +
    + + + +
    + +
    + +

    Special Thanks

    +
    +

    + Massive thanks to gunnarx2 for creating the useEmblaCarousel hook and to xiel for creating the Embla Carousel Wheel Gestures package. +

    +

    + + +

    +
    + +
    + +

    Open Source

    + +

    + Copyright © 2019-present, David Jerleke.
    + Embla is MIT licensed 💖. +

    + +

    + · · · +

    + +

    + Thanks BrowserStack. +

    + +

    + + + +

    + + +Package: embla-carousel@8.0.0-rc19 +License: MIT + +
    +
    +

    + Embla Carousel + +

    + +

    + + + + + + +

    + + +

    Embla Carousel

    +
    + +

    + Embla Carousel is a bare bones carousel library with great fluid motion and awesome swipe precision. It's library agnostic, dependency free and 100% open source. +

    + +
    + +

    + +  Examples  + +

    + +

    + +  Generator  + +

    + +

    + +  Installation  + +

    +
    + +
    + +
    + +

    Ready for

    +
    + +

    + + + +   + + + +   + + + +   + + +   +   + + +

    @@ -1889,30 +2106,57 @@ License: MIT Thank you to all contributors for making Embla Carousel awesome! Contributions are welcome.

    - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    @@ -1955,6 +2199,26 @@ License: MIT

    +Package: glob@10.3.10 +License: ISC + +The ISC License + +Copyright (c) 2009-2023 Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + Package: html-react-parser@4.2.10 License: MIT @@ -2008,31 +2272,6 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -Package: jquery@3.7.1 -License: MIT - -Copyright OpenJS Foundation and other contributors, https://openjsf.org/ - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - Package: license-checker@25.0.1 License: BSD-3-Clause @@ -2062,6 +2301,58 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +Package: lodash.isequal@4.5.0 +License: MIT + +Copyright JS Foundation and other contributors + +Based on Underscore.js, copyright Jeremy Ashkenas, +DocumentCloud and Investigative Reporters & Editors + +This software consists of voluntary contributions made by many +individuals. For exact contribution history, see the revision history +available at https://github.com/lodash/lodash + +The following license applies to all parts of this software except as +documented below: + +==== + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +==== + +Copyright and related rights for sample code are waived via CC0. Sample +code is defined as all source code displayed within the prose of the +documentation. + +CC0: http://creativecommons.org/publicdomain/zero/1.0/ + +==== + +Files located in the node_modules and vendor directories are externally +maintained libraries used by this software which have their own +licenses; we recommend you read them, as their terms may differ from the +terms above. + + Package: lz-string@1.5.0 License: MIT @@ -2115,7 +2406,7 @@ SOFTWARE. -Package: preact@10.19.2 +Package: preact@10.19.4 License: MIT The MIT License (MIT) @@ -2141,7 +2432,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -Package: prettier@3.1.0 +Package: prettier@3.2.5 License: MIT # Prettier license @@ -2163,7 +2454,7 @@ MIT, ISC, BSD-2-Clause, BSD-3-Clause, Apache-2.0 ## Bundled dependencies -### @angular/compiler@v17.0.2 +### @angular/compiler@v17.1.2 > Angular - the compiler library @@ -2173,7 +2464,7 @@ Author: angular ---------------------------------------- -### @babel/code-frame@v7.22.13 +### @babel/code-frame@v7.23.5 > Generate errors that contain a code frame that point to source locations. @@ -2240,7 +2531,7 @@ Author: The Babel Team (https://babel.dev/team) ---------------------------------------- -### @babel/highlight@v7.22.13 +### @babel/highlight@v7.23.4 > Syntax highlight JavaScript strings for output in terminals. @@ -2274,7 +2565,7 @@ Author: The Babel Team (https://babel.dev/team) ---------------------------------------- -### @babel/parser@v7.23.3 +### @babel/parser@v7.23.9 > A JavaScript parser @@ -2333,7 +2624,7 @@ License: MIT ---------------------------------------- -### @glimmer/syntax@v0.85.12 +### @glimmer/syntax@v0.88.1 > Copyright (c) 2015 Tilde, Inc. > @@ -2357,7 +2648,7 @@ License: MIT ---------------------------------------- -### @glimmer/util@v0.85.12 +### @glimmer/util@v0.88.1 > Common utilities used in Glimmer @@ -2385,7 +2676,7 @@ License: MIT ---------------------------------------- -### @glimmer/wire-format@v0.85.12 +### @glimmer/wire-format@v0.88.1 License: MIT @@ -2600,7 +2891,7 @@ Author: Alex Bell ---------------------------------------- -### @typescript-eslint/types@v6.10.0 +### @typescript-eslint/types@v6.20.0 > Types for the TypeScript-ESTree AST spec @@ -2631,7 +2922,7 @@ Repository: ---------------------------------------- -### @typescript-eslint/typescript-estree@v6.10.0 +### @typescript-eslint/typescript-estree@v6.20.0 > A parser that converts TypeScript source code into an ESTree compatible form @@ -2667,7 +2958,7 @@ Repository: ---------------------------------------- -### acorn@v8.11.2 +### acorn@v8.11.3 > ECMAScript parser @@ -2729,7 +3020,7 @@ Repository: ---------------------------------------- -### angular-estree-parser@v8.0.3 +### angular-estree-parser@v9.0.0 > A parser that converts Angular source code into an ESTree-compatible form @@ -2761,7 +3052,7 @@ Author: Ika (https://github.com/ikatyang) ---------------------------------------- -### angular-html-parser@v5.0.2 +### angular-html-parser@v5.2.0 > A HTML parser extracted from Angular with some modifications @@ -2769,26 +3060,26 @@ License: MIT Homepage: Author: Ika (https://github.com/ikatyang) -> MIT License -> -> Copyright (c) Ika (https://github.com/ikatyang) -> -> Permission is hereby granted, free of charge, to any person obtaining a copy -> of this software and associated documentation files (the "Software"), to deal -> in the Software without restriction, including without limitation the rights -> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -> copies of the Software, and to permit persons to whom the Software is -> furnished to do so, subject to the following conditions: -> -> The above copyright notice and this permission notice shall be included in all -> copies or substantial portions of the Software. -> -> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +> MIT License +> +> Copyright (c) Ika (https://github.com/ikatyang) +> +> Permission is hereby granted, free of charge, to any person obtaining a copy +> of this software and associated documentation files (the "Software"), to deal +> in the Software without restriction, including without limitation the rights +> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +> copies of the Software, and to permit persons to whom the Software is +> furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in all +> copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE > SOFTWARE. ---------------------------------------- @@ -3174,52 +3465,6 @@ Author: Thomas Watson Steen (https://twitter.com/wa7son) ---------------------------------------- -### clone@v1.0.4 - -> deep cloning of objects and arrays - -License: MIT -Repository: -Author: Paul Vorbach (http://paul.vorba.ch/) -Contributors: - - Blake Miner (http://www.blakeminer.com/) - - Tian You (http://blog.axqd.net/) - - George Stagas (http://stagas.com/) - - Tobiasz Cudnik (https://github.com/TobiaszCudnik) - - Pavel Lang (https://github.com/langpavel) - - Dan MacTough (http://yabfog.com/) - - w1nk (https://github.com/w1nk) - - Hugh Kennedy (http://twitter.com/hughskennedy) - - Dustin Diaz (http://dustindiaz.com) - - Ilya Shaisultanov (https://github.com/diversario) - - Nathan MacInnes (http://macinn.es/) - - Benjamin E. Coe (https://twitter.com/benjamincoe) - - Nathan Zadoks (https://github.com/nathan7) - - Róbert Oroszi (https://github.com/oroce) - - Aurélio A. Heckert (http://softwarelivre.org/aurium) - - Guy Ellis (http://www.guyellisrocks.com/) - -> Copyright © 2011-2015 Paul Vorbach -> -> Permission is hereby granted, free of charge, to any person obtaining a copy of -> this software and associated documentation files (the “Software”), to deal in -> the Software without restriction, including without limitation the rights to -> use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -> the Software, and to permit persons to whom the Software is furnished to do so, -> subject to the following conditions: -> -> The above copyright notice and this permission notice shall be included in all -> copies or substantial portions of the Software. -> -> THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -> FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -> COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -> IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, OUT OF OR IN CONNECTION WITH THE -> SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - ----------------------------------------- - ### collapse-white-space@v1.0.6 > Replace multiple white-space characters with a single space @@ -3395,39 +3640,6 @@ Contributors: ---------------------------------------- -### defaults@v1.0.4 - -> merge single level defaults over a config object - -License: MIT -Repository: -Author: Elijah Insua - -> The MIT License (MIT) -> -> Copyright (c) 2022 Sindre Sorhus -> Copyright (c) 2015 Elijah Insua -> -> Permission is hereby granted, free of charge, to any person obtaining a copy -> of this software and associated documentation files (the "Software"), to deal -> in the Software without restriction, including without limitation the rights -> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -> copies of the Software, and to permit persons to whom the Software is -> furnished to do so, subject to the following conditions: -> -> The above copyright notice and this permission notice shall be included in -> all copies or substantial portions of the Software. -> -> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -> THE SOFTWARE. - ----------------------------------------- - ### diff@v5.1.0 > A javascript text diff implementation. @@ -3585,7 +3797,7 @@ Author: Sindre Sorhus (https://sindresorhus.com) ---------------------------------------- -### espree@v9.6.1 +### espree@v10.0.0 > An Esprima-compatible JavaScript parser built on Acorn @@ -3745,7 +3957,7 @@ Author: Matteo Collina ---------------------------------------- -### file-entry-cache@v7.0.1 +### file-entry-cache@v7.0.2 > Super simple cache for file metadata, useful for process that work o a given series of files and that only need to repeat the job on the changed ones since the previous run of the process @@ -3834,41 +4046,6 @@ Author: Sindre Sorhus (https://sindresorhus.com) ---------------------------------------- -### find-parent-dir@v0.3.1 - -> Finds the first parent directory that contains a given file or directory. - -License: MIT -Homepage: -Repository: -Author: Thorsten Lorenz (http://thlorenz.com) - -> Copyright 2013 Thorsten Lorenz. -> All rights reserved. -> -> Permission is hereby granted, free of charge, to any person -> obtaining a copy of this software and associated documentation -> files (the "Software"), to deal in the Software without -> restriction, including without limitation the rights to use, -> copy, modify, merge, publish, distribute, sublicense, and/or sell -> copies of the Software, and to permit persons to whom the -> Software is furnished to do so, subject to the following -> conditions: -> -> The above copyright notice and this permission notice shall be -> included in all copies or substantial portions of the Software. -> -> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -> EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -> OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -> NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -> HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -> WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -> FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -> OTHER DEALINGS IN THE SOFTWARE. - ----------------------------------------- - ### find-up@v6.3.0 > Find a file or directory by walking up parent directories @@ -3888,7 +4065,7 @@ Author: Sindre Sorhus (https://sindresorhus.com) ---------------------------------------- -### flat-cache@v3.1.1 +### flat-cache@v3.2.0 > A stupidly simple key/value storage using files to persist some data @@ -3981,7 +4158,7 @@ Contributors: ---------------------------------------- -### flow-parser@v0.221.0 +### flow-parser@v0.226.0 > JavaScript parser written in OCaml. Produces ESTree AST @@ -4195,7 +4372,7 @@ Author: Sindre Sorhus (sindresorhus.com) ---------------------------------------- -### ignore@v5.2.4 +### ignore@v5.3.1 > Ignore is a manager and filter for .gitignore rules, the one used by eslint, gitbook and many others. @@ -4776,6 +4953,38 @@ Contributors: ---------------------------------------- +### iterate-directory-up@v1.1.1 + +> Iterate directory up. + +License: MIT +Homepage: +Author: fisker Cheung (https://www.fiskercheung.com/) + +> MIT License +> +> Copyright (c) fisker Cheung (https://www.fiskercheung.com/) +> +> Permission is hereby granted, free of charge, to any person obtaining a copy +> of this software and associated documentation files (the "Software"), to deal +> in the Software without restriction, including without limitation the rights +> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +> copies of the Software, and to permit persons to whom the Software is +> furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in all +> copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +> SOFTWARE. + +---------------------------------------- + ### jest-docblock@v29.7.0 License: MIT @@ -4905,42 +5114,6 @@ Author: Dominic Tarr (http://dominictarr.com) ---------------------------------------- -### json-parse-even-better-errors@v3.0.0 - -> JSON.parse with context information on error - -License: MIT -Repository: -Author: GitHub Inc. - -> Copyright 2017 Kat Marchán -> Copyright npm, Inc. -> -> Permission is hereby granted, free of charge, to any person obtaining a -> copy of this software and associated documentation files (the "Software"), -> to deal in the Software without restriction, including without limitation -> the rights to use, copy, modify, merge, publish, distribute, sublicense, -> and/or sell copies of the Software, and to permit persons to whom the -> Software is furnished to do so, subject to the following conditions: -> -> The above copyright notice and this permission notice shall be included in -> all copies or substantial portions of the Software. -> -> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -> FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -> DEALINGS IN THE SOFTWARE. -> -> --- -> -> This library is a fork of 'better-json-errors' by Kat Marchán, extended and -> distributed under the terms of the MIT license above. - ----------------------------------------- - ### json5@v2.2.3 > JSON for Humans @@ -4980,7 +5153,7 @@ Contributors: ---------------------------------------- -### keyv@v4.5.3 +### keyv@v4.5.4 > Simple key-value storage with support for multiple backends @@ -5010,38 +5183,6 @@ Author: Sindre Sorhus (https://sindresorhus.com) ---------------------------------------- -### lilconfig@v2.1.0 - -> A zero-dependency alternative to cosmiconfig - -License: MIT -Repository: -Author: antonk52 - -> MIT License -> -> Copyright (c) 2022 Anton Kastritskiy -> -> Permission is hereby granted, free of charge, to any person obtaining a copy -> of this software and associated documentation files (the "Software"), to deal -> in the Software without restriction, including without limitation the rights -> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -> copies of the Software, and to permit persons to whom the Software is -> furnished to do so, subject to the following conditions: -> -> The above copyright notice and this permission notice shall be included in all -> copies or substantial portions of the Software. -> -> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -> SOFTWARE. - ----------------------------------------- - ### lines-and-columns@v2.0.4 > Maps lines and columns to character offsets and back. @@ -5119,25 +5260,6 @@ Author: Isaac Z. Schlueter ---------------------------------------- -### map-age-cleaner@v0.1.3 - -> Automatically cleanup expired items in a Map - -License: MIT -Author: Sam Verschueren (github.com/SamVerschueren) - -> MIT License -> -> Copyright (c) Sam Verschueren (github.com/SamVerschueren) -> -> Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: -> -> The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. -> -> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - ----------------------------------------- - ### markdown-escapes@v1.0.4 > List of escapable characters in markdown @@ -5172,25 +5294,6 @@ Contributors: ---------------------------------------- -### mem@v9.0.2 - -> Memoize functions - An optimization used to speed up consecutive function calls by caching the result of calls with identical input - -License: MIT -Author: Sindre Sorhus (https://sindresorhus.com) - -> MIT License -> -> Copyright (c) Sindre Sorhus (https://sindresorhus.com) -> -> Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: -> -> The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. -> -> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - ----------------------------------------- - ### merge2@v1.4.1 > Merge multiple streams into one stream in sequence or parallel. @@ -5223,7 +5326,7 @@ Repository: ---------------------------------------- -### meriyah@v4.3.8 +### meriyah@v4.3.9 > A 100% compliant, self-hosted javascript parser with high focus on both performance and stability @@ -5292,25 +5395,6 @@ Contributors: ---------------------------------------- -### mimic-fn@v4.0.0 - -> Make a function mimic another one - -License: MIT -Author: Sindre Sorhus (https://sindresorhus.com) - -> MIT License -> -> Copyright (c) Sindre Sorhus (https://sindresorhus.com) -> -> Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: -> -> The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. -> -> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - ----------------------------------------- - ### minimatch@v3.1.2 > a glob matcher in javascript @@ -5398,7 +5482,7 @@ Author: Yoan Arnaudov ---------------------------------------- -### nanoid@v3.3.6 +### nanoid@v3.3.7 > A tiny (116 bytes), secure URL-friendly unique string ID generator @@ -5454,37 +5538,6 @@ Author: Isaac Z. Schlueter (http://blog.izs.me/) ---------------------------------------- -### p-defer@v1.0.0 - -> Create a deferred promise - -License: MIT -Author: Sindre Sorhus (sindresorhus.com) - -> The MIT License (MIT) -> -> Copyright (c) Sindre Sorhus (sindresorhus.com) -> -> Permission is hereby granted, free of charge, to any person obtaining a copy -> of this software and associated documentation files (the "Software"), to deal -> in the Software without restriction, including without limitation the rights -> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -> copies of the Software, and to permit persons to whom the Software is -> furnished to do so, subject to the following conditions: -> -> The above copyright notice and this permission notice shall be included in -> all copies or substantial portions of the Software. -> -> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -> THE SOFTWARE. - ----------------------------------------- - ### p-limit@v4.0.0 > Run multiple promise-returning & async functions with limited concurrency @@ -5557,7 +5610,7 @@ Contributors: ---------------------------------------- -### parse-json@v8.0.1 +### parse-json@v8.1.0 > Parse JSON with more helpful errors @@ -5735,7 +5788,7 @@ Author: typicode ---------------------------------------- -### postcss@v8.4.31 +### postcss@v8.4.33 > Tool for transforming styles with JS plugins @@ -6490,7 +6543,7 @@ Contributors: ---------------------------------------- -### ts-api-utils@v1.0.1 +### ts-api-utils@v1.0.3 > Utility functions for working with TypeScript's API. Successor to the wonderful tsutils. @@ -6521,7 +6574,7 @@ Author: Josh Goldberg ---------------------------------------- -### typescript@v5.2.2 +### typescript@v5.3.3 > TypeScript is a language for application scale JavaScript development @@ -6866,7 +6919,7 @@ Contributors: ---------------------------------------- -### url-or-path@v2.1.0 +### url-or-path@v2.3.0 > Convert between file URL and path. @@ -7037,23 +7090,23 @@ Author: Ika (https://github.com/ikatyang) ---------------------------------------- -### wcwidth@v1.0.1 +### wcwidth.js@v1.1.2 -> Port of C's wcwidth() and wcswidth() +> a javascript porting of C's wcwidth() License: MIT -Homepage: -Repository: -Author: Tim Oxley +Homepage: +Repository: +Author: Woong Jun (http://code.woong.org/) Contributors: - - Woong Jun (http://code.woong.org/) + - Tim Oxley (http://campjs.com/) -> wcwidth.js: JavaScript Portng of Markus Kuhn's wcwidth() Implementation -> ======================================================================= +> wcwidth.js: a javascript portng of C's wcwidth() +> ================================================ > -> Copyright (C) 2012 by Jun Woong. +> Copyright (C) 2012-2014 by Woong Jun and Tim Oxley. > -> This package is a JavaScript porting of `wcwidth()` implementation +> This package is a javascript porting of `wcwidth()` implementation > [by Markus Kuhn](http://www.cl.cam.ac.uk/~mgk25/ucs/wcwidth.c). > > Permission is hereby granted, free of charge, to any person obtaining a copy of @@ -7071,12 +7124,12 @@ Contributors: > INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND > FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR > OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -> EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -> PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR -> BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -> IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -> ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -> POSSIBILITY OF SUCH DAMAGE. +> EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT +> OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +> INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +> CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING +> IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY +> OF SUCH DAMAGE. ---------------------------------------- @@ -7367,7 +7420,7 @@ If the Work includes a "NOTICE" text file as part of its distribution, then any END OF TERMS AND CONDITIONS -Package: vite@4.5.1 +Package: vite@5.1.1 License: MIT # Vite core license @@ -7835,9 +7888,16 @@ License: MIT By: Luke Edwards Repository: lukeed/polka +--------------------------------------- + +## @rollup/plugin-alias +License: MIT +By: Johannes Stein +Repository: rollup/plugins + > The MIT License (MIT) > -> Copyright (c) Luke Edwards (https://lukeed.com) +> Copyright (c) 2019 RollupJS Plugin Contributors (https://github.com/rollup/plugins/graphs/contributors) > > Permission is hereby granted, free of charge, to any person obtaining a copy > of this software and associated documentation files (the "Software"), to deal @@ -7859,13 +7919,6 @@ Repository: lukeed/polka --------------------------------------- -## @rollup/plugin-alias -License: MIT -By: Johannes Stein -Repository: rollup/plugins - ---------------------------------------- - ## @rollup/plugin-commonjs License: MIT By: Rich Harris @@ -7900,6 +7953,28 @@ License: MIT By: LarsDenBakker Repository: rollup/plugins +> The MIT License (MIT) +> +> Copyright (c) 2019 RollupJS Plugin Contributors (https://github.com/rollup/plugins/graphs/contributors) +> +> Permission is hereby granted, free of charge, to any person obtaining a copy +> of this software and associated documentation files (the "Software"), to deal +> in the Software without restriction, including without limitation the rights +> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +> copies of the Software, and to permit persons to whom the Software is +> furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in +> all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +> THE SOFTWARE. + --------------------------------------- ## @rollup/pluginutils @@ -7907,6 +7982,28 @@ License: MIT By: Rich Harris Repository: rollup/plugins +> The MIT License (MIT) +> +> Copyright (c) 2019 RollupJS Plugin Contributors (https://github.com/rollup/plugins/graphs/contributors) +> +> Permission is hereby granted, free of charge, to any person obtaining a copy +> of this software and associated documentation files (the "Software"), to deal +> in the Software without restriction, including without limitation the rights +> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +> copies of the Software, and to permit persons to whom the Software is +> furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in +> all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +> THE SOFTWARE. + --------------------------------------- ## acorn @@ -8007,6 +8104,63 @@ Repository: https://github.com/micromatch/anymatch --------------------------------------- +## artichokie +License: MIT +By: sapphi-red, Evan You +Repository: git+https://github.com/sapphi-red/artichokie.git + +> MIT License +> +> Copyright (c) 2020-present, Yuxi (Evan) You +> Copyright (c) 2023-present, sapphi-red +> +> Permission is hereby granted, free of charge, to any person obtaining a copy +> of this software and associated documentation files (the "Software"), to deal +> in the Software without restriction, including without limitation the rights +> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +> copies of the Software, and to permit persons to whom the Software is +> furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in all +> copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +> SOFTWARE. + +--------------------------------------- + +## astring +License: MIT +By: David Bonnet +Repository: https://github.com/davidbonnet/astring.git + +> Copyright (c) 2015, David Bonnet +> +> Permission is hereby granted, free of charge, to any person obtaining a copy +> of this software and associated documentation files (the "Software"), to deal +> in the Software without restriction, including without limitation the rights +> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +> copies of the Software, and to permit persons to whom the Software is +> furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in +> all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +> THE SOFTWARE. + +--------------------------------------- + ## balanced-match License: MIT By: Julian Gruber @@ -8234,35 +8388,6 @@ Repository: senchalabs/connect --------------------------------------- -## connect-history-api-fallback -License: MIT -By: Ben Ripkens, Craig Myles -Repository: http://github.com/bripkens/connect-history-api-fallback.git - -> The MIT License -> -> Copyright (c) 2022 Ben Blackmore and contributors -> -> Permission is hereby granted, free of charge, to any person obtaining a copy -> of this software and associated documentation files (the "Software"), to deal -> in the Software without restriction, including without limitation the rights -> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -> copies of the Software, and to permit persons to whom the Software is -> furnished to do so, subject to the following conditions: -> -> The above copyright notice and this permission notice shall be included in -> all copies or substantial portions of the Software. -> -> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -> THE SOFTWARE. - ---------------------------------------- - ## convert-source-map License: MIT By: Thorsten Lorenz @@ -9205,29 +9330,32 @@ Repository: git+https://github.com/isaacs/isexe.git --------------------------------------- -## json-stable-stringify +## js-tokens License: MIT -By: James Halliday -Repository: git://github.com/ljharb/json-stable-stringify.git +By: Simon Lydell +Repository: lydell/js-tokens -> This software is released under the MIT license: +> The MIT License (MIT) > -> Permission is hereby granted, free of charge, to any person obtaining a copy of -> this software and associated documentation files (the "Software"), to deal in -> the Software without restriction, including without limitation the rights to -> use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -> the Software, and to permit persons to whom the Software is furnished to do so, -> subject to the following conditions: +> Copyright (c) 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024 Simon Lydell > -> The above copyright notice and this permission notice shall be included in all -> copies or substantial portions of the Software. +> Permission is hereby granted, free of charge, to any person obtaining a copy +> of this software and associated documentation files (the "Software"), to deal +> in the Software without restriction, including without limitation the rights +> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +> copies of the Software, and to permit persons to whom the Software is +> furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in +> all copies or substantial portions of the Software. > > THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -> FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -> COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -> IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -> CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +> THE SOFTWARE. --------------------------------------- @@ -9236,6 +9364,28 @@ License: MIT By: Evan You Repository: git+https://github.com/yyx990803/launch-editor.git +> The MIT License (MIT) +> +> Copyright (c) 2017-present, Yuxi (Evan) You +> +> Permission is hereby granted, free of charge, to any person obtaining a copy +> of this software and associated documentation files (the "Software"), to deal +> in the Software without restriction, including without limitation the rights +> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +> copies of the Software, and to permit persons to whom the Software is +> furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in +> all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +> THE SOFTWARE. + --------------------------------------- ## launch-editor-middleware @@ -9243,6 +9393,28 @@ License: MIT By: Evan You Repository: git+https://github.com/yyx990803/launch-editor.git +> The MIT License (MIT) +> +> Copyright (c) 2017-present, Yuxi (Evan) You +> +> Permission is hereby granted, free of charge, to any person obtaining a copy +> of this software and associated documentation files (the "Software"), to deal +> in the Software without restriction, including without limitation the rights +> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +> copies of the Software, and to permit persons to whom the Software is +> furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in +> all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +> THE SOFTWARE. + --------------------------------------- ## lilconfig @@ -9250,6 +9422,28 @@ License: MIT By: antonk52 Repository: https://github.com/antonk52/lilconfig +> MIT License +> +> Copyright (c) 2022 Anton Kastritskiy +> +> Permission is hereby granted, free of charge, to any person obtaining a copy +> of this software and associated documentation files (the "Software"), to deal +> in the Software without restriction, including without limitation the rights +> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +> copies of the Software, and to permit persons to whom the Software is +> furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in all +> copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +> SOFTWARE. + --------------------------------------- ## loader-utils @@ -9414,7 +9608,7 @@ Repository: git://github.com/isaacs/minimatch.git > The ISC License > -> Copyright (c) 2011-2022 Isaac Z. Schlueter and Contributors +> Copyright (c) 2011-2023 Isaac Z. Schlueter and Contributors > > Permission to use, copy, modify, and/or distribute this software for any > purpose with or without fee is hereby granted, provided that the above @@ -9573,35 +9767,6 @@ Repository: sindresorhus/object-assign --------------------------------------- -## okie -License: MIT -By: Evan You -Repository: git+https://github.com/yyx990803/okie.git - -> MIT License -> -> Copyright (c) 2020-present, Yuxi (Evan) You -> -> Permission is hereby granted, free of charge, to any person obtaining a copy -> of this software and associated documentation files (the "Software"), to deal -> in the Software without restriction, including without limitation the rights -> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -> copies of the Software, and to permit persons to whom the Software is -> furnished to do so, subject to the following conditions: -> -> The above copyright notice and this permission notice shall be included in all -> copies or substantial portions of the Software. -> -> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -> SOFTWARE. - ---------------------------------------- - ## on-finished License: MIT By: Douglas Christopher Wilson, Jonathan Ong @@ -10295,7 +10460,7 @@ Repository: sindresorhus/shebang-regex ## shell-quote License: MIT By: James Halliday -Repository: http://github.com/substack/node-shell-quote.git +Repository: http://github.com/ljharb/shell-quote.git > The MIT License > @@ -10723,7 +10888,7 @@ Repository: https://github.com/npm/wrappy ## ws License: MIT By: Einar Otto Stangvik -Repository: websockets/ws +Repository: git+https://github.com/websockets/ws.git > Copyright (c) 2011 Einar Otto Stangvik > Copyright (c) 2013 Arnout Kazemier and contributors @@ -10795,7 +10960,7 @@ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -Package: zustand@4.4.7 +Package: zustand@4.5.0 License: MIT MIT License diff --git a/src/core/common/dom.ts b/src/core/common/dom.ts index 04257881..b1179f6c 100644 --- a/src/core/common/dom.ts +++ b/src/core/common/dom.ts @@ -1,9 +1,6 @@ -import jQuery from "jquery"; import * as textFieldEdit from "text-field-edit"; import { arrHas } from "./common"; -const $ = jQuery; - export const stripHtml = (html: string) => { // respect carriage returns const result = html.replace(//gi, "\n"); @@ -116,19 +113,22 @@ export const generatePreview = (postText: string) => { return convertUrlToLink(_postText); }; -export function scrollToElement( - elem: JQuery | HTMLElement, - opts?: { offset?: number; smooth?: boolean; toFit?: boolean } -) { - let _elem = elem; +export function scrollToElement(elem: HTMLElement, opts?: { offset?: number; smooth?: boolean; toFit?: boolean }) { + let _elem = elem as any; const { offset, smooth, toFit } = opts || {}; - if (_elem && _elem instanceof $) _elem = (_elem as JQuery)[0] as HTMLElement; - else if (!_elem) return false; + + // Check if elem is a jQuery object by looking for the .jquery property + if (typeof _elem === "object" && _elem !== null && _elem.jquery) { + _elem = _elem[0]; + } + if (!_elem) return false; + const headerHeight = -(document.querySelector("header")?.getBoundingClientRect().height + 6); - const _offset = offset === undefined ? headerHeight : offset; - // position visibly by default - use offset if 'toFit' - const visibleY = toFit ? _offset : -($(window).height() / 4); - const scrollY = (_elem as HTMLElement).getBoundingClientRect().top + window.scrollY + visibleY; + const _offset = offset == null ? headerHeight : offset; + const visibleY = toFit ? _offset : -Math.floor(window.innerHeight / 4); + const rect = _elem.getBoundingClientRect(); + const scrollY = rect.top + window.scrollY + visibleY; + window.scrollTo({ top: scrollY, behavior: smooth ? "smooth" : "auto" }); } @@ -145,22 +145,28 @@ export const scrollParentToChild = (parent: HTMLElement, child: HTMLElement, off if (!isViewable) parent.scrollTop = childRect.top + parent.scrollTop - parentRect.top + _offset; }; -export function elementIsVisible(elem: JQuery | HTMLElement, partialBool?: boolean) { - let _elem = elem; - // don't use an arrow function here (for injection purposes) - // only check to ensure vertical visibility - if (_elem && _elem instanceof $) _elem = (_elem as JQuery)[0] as HTMLElement; - else if (!_elem) return false; +export function elementIsVisible(elem: HTMLElement, partialBool?: boolean) { + let _elem = elem as any; + // Check if elem is a jQuery object by looking for the .jquery property + if (typeof _elem === "object" && _elem !== null && _elem.jquery) { + _elem = _elem[0]; + } + if (!_elem) return false; + const rect = (_elem as HTMLElement).getBoundingClientRect(); const visibleHeight = window.innerHeight; if (partialBool) return rect.top <= visibleHeight && rect.top + rect.height >= 0; return rect.top >= 0 && rect.top + rect.height <= visibleHeight; } -export function elementFitsViewport(elem: JQuery | HTMLElement) { - let _elem = elem; - if (_elem && _elem instanceof $) _elem = (_elem as JQuery)[0] as HTMLElement; - else if (!_elem) return false; +export function elementFitsViewport(elem: HTMLElement) { + let _elem = elem as any; + // Check if elem is a jQuery object by looking for the .jquery property + if (typeof _elem === "object" && _elem !== null && _elem.jquery) { + _elem = _elem[0]; + } + if (!_elem) return false; + const headerHeight = document.querySelector("header")?.getBoundingClientRect().height + 6; const elemHeight = (_elem as HTMLElement).getBoundingClientRect().height; const visibleHeight = window.innerHeight; From be33cf355976bc29ce3d411cccf87d7c48d7fcfb Mon Sep 17 00:00:00 2001 From: WombatFromHell Date: Tue, 13 Feb 2024 07:53:07 -0700 Subject: [PATCH 12/18] Resolved merge for SentenceParser refactor --- src/core/settings.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/core/settings.ts b/src/core/settings.ts index 63ab3ba4..b662ab8a 100644 --- a/src/core/settings.ts +++ b/src/core/settings.ts @@ -1,4 +1,3 @@ -import { importSettings } from "../PopupApp/helpers"; import { arrHas, objEmpty, objHas } from "./common/common"; import { superTrim } from "./common/dom"; import { DefaultSettings } from "./default_settings"; From 3aef1b3a7860564d7786c207d6ba806de45ff990 Mon Sep 17 00:00:00 2001 From: WombatFromHell Date: Tue, 13 Feb 2024 07:59:02 -0700 Subject: [PATCH 13/18] Ignore test results output when running biome linting --- biome.json | 2 +- pnpm-lock.yaml | 78 ++++++++++++++++++++++++++++---------------------- 2 files changed, 44 insertions(+), 36 deletions(-) diff --git a/biome.json b/biome.json index 33feeb12..91083da1 100644 --- a/biome.json +++ b/biome.json @@ -1,7 +1,7 @@ { "$schema": "https://biomejs.dev/schemas/1.4.1/schema.json", "files": { - "ignore": ["node_modules", "dist", "dist-firefox"] + "ignore": ["node_modules", "dist", "dist-firefox", "results"] }, "organizeImports": { "enabled": true diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index cb1fd112..9546429b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1560,7 +1560,7 @@ packages: resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.6 + call-bind: 1.0.7 is-array-buffer: 3.0.4 dev: true @@ -1574,7 +1574,7 @@ packages: engines: {node: '>= 0.4'} dependencies: array-buffer-byte-length: 1.0.1 - call-bind: 1.0.6 + call-bind: 1.0.7 define-properties: 1.2.1 es-abstract: 1.22.3 es-errors: 1.3.0 @@ -1721,10 +1721,11 @@ packages: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} dev: true - /call-bind@1.0.6: - resolution: {integrity: sha512-Mj50FLHtlsoVfRfnHaZvyrooHcrlceNZdL/QBvJJVd9Ta55qCQK0gs4ss2oZDeV9zFCs6ewzYgVE5yfVmfFpVg==} + /call-bind@1.0.7: + resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} engines: {node: '>= 0.4'} dependencies: + es-define-property: 1.0.0 es-errors: 1.3.0 function-bind: 1.1.2 get-intrinsic: 1.2.4 @@ -1993,7 +1994,7 @@ packages: es-errors: 1.3.0 get-intrinsic: 1.2.4 gopd: 1.0.1 - has-property-descriptors: 1.0.1 + has-property-descriptors: 1.0.2 dev: true /define-properties@1.2.1: @@ -2001,7 +2002,7 @@ packages: engines: {node: '>= 0.4'} dependencies: define-data-property: 1.1.3 - has-property-descriptors: 1.0.1 + has-property-descriptors: 1.0.2 object-keys: 1.1.1 dev: true @@ -2113,7 +2114,7 @@ packages: array-buffer-byte-length: 1.0.1 arraybuffer.prototype.slice: 1.0.3 available-typed-arrays: 1.0.6 - call-bind: 1.0.6 + call-bind: 1.0.7 es-set-tostringtag: 2.0.2 es-to-primitive: 1.2.1 function.prototype.name: 1.1.6 @@ -2121,7 +2122,7 @@ packages: get-symbol-description: 1.0.2 globalthis: 1.0.3 gopd: 1.0.1 - has-property-descriptors: 1.0.1 + has-property-descriptors: 1.0.2 has-proto: 1.0.1 has-symbols: 1.0.3 hasown: 2.0.1 @@ -2151,6 +2152,13 @@ packages: which-typed-array: 1.1.14 dev: true + /es-define-property@1.0.0: + resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.4 + dev: true + /es-errors@1.3.0: resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} engines: {node: '>= 0.4'} @@ -2358,7 +2366,7 @@ packages: resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.6 + call-bind: 1.0.7 define-properties: 1.2.1 es-abstract: 1.22.3 functions-have-names: 1.2.3 @@ -2403,7 +2411,7 @@ packages: resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.6 + call-bind: 1.0.7 es-errors: 1.3.0 get-intrinsic: 1.2.4 dev: true @@ -2474,10 +2482,10 @@ packages: engines: {node: '>=8'} dev: true - /has-property-descriptors@1.0.1: - resolution: {integrity: sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==} + /has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} dependencies: - get-intrinsic: 1.2.4 + es-define-property: 1.0.0 dev: true /has-proto@1.0.1: @@ -2601,7 +2609,7 @@ packages: resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.6 + call-bind: 1.0.7 get-intrinsic: 1.2.4 dev: true @@ -2619,7 +2627,7 @@ packages: resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.6 + call-bind: 1.0.7 has-tostringtag: 1.0.2 dev: true @@ -2684,14 +2692,14 @@ packages: resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.6 + call-bind: 1.0.7 has-tostringtag: 1.0.2 dev: true /is-shared-array-buffer@1.0.2: resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} dependencies: - call-bind: 1.0.6 + call-bind: 1.0.7 dev: true /is-stream@2.0.1: @@ -2723,7 +2731,7 @@ packages: /is-weakref@1.0.2: resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} dependencies: - call-bind: 1.0.6 + call-bind: 1.0.7 dev: true /isarray@2.0.5: @@ -3541,7 +3549,7 @@ packages: resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.6 + call-bind: 1.0.7 define-properties: 1.2.1 has-symbols: 1.0.3 object-keys: 1.1.1 @@ -3846,7 +3854,7 @@ packages: resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.6 + call-bind: 1.0.7 define-properties: 1.2.1 es-errors: 1.3.0 set-function-name: 2.0.1 @@ -3935,7 +3943,7 @@ packages: resolution: {integrity: sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg==} engines: {node: '>=0.4'} dependencies: - call-bind: 1.0.6 + call-bind: 1.0.7 get-intrinsic: 1.2.4 has-symbols: 1.0.3 isarray: 2.0.5 @@ -3945,7 +3953,7 @@ packages: resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.6 + call-bind: 1.0.7 es-errors: 1.3.0 is-regex: 1.1.4 dev: true @@ -3977,7 +3985,7 @@ packages: function-bind: 1.1.2 get-intrinsic: 1.2.4 gopd: 1.0.1 - has-property-descriptors: 1.0.1 + has-property-descriptors: 1.0.2 dev: true /set-function-name@2.0.1: @@ -3986,7 +3994,7 @@ packages: dependencies: define-data-property: 1.1.3 functions-have-names: 1.2.3 - has-property-descriptors: 1.0.1 + has-property-descriptors: 1.0.2 dev: true /shebang-command@1.2.0: @@ -4021,7 +4029,7 @@ packages: resolution: {integrity: sha512-QcgiIWV4WV7qWExbN5llt6frQB/lBven9pqliLXfGPB+K9ZYXxDozp0wLkHS24kWCm+6YXH/f0HhnObZnZOBnQ==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.6 + call-bind: 1.0.7 es-errors: 1.3.0 get-intrinsic: 1.2.4 object-inspect: 1.13.1 @@ -4159,7 +4167,7 @@ packages: resolution: {integrity: sha512-DOB27b/2UTTD+4myKUFh+/fXWcu/UDyASIXfg+7VzoCNNGOfWvoyU/x5pvVHr++ztyt/oSYI1BcWBBG/hmlNjA==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.6 + call-bind: 1.0.7 define-properties: 1.2.1 es-abstract: 1.22.3 dev: true @@ -4168,7 +4176,7 @@ packages: resolution: {integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.6 + call-bind: 1.0.7 define-properties: 1.2.1 es-abstract: 1.22.3 dev: true @@ -4176,7 +4184,7 @@ packages: /string.prototype.trimend@1.0.7: resolution: {integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==} dependencies: - call-bind: 1.0.6 + call-bind: 1.0.7 define-properties: 1.2.1 es-abstract: 1.22.3 dev: true @@ -4184,7 +4192,7 @@ packages: /string.prototype.trimstart@1.0.7: resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==} dependencies: - call-bind: 1.0.6 + call-bind: 1.0.7 define-properties: 1.2.1 es-abstract: 1.22.3 dev: true @@ -4318,7 +4326,7 @@ packages: resolution: {integrity: sha512-RSqu1UEuSlrBhHTWC8O9FnPjOduNs4M7rJ4pRKoEjtx1zUNOPN2sSXHLDX+Y2WPbHIxbvg4JFo2DNAEfPIKWoQ==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.6 + call-bind: 1.0.7 es-errors: 1.3.0 is-typed-array: 1.1.13 dev: true @@ -4327,7 +4335,7 @@ packages: resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.6 + call-bind: 1.0.7 for-each: 0.3.3 has-proto: 1.0.1 is-typed-array: 1.1.13 @@ -4338,7 +4346,7 @@ packages: engines: {node: '>= 0.4'} dependencies: available-typed-arrays: 1.0.6 - call-bind: 1.0.6 + call-bind: 1.0.7 for-each: 0.3.3 has-proto: 1.0.1 is-typed-array: 1.1.13 @@ -4347,7 +4355,7 @@ packages: /typed-array-length@1.0.4: resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} dependencies: - call-bind: 1.0.6 + call-bind: 1.0.7 for-each: 0.3.3 is-typed-array: 1.1.13 dev: true @@ -4365,7 +4373,7 @@ packages: /unbox-primitive@1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: - call-bind: 1.0.6 + call-bind: 1.0.7 has-bigints: 1.0.2 has-symbols: 1.0.3 which-boxed-primitive: 1.0.2 @@ -4476,7 +4484,7 @@ packages: engines: {node: '>= 0.4'} dependencies: available-typed-arrays: 1.0.6 - call-bind: 1.0.6 + call-bind: 1.0.7 for-each: 0.3.3 gopd: 1.0.1 has-tostringtag: 1.0.2 From a1b683ec3a190665f28a283b8d3e866e6b85a0fa Mon Sep 17 00:00:00 2001 From: WombatFromHell Date: Tue, 13 Feb 2024 09:58:40 -0700 Subject: [PATCH 14/18] Removed unnecessary scripting permission from crxjs config --- vite.config.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vite.config.ts b/vite.config.ts index 2557e0c5..1f61ca62 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -58,7 +58,7 @@ const crxConfig = { matches: ["https://www.shacknews.com/chatty*"], }, ], - permissions: ["tabs", "storage", "scripting", "notifications", "alarms"], + permissions: ["tabs", "storage", "notifications", "alarms"], host_permissions: ["https://www.shacknews.com/chatty*"], web_accessible_resources: [ { From da22839304baa14f1086b3fdac4fb4eb9bf39250 Mon Sep 17 00:00:00 2001 From: WombatFromHell Date: Tue, 13 Feb 2024 20:01:14 -0700 Subject: [PATCH 15/18] Added a settings panel for toggling built-in patches and scripts --- package.json | 2 +- pnpm-lock.yaml | 45 +++++++-------- public/release_notes.html | 6 +- src/PopupApp/Options.tsx | 42 ++++++++++---- src/PopupApp/Tabs.tsx | 48 ++++++++-------- src/PopupApp/actions.ts | 19 ++++--- src/PopupApp/helpers.ts | 5 +- src/PopupApp/index.tsx | 83 +++++++++++++++++++++++++++- src/PopupApp/popupStore.ts | 3 + src/builtin/collapse.ts | 5 +- src/builtin/color_gauge.ts | 16 ++++-- src/builtin/comment_tags.ts | 5 +- src/builtin/emoji_poster.ts | 8 ++- src/builtin/image-uploader/index.tsx | 6 +- src/builtin/local_timestamp.ts | 6 +- src/builtin/mod_banners.ts | 6 +- src/builtin/post_length_counter.ts | 6 +- src/builtin/userpopup/index.tsx | 6 +- src/core/common/dom.ts | 32 ++++++----- src/core/default_settings.ts | 15 +++++ src/core/observer_handlers.ts | 8 +-- src/core/settings.ts | 48 ++++++++++++---- src/patches/scrollToPostFix.ts | 41 +++++++------- src/patches/singleThreadFix.ts | 21 +++++-- src/serviceWorker.firefox.ts | 6 +- src/styles/popup.css | 18 ++++++ src/types/popupStore.d.ts | 9 +-- src/types/settings.d.ts | 18 +++++- 28 files changed, 392 insertions(+), 141 deletions(-) diff --git a/package.json b/package.json index cb61ef3a..5541d72f 100644 --- a/package.json +++ b/package.json @@ -58,7 +58,7 @@ "@types/react": "^18.2.55", "@types/react-dom": "^18.2.19", "adm-zip": "^0.5.10", - "dotenv": "^16.4.3", + "dotenv": "^16.4.4", "embla-carousel": "8.0.0-rc19", "glob": "^10.3.10", "jest": "^29.7.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9546429b..b2f72b1f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -89,8 +89,8 @@ devDependencies: specifier: ^0.5.10 version: 0.5.10 dotenv: - specifier: ^16.4.3 - version: 16.4.3 + specifier: ^16.4.4 + version: 16.4.4 embla-carousel: specifier: 8.0.0-rc19 version: 8.0.0-rc19 @@ -1576,7 +1576,7 @@ packages: array-buffer-byte-length: 1.0.1 call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-abstract: 1.22.4 es-errors: 1.3.0 get-intrinsic: 1.2.4 is-array-buffer: 3.0.4 @@ -1706,7 +1706,7 @@ packages: hasBin: true dependencies: caniuse-lite: 1.0.30001587 - electron-to-chromium: 1.4.667 + electron-to-chromium: 1.4.668 node-releases: 2.0.14 update-browserslist-db: 1.0.13(browserslist@4.22.3) dev: true @@ -1987,21 +1987,20 @@ packages: engines: {node: '>=0.10.0'} dev: true - /define-data-property@1.1.3: - resolution: {integrity: sha512-h3GBouC+RPtNX2N0hHVLo2ZwPYurq8mLmXpOLTsw71gr7lHt5VaI4vVkDUNOfiWmm48JEXe3VM7PmLX45AMmmg==} + /define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} engines: {node: '>= 0.4'} dependencies: + es-define-property: 1.0.0 es-errors: 1.3.0 - get-intrinsic: 1.2.4 gopd: 1.0.1 - has-property-descriptors: 1.0.2 dev: true /define-properties@1.2.1: resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} engines: {node: '>= 0.4'} dependencies: - define-data-property: 1.1.3 + define-data-property: 1.1.4 has-property-descriptors: 1.0.2 object-keys: 1.1.1 dev: true @@ -2050,8 +2049,8 @@ packages: domelementtype: 2.3.0 domhandler: 5.0.3 - /dotenv@16.4.3: - resolution: {integrity: sha512-II98GFrje5psQTSve0E7bnwMFybNLqT8Vu8JIFWRjsE3khyNUm/loZupuy5DVzG2IXf/ysxvrixYOQnM6mjD3A==} + /dotenv@16.4.4: + resolution: {integrity: sha512-XvPXc8XAQThSjAbY6cQ/9PcBXmFoWuw1sQ3b8HqUCR6ziGXjkTi//kB9SWa2UwqlgdAIuRqAa/9hVljzPehbYg==} engines: {node: '>=12'} dev: true @@ -2059,8 +2058,8 @@ packages: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} dev: true - /electron-to-chromium@1.4.667: - resolution: {integrity: sha512-66L3pLlWhTNVUhnmSA5+qDM3fwnXsM6KAqE36e2w4KN0g6pkEtlT5bs41FQtQwVwKnfhNBXiWRLPs30HSxd7Kw==} + /electron-to-chromium@1.4.668: + resolution: {integrity: sha512-ZOBocMYCehr9W31+GpMclR+KBaDZOoAEabLdhpZ8oU1JFDwIaFY0UDbpXVEUFc0BIP2O2Qn3rkfCjQmMR4T/bQ==} dev: true /embla-carousel-react@8.0.0-rc19(react@18.2.0): @@ -2107,14 +2106,16 @@ packages: is-arrayish: 0.2.1 dev: true - /es-abstract@1.22.3: - resolution: {integrity: sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==} + /es-abstract@1.22.4: + resolution: {integrity: sha512-vZYJlk2u6qHYxBOTjAeg7qUxHdNfih64Uu2J8QqWgXZ2cri0ZpJAkzDUK/q593+mvKwlxyaxr6F1Q+3LKoQRgg==} engines: {node: '>= 0.4'} dependencies: array-buffer-byte-length: 1.0.1 arraybuffer.prototype.slice: 1.0.3 available-typed-arrays: 1.0.6 call-bind: 1.0.7 + es-define-property: 1.0.0 + es-errors: 1.3.0 es-set-tostringtag: 2.0.2 es-to-primitive: 1.2.1 function.prototype.name: 1.1.6 @@ -2368,7 +2369,7 @@ packages: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-abstract: 1.22.4 functions-have-names: 1.2.3 dev: true @@ -3980,7 +3981,7 @@ packages: resolution: {integrity: sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g==} engines: {node: '>= 0.4'} dependencies: - define-data-property: 1.1.3 + define-data-property: 1.1.4 es-errors: 1.3.0 function-bind: 1.1.2 get-intrinsic: 1.2.4 @@ -3992,7 +3993,7 @@ packages: resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==} engines: {node: '>= 0.4'} dependencies: - define-data-property: 1.1.3 + define-data-property: 1.1.4 functions-have-names: 1.2.3 has-property-descriptors: 1.0.2 dev: true @@ -4169,7 +4170,7 @@ packages: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-abstract: 1.22.4 dev: true /string.prototype.trim@1.2.8: @@ -4178,7 +4179,7 @@ packages: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-abstract: 1.22.4 dev: true /string.prototype.trimend@1.0.7: @@ -4186,7 +4187,7 @@ packages: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-abstract: 1.22.4 dev: true /string.prototype.trimstart@1.0.7: @@ -4194,7 +4195,7 @@ packages: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-abstract: 1.22.4 dev: true /strip-ansi@6.0.1: diff --git a/public/release_notes.html b/public/release_notes.html index 8e412047..c42db528 100644 --- a/public/release_notes.html +++ b/public/release_notes.html @@ -4,8 +4,8 @@ Chrome Shack Release Notes