From 14f881aa9ace969586165578369175079b6bb825 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Kiljan=CC=81czyk?= Date: Tue, 26 Mar 2024 18:16:11 +0100 Subject: [PATCH 1/4] Add crxjs 2.0 beta --- .prettierrc | 2 +- eslint.config.js | 4 +- manifest.json | 6 +- package.json | 15 +- src/common/chrome-api-wrapper.ts | 2 +- src/content/index.ts | 4 +- src/popup/App.tsx | 22 ++ src/popup/AppShell/AppShell.tsx | 6 +- .../components/PopupContent/PopupContent.tsx | 4 +- .../components/PopupHeader/PopupHeader.tsx | 8 +- src/popup/features/HomePage/HomePage.tsx | 10 +- src/popup/{styles => }/index.css | 0 index.html => src/popup/index.html | 4 +- src/popup/index.tsx | 33 +- tsconfig.json | 7 +- vite.config.background.ts | 17 -- vite.config.content.ts | 17 -- vite.config.popup.ts | 14 - vite.config.ts | 14 + yarn.lock | 286 +++++++++++++++++- 20 files changed, 356 insertions(+), 119 deletions(-) create mode 100644 src/popup/App.tsx rename src/popup/{styles => }/index.css (100%) rename index.html => src/popup/index.html (77%) delete mode 100644 vite.config.background.ts delete mode 100644 vite.config.content.ts delete mode 100644 vite.config.popup.ts create mode 100644 vite.config.ts diff --git a/.prettierrc b/.prettierrc index e53e300..bad3a70 100644 --- a/.prettierrc +++ b/.prettierrc @@ -6,5 +6,5 @@ "jsxSingleQuote": false, "trailingComma": "none", "bracketSameLine": false, - "bracketSpacing": false + "bracketSpacing": true } diff --git a/eslint.config.js b/eslint.config.js index 553d438..09be896 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -15,7 +15,6 @@ export default tseslint.config( ...tseslint.configs.recommended, reactRecommended, reactJsxRuntime, - eslintConfigPrettier, { plugins: { 'simple-import-sort': simpleImportSort @@ -24,5 +23,6 @@ export default tseslint.config( 'simple-import-sort/imports': 'warn', 'simple-import-sort/exports': 'warn' } - } + }, + eslintConfigPrettier ); diff --git a/manifest.json b/manifest.json index c95f36b..2402f42 100644 --- a/manifest.json +++ b/manifest.json @@ -9,17 +9,17 @@ }, "action": { "default_title": "Chrome Extension React", - "default_popup": "popup/index.html", + "default_popup": "src/popup/index.html", "default_icon": "assets/icons/icon-34.png" }, "content_scripts": [ { - "js": ["content/index.js"], + "js": ["src/content/index.ts"], "matches": ["*://*/*"] } ], "background": { - "service_worker": "background/index.js" + "service_worker": "src/background/index.ts" }, "web_accessible_resources": [ { diff --git a/package.json b/package.json index 1995706..20be6d4 100644 --- a/package.json +++ b/package.json @@ -8,18 +8,8 @@ "lint": "eslint .", "lint:fix": "eslint . --fix", "format": "prettier --write .", - "watch": "yarn dist && yarn watch:popup", - "watch:background": "vite --config vite.config.background.ts build --watch", - "watch:content": "vite --config vite.config.content.ts build --watch", - "watch:popup": "vite --config vite.config.popup.ts build --watch", - "build": "yarn build:background && yarn build:content && yarn build:popup", - "build:background": "vite --config vite.config.background.ts build", - "build:content": "vite --config vite.config.content.ts build", - "build:popup": "vite --config vite.config.popup.ts build", - "clean": "rimraf dist", - "copy:static": "copyfiles manifest.json assets/**/* dist", - "dist:dev": "yarn lint && yarn dist", - "dist": "yarn clean && yarn build && yarn copy:static" + "watch": "vite build --watch", + "build": "vite build" }, "dependencies": { "@emotion/react": "^11.11.4", @@ -34,6 +24,7 @@ "react-router-dom": "^6.22.3" }, "devDependencies": { + "@crxjs/vite-plugin": "2.0.0-beta.23", "@eslint/js": "^8.57.0", "@types/react": "^18.2.69", "@types/react-dom": "^18.2.22", diff --git a/src/common/chrome-api-wrapper.ts b/src/common/chrome-api-wrapper.ts index 2b38592..815203b 100644 --- a/src/common/chrome-api-wrapper.ts +++ b/src/common/chrome-api-wrapper.ts @@ -28,7 +28,7 @@ export class ChromeApiWrapper { // Prevents code from failing when used too soon while (Date.now() - dateStarted < 5000) { - const tabs = await chrome.tabs.query({active: true, lastFocusedWindow: true}); + const tabs = await chrome.tabs.query({ active: true, lastFocusedWindow: true }); const currentTab = tabs[0]; if (currentTab?.status === 'complete') { diff --git a/src/content/index.ts b/src/content/index.ts index a2f63d9..b893099 100644 --- a/src/content/index.ts +++ b/src/content/index.ts @@ -1,5 +1,5 @@ -import {ChromeMessage, ChromeMessageType} from '../common/chrome-api-wrapper'; -import {ScraperCommand, ScraperMessage} from '../common/types/scraper'; +import { ChromeMessage, ChromeMessageType } from '../common/chrome-api-wrapper'; +import { ScraperCommand, ScraperMessage } from '../common/types/scraper'; async function handleScrapeCommand() { const pageTitle = document.title; diff --git a/src/popup/App.tsx b/src/popup/App.tsx new file mode 100644 index 0000000..421012a --- /dev/null +++ b/src/popup/App.tsx @@ -0,0 +1,22 @@ +import { lazy, Suspense } from 'react'; +import { MemoryRouter, Route, Routes } from 'react-router-dom'; + +import AppShell from './AppShell/AppShell'; +import PopupHeader from './components/PopupHeader/PopupHeader'; + +const HomePage = lazy(() => import('./features/HomePage/HomePage')); + +export default function App() { + return ( + + + }> + + } /> + } /> + + + + + ); +} diff --git a/src/popup/AppShell/AppShell.tsx b/src/popup/AppShell/AppShell.tsx index ef39e24..7b49288 100644 --- a/src/popup/AppShell/AppShell.tsx +++ b/src/popup/AppShell/AppShell.tsx @@ -1,9 +1,9 @@ import './AppShell.css'; -import {ReactElement, ReactNode, useEffect} from 'react'; -import {useNavigate} from 'react-router-dom'; +import { ReactElement, ReactNode, useEffect } from 'react'; +import { useNavigate } from 'react-router-dom'; -export default function AppShell(props: {children?: ReactNode}): ReactElement { +export default function AppShell(props: { children?: ReactNode }): ReactElement { const navigate = useNavigate(); useEffect(() => { diff --git a/src/popup/components/PopupContent/PopupContent.tsx b/src/popup/components/PopupContent/PopupContent.tsx index ff76f9d..a1fbb07 100644 --- a/src/popup/components/PopupContent/PopupContent.tsx +++ b/src/popup/components/PopupContent/PopupContent.tsx @@ -1,9 +1,9 @@ import './PopupContent.css'; import Box from '@mui/material/Box'; -import {ReactElement, ReactNode} from 'react'; +import { ReactElement, ReactNode } from 'react'; -export default function PopupContent(props: {children?: ReactNode}): ReactElement { +export default function PopupContent(props: { children?: ReactNode }): ReactElement { return ( {props.children} diff --git a/src/popup/components/PopupHeader/PopupHeader.tsx b/src/popup/components/PopupHeader/PopupHeader.tsx index 4a48674..0bad5bd 100644 --- a/src/popup/components/PopupHeader/PopupHeader.tsx +++ b/src/popup/components/PopupHeader/PopupHeader.tsx @@ -1,12 +1,12 @@ import './PopupHeader.css'; import ExtensionRoundedIcon from '@mui/icons-material/ExtensionRounded'; -import {Toolbar} from '@mui/material'; -import {ReactElement, ReactNode} from 'react'; +import { Toolbar } from '@mui/material'; +import { ReactElement, ReactNode } from 'react'; -export default function PopupHeader(props: {children?: ReactNode}): ReactElement { +export default function PopupHeader(props: { children?: ReactNode }): ReactElement { return ( - +

Chrome Extension React

{props.children} diff --git a/src/popup/features/HomePage/HomePage.tsx b/src/popup/features/HomePage/HomePage.tsx index 02eb3a9..aed390b 100644 --- a/src/popup/features/HomePage/HomePage.tsx +++ b/src/popup/features/HomePage/HomePage.tsx @@ -1,15 +1,15 @@ import './HomePage.css'; -import {Alert, Button, Snackbar, Stack} from '@mui/material'; +import { Alert, Button, Snackbar, Stack } from '@mui/material'; import Box from '@mui/material/Box'; -import {ReactElement, useEffect, useState} from 'react'; +import { ReactElement, useEffect, useState } from 'react'; import { ChromeApiWrapper, ChromeMessage, ChromeMessageType } from '../../../common/chrome-api-wrapper'; -import {ScraperCommand, ScraperMessage} from '../../../common/types/scraper'; +import { ScraperCommand, ScraperMessage } from '../../../common/types/scraper'; import PopupContent from '../../components/PopupContent/PopupContent'; import PopupHeader from '../../components/PopupHeader/PopupHeader'; @@ -31,7 +31,7 @@ export default function HomePage(): ReactElement { const message: ChromeMessage = { type: ChromeMessageType.SCRAPER_COMMAND, - payload: {command: ScraperCommand.SCRAPE} + payload: { command: ScraperCommand.SCRAPE } }; try { @@ -55,7 +55,7 @@ export default function HomePage(): ReactElement { return false; } - chrome.storage.session.set({[CACHE_KEY]: message.payload}); + chrome.storage.session.set({ [CACHE_KEY]: message.payload }); setScrapedPageTitle(message.payload); setDisableScrapeButton(false); return false; diff --git a/src/popup/styles/index.css b/src/popup/index.css similarity index 100% rename from src/popup/styles/index.css rename to src/popup/index.css diff --git a/index.html b/src/popup/index.html similarity index 77% rename from index.html rename to src/popup/index.html index 753ecb1..16a8b40 100644 --- a/index.html +++ b/src/popup/index.html @@ -9,10 +9,10 @@ Chrome Extension React - +
- + diff --git a/src/popup/index.tsx b/src/popup/index.tsx index 4204877..2832382 100644 --- a/src/popup/index.tsx +++ b/src/popup/index.tsx @@ -1,28 +1,11 @@ -import {lazy, ReactElement, StrictMode, Suspense} from 'react'; -import {createRoot} from 'react-dom/client'; -import {MemoryRouter, Route, Routes} from 'react-router-dom'; +import { lazy, ReactElement, StrictMode, Suspense } from 'react'; +import { createRoot } from 'react-dom/client'; -import AppShell from './AppShell/AppShell'; -import PopupHeader from './components/PopupHeader/PopupHeader'; - -const HomePage = lazy(() => import('./features/HomePage/HomePage')); - -function Index(): ReactElement { - return ( - - - - }> - - } /> - } /> - - - - - - ); -} +import App from './App'; const root = createRoot(document.getElementById('root') as HTMLElement); -root.render(); +root.render( + + + +); diff --git a/tsconfig.json b/tsconfig.json index 6b66cc3..7d86853 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -17,10 +17,5 @@ "jsx": "react-jsx", "types": ["chrome-types"] }, - "include": [ - "src", - "vite.config.popup.ts", - "vite.config.background.ts", - "vite.config.content.ts" - ] + "include": ["src", "vite.config.ts", "vite.config.background.ts", "vite.config.content.ts"] } diff --git a/vite.config.background.ts b/vite.config.background.ts deleted file mode 100644 index 2b38b81..0000000 --- a/vite.config.background.ts +++ /dev/null @@ -1,17 +0,0 @@ -import {defineConfig} from 'vite'; - -// https://vitejs.dev/config/ -export default defineConfig({ - plugins: [], - base: './', - build: { - outDir: 'dist/background', - rollupOptions: { - input: 'src/background/index.ts', - output: { - inlineDynamicImports: true, - entryFileNames: '[name].js' - } - } - } -}); diff --git a/vite.config.content.ts b/vite.config.content.ts deleted file mode 100644 index 4b06a43..0000000 --- a/vite.config.content.ts +++ /dev/null @@ -1,17 +0,0 @@ -import {defineConfig} from 'vite'; - -// https://vitejs.dev/config/ -export default defineConfig({ - plugins: [], - base: './', - build: { - outDir: 'dist/content', - rollupOptions: { - input: 'src/content/index.ts', - output: { - inlineDynamicImports: true, - entryFileNames: '[name].js' - } - } - } -}); diff --git a/vite.config.popup.ts b/vite.config.popup.ts deleted file mode 100644 index 6b52a12..0000000 --- a/vite.config.popup.ts +++ /dev/null @@ -1,14 +0,0 @@ -import react from '@vitejs/plugin-react'; -import {defineConfig} from 'vite'; - -// https://vitejs.dev/config/ -export default defineConfig({ - plugins: [react()], - base: './', - build: { - outDir: 'dist/popup', - rollupOptions: { - input: 'index.html' - } - } -}); diff --git a/vite.config.ts b/vite.config.ts new file mode 100644 index 0000000..f960089 --- /dev/null +++ b/vite.config.ts @@ -0,0 +1,14 @@ +import { crx } from '@crxjs/vite-plugin'; +import react from '@vitejs/plugin-react'; +import { defineConfig } from 'vite'; + +import manifest from './manifest.json'; + +// https://vitejs.dev/config/ +export default defineConfig({ + plugins: [react(), crx({ manifest })], + build: { + outDir: 'dist', + emptyOutDir: true + } +}); diff --git a/yarn.lock b/yarn.lock index ac5f556..b49a7bb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -307,6 +307,28 @@ "@babel/helper-validator-identifier" "^7.22.20" to-fast-properties "^2.0.0" +"@crxjs/vite-plugin@2.0.0-beta.23": + version "2.0.0-beta.23" + resolved "https://registry.yarnpkg.com/@crxjs/vite-plugin/-/vite-plugin-2.0.0-beta.23.tgz#4d402f25d0ce5456cce5e7627b98210256fbf624" + integrity sha512-AO+VYhtNZ1fITq/sc54FZpTtFvHR+gJwFGiWTGKs07bwYzzZFdF0sYeiFgZiEjaNkddkAzuM4F4lgOmCm69YUw== + dependencies: + "@rollup/pluginutils" "^4.1.2" + "@webcomponents/custom-elements" "^1.5.0" + acorn-walk "^8.2.0" + cheerio "^1.0.0-rc.10" + connect-injector "^0.4.4" + convert-source-map "^1.7.0" + debug "^4.3.3" + es-module-lexer "^0.10.0" + fast-glob "^3.2.11" + fs-extra "^10.0.1" + jsesc "^3.0.2" + magic-string "^0.26.0" + picocolors "^1.0.0" + react-refresh "^0.13.0" + rollup "2.78.1" + rxjs "7.5.7" + "@emotion/babel-plugin@^11.11.0": version "11.11.0" resolved "https://registry.yarnpkg.com/@emotion/babel-plugin/-/babel-plugin-11.11.0.tgz#c2d872b6a7767a9d176d007f5b31f7d504bb5d6c" @@ -804,6 +826,14 @@ resolved "https://registry.yarnpkg.com/@remix-run/router/-/router-1.15.3.tgz#d2509048d69dbb72d5389a14945339f1430b2d3c" integrity sha512-Oy8rmScVrVxWZVOpEF57ovlnhpZ8CCPlnIIumVcV9nFdiSIrus99+Lw78ekXyGvVDlIsFJbSfmSovJUhCWYV3w== +"@rollup/pluginutils@^4.1.2": + version "4.2.1" + resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-4.2.1.tgz#e6c6c3aba0744edce3fb2074922d3776c0af2a6d" + integrity sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ== + dependencies: + estree-walker "^2.0.1" + picomatch "^2.2.2" + "@rollup/rollup-android-arm-eabi@4.13.0": version "4.13.0" resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.13.0.tgz#b98786c1304b4ff8db3a873180b778649b5dff2b" @@ -1071,11 +1101,21 @@ "@types/babel__core" "^7.20.5" react-refresh "^0.14.0" +"@webcomponents/custom-elements@^1.5.0": + version "1.6.0" + resolved "https://registry.yarnpkg.com/@webcomponents/custom-elements/-/custom-elements-1.6.0.tgz#5ecde1c332464ff00612f51874484b78395d504d" + integrity sha512-CqTpxOlUCPWRNUPZDxT5v2NnHXA4oox612iUGnmTUGQFhZ1Gkj8kirtl/2wcF6MqX7+PqqicZzOCBKKfIn0dww== + acorn-jsx@^5.3.2: version "5.3.2" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== +acorn-walk@^8.2.0: + version "8.3.2" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.2.tgz#7703af9415f1b6db9315d6895503862e231d34aa" + integrity sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A== + acorn@^8.9.0: version "8.10.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.10.0.tgz#8be5b3907a67221a81ab23c7889c4c5526b62ec5" @@ -1286,6 +1326,11 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== +boolbase@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" + integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== + brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -1364,6 +1409,31 @@ chalk@^4.0.0: ansi-styles "^4.1.0" supports-color "^7.1.0" +cheerio-select@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cheerio-select/-/cheerio-select-2.1.0.tgz#4d8673286b8126ca2a8e42740d5e3c4884ae21b4" + integrity sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g== + dependencies: + boolbase "^1.0.0" + css-select "^5.1.0" + css-what "^6.1.0" + domelementtype "^2.3.0" + domhandler "^5.0.3" + domutils "^3.0.1" + +cheerio@^1.0.0-rc.10: + version "1.0.0-rc.12" + resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.12.tgz#788bf7466506b1c6bf5fae51d24a2c4d62e47683" + integrity sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q== + dependencies: + cheerio-select "^2.1.0" + dom-serializer "^2.0.0" + domhandler "^5.0.3" + domutils "^3.0.1" + htmlparser2 "^8.0.1" + parse5 "^7.0.0" + parse5-htmlparser2-tree-adapter "^7.0.0" + chrome-types@^0.1.274: version "0.1.274" resolved "https://registry.yarnpkg.com/chrome-types/-/chrome-types-0.1.274.tgz#0c91a5bbc0347220c72ccf72fdc892490382ff1e" @@ -1419,7 +1489,17 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== -convert-source-map@^1.5.0: +connect-injector@^0.4.4: + version "0.4.4" + resolved "https://registry.yarnpkg.com/connect-injector/-/connect-injector-0.4.4.tgz#a81959c31ecf5caa0f3dcc325c28ed90b830aa90" + integrity sha512-hdBG8nXop42y2gWCqOV8y1O3uVk4cIU+SoxLCPyCUKRImyPiScoNiSulpHjoktRU1BdI0UzoUdxUa87thrcmHw== + dependencies: + debug "^2.0.0" + q "^1.0.1" + stream-buffers "^0.2.3" + uberproto "^1.1.0" + +convert-source-map@^1.5.0, convert-source-map@^1.7.0: version "1.9.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== @@ -1467,6 +1547,22 @@ cross-spawn@^7.0.0, cross-spawn@^7.0.2: shebang-command "^2.0.0" which "^2.0.1" +css-select@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-5.1.0.tgz#b8ebd6554c3637ccc76688804ad3f6a6fdaea8a6" + integrity sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg== + dependencies: + boolbase "^1.0.0" + css-what "^6.1.0" + domhandler "^5.0.2" + domutils "^3.0.1" + nth-check "^2.0.1" + +css-what@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" + integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== + csstype@^3.0.2: version "3.1.2" resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.2.tgz#1d4bf9d572f11c14031f0436e1c10bc1f571f50b" @@ -1504,7 +1600,14 @@ data-view-byte-offset@^1.0.0: es-errors "^1.3.0" is-data-view "^1.0.1" -debug@^4.1.0, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: +debug@^2.0.0: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@^4.1.0, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== @@ -1576,6 +1679,36 @@ dom-helpers@^5.0.1: "@babel/runtime" "^7.8.7" csstype "^3.0.2" +dom-serializer@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-2.0.0.tgz#e41b802e1eedf9f6cae183ce5e622d789d7d8e53" + integrity sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg== + dependencies: + domelementtype "^2.3.0" + domhandler "^5.0.2" + entities "^4.2.0" + +domelementtype@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" + integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== + +domhandler@^5.0.2, domhandler@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31" + integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w== + dependencies: + domelementtype "^2.3.0" + +domutils@^3.0.1: + version "3.1.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.1.0.tgz#c47f551278d3dc4b0b1ab8cbb42d751a6f0d824e" + integrity sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA== + dependencies: + dom-serializer "^2.0.0" + domelementtype "^2.3.0" + domhandler "^5.0.3" + eastasianwidth@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" @@ -1596,6 +1729,11 @@ emoji-regex@^9.2.2: resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== +entities@^4.2.0, entities@^4.4.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" + integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== + error-ex@^1.3.1: version "1.3.2" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" @@ -1779,6 +1917,11 @@ es-iterator-helpers@^1.0.17: iterator.prototype "^1.1.2" safe-array-concat "^1.1.2" +es-module-lexer@^0.10.0: + version "0.10.5" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-0.10.5.tgz#06f76d51fa53b1f78e3bd8bb36dd275eda2fdd53" + integrity sha512-+7IwY/kiGAacQfY+YBhKMvEmyAJnw5grTUgjG85Pe7vcUI/6b7pZjZG8nQ7+48YhzEAEqrEgD2dCz/JIK+AYvw== + es-object-atoms@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.0.0.tgz#ddb55cd47ac2e240701260bc2a8e31ecb643d941" @@ -1995,6 +2138,11 @@ estraverse@^5.1.0, estraverse@^5.2.0, estraverse@^5.3.0: resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== +estree-walker@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" + integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== + esutils@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" @@ -2005,6 +2153,17 @@ fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== +fast-glob@^3.2.11: + version "3.3.2" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" + integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + fast-glob@^3.2.9: version "3.3.1" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.1.tgz#784b4e897340f3dbbef17413b3f11acf03c874c4" @@ -2102,6 +2261,15 @@ form-data@^4.0.0: combined-stream "^1.0.8" mime-types "^2.1.12" +fs-extra@^10.0.1: + version "10.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" + integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" @@ -2275,6 +2443,11 @@ gopd@^1.0.1: dependencies: get-intrinsic "^1.1.3" +graceful-fs@^4.1.6, graceful-fs@^4.2.0: + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + graphemer@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" @@ -2359,6 +2532,16 @@ hoist-non-react-statics@^3.3.1: dependencies: react-is "^16.7.0" +htmlparser2@^8.0.1: + version "8.0.2" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-8.0.2.tgz#f002151705b383e62433b5cf466f5b716edaec21" + integrity sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA== + dependencies: + domelementtype "^2.3.0" + domhandler "^5.0.3" + domutils "^3.0.1" + entities "^4.4.0" + ignore@^5.2.0: version "5.2.4" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" @@ -2685,6 +2868,11 @@ jsesc@^2.5.1: resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== +jsesc@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.0.2.tgz#bb8b09a6597ba426425f2e4a07245c3d00b9343e" + integrity sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g== + json-parse-even-better-errors@^2.3.0: version "2.3.1" resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" @@ -2705,6 +2893,15 @@ json5@^2.2.3: resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== +jsonfile@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + dependencies: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + "jsx-ast-utils@^2.4.1 || ^3.0.0": version "3.3.5" resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz#4766bd05a8e2a11af222becd19e15575e52a853a" @@ -2766,6 +2963,13 @@ lru-cache@^6.0.0: resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.0.1.tgz#0a3be479df549cca0e5d693ac402ff19537a6b7a" integrity sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g== +magic-string@^0.26.0: + version "0.26.7" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.26.7.tgz#caf7daf61b34e9982f8228c4527474dac8981d6f" + integrity sha512-hX9XH3ziStPoPhJxLq1syWuZMxbDvGNbVchfrdCtanC7D13888bMFow61x8axrx+GfHLtVeAx2kxL7tTGRl+Ow== + dependencies: + sourcemap-codec "^1.4.8" + merge2@^1.3.0, merge2@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" @@ -2815,6 +3019,11 @@ mkdirp@^1.0.4: resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== + ms@2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" @@ -2843,6 +3052,13 @@ noms@0.0.0: inherits "^2.0.1" readable-stream "~1.0.31" +nth-check@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" + integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== + dependencies: + boolbase "^1.0.0" + object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" @@ -2977,6 +3193,21 @@ parse-json@^5.0.0: json-parse-even-better-errors "^2.3.0" lines-and-columns "^1.1.6" +parse5-htmlparser2-tree-adapter@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz#23c2cc233bcf09bb7beba8b8a69d46b08c62c2f1" + integrity sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g== + dependencies: + domhandler "^5.0.2" + parse5 "^7.0.0" + +parse5@^7.0.0: + version "7.1.2" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.1.2.tgz#0736bebbfd77793823240a23b7fc5e010b7f8e32" + integrity sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw== + dependencies: + entities "^4.4.0" + path-exists@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" @@ -3015,7 +3246,7 @@ picocolors@^1.0.0: resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== -picomatch@^2.3.1: +picomatch@^2.2.2, picomatch@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== @@ -3068,6 +3299,11 @@ punycode@^2.1.0: resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== +q@^1.0.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" + integrity sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw== + queue-microtask@^1.2.2: version "1.2.3" resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" @@ -3091,6 +3327,11 @@ react-is@^18.2.0: resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== +react-refresh@^0.13.0: + version "0.13.0" + resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.13.0.tgz#cbd01a4482a177a5da8d44c9755ebb1f26d5a1c1" + integrity sha512-XP8A9BT0CpRBD+NYLLeIhld/RqG9+gktUjW1FkE+Vm7OCinbG1SshcK5tb9ls4kzvjZr9mOQc7HYgBngEyPAXg== + react-refresh@^0.14.0: version "0.14.0" resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.14.0.tgz#4e02825378a5f227079554d4284889354e5f553e" @@ -3240,6 +3481,13 @@ rimraf@^5.0.5: dependencies: glob "^10.3.7" +rollup@2.78.1: + version "2.78.1" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.78.1.tgz#52fe3934d9c83cb4f7c4cb5fb75d88591be8648f" + integrity sha512-VeeCgtGi4P+o9hIg+xz4qQpRl6R401LWEXBmxYKOV4zlF82lyhgh2hTZnheFUbANE8l2A41F458iwj2vEYaXJg== + optionalDependencies: + fsevents "~2.3.2" + rollup@^4.13.0: version "4.13.0" resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.13.0.tgz#dd2ae144b4cdc2ea25420477f68d4937a721237a" @@ -3269,6 +3517,13 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" +rxjs@7.5.7: + version "7.5.7" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.5.7.tgz#2ec0d57fdc89ece220d2e702730ae8f1e49def39" + integrity sha512-z9MzKh/UcOqB3i20H6rtrlaE/CgjLOvheWK/9ILrbhROGTweAi1BaFsTT9FbwZi5Trr1qNRs+MXkhmR06awzQA== + dependencies: + tslib "^2.1.0" + safe-array-concat@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.0.0.tgz#2064223cba3c08d2ee05148eedbc563cd6d84060" @@ -3394,6 +3649,16 @@ source-map@^0.5.7: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== +sourcemap-codec@^1.4.8: + version "1.4.8" + resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" + integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== + +stream-buffers@^0.2.3: + version "0.2.6" + resolved "https://registry.yarnpkg.com/stream-buffers/-/stream-buffers-0.2.6.tgz#181c08d5bb3690045f69401b9ae6a7a0cf3313fc" + integrity sha512-ZRpmWyuCdg0TtNKk8bEqvm13oQvXMmzXDsfD4cBgcx5LouborvU5pm3JMkdTP3HcszyUI08AM1dHMXA5r2g6Sg== + "string-width-cjs@npm:string-width@^4.2.0", string-width@^4.1.0, string-width@^4.2.0: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" @@ -3567,6 +3832,11 @@ ts-api-utils@^1.0.1: resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.3.0.tgz#4b490e27129f1e8e686b45cc4ab63714dc60eea1" integrity sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ== +tslib@^2.1.0: + version "2.6.2" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" + integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== + type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" @@ -3675,6 +3945,11 @@ typescript@5.4.3: resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.3.tgz#5c6fedd4c87bee01cd7a528a30145521f8e0feff" integrity sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg== +uberproto@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/uberproto/-/uberproto-1.2.0.tgz#61d4eab024f909c4e6ea52be867c4894a4beeb76" + integrity sha512-pGtPAQmLwh+R9w81WVHzui1FfedpQWQpiaIIfPCwhtsBez4q6DYbJFfyXPVHPUTNFnedAvNEnkoFiLuhXIR94w== + unbox-primitive@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" @@ -3685,6 +3960,11 @@ unbox-primitive@^1.0.2: has-symbols "^1.0.3" which-boxed-primitive "^1.0.2" +universalify@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" + integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== + untildify@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/untildify/-/untildify-4.0.0.tgz#2bc947b953652487e4600949fb091e3ae8cd919b" From dc3eaf8b57c1a05a4f51721f0b07225b48a0ad1d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Kiljan=CC=81czyk?= Date: Tue, 26 Mar 2024 18:22:48 +0100 Subject: [PATCH 2/4] Update README.md --- README.md | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 879c41e..5a9a27e 100644 --- a/README.md +++ b/README.md @@ -14,11 +14,12 @@ from [chrome-extension-boilerplate-react](https://github.com/lxieyang/chrome-ext ## Features This is a basic Chrome Extensions boilerplate to help you write modular and modern Javascript code and load CSS easily. -This boilerplate is updated with: +This boilerplate is using: - [Chrome Extension Manifest V3](https://developer.chrome.com/docs/extensions/mv3/intro/mv3-overview/) - [React 18](https://reactjs.org) - [MUI](https://mui.com/) +- [CRXJS Vite Plugin](https://www.npmjs.com/package/@crxjs/vite-plugin/v/2.0.0-beta.23) - ESLint: - [eslint-plugin-react](https://www.npmjs.com/package/eslint-plugin-react) - [eslint-config-prettier](https://www.npmjs.com/package/eslint-config-prettier) @@ -27,9 +28,6 @@ This boilerplate is updated with: - [Prettier](https://prettier.io/) - [TypeScript](https://www.typescriptlang.org/) -I have avoided using CRXJS Vite Plugin on purpose as it's last update was in 2022, and it could possibly have some -issues with newer versions of Vite. - Please open up an issue to nudge me to keep the npm packages up-to-date. ## Installing and Running @@ -39,9 +37,9 @@ Please open up an issue to nudge me to keep the npm packages up-to-date. 1. Check if your [Node.js](https://nodejs.org/) version is >= **18**. 2. Clone this repository. 3. Change the package's `name`, `description`, and `repository` fields in `package.json`. -4. Change the name of your extension on `src/manifest.json`. +4. Change the name of your extension in `manifest.json`. 5. Run `yarn install` to install the dependencies. -6. Run `yarn dist` +6. Run `yarn build` 7. Load your extension on Chrome following: 1. Access `chrome://extensions/` 2. Turn the `Developer mode` switch on (top right corner) @@ -64,16 +62,14 @@ This boilerplate supports TypeScript! Everything that can be written in TypeScri ## Change Watchers -This boilerplate has watch scripts for the popup (`yarn watch:popup`), background script (`yarn watch:background`), and -content script (`yarn watch:content`). -`yarn dist` has to be run first to copy assets, `manifest.json` and Chrome extension files to the `dist` folder. +This boilerplate has a watch script (`yarn watch`) which will update the extension's code every time you save a file. ## Packing After the development of your extension run the command ``` -$ yarn dist +$ yarn build ``` Now, the content of `dist` folder will be the extension ready to be submitted to the Chrome Web Store. Just take a look From aee2102c77bb10f77c34fd30a796170383db680f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Kiljan=CC=81czyk?= Date: Tue, 26 Mar 2024 18:24:57 +0100 Subject: [PATCH 3/4] Resolve eslint issues --- src/popup/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/popup/index.tsx b/src/popup/index.tsx index 2832382..ace1a3a 100644 --- a/src/popup/index.tsx +++ b/src/popup/index.tsx @@ -1,4 +1,4 @@ -import { lazy, ReactElement, StrictMode, Suspense } from 'react'; +import { StrictMode } from 'react'; import { createRoot } from 'react-dom/client'; import App from './App'; From efc0ebba3170e0835cfe250ecfb2c52f4718b801 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Kiljan=CC=81czyk?= Date: Tue, 26 Mar 2024 18:26:09 +0100 Subject: [PATCH 4/4] Update README.md --- README.md | 35 +++++++++++++++++++---------------- 1 file changed, 19 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index 5a9a27e..bdf249b 100644 --- a/README.md +++ b/README.md @@ -2,10 +2,13 @@ # Chrome Extension (MV3) Boilerplate with React 18 and Vite 5 -[//]: # 'TODO: Publish the template on NPM' -[//]: # '[![npm](https://img.shields.io/npm/v/chrome-extension-boilerplate-react)](https://www.npmjs.com/package/chrome-extension-boilerplate-react)' -[//]: # '[![npm-download](https://img.shields.io/npm/dw/chrome-extension-boilerplate-react)](https://www.npmjs.com/package/chrome-extension-boilerplate-react)' -[//]: # '[![npm](https://img.shields.io/npm/dm/chrome-extension-boilerplate-react)](https://www.npmjs.com/package/chrome-extension-boilerplate-react)' +[//]: # (# 'TODO: Publish the template on NPM') + +[//]: # ([![npm](https://img.shields.io/npm/v/chrome-extension-boilerplate-react)](https://www.npmjs.com/package/chrome-extension-boilerplate-react)) + +[//]: # ([![npm-download](https://img.shields.io/npm/dw/chrome-extension-boilerplate-react)](https://www.npmjs.com/package/chrome-extension-boilerplate-react)) + +[//]: # ([![npm](https://img.shields.io/npm/dm/chrome-extension-boilerplate-react)](https://www.npmjs.com/package/chrome-extension-boilerplate-react)) This repository contains a boilerplate for building Chrome Extensions with React 18, TypeScript, and Vite 5. This boilerplate is inspired by and adapted @@ -16,17 +19,17 @@ from [chrome-extension-boilerplate-react](https://github.com/lxieyang/chrome-ext This is a basic Chrome Extensions boilerplate to help you write modular and modern Javascript code and load CSS easily. This boilerplate is using: -- [Chrome Extension Manifest V3](https://developer.chrome.com/docs/extensions/mv3/intro/mv3-overview/) -- [React 18](https://reactjs.org) -- [MUI](https://mui.com/) -- [CRXJS Vite Plugin](https://www.npmjs.com/package/@crxjs/vite-plugin/v/2.0.0-beta.23) -- ESLint: - - [eslint-plugin-react](https://www.npmjs.com/package/eslint-plugin-react) - - [eslint-config-prettier](https://www.npmjs.com/package/eslint-config-prettier) - - [eslint-plugin-simple-import-sort](https://www.npmjs.com/package/eslint-plugin-simple-import-sort) - - [typescript-eslint](https://www.npmjs.com/package/typescript-eslint) -- [Prettier](https://prettier.io/) -- [TypeScript](https://www.typescriptlang.org/) +- [Chrome Extension Manifest V3](https://developer.chrome.com/docs/extensions/mv3/intro/mv3-overview/) +- [React 18](https://reactjs.org) +- [MUI](https://mui.com/) +- [CRXJS Vite Plugin](https://www.npmjs.com/package/@crxjs/vite-plugin/v/2.0.0-beta.23) +- ESLint: + - [eslint-plugin-react](https://www.npmjs.com/package/eslint-plugin-react) + - [eslint-config-prettier](https://www.npmjs.com/package/eslint-config-prettier) + - [eslint-plugin-simple-import-sort](https://www.npmjs.com/package/eslint-plugin-simple-import-sort) + - [typescript-eslint](https://www.npmjs.com/package/typescript-eslint) +- [Prettier](https://prettier.io/) +- [TypeScript](https://www.typescriptlang.org/) Please open up an issue to nudge me to keep the npm packages up-to-date. @@ -77,7 +80,7 @@ at the [official guide](https://developer.chrome.com/webstore/publish) to more i ## Resources: -- [Chrome Extension documentation](https://developer.chrome.com/extensions/getstarted) +- [Chrome Extension documentation](https://developer.chrome.com/extensions/getstarted) ---