diff --git a/.eslintignore b/.eslintignore index cdda89c5ed..fa102f542e 100644 --- a/.eslintignore +++ b/.eslintignore @@ -23,3 +23,6 @@ test index.js .eslintrc.js + +packages/shared/ts-compiled-for-tests +packages/target-electron/tests/compiled \ No newline at end of file diff --git a/.github/workflows/basic-tests.yml b/.github/workflows/basic-tests.yml index 321b47e366..3618de5dd8 100644 --- a/.github/workflows/basic-tests.yml +++ b/.github/workflows/basic-tests.yml @@ -1,4 +1,4 @@ -name: Basic Code Checks +name: Basic Code Checks & Tests on: push: @@ -12,7 +12,7 @@ on: - '.vscode/**' jobs: - test: + check: name: Code Validation runs-on: ubuntu-latest @@ -22,18 +22,29 @@ jobs: uses: actions/setup-node@v1 with: node-version: 20.x - - name: npm ci - run: | - npm ci - - name: preperation (generate code) + - name: pnpm install run: | - npm run build:shared:version + npm i -g pnpm + pnpm install --frozen-lockfile - name: Run all checks run: | - npm run check - - name: Check for misplaced console.log statements + pnpm check + test: + name: Code Tests + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v1 + - name: Use Node.js 20.x + uses: actions/setup-node@v1 + with: + node-version: 20.x + - name: pnpm install run: | - npm run test-log-conventions - - name: Misc tests + npm i -g pnpm + pnpm install --frozen-lockfile + - name: Build + run: pnpm build:electron + - name: Run all checks run: | - npm run test-misc \ No newline at end of file + pnpm test diff --git a/.github/workflows/build-preview.yml b/.github/workflows/build-preview.yml index 0834313748..8193b8e835 100644 --- a/.github/workflows/build-preview.yml +++ b/.github/workflows/build-preview.yml @@ -34,19 +34,24 @@ jobs: run: | node ./bin/github-actions/devbuild.js # Building JS - - name: npm install, build + - name: pnpm install, build run: | - npm install - npm run build - npm run pack:generate_config + npm i -g pnpm + pnpm install --frozen-lockfile + cd packages/target-electron + pnpm build + pnpm run pack:generate_config + pnpm run pack:patch-node-modules # Packaging and processing - name: LINUX electron builder if: runner.os == 'Linux' run: | export DEBUG=electron-builder - npm exec -- electron-builder --publish never --linux AppImage + cd packages/target-electron + pnpm electron-builder --publish never --linux AppImage - name: LINUX renaming / upload Preperation if: runner.os == 'Linux' + working-directory: packages/target-electron run: | cd dist mkdir preview @@ -56,16 +61,19 @@ jobs: - name: MAC electron builder if: runner.os == 'macOS' run: | + cd packages/target-electron echo "module.exports=()=>Promise.resolve()" > stub.cjs export CSC_IDENTITY_AUTO_DISCOVERY=false export DEBUG=electron-builder - npm i dmg-license - npm i --cpu x64 --os darwin - npm i --cpu arm64 --os darwin + pnpm i dmg-license + # all archs are enabled, because only installing some is not supported yet by pnpm: https://github.com/pnpm/pnpm/issues/7510 + # pnpm i --cpu x64 --os darwin + # pnpm i --cpu arm64 --os darwin ls node_modules/@deltachat - npm exec -- electron-builder --publish never --mac mas dmg -c.mac.identity=null --universal --config.afterSign="stub.cjs" + pnpm electron-builder --publish never --mac mas dmg -c.mac.identity=null --universal --config.afterSign="stub.cjs" - name: MAC renaming / upload Preperation if: runner.os == 'macOS' + working-directory: packages/target-electron run: | ls -lah dist mkdir -p dist/preview @@ -77,12 +85,13 @@ jobs: - name: WINDOWS electron builder if: runner.os == 'Windows' run: | + cd packages/target-electron set DEBUG=electron-builder - npm exec -- electron-builder --win portable --config.artifactName="deltachat-desktop-${{ steps.prepare.outputs.prid }}.portable.exe" + pnpm electron-builder --win portable --config.artifactName="deltachat-desktop-${{ steps.prepare.outputs.prid }}.portable.exe" - name: WINDOWS renaming / upload Preperation if: runner.os == 'Windows' + working-directory: packages/target-electron/dist run: | - cd dist dir mkdir preview move deltachat-desktop-${{ steps.prepare.outputs.prid }}.portable.exe preview/deltachat-desktop-${{ steps.prepare.outputs.prid }}.portable.exe @@ -95,7 +104,7 @@ jobs: run: | echo -e "${{ secrets.KEY }}" >__TEMP_INPUT_KEY_FILE chmod 600 __TEMP_INPUT_KEY_FILE - scp -o StrictHostKeyChecking=no -v -i __TEMP_INPUT_KEY_FILE -P "22" -r dist/preview/* "${{ secrets.USERNAME }}"@"download.delta.chat":"/var/www/html/download/desktop/preview/" + scp -o StrictHostKeyChecking=no -v -i __TEMP_INPUT_KEY_FILE -P "22" -r packages/target-electron/dist/preview/* "${{ secrets.USERNAME }}"@"download.delta.chat":"/var/www/html/download/desktop/preview/" continue-on-error: true - name: "Post links to details" if: steps.upload.outcome == 'success' @@ -108,4 +117,4 @@ jobs: uses: actions/upload-artifact@master with: name: ${{ matrix.os }} output - path: dist/preview/ + path: packages/target-electron/dist/preview/ diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index c55600b996..378004e9bd 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -10,7 +10,7 @@ on: jobs: test: - name: Tests and E2E Tests + name: Tests #and E2E Tests runs-on: ${{ matrix.os }} strategy: matrix: @@ -22,20 +22,21 @@ jobs: uses: actions/setup-node@v1 with: node-version: 20.x - - name: npm ci + - name: install dependencies run: | - npm ci - - name: npm run build + npm i -g pnpm + pnpm install --frozen-lockfile + - name: build run: | - npm run build - - name: npm test-unit + pnpm run build + - name: test run: | - npm run test-unit - - uses: DevExpress/testcafe-action@latest - with: - version: "1.15.0" - args: "--skip-js-errors electron:. ./test/testcafe/test.js ./test/testcafe/messagelist_tests.ts" - env: - DCC_NEW_TMP_EMAIL: ${{secrets.DCC_NEW_TMP_EMAIL}} - NODE_ENV: test - TEST_DIR: .test_tmp_data + pnpm run test + # - uses: DevExpress/testcafe-action@latest + # with: + # version: "1.15.0" + # args: "--skip-js-errors electron:. ./test/testcafe/test.js ./test/testcafe/messagelist_tests.ts" + # env: + # DCC_NEW_TMP_EMAIL: ${{secrets.DCC_NEW_TMP_EMAIL}} + # NODE_ENV: test + # TEST_DIR: .test_tmp_data diff --git a/.gitignore b/.gitignore index 48e65d8092..03d7a0b4ea 100644 --- a/.gitignore +++ b/.gitignore @@ -77,10 +77,6 @@ static/conversations.css # portable config folders DeltaChatData -static/fallback-theme.css -themes/*.css - -src/shared/build-info.ts # ignore provisioning file embedded.provisionprofile @@ -89,9 +85,6 @@ stub.js # message list e2e test .test_tmp_data -# pnpm lockfile -pnpm-lock.yaml - deltachat-rpc-server-aarch64-macos .direnv .envrc diff --git a/.npmrc b/.npmrc new file mode 100644 index 0000000000..254d52b40a --- /dev/null +++ b/.npmrc @@ -0,0 +1,2 @@ +# this allows us to use env vars in scripts in package.json crossplatform +shell-emulator=true \ No newline at end of file diff --git a/.prettierignore b/.prettierignore index 425a27a29b..c322ab018e 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,4 +1,7 @@ CONTRIBUTORS.md CHANGELOG.md node_modules -src/shared/build-info.ts + +packages/target-electron/bundle_out +packages/target-electron/tests/compiled +packages/shared/ts-compiled-for-tests \ No newline at end of file diff --git a/.prettierrc.yml b/.prettierrc.yml index 6f775ade02..7f095b540a 100644 --- a/.prettierrc.yml +++ b/.prettierrc.yml @@ -6,3 +6,11 @@ singleQuote: true jsxSingleQuote: true endOfLine: auto arrowParens: avoid + +overrides: +- files: "*.json5" + options: + singleQuote: false + quoteProps: preserve + trailingComma: none + parser: json5 diff --git a/.testcafe-electron-rc b/.testcafe-electron-rc deleted file mode 100644 index 56e2734e0b..0000000000 --- a/.testcafe-electron-rc +++ /dev/null @@ -1,8 +0,0 @@ -{ - "mainWindowUrl": "./html-dist/test.html", - "appPath": ".", - "openDevTools": true, - "selectorTimeout": 50000, - "assertTimeout": 20000, - "testSpeed": 0.6 -} \ No newline at end of file diff --git a/.vscode/tasks.json b/.vscode/tasks.json deleted file mode 100644 index 4ad71e4045..0000000000 --- a/.vscode/tasks.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - // See https://go.microsoft.com/fwlink/?LinkId=733558 - // for the documentation about the tasks.json format - "version": "2.0.0", - "tasks": [ - { - "type": "npm", - "script": "lint", - "problemMatcher": [ - "$eslint-stylish" - ] - } - ] -} \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 944f98989d..b8631c12ac 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,8 +5,21 @@ ### Added ### Changed - -### Fixed +- dev: transformed repo into monorepo +- dev: switched from `npm` to `pnpm` +- dev: esbuild bundling for electron main process js (+minification for releases) +- changed implementation for accepting dropped in files, use browser apis instead of electron specific hack. +- dev: improved `./bin/test_for_missing_translations.sh` script: It is now more correct, helpful and faster + +### Fixed +- fix that you can not click header button in dialog when they are on top of the navbar #4093 +- fix if Contact has long bio/signature, then shared chats were hidden #4093 +- dev: proper native source-map support during development for main process +- dev: use correct log level when logging to console in main process +- security: harden electron_functions, only runtime can use them now +- security: harden runtime interface by deleting the reference on window (`window.r`) after the first use. For development it is now accessible at `exp.runtime` but only in `--devmode` like `exp.rpc` +- dev: update `./bin/update_background_thumbnails.sh` script +- fix chatlist image thumbnails #4101 @@ -20,6 +33,8 @@ - Display `Config::MdnsEnabled` as true by default. ### Fixed +- fix that you can not click header button in dialog when they are on top of the navbar #4093 +- fix if Contact has long bio/signature, then shared chats were hidden #4093 - fix newlines in messages with WebXDC attachments #4079 - being unable to delete a nonfunctional account imported from ArcaneChat #4104 - Ctrl/Cmd+Q (also File->Quit) now should properly close the app when focus is on main window @@ -34,6 +49,7 @@ - Update `@deltachat/stdio-rpc-server` and `deltachat/jsonrpc-client` to `1.142.11` - Set backward verification when observing `vc-contact-confirm` or `vg-member-added` + ## [1.46.6] - 2024-08-29 diff --git a/README.md b/README.md index 64eb70b28c..ad3ca13905 100644 --- a/README.md +++ b/README.md @@ -142,16 +142,21 @@ You can find the downloads for windows on , though we re $ git clone https://github.com/deltachat/deltachat-desktop.git $ cd deltachat-desktop +# Install pnpm +$ npm i -g pnpm + # Install dependencies -$ npm install +$ pnpm install # Build the app (only needed on the first time or if the code was changed) -$ npm run build +$ pnpm -w build:electron # Start the application: -$ npm start +$ pnpm -w start:electron ``` +> `-w` means workspace root package, with this you don't need to have your current working directory at the repo-root to run those scripts. + For development with local deltachat-core read the [docs](docs/UPDATE_CORE.md) ### Troubleshooting diff --git a/RELEASE.md b/RELEASE.md index 405da56c08..09ea721b08 100644 --- a/RELEASE.md +++ b/RELEASE.md @@ -61,7 +61,7 @@ 1. Make sure no "blocking" bugs are in the issue tracker. If there's any, try to solve them first: -2. Pull translations via `npm run translations-update` in a separate PR +2. Pull translations via `pnpm -w translations:update` in a separate PR 3. Update the local help files if necessary in a separate PR: 4. If you've updated any translations or local help files, make sure that the @@ -75,7 +75,7 @@ section with your new version code) 3. Do not forget to update the tag links at the end of the `CHANGELOG.md` file! 4. Change `version` field in `package.json` to `X.Y.Z` -5. Run `npm install` to update `package-lock.json` +5. Run `pnpm -w update:target-versions` to update versions in the other packages 6. Open a PR for your branch and get it reviewed. 7. As soon as your PR is approved merge it to `main` 8. After the PR is merged, checkout the latest version on `main`. Tag the latest commit diff --git a/_locales/_languages.json b/_locales/_languages.json index bf8bd0e62b..3134f6dfcc 100644 --- a/_locales/_languages.json +++ b/_locales/_languages.json @@ -4,12 +4,12 @@ "bg": "Български език", "bqi": "Luri Bakhtiari", "ca": "Català", - "cs": "Čeština", "ckb": "کوردی", + "cs": "Čeština", "da": "Dansk", "de": "Deutsch", - "en": "English", "el": "ελληνικά", + "en": "English", "eo": "Esperanto", "es": "Español", "eu": "Euskara", @@ -44,4 +44,4 @@ "vi": "Tiếng Việt", "zh_CN": "简体中文", "zh_TW": "繁體中文" -} \ No newline at end of file +} diff --git a/bin/build-frontend-themes.js b/bin/build-frontend-themes.js deleted file mode 100644 index 01a2a37578..0000000000 --- a/bin/build-frontend-themes.js +++ /dev/null @@ -1,58 +0,0 @@ -//@ts-check -import { readdir, readFile, writeFile, rm } from 'fs/promises' -import { render } from 'sass' -import { join, dirname } from 'path' - -import { fileURLToPath } from 'url' - -const __dirname = dirname(fileURLToPath(import.meta.url)) - -const dc_theme_dir = join(__dirname, '../themes') -;(async () => { - const files = await readdir(dc_theme_dir) - - // remove old files - await Promise.all( - files - .filter(f => f.includes('.css')) - .map(file => rm(join(dc_theme_dir, file))) - ) - - const themes = files.filter(f => f.includes('.scss') && f.charAt(0) !== '_') - try { - const result = await Promise.all( - themes.map(async theme => { - const theme_data = await readFile(join(dc_theme_dir, theme), 'utf-8') - - return new Promise((res, rej) => { - render( - { - outputStyle: 'compressed', - data: theme_data, - includePaths: [dc_theme_dir], - sourceMap: false, - }, - async (err, result) => { - if (err) return rej(err) - try { - const resulting_filename = theme.replace('.scss', '.css') - await writeFile( - join(dc_theme_dir, resulting_filename), - result.css - ) - res([theme, result.stats.duration]) - } catch (error) { - rej(err) - } - } - ) - }) - }) - ) - // result.forEach(([theme, duration]) => { - // console.log(theme, 'took', duration) - // }) - } catch (error) { - console.error(error) - } -})() diff --git a/bin/copy.js b/bin/copy.js index 0e4a049323..4a5205a445 100644 --- a/bin/copy.js +++ b/bin/copy.js @@ -23,7 +23,11 @@ async function copy(source, destination, watch = false) { try { files = await readdir(source) } catch (err) { - return console.error('- Unable to scan directory: ' + err) + console.error('- Unable to scan directory: ' + err) + if (!watch) { + process.exit(1) + } + return } for (let f of files) { const pathSource = join(source, f) diff --git a/bin/github-actions/devbuild.js b/bin/github-actions/devbuild.js index 8cb37126f0..d03b4ecb00 100644 --- a/bin/github-actions/devbuild.js +++ b/bin/github-actions/devbuild.js @@ -1,4 +1,4 @@ -// this file gets run BEFORE `npm i` so you CAN NOT use npm packages here +// this file gets run BEFORE `pnpm i` so you CAN NOT use npm packages here //@ts-check import { join, dirname } from 'path' @@ -7,23 +7,10 @@ import { fileURLToPath } from 'url' const __dirname = dirname(fileURLToPath(import.meta.url)) -const packageJSON = join(__dirname, '../../package.json') - -const p = JSON.parse(readFileSync(packageJSON, { encoding: 'utf-8' })) - -p.name = 'deltachat-desktop-dev' -p.productName = 'DeltaChat-DevBuild' -p.version = p.version + '-DevBuild' - -writeFileSync(packageJSON, JSON.stringify(p, null, 1)) - -const packageLockJSON = join(__dirname, '../../package-lock.json') - -const pLock = JSON.parse(readFileSync(packageLockJSON, { encoding: 'utf-8' })) -pLock.version = p.version -writeFileSync(packageLockJSON, JSON.stringify(pLock, null, 1)) - -const appConfig = join(__dirname, '../../src/main/application-config.ts') +const appConfig = join( + __dirname, + '../../packages/target-electron/src/application-config.ts' +) const fileContent = readFileSync(appConfig, 'utf-8').replace( "const appConfig = applicationConfig('DeltaChat')", @@ -34,12 +21,12 @@ writeFileSync(appConfig, fileContent) const electronBuilderConfig = join( __dirname, - '../../build/gen-electron-builder-config.js' + '../../packages/target-electron/build/gen-electron-builder-config.js' ) writeFileSync( electronBuilderConfig, readFileSync(electronBuilderConfig, 'utf-8').replace( - "build['appId'] = 'chat.delta.desktop.electron'", - "build['appId'] = 'chat.delta.desktop.electron.dev'" + 'const previewBuild = false', + 'const previewBuild = true' ) ) diff --git a/bin/link_core/link_catalog.sh b/bin/link_core/link_catalog.sh new file mode 100755 index 0000000000..5ffb3ef614 --- /dev/null +++ b/bin/link_core/link_catalog.sh @@ -0,0 +1,14 @@ +#!/bin/bash +set -e + +cd packages/target-electron +pnpm add --save @deltachat/jsonrpc-client@catalog: @deltachat/stdio-rpc-server@catalog: + +cd ../target-browser +pnpm add --save @deltachat/jsonrpc-client@catalog: @deltachat/stdio-rpc-server@catalog: + +cd ../frontend +pnpm add @deltachat/jsonrpc-client@catalog: + +cd ../runtime +pnpm add @deltachat/jsonrpc-client@catalog: diff --git a/bin/link_core/link_local.sh b/bin/link_core/link_local.sh new file mode 100755 index 0000000000..16fbc07214 --- /dev/null +++ b/bin/link_core/link_local.sh @@ -0,0 +1,18 @@ +#!/bin/bash +set -e + +export CORE_REPO_CHECKOUT="../deltachat-core-rust" + +cd packages/target-electron +pnpm add @deltachat/jsonrpc-client@link:../../$CORE_REPO_CHECKOUT/deltachat-jsonrpc/ \ +@deltachat/stdio-rpc-server@link:../../$CORE_REPO_CHECKOUT/deltachat-rpc-server/npm-package + +cd ../target-browser +pnpm add @deltachat/jsonrpc-client@link:../../$CORE_REPO_CHECKOUT/deltachat-jsonrpc/ \ +@deltachat/stdio-rpc-server@link:../../$CORE_REPO_CHECKOUT/deltachat-rpc-server/npm-package + +cd ../frontend +pnpm add @deltachat/jsonrpc-client@link:../../$CORE_REPO_CHECKOUT/deltachat-jsonrpc/ + +cd ../runtime +pnpm add @deltachat/jsonrpc-client@catalog: \ No newline at end of file diff --git a/bin/link_core/link_version.js b/bin/link_core/link_version.js new file mode 100755 index 0000000000..02a42d5f2d --- /dev/null +++ b/bin/link_core/link_version.js @@ -0,0 +1,32 @@ +#!/usr/bin/env node + +import { execSync } from 'child_process' +import { readFileSync, writeFileSync } from 'fs' +import { resolve } from 'path' + +const newVersion = process.argv[2] + +if (!newVersion) { + console.error('You need to enter a version code as first argument') + process.exit(1) +} + +console.log(`You entered version: ${newVersion}`) + +const filePath = resolve('pnpm-workspace.yaml') +const fileContent = readFileSync(filePath, 'utf8') + +const updatedContent = fileContent + .replace( + /('@deltachat\/jsonrpc-client')\s*: \s*(.*?)\n/g, + `$1: ${newVersion}\n` + ) + .replace( + /('@deltachat\/stdio-rpc-server')\s*: \s*(.*?)\n/g, + `$1: ${newVersion}\n` + ) + +writeFileSync(filePath, updatedContent, 'utf8') + +execSync('pnpm i', { stdio: 'inherit' }) +execSync('./bin/link_core/link_catalog.sh', { stdio: 'inherit' }) diff --git a/bin/test_for_missing_translations.sh b/bin/test_for_missing_translations.sh index 1aca49ef36..ce5c7bb3e2 100755 --- a/bin/test_for_missing_translations.sh +++ b/bin/test_for_missing_translations.sh @@ -1,18 +1,74 @@ -# Make sure you have jq installed to run this +#!/usr/bin/env zsh +dark_grey="\033[0;30m" +white="\033[1;37m" +red="\033[1;31m" +reset="\033[0m" + +# Check if ripgrep is installed +if ! command -v rg &> /dev/null; then + echo "${red}ripgrep is not installed${reset}. Please install it to continue." + + # Prompt the user to install ripgrep + read -q "INSTALL_RIPGREP?Do you want to let this script try to install ripgrep now? [y/N] " + echo + + if [[ $INSTALL_RIPGREP =~ ^[Yy]$ ]]; then + # Install ripgrep based on the user's operating system + case "$(uname -s)" in + Darwin) + echo "Installing ripgrep on macOS from homebrew..." + brew install ripgrep + ;; + Linux) + echo "Installing ripgrep on Linux..." + if command -v apt-get &> /dev/null; then + sudo apt-get update + sudo apt-get install -y ripgrep + elif command -v dnf &> /dev/null; then + sudo dnf install -y ripgrep + elif command -v pacman &> /dev/null; then + sudo pacman -S ripgrep + else + echo "Sorry, I don't know how to install ripgrep on your Linux distribution." + echo "Please visit https://github.com/BurntSushi/ripgrep#installation and follow the instructions for your distribution." + exit 1 + fi + ;; + *) + echo "Sorry, I don't know how to install ripgrep on your operating system." + echo "Please visit https://github.com/BurntSushi/ripgrep#installation and follow the instructions for your system." + exit 1 + ;; + esac + else + echo "Okay, please install ripgrep and run the script again." + echo "Find installation instructions at https://github.com/BurntSushi/ripgrep#installation" + exit 1 + fi + echo "ripgrep is installed, continuing with the script..." + +fi + +ALL_PLACES=$(rg -o "tx\('(.*?)'\)" packages/frontend packages/target-electron packages/target-browser -r "\$1" --vimgrep) main() { -grep -r "tx(" src | sed -e "s/^.*tx(//g" | sed -e "s/).*$//g" | sed -e "s/'//g" | sed -e "s/,.*$//g" | sort | uniq -u | while read line ; do - if [[ $(jq ".$line" ./_locales/en.json) = 'null' && $(jq ".$line" ./_locales/_untranslated_en.json) = 'null' ]]; then - echo "- [ ] $line" + rg --no-filename --no-line-number -o "tx\('(.*?)'.*?\)" packages/frontend packages/target-electron packages/target-browser -r "\$1" | sort | uniq -u | while read line ; do + if [[ ! $(rg -F "\"$line\"" _locales/en.json ./_locales/_untranslated_en.json) ]]; then + echo "- [ ] ${white}tx('${red}$line${white}')${reset}" + echo " ${dark_grey}$(echo $ALL_PLACES | rg "(.*?):$line$" -r "\$1")${reset}" fi done } +echo echo "Missing translations:" +echo main 2>/dev/null | uniq -u echo echo "You need to check these by hand:" +echo -grep -nr "tx(" src | grep "tx([^']" +# grep -nr "tx(" packages | grep "tx([^']" +rg --context 2 "tx\([^']*?\)" packages diff --git a/bin/test_package_lock_version.js b/bin/test_package_lock_version.js deleted file mode 100644 index 41c8575bd9..0000000000 --- a/bin/test_package_lock_version.js +++ /dev/null @@ -1,30 +0,0 @@ -import { readFile } from 'fs/promises'; -import { join, dirname } from 'path' -import { fileURLToPath } from 'url' - -const __dirname = dirname(fileURLToPath(import.meta.url)) - -const colorize = (light, code) => str => - '\x1B[' + light + ';' + code + 'm' + str + '\x1b[0m' -const red = colorize(1, 31) -const grey = colorize(1, 37) - -;(async () => { - const packageObject = JSON.parse( - await readFile(join(__dirname, '../package.json'), 'utf8') - ) - const packageLock = JSON.parse( - await readFile(join(__dirname, '../package-lock.json'), 'utf8') - ) - - if (packageObject['version'] !== packageLock['version']) { - console.error( - red( - `package-lock.json version is not equal to package.json version! Have you forget to update the version value?\n` - ), - `package-version: ${grey(packageObject['version'])}\n`, - `packageLock-version: ${red(packageLock['version'])}` - ) - process.exit(1) - } -})() diff --git a/bin/topEvil.sh b/bin/topEvil.sh index e4097ec8aa..047501dd1c 100755 --- a/bin/topEvil.sh +++ b/bin/topEvil.sh @@ -3,13 +3,13 @@ cd "$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )/.." echo "Top-Evil TypeScript" -res=$( grep -r "^import.*blueprint" src --color=always ) +res=$( grep -r "^import.*blueprint" packages/frontend/src --color=always ) echo "🤔 Using Blueprint code: $( echo "$res" | wc -l )" code=$( echo "$res" | wc -l ) echo "-----------------------------------------------------" echo "$res" -res=$( grep -r "bp4-" src --color=always ) +res=$( grep -r "bp4-" packages/frontend/src --color=always ) echo "🤔 Using Blueprint css classes: $( echo "$res" | wc -l )" classes=$( echo "$res" | wc -l ) echo "-----------------------------------------------------" @@ -17,7 +17,7 @@ echo "$res" echo "Top-Evil SCSS" -res=$( grep -r ".bp4-" scss --color=always ) +res=$( grep -r ".bp4-" packages/frontend/scss --color=always ) echo "🤔 Using Blueprint in css: $( echo "$res" | wc -l )" scss=$( echo "$res" | wc -l ) echo "-----------------------------------------------------" @@ -26,12 +26,7 @@ echo "$res" echo "🤔Result🤔" echo "CODE: $code | CLASSES: $classes | SCSS: $scss" -# res=$( grep -r "^import.*electron" src/main/deltachat --color=always ) +# res=$( grep -r "^import.*electron" packages/target-electron/src/deltachat --color=always ) # echo "🤔 Using Electron inside of the deltachat controller: $( echo "$res" | wc -l )" # echo "-----------------------------------------------------" -# echo "$res" - -# res=$( grep -r "require(" src/main --color=always ) -# echo "🤔 Requires in main Process: $( echo "$res" | wc -l )" -# echo "-----------------------------------------------------" # echo "$res" \ No newline at end of file diff --git a/bin/update_background_thumbnails.sh b/bin/update_background_thumbnails.sh index 80a0dc8e31..6dfdfc2458 100755 --- a/bin/update_background_thumbnails.sh +++ b/bin/update_background_thumbnails.sh @@ -7,5 +7,5 @@ mkdir "$DIR/../images/backgrounds/thumb" cd "$DIR/../images/backgrounds" for filename in *.*; do - convert $filename -resize 128x128 thumb/$filename + magick $filename -resize 128x128 thumb/$filename done \ No newline at end of file diff --git a/bin/update_desktop_version.js b/bin/update_desktop_version.js new file mode 100644 index 0000000000..03b8d3b240 --- /dev/null +++ b/bin/update_desktop_version.js @@ -0,0 +1,37 @@ +import { readFileSync, readdirSync, existsSync, writeFileSync } from 'fs' +import { join } from 'path' + +const checkOnly = process.argv.includes('--check') + +const rootPackageJson = JSON.parse(readFileSync('package.json', 'utf8')) +const version = rootPackageJson.version + +const packagesDirectory = 'packages' +const packageDirectories = readdirSync(packagesDirectory) + +let checkFailed = false + +packageDirectories + .filter(dir => dir.startsWith('target-')) + .forEach(dir => { + const packageJsonPath = join(packagesDirectory, dir, 'package.json') + if (existsSync(packageJsonPath)) { + const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf8')) + if (checkOnly) { + if (packageJson.version !== version) { + checkFailed = true + console.log( + `- ${packageJson.name} has incorrect version: (expected ${version}) (actual ${packageJson.version})` + ) + } + } else { + packageJson.version = version + writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2)) + } + } + }) + +if (checkFailed) { + console.log("\nCheck failed, make sure you have run 'update:target-versions'") + process.exit(1) +} diff --git a/bin/writeFlatDependencies.js b/bin/writeFlatDependencies.js new file mode 100755 index 0000000000..e22baf1b1e --- /dev/null +++ b/bin/writeFlatDependencies.js @@ -0,0 +1,150 @@ +//@ts-check + +/// This script writes all normal dependencies (neither dev nor optional deps) +/// and their dependencies to a node_modules directory +/// This workaround is needed for electron builder but breaks the tests +/// so don't forget to reset afterwards with `pnpm -w run reset:node_modules` + +import { readFile, mkdir, copyFile, readdir, stat } from 'fs/promises' +import { existsSync } from 'fs' +import { fileURLToPath } from 'url' +import { dirname, isAbsolute, join } from 'path' +import { parse } from 'yaml' + +async function copyRecursive(source, destination) { + if ((await stat(source)).isDirectory()) { + await mkdir(destination, { recursive: true }) + const files = await readdir(source) + for (const file of files) { + if (file === 'node_modules') { + // console.log('prevented following node_modules folder') + continue + } + await copyRecursive(join(source, file), join(destination, file)) + } + } else { + await copyFile(source, destination) + } +} + +const colorize = (light, code) => str => + '\x1B[' + light + ';' + code + 'm' + str + '\x1b[0m' +const yellow = colorize(1, 33) + +//@ts-expect-error +const __dirname = dirname(fileURLToPath(import.meta.url)) + +const workspacePackage = process.argv[2] +const rawdestination = process.argv[3] +const destination = isAbsolute(rawdestination) + ? rawdestination + : join(process.cwd(), rawdestination) +const pnpmLockfile = join(__dirname, '../pnpm-lock.yaml') +const pnpmStore = join(__dirname, '../node_modules/.pnpm') + +const workspacePackageJsonPath = join( + __dirname, + '..', + workspacePackage, + 'package.json' +) +if (!workspacePackage || !existsSync(workspacePackageJsonPath)) { + console.log( + 'path to workspacePackage is not set as argument or file does not exist:', + workspacePackageJsonPath + ) + process.exit(1) +} + +if (!destination) { + console.log('no destination set') + process.exit(1) +} + +;(async () => { + const Lockfile = parse(await readFile(pnpmLockfile, 'utf8')) + const expectedLockfileVersion = '9.0' + if (Lockfile.lockfileVersion !== expectedLockfileVersion) { + console.log( + `lockfile version might be incompatible expected ${expectedLockfileVersion}, found:`, + Lockfile.lockfileVersion + ) + process.exit(1) + } + + const importer = Lockfile.importers[workspacePackage] + + if (!importer) { + console.log('workspace package not found in lockfile:', workspacePackage) + process.exit(1) + } + // console.log(importer); + + const flatDependencyList = [] + const getDeps = dependencies => { + for (const dep in dependencies) { + const version = dependencies[dep].version || dependencies[dep] + const depCode = `${dep}@${version}` + const dependency = Lockfile.snapshots[depCode] + flatDependencyList.push(depCode) + // console.log( + // depCode, + // dependency?.dependencies, + // dependency?.optionalDependencies + // ) + if (dependency?.dependencies) { + getDeps(dependency.dependencies) + } + if (dependency?.optionalDependencies) { + getDeps(dependency.optionalDependencies) + } + } + } + getDeps(importer.dependencies) + + const uniqueflatDependencyList = [...new Set(flatDependencyList)] + // console.log({ uniqueflatDependencyList }) + + const linkedDependencies = uniqueflatDependencyList.filter(name => + name.includes('@link:') + ) + if (linkedDependencies.length !== 0) { + console.warn( + 'WARN: Linked dependencies are not supported yet by our flatten workaround script:', + { + linkedDependencies, + } + ) + } + + await mkdir(destination, { recursive: true }) + + for (const pkg of uniqueflatDependencyList) { + const name = pkg.match(/(^@?.*?)@/)[1] + const folderInStoreName = pkg + .replace(/\//g, '+') + .replace(/\(|\)/g, '_') + .replace(/_$/, '') + const source = join( + pnpmStore, + folderInStoreName, + 'node_modules', + name + ) + const dest = join(destination, name) + await mkdir(dest, { recursive: true }) + // console.log(source, dest) + + if (!existsSync(source)) { + console.warn( + `${yellow( + 'WARN:' + )} ${folderInStoreName} not found in pnpm store, skipped`, {name} + ) + continue + } + // console.log({ pkg, name, dest }) + + await copyRecursive(source, dest) + } +})() diff --git a/build/appx_languages.js b/build/appx_languages.js deleted file mode 100644 index 16760ff0bf..0000000000 --- a/build/appx_languages.js +++ /dev/null @@ -1,8 +0,0 @@ -// supported languages are on https://learn.microsoft.com/en-us/windows/apps/publish/publish-your-app/supported-languages?pivots=store-installer-msix -const ms_supported_codes = 'ar, ar-sa, ar-ae, ar-bh, ar-dz, ar-eg, ar-iq, ar-jo, ar-kw, ar-lb, ar-ly, ar-ma, ar-om, ar-qa, ar-sy, ar-tn, ar-ye, af, af-za, sq, sq-al, am, am-et, hy, hy-am, as, as-in, az-arab, az-arab-az, az-cyrl, az-cyrl-az, az-latn, az-latn-az, eu, eu-es, be, be-by, bn, bn-bd, bn-in, bs, bs-cyrl, bs-cyrl-ba, bs-latn, bs-latn-ba, bg, bg-bg, ca, ca-es, ca-es-valencia, chr-cher, chr-cher-us, chr-latn, zh-Hans, zh-cn, zh-hans-cn, zh-sg, zh-hans-sg, zh-Hant, zh-hk, zh-mo, zh-tw, zh-hant-hk, zh-hant-mo, zh-hant-tw, hr, hr-hr, hr-ba, cs, cs-cz, da, da-dk, prs, prs-af, prs-arab, nl, nl-nl, nl-be, en, en-au, en-ca, en-gb, en-ie, en-in, en-nz, en-sg, en-us, en-za, en-bz, en-hk, en-id, en-jm, en-kz, en-mt, en-my, en-ph, en-pk, en-tt, en-vn, en-zw, en-053, en-021, en-029, en-011, en-018, en-014, et, et-ee, fil, fil-latn, fil-ph, fi, fi-fi, fr, fr-be , fr-ca , fr-ch , fr-fr , fr-lu, fr-015, fr-cd, fr-ci, fr-cm, fr-ht, fr-ma, fr-mc, fr-ml, fr-re, frc-latn, frp-latn, fr-155, fr-029, fr-021, fr-011, gl, gl-es, ka, ka-ge, de, de-at, de-ch, de-de, de-lu, de-li, el, el-gr, gu, gu-in, ha, ha-latn, ha-latn-ng, he, he-il, hi, hi-in, hu, hu-hu, is, is-is, ig-latn, ig-ng, id, id-id, iu-cans, iu-latn, iu-latn-ca, ga, ga-ie, xh, xh-za, zu, zu-za, it, it-it, it-ch, ja , ja-jp, kn, kn-in, kk, kk-kz, km, km-kh, quc-latn, qut-gt, qut-latn, rw, rw-rw, sw, sw-ke, kok, kok-in, ko, ko-kr, ku-arab, ku-arab-iq, ky-kg, ky-cyrl, lo, lo-la, lv, lv-lv, lt, lt-lt, lb, lb-lu, mk, mk-mk, ms, ms-bn, ms-my, ml, ml-in, mt, mt-mt, mi, mi-latn, mi-nz, mr, mr-in, mn-cyrl, mn-mong, mn-mn, mn-phag, ne, ne-np, nb, nb-no, nn, nn-no, no, no-no,, or, or-in, fa, fa-ir, pl, pl-pl, pt-br, pt, pt-pt,pa, pa-arab, pa-arab-pk, pa-deva, pa-in,quz, quz-bo, quz-ec, quz-pe,ro, ro-ro, ru, ru-ru,gd-gb, gd-latn,sr-Latn, sr-latn-cs, sr, sr-latn-ba, sr-latn-me, sr-latn-rs, sr-cyrl, sr-cyrl-ba, sr-cyrl-cs, sr-cyrl-me, sr-cyrl-rs, sa nso, nso-za, tn, tn-bw, tn-za, sd-arab, sd-arab-pk, sd-deva, si, si-lk, sk, sk-sk, sl, sl-si, es, es-cl, es-co, es-es, es-mx, es-ar, es-bo, es-cr, es-do, es-ec, es-gt, es-hn, es-ni, es-pa, es-pe, es-pr, es-py, es-sv, es-us, es-uy, es-ve, es-019, es-419, sv, sv-se, sv-fi, tg-arab, tg-cyrl, tg-cyrl-tj, tg-latn, ta, ta-in, tt-arab, tt-cyrl, tt-latn, tt-ru, te, te-in, th, th-th, ti, ti-et, tr, tr-tr, tk-cyrl, tk-latn, tk-tm, tk-latn-tr, tk-cyrl-tr, uk, uk-ua, ur, ur-pk, ug-arab, ug-cn, ug-cyrl, ug-latn, uz, uz-cyrl, uz-latn, uz-latn-uz, vi, vi-vn, cy, cy-gb, wo, wo-sn, yo-latn, yo-ng' - .split(',') - .map(s => s.trim()) - -export function isAppxSupportedLanguage(query) { - return ms_supported_codes.indexOf(query) !== -1 -} diff --git a/build/packageignore_list b/build/packageignore_list deleted file mode 100644 index 67fb8d141f..0000000000 --- a/build/packageignore_list +++ /dev/null @@ -1,187 +0,0 @@ -# syntax is basically https://www.electron.build/configuration/contents#files -# but the `!` for exclude is added in `gen-electron-builder-config.js` - -# default -**/node_modules/*/{CHANGELOG.md,README.md,README,readme.md,readme} -**/node_modules/*/{test,__tests__,tests,powered-test,example,examples} -**/node_modules/*.d.ts -**/node_modules/.bin -**/*.{iml,o,hprof,orig,pyc,pyo,rbc,swp,csproj,sln,xproj} -.editorconfig -**/._* -**/{.DS_Store,.git,.hg,.svn,CVS,RCS,SCCS,.gitignore,.gitattributes} -**/{__pycache__,thumbs.db,.flowconfig,.idea,.vs,.nyc_output} -**/{appveyor.yml,.travis.yml,circle.yml} -**/{npm-debug.log,yarn.lock,.yarn-integrity,.yarn-metadata.json} - - -# misc unrelated stuff -CHANGELOG.md -CONTRIBUTORS.md -LICENSE -README_ASSETS/ -README.md -bin/ - -## dotfiles like prettier configuration -.* -test/ -jenkins/ -ci_scripts/ -**/.github/* -electron-builder.json5 -package.json -package-lock.json -**/.eslintrc.yml -**/.nycrc -**/.editorconfig -**/.eslintignore -**/Makefile - -html-dist/help/**/.keep-dir - -# electron builder has problems copying it over in the CI (see https://github.com/deltachat/deltachat-desktop/pull/3876), -# so we'll do it "manually" in the after pack hook now -html-dist/xdcs/ - -## docs that are hidden in asar are useless -docs/ - -## don't bundle other packages -dist/ - - -# Source files -src/ -scss/ -static/ -**/*.scss -**/*.ts -**/*.d.ts -_locales/*.xml -build/ - - -# Build artifacts -tsc-dist/renderer/ -**/*.tsbuildinfo -**/*.css.map -html-dist/report.htm -node_modules/typescript/ -node_modules/@babel/ - -## remove frontend stuff that was already bundled by esbuild -node_modules/@deltachat/message_parser_wasm -node_modules/css-to-react-native -node_modules/dom-helpers -node_modules/emoji-js-clean -node_modules/gl-matrix -node_modules/immutable -node_modules/jsqr -node_modules/react -node_modules/react-qr-reader -node_modules/react-transition-group -node_modules/vt-pbf -node_modules/webrtc-adapter -node_modules/@deltachat/react-qr-reader -node_modules/rtcpeerconnection-shim - -### every react addon -node_modules/react-*/* -node_modules/classnames -node_modules/use-debounce -node_modules/create-react-context - -# need testing? -node_modules/resize-observer-polyfill - - -# should be bundled via esbuild already: -node_modules/geojson-vt -node_modules/geojson-flatten -node_modules/filesize - -### node_modules/emoji-mart/ -node_modules/emoji-mart/** - -### node_modules/@emoji-mart/data -### node_modules/@emoji-mart/react -node_modules/@emoji-mart/** - -# momentjs is currently only used by renderer process -node_modules/moment - -# sourcemap we don't need - - -# re-add needed css stuff -> re-adding doesn't seem to work at this point in time - -# node_modules/normalize.css/normalize.css -# node_modules/@blueprintjs/core/lib/css/blueprint.css -# node_modules/@blueprintjs/icons/resources/icons/ -# node_modules/@blueprintjs/icons/lib/css/blueprint-icons.css -# node_modules/emoji-mart/css/emoji-mart.css - -## because we can not re-add we need to cleanup those modules instead of marking them to be removed: - - -### node_modules/@blueprintjs/ -node_modules/@blueprintjs/core/lib/css/blueprint-hi-contrast.css -node_modules/@blueprintjs/core/lib/cjs -node_modules/@blueprintjs/core/lib/esm -node_modules/@blueprintjs/core/lib/esnext -node_modules/@blueprintjs/core/lib/less -node_modules/@blueprintjs/core/dist/*.js -node_modules/@blueprintjs/core/src -node_modules/@blueprintjs/core/node_modules/tslib -node_modules/@blueprintjs/core/package.json -node_modules/@blueprintjs/core/scripts -node_modules/@blueprintjs/icons/lib/cjs -node_modules/@blueprintjs/icons/lib/esm -node_modules/@blueprintjs/icons/lib/esnext -node_modules/@blueprintjs/icons/lib/less -node_modules/@blueprintjs/icons/dist/*.js -node_modules/@blueprintjs/icons/src -node_modules/@blueprintjs/icons/package.json -node_modules/@blueprintjs/icons/node_modules/tslib -node_modules/popper.js/* -node_modules/camel-case -node_modules/capital-case -node_modules/constant-case -node_modules/change-case -node_modules/dot-case -node_modules/header-case -node_modules/no-case -node_modules/param-case -node_modules/pascal-case -node_modules/path-case -node_modules/sentence-case -node_modules/snake-case -node_modules/upper-case -node_modules/upper-case-first -node_modules/@juggle/resize-observer -node_modules/dom4 -node_modules/@hypnosphi -node_modules/typed-styles -node_modules/csstype -node_modules/warning -node_modules/typed-styles -node_modules/tslib - -# remove stuff from testing frameworks that we don't need -node_modules/ajv -node_modules/uri-js - - -# electron builder stuff -node_modules/dmg-license -node_modules/crc -node_modules/xmlbuilder -node_modules/verror -node_modules/plist -node_modules/node-addon-api -node_modules/iconv-corefoundation - -## testcafe deps -node_modules/tough-cookie -node_modules/punycode \ No newline at end of file diff --git a/docs/APPX_TESTING.md b/docs/APPX_TESTING.md index c48cd8d5f2..daf244c150 100644 --- a/docs/APPX_TESTING.md +++ b/docs/APPX_TESTING.md @@ -11,8 +11,13 @@ First generate a certificate with these steps: Now you have a certificate with which you can package a self-signed appx: -``` -npm run build && npm exec -- electron-builder --config ./electron-builder.json5 --config.win.certificateFile=../my.pfx --win +```powershell +pnpm i +cd packages/target-electron +pnpm build +pnpm run pack:generate_config +pnpm run pack:patch-node-modules +pnpm electron-builder --config ./electron-builder.json5 --config.win.certificateFile=../my.pfx --win appx ``` To install your self-signed appx, you first need to import it: double click on the certificate and install it into the **Trusted People** store. After that you should be able to double click the appx package in the `dist/` folder to install it. If not have a look at the properties of that file (right click in Explorer), select Certificates => Details => View Certificate => Install => Store => Trusted People diff --git a/docs/CLI_FLAGS.md b/docs/CLI_FLAGS.md index 3edf7185f3..948eec5693 100644 --- a/docs/CLI_FLAGS.md +++ b/docs/CLI_FLAGS.md @@ -5,7 +5,7 @@ Options: |------|--------| |`--minimized` | Start deltachat in minimized mode with trayicon (trayicon will be activated for this session regardless whether it's disabled) | | **Development Options** | | -| `--translation-watch` | enable auto-reload for `_locales/_untranslated_en.json` | +| `--translation-watch` | enable auto-reload for `_locales/_untranslated_en.json`, when that file changes the current language is reloaded | | `--devmode` | opens electron devtools and activates `--log-debug` & `--log-to-console` | | `--allow-unsafe-core-replacement` | allow changing core with `DELTA_CHAT_RPC_SERVER` and looking for it in `PATH` instead of forcing the use of the prebuilds | | **Theme** | | @@ -18,3 +18,14 @@ Options: | `--no-color` | Disable colors in the output of main process | For more info on logging see [LOGGING.md](./LOGGING.md). + +## Env vars + +useful env vars you can set: +| Variable (sometimes with value) | Effect | +|---------------------------------|--------| +|`NODE_OPTIONS=--enable-source-maps`| Make stacktraces in errors useful by enabling source map support in the main process | +|`TEST_DIR=`| specify an alternative data directory | +| `DELTACHAT_LOCALE_DIR=` | allows to specify an alternative translation data directory in development, the intended purpose is to be used together with `--translation-watch` [^1] | + +[^1]: Someone could develop a gui tool for users to live-edit translations in released versions of deltachat desktop with these two options. Like directly see in the app how your translation looks without needing a dev environment to build desktop. diff --git a/docs/DEVELOPMENT.md b/docs/DEVELOPMENT.md index bb75dcaf7e..818052b982 100644 --- a/docs/DEVELOPMENT.md +++ b/docs/DEVELOPMENT.md @@ -20,6 +20,10 @@ - [Tips for specific subjects](#specific-tipps) - [VS Code users](#vscode) - [URI Schemes on linux](#linux-uri-schemes) + - [pnpm cli shell completion](#pnpm-tab-completion) + - [Disable code signing on packaging for macOS](#disable-mac-codesigning) + - [Useful Links](#useful-links) + - [JSONRPC debug tricks](#jsonrpc-debug-tricks) @@ -30,21 +34,21 @@ While developing the following command will build the app and start `electron` in debug mode with http cache disabled: ``` -$ npm run dev +$ pnpm dev ``` It's also handy to develop in watch mode so that your changes to the code are immediately recompiled. For this you need two terminal windows: ```sh # Terminal 1 -$ npm run watch +$ pnpm -w watch:electron # Terminal 2 -$ npm run start +$ pnpm -w start:electron ``` -After making your changes, go in the deltachat/electron Dev-console and press `F5` to reload the frontend process. +After making your changes, go in the deltachat/electron Dev-console and press `F5` or `Cmd+R` to reload the frontend process. -> **Note:** this only applies to the frontend code in `src/renderer`. To build the main process you still need to use `npm run build` and then restart the deltachat-desktop process. (`npm run start`) +> **Note:** this only applies to the frontend code in `src/renderer`. To build the main process you still need to use `pnpm -w build:electron` and then restart the deltachat-desktop process. (`pnpm -w start:electron`) ### Code Style @@ -53,14 +57,15 @@ After making your changes, go in the deltachat/electron Dev-console and press `F The primary command for checking any changes made to the code is: ```sh -npm run check +pnpm -w check ``` This command in turn splits up into the following commands: -- `npm run check:types` -> Runs `tsc` to make sure the `TypeScript` code is ok -- `npm run check:lint` -> Runs [`eslint`](https://eslint.org) with [`TypeScript`](https://typescriptlang.org/) rules to check for common bad practices in all `.js`, `.ts` and `.tsx` files -- `npm run check:format` -> Runs [`Prettier`](https://prettier.io/) with rules inspired by [`StandardJS`](https://standardjs.com/) to check formatting in all `.scss`, `.js`, `.ts`, `.tsx`, `.json` and `.md` files +- `pnpm -w check:types` -> Runs `tsc` to make sure the `TypeScript` code is ok +- `pnpm -w check:lint` -> Runs [`eslint`](https://eslint.org) with [`TypeScript`](https://typescriptlang.org/) rules to check for common bad practices in all `.js`, `.ts` and `.tsx` files +- `pnpm -w check:format` -> Runs [`Prettier`](https://prettier.io/) with rules inspired by [`StandardJS`](https://standardjs.com/) to check formatting in all `.scss`, `.js`, `.ts`, `.tsx`, `.json` and `.md` files +- `pnpm -w check:log-conventions` -> checks for illegal use of `console.log()` Sometimes `eslint` complains on code lines that for whatever reason doesn't fit well with the project style. Lines like this can be ignored by using `// eslint-disable-next-line` on the line prior to the line you would like to ignore: @@ -73,38 +78,36 @@ We set up the linting using this [`guide`](https://github.com/typescript-eslint/ If you work with SCSS make sure you read [`docs/STYLES.md`](./STYLES.md) -Running `npm run check:lint` when using VS Code will make VS Code display the found problems. +Running `pnpm -w check:lint` when using VS Code will make VS Code display the found problems. -If you're unsure it's always safe to run `npm run check` to check everything. If you know what you're doing you can run the lower level commands for a more fine grained check. +If you're unsure it's always safe to run `pnpm -w check` to check everything. If you know what you're doing you can run the lower level commands for a more fine grained check. #### Fixing Code Style If the code style check fails you can try to have it fixed for you. The primary command for doing this is: ```sh -npm run fix +pnpm -w fix ``` This command in turn splits up into the following commands: -- `npm run fix:lint` -> Runs [`eslint`](https://eslint.org) to attempt fixing any issues in all `.js`, `.ts` and `.tsx` files -- `npm run fix:format` -> Runs [`Prettier`](https://prettier.io/) to attempt fixing formatting in all `.scss`, `.js`, `.ts`, `.tsx`, `.json` and `.md` files +- `pnpm -w fix:lint` -> Runs [`eslint`](https://eslint.org) to attempt fixing any issues in all `.js`, `.ts` and `.tsx` files +- `pnpm -w fix:format` -> Runs [`Prettier`](https://prettier.io/) to attempt fixing formatting in all `.scss`, `.js`, `.ts`, `.tsx`, `.json` and `.md` files -If you're unsure it's always safe to run `npm run fix` to fix everything. If you know what you're doing you can run the lower level commands for a more fine grained fix. +If you're unsure it's always safe to run `pnpm -w fix` to fix everything. If you know what you're doing you can run the lower level commands for a more fine grained fix. ### Tests -Running `npm test` does the following: - -- runs `ESLint` and `Prettier` to check the code formatting -- runs the unit tests -- checks for illegal use of `console.log()` +Running `pnpm -w test` runs the unit tests. #### E2E testing -Run `npm run test-e2e` for end-to-end (E2E) testing. In E2E testing, [TestCafe](https://testcafe.io/) clicks through the app and simulates normal usage. +> Info here is outdated, at the moment there is no E2E testing anymore. + +~~Run `npm test-e2e` for end-to-end (E2E) testing. In E2E testing, [TestCafe](https://testcafe.io/) clicks through the app and simulates normal usage.~~ -You need to provide a temporary email account generation token via the environment variable `DCC_NEW_TMP_EMAIL`. (ask contributors on how to get one of these tokens) +~~You need to provide a temporary email account generation token via the environment variable `DCC_NEW_TMP_EMAIL`. (ask contributors on how to get one of these tokens)~~ ### Translations @@ -113,7 +116,7 @@ Install the [transifex client](https://developers.transifex.com/docs/cli) and ge And periodically we can run the following command to get the new translation strings from translators: ``` -npm run translations-update +pnpm -w translations:update ``` When you need to modify language strings do it as a PR on English language strings in the Android repo. It is in a language other than English do it in Transifex. @@ -137,7 +140,7 @@ The syntax is exactly the same as for all other `_locales/*.json` files. Example: `{"foobar_desktop": {"message": "This is a test"}}` -> **Tip:** run with the `--translation-watch` flag (included in `npm start`) to start in translation +> **Tip:** run with the `--translation-watch` flag (included in `pnpm start`) to start in translation > watch mode - which watches the experimental language strings and hot reloads them into dc-desktop on save #### Use localized strings in code @@ -169,16 +172,22 @@ For Continuous Integration we use GitHub Actions. Build in production mode (development tools disabled and minified frontend code) ```sh -NODE_ENV=production npm run build +NODE_ENV=production pnpm -w build + +# the electron target also has a shortcut that should also work on windows +cd packages/target-electron +pnpm build4production ``` (for building on Windows you need another command to set the environment variable) #### 1. Generate Electron-Builder Configuration -Generate the `electron-builder.json5` file with `npm run pack:generate_config`. +> First make sure you are in the `packages/target-electron` dirctory. + +Generate the `electron-builder.json5` file with `pnpm pack:generate_config`. -Possible options for `npm run pack:generate_config`: +Possible options for `pnpm pack:generate_config`: | Environment var | Effect | | --------------- | ------------------------------- | @@ -186,21 +195,24 @@ Possible options for `npm run pack:generate_config`: #### 2. Run electron-builder -If you haven't done so run `npm run build` now. +If you haven't done so run `pnpm build` now. Start electron-builder: -| Command | Description | -| ------------------------ | --------------------------------------------------------------------------- | -| `npm run pack:win` | Build for Windows (`nsis` & `portable` target) | -| `npm run pack:mac` | Build for macOS (`dmg` & `mas` target) | -| `npm run pack:linux` | Build for Linux (`AppImage` & `deb` target) | -| `npm run pack:linux:dir` | Build for Linux, but just the folder, no package. This is used for Flatpak. | +| Command | Description | +| --------------------- | --------------------------------------------------------------------------- | +| `pnpm pack:win` | Build for Windows (`nsis` & `portable` target) | +| `pnpm pack:mac` | Build for macOS (`dmg` & `mas` target) | +| `pnpm pack:linux` | Build for Linux (`AppImage` & `deb` target) | +| `pnpm pack:linux:dir` | Build for Linux, but just the folder, no package. This is used for Flatpak. | For more info look at the `scripts` section in `package.json`. The commands for windows10 appx and the App Store package for mac are currently not in the scripts section. They are useless for most people anyway, as they require special paid developer accounts or signing certificates. +- `mas` - mac appstore build +- `appx` - windows appstore build, you can find info on how to build a self-signed appx in [`APPX_TESTING.md`](./APPX_TESTING.md). + ### Release Workflow See [RELEASE.md](../RELEASE.md) @@ -209,31 +221,52 @@ See [RELEASE.md](../RELEASE.md) Some important folders and files: -```powershell -├── _locales/ # translation files in xml and json -│   ├── _untranslated_en.json # can contain experimental language strings -│   └── languages.json # central file which defines the visible languages and their native names for the users to choose -├── .gihub/workflows # source of our Github Actions -├── bin/ # various helper scripts -│ └── build/ # build scripts -├── build/ # files needed for electron-builder -├── docs/ # documentation -├── images/ # image files like icons or backgrounds -├── index.js # entry point for the main process -├── README_ASSETS/ # images used in the readme file and documentation -├── scss/ # stylesheets which need preprocessing -├── src/ -│   ├── main/ # TypeScript for the main process -│   ├── renderer/ # TypeScript for the renderer process -│ └── shared/ # TypeScript that is shared between both processes -├── static/ -│   ├── fonts/ # fonts -│   ├── help/ # the in-app help -│   └── main.html # main html file in renderer process -├── test/ -│   ├── testcafe/ # TestCafe tests -│   └── unit/ # unit tests -└── themes/ # default themes +```ini +├── .gihub/workflows # source of our Github Actions +├── CHANGELOG.md # what changed +├── RELEASE.md # how to make a release +├── _locales # translations +│ ├── _languages.json # central file which defines the visible languages and their native names for the users to choose +│ ├── _untranslated_en.json # new translation keys that are not yet upstreamed to the android-repo/transifex. +│ └── ... +├── bin # executable scripts for various developer tasks +├── docs # documentation +├── images # images and icons +├── packages +│ ├── frontend # the frontend / UI +│ │ ├── bin # executable scripts specific to the frontend +│ │ ├── html-dist # [generated] output from building +│ │ ├── scss # global css stylesheets +│ │ ├── src # source code +│ │ ├── static # static files that are needed +│ │ └── themes # themes +│ ├── runtime +│ │ └── runtime.ts # runtime interface that abstracts over runtime, so frontend can run on electron, tauri and browser +│ ├── shared # code that is shared between the packages +│ │ ├── shared-types.d.ts # shared types +│ │ ├── tests # tests +│ │ └── ts-compiled-for-tests # [generated] compiled code for testing +│ ├── target-browser +│ │ └── runtime-browser # runtime implementation for browsers +│ ├── target-e2e-integration-testsuite +│ ├── target-electron +│ │ ├── bin # executable scripts specific to the electron target +│ │ ├── build # scripts and files needed for packaging +│ │ ├── bundle_out # [generated] compiled+bundled js code for electron main rocess +│ │ ├── dist # [generated] output from packaging +│ │ ├── electron-builder.json5 # [generated] config file for packaging with electron-builder +│ │ ├── html-dist # [generated] bundled frontend and static resources +│ │ ├── runtime-electron # runtime implementation for electron +│ │ ├── src # source for electron main process js code +│ │ ├── static # static files that are needed +│ │ ├── stub.cjs # file that can be used for electron builder to skip signing +│ │ └── tests # tests, like a test for the account data migration function +│ └── target-tauri +├── static +│ ├── fonts # fonts +│ ├── help # help files in different languages, generated by bin/create-local-help.sh +│ └── xdcs # internal extension xdcs +└── test # old inactive tests that will be rewritten soon ``` ## Tips for specific subjects @@ -246,9 +279,27 @@ Solution: Tell VS Code to use the workspace version of TypeScript instead of an ### URI Schemes on linux -Can only be tested in builds that have a desktop file. The simplest way to do this is to install the appimage generated by `npx electron-builder --linux AppImage`. (Installing with AppImageLauncher) +Can only be tested in builds that have a desktop file. The simplest way to do this is to install the appimage generated by `pnpm electron-builder --linux AppImage`. (Installing with AppImageLauncher) + +### pnpm cli shell completion + +bash: + +```bash +pnpm completion bash > ~/completion-for-pnpm.bash +echo 'source ~/completion-for-pnpm.bash' >> ~/.bashrc +``` + +zsh: + +```bash +pnpm completion zsh > ~/completion-for-pnpm.zsh +echo 'source ~/completion-for-pnpm.zsh' >> ~/.zshrc +``` + +see also: -### Disable code signing on packaging for macOS +### Disable code signing on packaging for macOS Sometimes you want to package the app for macOS for testing, but don't have the required certificates for signing it. You can set the following environment variable to skip code signing: @@ -256,7 +307,7 @@ Sometimes you want to package the app for macOS for testing, but don't have the export CSC_IDENTITY_AUTO_DISCOVERY=false ``` -### Useful Links: +### Useful Links : Docs about macOS sandbox permissions: @@ -264,7 +315,7 @@ Docs about macOS sandbox permissions: - https://developer.apple.com/library/archive/documentation/Miscellaneous/Reference/EntitlementKeyReference/Chapters/AppSandboxTemporaryExceptionEntitlements.html#//apple_ref/doc/uid/TP40011195-CH5-SW1 -### JSONRPC stuff: +### JSONRPC debug tricks: If you want to debug how many jsonrpc calls were made you can run `exp.printCallCounterResult()` in the devConsole when you have debug logging enabled. This can be useful if you want to test your debouncing logic or compare a branch against another branch, to see if your changes reduced overall jsonrpc calls. diff --git a/docs/STYLES.md b/docs/STYLES.md index ab18cef49d..5ee8cd1423 100644 --- a/docs/STYLES.md +++ b/docs/STYLES.md @@ -1,6 +1,6 @@ # CSS Guidelines -We use `prettier` for CSS formatting. Use `npm run fix:format` before committing to format the code. +We use `prettier` for CSS formatting. Use `pnpm -w fix:format` before committing to format the code. ## How we go about styles diff --git a/docs/THEMES.md b/docs/THEMES.md index 8a3ae70a1a..9aacb0a292 100644 --- a/docs/THEMES.md +++ b/docs/THEMES.md @@ -23,8 +23,8 @@ The actual theme code is build as follows: Some examples: ``` -dc:dark -> ./themes/dark.css -dc:light -> ./themes/light.css +dc:dark -> ./html-dist/themes/dark.css +dc:light -> ./html-dist/themes/light.css custom:mytheme -> ~/.config/DeltaChat/custom-themes/mytheme.css ``` @@ -48,17 +48,17 @@ You can modify all classes and use all kind of css, but we recommend using the c > Warning: This will also (probably) change in the future. ``` -npx electron . --theme dc:dark +cd packages/target-electron && pnpm electron . --theme dc:dark or -npm run dev -- --theme dc:dark +pnpm dev:electron -- --theme dc:dark or -npm run start -- --theme dc:dark +pnpm start:electron -- --theme dc:dark ``` You can also enable hot reload for loaded theme with: ``` -npm run start -- --theme dc:dark --theme-watch +pnpm start:electron -- --theme dc:dark --theme-watch ``` ## Creating your own Theme: @@ -71,17 +71,17 @@ We use SCSS to create themes, because it allows us to save work by using its col 1. copy the light or dark theme and save it to your user deltachat folder `DeltaChat/custom-themes/my_theme.scss` -2. run `npm i` +2. run `pnpm i` at your desktop checkout. 3. compile the theme to CSS in watch mode. ```sh -npx sass --watch path/to/Deltachat/config/folder/custom-themes/my_theme.scss path/to/Deltachat/config/folder/custom-themes/my_theme.css -I themes/ --no-source-map +pnpm sass --watch path/to/Deltachat/config/folder/custom-themes/my_theme.scss path/to/Deltachat/config/folder/custom-themes/my_theme.css -I packages/frontend/themes/ --no-source-map # for linux -npx sass --watch ~/.config/DeltaChat/custom-themes/my_theme.scss ~/.config/DeltaChat/custom-themes/my_theme.css -I themes/ --no-source-map +pnpm sass --watch ~/.config/DeltaChat/custom-themes/my_theme.scss ~/.config/DeltaChat/custom-themes/my_theme.css -I packages/frontend/themes/ --no-source-map ``` -> Note: you have to set `-I` to the theme folder in a deltachat-desktop git checkout, otherwise you'll get an error! +> Note: you have to set `-I` to the theme folder (`packages/frontend/themes`) in a deltachat-desktop git checkout, otherwise you'll get an error! 4. open a new terminal window/tab @@ -98,18 +98,18 @@ Read the comments in the theme files for additional information. ### **Method B** - Without cloning the whole deltachat desktop -0. install the sass compiler via `npm i -g node-sass` (if it says that npm was not found, then you need to install nodejs first) +0. install the sass compiler via `npm i -g sass` (if it says that npm was not found, then you need to install nodejs first) -1. Download all files starting with `_` from https://github.com/deltachat/deltachat-desktop/tree/main/themes and put them in a `./themes/` folder in your working directory (or alternatively download the folder to your working directory). +1. Download all files starting with `_` from https://github.com/deltachat/deltachat-desktop/tree/main/packages/frontend/themes and put them in a `./themes/` folder in your working directory (or alternatively download the folder to your working directory). 2. copy the light or dark theme and save it to your user deltachat folder `DeltaChat/custom-themes/my_theme.scss` 3. compile the theme to CSS in watch mode. ```sh -node-sass -w path/to/Deltachat/config/folder/custom-themes/my_theme.scss path/to/Deltachat/config/folder/custom-themes/my_theme.css --include-path path/to/deltachat-desktop-git-folder/themes/ +sass -w path/to/Deltachat/config/folder/custom-themes/my_theme.scss path/to/Deltachat/config/folder/custom-themes/my_theme.css --include-path path/to/deltachat-desktop-git-folder/themes/ # for linux: -node-sass -w ~/.config/DeltaChat/custom-themes/my_theme.scss ~/.config/DeltaChat/custom-themes/my_theme.css --include-path themes/ +sass -w ~/.config/DeltaChat/custom-themes/my_theme.scss ~/.config/DeltaChat/custom-themes/my_theme.css --include-path themes/ ``` > Note: you have to set `--include-path` to the theme folder you created or downloaded earlier in step 1. diff --git a/docs/UPDATE_CORE.md b/docs/UPDATE_CORE.md index 95f703bf0b..f4e344f752 100644 --- a/docs/UPDATE_CORE.md +++ b/docs/UPDATE_CORE.md @@ -11,14 +11,16 @@ To update the desktop application to a new core you need to update the following Let's say the core version you want to upgrade to is `X.Y.Z`. -1. `npm i @deltachat/stdio-rpc-server@X.Y.Z @deltachat/jsonrpc-client@X.Y.Z` +1. `node ./bin/link_core/link_version.js X.Y.Z` 2. mention that you updated those dependencies in `CHANGELOG.md` If version `X.Y.Z` hasn't yet been published to `npm`, then ask another maintainer. GitHub CI builds and publishes [stdio-rpc-server](https://github.com/deltachat/deltachat-core-rust/actions/workflows/deltachat-rpc-server.yml) and [jsonrpc-client](https://github.com/deltachat/deltachat-core-rust/actions/workflows/jsonrpc-client-npm-package.yml) to npm. -> bash shortcut `export TAG=1.139.3 && npm i @deltachat/stdio-rpc-server@$TAG @deltachat/jsonrpc-client@$TAG` +> bash shortcut `node ./bin/link_core/link_version.js 1.142.2` + +> make sure you are in the repository root, otherwise the command will not work ## Update to a development version @@ -29,7 +31,7 @@ Then you need to use a local core checkout (the next section in this document). Or point desktop to use the the new deltachat-rpc-server binary with the `DELTA_CHAT_RPC_SERVER` environment variable: ``` -DELTA_CHAT_RPC_SERVER=path/to/deltachat-rpc-server npm run dev -- --allow-unsafe-core-replacement +DELTA_CHAT_RPC_SERVER=path/to/deltachat-rpc-server pnpm -w dev:electron -- --allow-unsafe-core-replacement ``` You can easily get the deltachat-rpc-server binary for your pr by installing it with cargo install: @@ -44,10 +46,10 @@ Then you can run: # let it find the executable in $PATH # - pro: faster to type, does a basic version check # - contra: uses prebuild if not find in path -npm run dev -- --allow-unsafe-core-replacement +pnpm -w dev:electron -- --allow-unsafe-core-replacement # explicitly set the rpc binary # - pro: fails when the binary is not found -DELTA_CHAT_RPC_SERVER=$(which deltachat-rpc-server) npm run dev -- --allow-unsafe-core-replacement +DELTA_CHAT_RPC_SERVER=$(which deltachat-rpc-server) pnpm -w dev:electron -- --allow-unsafe-core-replacement ``` > (on windows you need to look up how to set env vars yourself, but the command to find it is `where deltachat-rpc-server`) @@ -64,6 +66,10 @@ If you already have a core git checkout, you can skip the first step. 2. go into your core checkout and run `git pull` to update it to the newest version, then create a branch for your changes 3. run `python3 deltachat-rpc-server/npm-package/scripts/make_local_dev_version.py` 4. run `npm i` and `npm run build` inside `../deltachat-core-rust/deltachat-jsonrpc/typescript/` -5. go into your desktop repo and run `npm i ../deltachat-core-rust/deltachat-jsonrpc/typescript ../deltachat-core-rust/deltachat-rpc-server/npm-package` +5. go into your desktop repo and run `./bin/link_core/link_local.sh` [^1] Note that you need to run step 3 and 4 again after each change to core sourcecode. + +> to reset to normal run `./bin/link_core/link_catalog.sh` [^1] + +[^1]: for window look inside of the script to learn what to do and please write one for powershell diff --git a/electron-builder.json5 b/electron-builder.json5 deleted file mode 100644 index 73ca04250d..0000000000 --- a/electron-builder.json5 +++ /dev/null @@ -1,629 +0,0 @@ -// GENERATED, this file is generated by gen-electron-builder-config.js -// run "pack:generate_config" to re-generate it -{ - appId: 'chat.delta.desktop.electron', - protocols: [ - { - name: 'QR code data', - role: 'Viewer', - schemes: ['openpgp4fpr', 'dcaccount', 'dclogin'], - }, - { - name: 'Send Mails via MailTo Scheme', - role: 'Viewer', - schemes: ['mailto'], - }, - ], - fileAssociations: [ - { ext: 'xdc', name: 'Webxdc app', mimeType: 'application/x-webxdc' }, - ], - files: [ - '**/*', - '!**/node_modules/*/{CHANGELOG.md,README.md,README,readme.md,readme}', - '!**/node_modules/*/{test,__tests__,tests,powered-test,example,examples}', - '!**/node_modules/*.d.ts', - '!**/node_modules/.bin', - '!**/*.{iml,o,hprof,orig,pyc,pyo,rbc,swp,csproj,sln,xproj}', - '!.editorconfig', - '!**/._*', - '!**/{.DS_Store,.git,.hg,.svn,CVS,RCS,SCCS,.gitignore,.gitattributes}', - '!**/{__pycache__,thumbs.db,.flowconfig,.idea,.vs,.nyc_output}', - '!**/{appveyor.yml,.travis.yml,circle.yml}', - '!**/{npm-debug.log,yarn.lock,.yarn-integrity,.yarn-metadata.json}', - '!CHANGELOG.md', - '!CONTRIBUTORS.md', - '!LICENSE', - '!README_ASSETS/', - '!README.md', - '!bin/', - '!.*', - '!test/', - '!jenkins/', - '!ci_scripts/', - '!**/.github/*', - '!electron-builder.json5', - '!package.json', - '!package-lock.json', - '!**/.eslintrc.yml', - '!**/.nycrc', - '!**/.editorconfig', - '!**/.eslintignore', - '!**/Makefile', - '!html-dist/help/**/.keep-dir', - '!html-dist/xdcs/', - '!docs/', - '!dist/', - '!src/', - '!scss/', - '!static/', - '!**/*.scss', - '!**/*.ts', - '!**/*.d.ts', - '!_locales/*.xml', - '!build/', - '!tsc-dist/renderer/', - '!**/*.tsbuildinfo', - '!**/*.css.map', - '!html-dist/report.htm', - '!node_modules/typescript/', - '!node_modules/@babel/', - '!node_modules/@deltachat/message_parser_wasm', - '!node_modules/css-to-react-native', - '!node_modules/dom-helpers', - '!node_modules/emoji-js-clean', - '!node_modules/gl-matrix', - '!node_modules/immutable', - '!node_modules/jsqr', - '!node_modules/react', - '!node_modules/react-qr-reader', - '!node_modules/react-transition-group', - '!node_modules/vt-pbf', - '!node_modules/webrtc-adapter', - '!node_modules/@deltachat/react-qr-reader', - '!node_modules/rtcpeerconnection-shim', - '!node_modules/react-*/*', - '!node_modules/classnames', - '!node_modules/use-debounce', - '!node_modules/create-react-context', - '!node_modules/resize-observer-polyfill', - '!node_modules/geojson-vt', - '!node_modules/geojson-flatten', - '!node_modules/filesize', - '!node_modules/emoji-mart/**', - '!node_modules/@emoji-mart/**', - '!node_modules/moment', - '!node_modules/@blueprintjs/core/lib/css/blueprint-hi-contrast.css', - '!node_modules/@blueprintjs/core/lib/cjs', - '!node_modules/@blueprintjs/core/lib/esm', - '!node_modules/@blueprintjs/core/lib/esnext', - '!node_modules/@blueprintjs/core/lib/less', - '!node_modules/@blueprintjs/core/dist/*.js', - '!node_modules/@blueprintjs/core/src', - '!node_modules/@blueprintjs/core/node_modules/tslib', - '!node_modules/@blueprintjs/core/package.json', - '!node_modules/@blueprintjs/core/scripts', - '!node_modules/@blueprintjs/icons/lib/cjs', - '!node_modules/@blueprintjs/icons/lib/esm', - '!node_modules/@blueprintjs/icons/lib/esnext', - '!node_modules/@blueprintjs/icons/lib/less', - '!node_modules/@blueprintjs/icons/dist/*.js', - '!node_modules/@blueprintjs/icons/src', - '!node_modules/@blueprintjs/icons/package.json', - '!node_modules/@blueprintjs/icons/node_modules/tslib', - '!node_modules/popper.js/*', - '!node_modules/camel-case', - '!node_modules/capital-case', - '!node_modules/constant-case', - '!node_modules/change-case', - '!node_modules/dot-case', - '!node_modules/header-case', - '!node_modules/no-case', - '!node_modules/param-case', - '!node_modules/pascal-case', - '!node_modules/path-case', - '!node_modules/sentence-case', - '!node_modules/snake-case', - '!node_modules/upper-case', - '!node_modules/upper-case-first', - '!node_modules/@juggle/resize-observer', - '!node_modules/dom4', - '!node_modules/@hypnosphi', - '!node_modules/typed-styles', - '!node_modules/csstype', - '!node_modules/warning', - '!node_modules/typed-styles', - '!node_modules/tslib', - '!node_modules/ajv', - '!node_modules/uri-js', - '!node_modules/dmg-license', - '!node_modules/crc', - '!node_modules/xmlbuilder', - '!node_modules/verror', - '!node_modules/plist', - '!node_modules/node-addon-api', - '!node_modules/iconv-corefoundation', - '!node_modules/tough-cookie', - '!node_modules/punycode', - ], - asarUnpack: [], - afterPack: './build/afterPackHook.cjs', - afterSign: './build/afterSignHook.cjs', - mac: { - appId: 'chat.delta.desktop.electron', - category: 'public.app-category.social-networking', - entitlements: 'build/entitlements.mac.plist', - entitlementsInherit: 'build/entitlements.mac.plist', - extendInfo: { - NSCameraUsageDescription: 'For scanning qr codes.', - ITSAppUsesNonExemptEncryption: false, - }, - gatekeeperAssess: true, - hardenedRuntime: true, - icon: 'resources/icon.icns', - provisioningProfile: './../embedded.provisionprofile', - files: [ - '**/*', - '!**/node_modules/*/{CHANGELOG.md,README.md,README,readme.md,readme}', - '!**/node_modules/*/{test,__tests__,tests,powered-test,example,examples}', - '!**/node_modules/*.d.ts', - '!**/node_modules/.bin', - '!**/*.{iml,o,hprof,orig,pyc,pyo,rbc,swp,csproj,sln,xproj}', - '!.editorconfig', - '!**/._*', - '!**/{.DS_Store,.git,.hg,.svn,CVS,RCS,SCCS,.gitignore,.gitattributes}', - '!**/{__pycache__,thumbs.db,.flowconfig,.idea,.vs,.nyc_output}', - '!**/{appveyor.yml,.travis.yml,circle.yml}', - '!**/{npm-debug.log,yarn.lock,.yarn-integrity,.yarn-metadata.json}', - '!CHANGELOG.md', - '!CONTRIBUTORS.md', - '!LICENSE', - '!README_ASSETS/', - '!README.md', - '!bin/', - '!.*', - '!test/', - '!jenkins/', - '!ci_scripts/', - '!**/.github/*', - '!electron-builder.json5', - '!package.json', - '!package-lock.json', - '!**/.eslintrc.yml', - '!**/.nycrc', - '!**/.editorconfig', - '!**/.eslintignore', - '!**/Makefile', - '!html-dist/help/**/.keep-dir', - '!html-dist/xdcs/', - '!docs/', - '!dist/', - '!src/', - '!scss/', - '!static/', - '!**/*.scss', - '!**/*.ts', - '!**/*.d.ts', - '!_locales/*.xml', - '!build/', - '!tsc-dist/renderer/', - '!**/*.tsbuildinfo', - '!**/*.css.map', - '!html-dist/report.htm', - '!node_modules/typescript/', - '!node_modules/@babel/', - '!node_modules/@deltachat/message_parser_wasm', - '!node_modules/css-to-react-native', - '!node_modules/dom-helpers', - '!node_modules/emoji-js-clean', - '!node_modules/gl-matrix', - '!node_modules/immutable', - '!node_modules/jsqr', - '!node_modules/react', - '!node_modules/react-qr-reader', - '!node_modules/react-transition-group', - '!node_modules/vt-pbf', - '!node_modules/webrtc-adapter', - '!node_modules/@deltachat/react-qr-reader', - '!node_modules/rtcpeerconnection-shim', - '!node_modules/react-*/*', - '!node_modules/classnames', - '!node_modules/use-debounce', - '!node_modules/create-react-context', - '!node_modules/resize-observer-polyfill', - '!node_modules/geojson-vt', - '!node_modules/geojson-flatten', - '!node_modules/filesize', - '!node_modules/emoji-mart/**', - '!node_modules/@emoji-mart/**', - '!node_modules/moment', - '!node_modules/@blueprintjs/core/lib/css/blueprint-hi-contrast.css', - '!node_modules/@blueprintjs/core/lib/cjs', - '!node_modules/@blueprintjs/core/lib/esm', - '!node_modules/@blueprintjs/core/lib/esnext', - '!node_modules/@blueprintjs/core/lib/less', - '!node_modules/@blueprintjs/core/dist/*.js', - '!node_modules/@blueprintjs/core/src', - '!node_modules/@blueprintjs/core/node_modules/tslib', - '!node_modules/@blueprintjs/core/package.json', - '!node_modules/@blueprintjs/core/scripts', - '!node_modules/@blueprintjs/icons/lib/cjs', - '!node_modules/@blueprintjs/icons/lib/esm', - '!node_modules/@blueprintjs/icons/lib/esnext', - '!node_modules/@blueprintjs/icons/lib/less', - '!node_modules/@blueprintjs/icons/dist/*.js', - '!node_modules/@blueprintjs/icons/src', - '!node_modules/@blueprintjs/icons/package.json', - '!node_modules/@blueprintjs/icons/node_modules/tslib', - '!node_modules/popper.js/*', - '!node_modules/camel-case', - '!node_modules/capital-case', - '!node_modules/constant-case', - '!node_modules/change-case', - '!node_modules/dot-case', - '!node_modules/header-case', - '!node_modules/no-case', - '!node_modules/param-case', - '!node_modules/pascal-case', - '!node_modules/path-case', - '!node_modules/sentence-case', - '!node_modules/snake-case', - '!node_modules/upper-case', - '!node_modules/upper-case-first', - '!node_modules/@juggle/resize-observer', - '!node_modules/dom4', - '!node_modules/@hypnosphi', - '!node_modules/typed-styles', - '!node_modules/csstype', - '!node_modules/warning', - '!node_modules/typed-styles', - '!node_modules/tslib', - '!node_modules/ajv', - '!node_modules/uri-js', - '!node_modules/dmg-license', - '!node_modules/crc', - '!node_modules/xmlbuilder', - '!node_modules/verror', - '!node_modules/plist', - '!node_modules/node-addon-api', - '!node_modules/iconv-corefoundation', - '!node_modules/tough-cookie', - '!node_modules/punycode', - '!node_modules/@deltachat/stdio-rpc-server-linux-*${/*}', - '!node_modules/@deltachat/stdio-rpc-server-win32-*${/*}', - ], - darkModeSupport: true, - }, - mas: { - hardenedRuntime: false, - entitlements: 'build/entitlements.mas.plist', - entitlementsInherit: 'build/entitlements.mas.inherit.plist', - }, - dmg: { - sign: false, - contents: [ - { x: 220, y: 200 }, - { x: 448, y: 200, type: 'link', path: '/Applications' }, - ], - }, - linux: { - target: ['AppImage', 'deb'], - category: 'Network;Chat;InstantMessaging;', - desktop: { - Comment: 'Delta Chat email-based messenger', - Keywords: 'dc;chat;delta;messaging;messenger;email', - }, - files: [ - '**/*', - '!**/node_modules/*/{CHANGELOG.md,README.md,README,readme.md,readme}', - '!**/node_modules/*/{test,__tests__,tests,powered-test,example,examples}', - '!**/node_modules/*.d.ts', - '!**/node_modules/.bin', - '!**/*.{iml,o,hprof,orig,pyc,pyo,rbc,swp,csproj,sln,xproj}', - '!.editorconfig', - '!**/._*', - '!**/{.DS_Store,.git,.hg,.svn,CVS,RCS,SCCS,.gitignore,.gitattributes}', - '!**/{__pycache__,thumbs.db,.flowconfig,.idea,.vs,.nyc_output}', - '!**/{appveyor.yml,.travis.yml,circle.yml}', - '!**/{npm-debug.log,yarn.lock,.yarn-integrity,.yarn-metadata.json}', - '!CHANGELOG.md', - '!CONTRIBUTORS.md', - '!LICENSE', - '!README_ASSETS/', - '!README.md', - '!bin/', - '!.*', - '!test/', - '!jenkins/', - '!ci_scripts/', - '!**/.github/*', - '!electron-builder.json5', - '!package.json', - '!package-lock.json', - '!**/.eslintrc.yml', - '!**/.nycrc', - '!**/.editorconfig', - '!**/.eslintignore', - '!**/Makefile', - '!html-dist/help/**/.keep-dir', - '!html-dist/xdcs/', - '!docs/', - '!dist/', - '!src/', - '!scss/', - '!static/', - '!**/*.scss', - '!**/*.ts', - '!**/*.d.ts', - '!_locales/*.xml', - '!build/', - '!tsc-dist/renderer/', - '!**/*.tsbuildinfo', - '!**/*.css.map', - '!html-dist/report.htm', - '!node_modules/typescript/', - '!node_modules/@babel/', - '!node_modules/@deltachat/message_parser_wasm', - '!node_modules/css-to-react-native', - '!node_modules/dom-helpers', - '!node_modules/emoji-js-clean', - '!node_modules/gl-matrix', - '!node_modules/immutable', - '!node_modules/jsqr', - '!node_modules/react', - '!node_modules/react-qr-reader', - '!node_modules/react-transition-group', - '!node_modules/vt-pbf', - '!node_modules/webrtc-adapter', - '!node_modules/@deltachat/react-qr-reader', - '!node_modules/rtcpeerconnection-shim', - '!node_modules/react-*/*', - '!node_modules/classnames', - '!node_modules/use-debounce', - '!node_modules/create-react-context', - '!node_modules/resize-observer-polyfill', - '!node_modules/geojson-vt', - '!node_modules/geojson-flatten', - '!node_modules/filesize', - '!node_modules/emoji-mart/**', - '!node_modules/@emoji-mart/**', - '!node_modules/moment', - '!node_modules/@blueprintjs/core/lib/css/blueprint-hi-contrast.css', - '!node_modules/@blueprintjs/core/lib/cjs', - '!node_modules/@blueprintjs/core/lib/esm', - '!node_modules/@blueprintjs/core/lib/esnext', - '!node_modules/@blueprintjs/core/lib/less', - '!node_modules/@blueprintjs/core/dist/*.js', - '!node_modules/@blueprintjs/core/src', - '!node_modules/@blueprintjs/core/node_modules/tslib', - '!node_modules/@blueprintjs/core/package.json', - '!node_modules/@blueprintjs/core/scripts', - '!node_modules/@blueprintjs/icons/lib/cjs', - '!node_modules/@blueprintjs/icons/lib/esm', - '!node_modules/@blueprintjs/icons/lib/esnext', - '!node_modules/@blueprintjs/icons/lib/less', - '!node_modules/@blueprintjs/icons/dist/*.js', - '!node_modules/@blueprintjs/icons/src', - '!node_modules/@blueprintjs/icons/package.json', - '!node_modules/@blueprintjs/icons/node_modules/tslib', - '!node_modules/popper.js/*', - '!node_modules/camel-case', - '!node_modules/capital-case', - '!node_modules/constant-case', - '!node_modules/change-case', - '!node_modules/dot-case', - '!node_modules/header-case', - '!node_modules/no-case', - '!node_modules/param-case', - '!node_modules/pascal-case', - '!node_modules/path-case', - '!node_modules/sentence-case', - '!node_modules/snake-case', - '!node_modules/upper-case', - '!node_modules/upper-case-first', - '!node_modules/@juggle/resize-observer', - '!node_modules/dom4', - '!node_modules/@hypnosphi', - '!node_modules/typed-styles', - '!node_modules/csstype', - '!node_modules/warning', - '!node_modules/typed-styles', - '!node_modules/tslib', - '!node_modules/ajv', - '!node_modules/uri-js', - '!node_modules/dmg-license', - '!node_modules/crc', - '!node_modules/xmlbuilder', - '!node_modules/verror', - '!node_modules/plist', - '!node_modules/node-addon-api', - '!node_modules/iconv-corefoundation', - '!node_modules/tough-cookie', - '!node_modules/punycode', - '!node_modules/@deltachat/stdio-rpc-server-darwin-*${/*}', - '!node_modules/@deltachat/stdio-rpc-server-win32-*${/*}', - ], - icon: 'build/icon.icns', - description: 'The Email messenger (https://delta.chat)', - }, - win: { - icon: 'images/deltachat.ico', - files: [ - '**/*', - '!**/node_modules/*/{CHANGELOG.md,README.md,README,readme.md,readme}', - '!**/node_modules/*/{test,__tests__,tests,powered-test,example,examples}', - '!**/node_modules/*.d.ts', - '!**/node_modules/.bin', - '!**/*.{iml,o,hprof,orig,pyc,pyo,rbc,swp,csproj,sln,xproj}', - '!.editorconfig', - '!**/._*', - '!**/{.DS_Store,.git,.hg,.svn,CVS,RCS,SCCS,.gitignore,.gitattributes}', - '!**/{__pycache__,thumbs.db,.flowconfig,.idea,.vs,.nyc_output}', - '!**/{appveyor.yml,.travis.yml,circle.yml}', - '!**/{npm-debug.log,yarn.lock,.yarn-integrity,.yarn-metadata.json}', - '!CHANGELOG.md', - '!CONTRIBUTORS.md', - '!LICENSE', - '!README_ASSETS/', - '!README.md', - '!bin/', - '!.*', - '!test/', - '!jenkins/', - '!ci_scripts/', - '!**/.github/*', - '!electron-builder.json5', - '!package.json', - '!package-lock.json', - '!**/.eslintrc.yml', - '!**/.nycrc', - '!**/.editorconfig', - '!**/.eslintignore', - '!**/Makefile', - '!html-dist/help/**/.keep-dir', - '!html-dist/xdcs/', - '!docs/', - '!dist/', - '!src/', - '!scss/', - '!static/', - '!**/*.scss', - '!**/*.ts', - '!**/*.d.ts', - '!_locales/*.xml', - '!build/', - '!tsc-dist/renderer/', - '!**/*.tsbuildinfo', - '!**/*.css.map', - '!html-dist/report.htm', - '!node_modules/typescript/', - '!node_modules/@babel/', - '!node_modules/@deltachat/message_parser_wasm', - '!node_modules/css-to-react-native', - '!node_modules/dom-helpers', - '!node_modules/emoji-js-clean', - '!node_modules/gl-matrix', - '!node_modules/immutable', - '!node_modules/jsqr', - '!node_modules/react', - '!node_modules/react-qr-reader', - '!node_modules/react-transition-group', - '!node_modules/vt-pbf', - '!node_modules/webrtc-adapter', - '!node_modules/@deltachat/react-qr-reader', - '!node_modules/rtcpeerconnection-shim', - '!node_modules/react-*/*', - '!node_modules/classnames', - '!node_modules/use-debounce', - '!node_modules/create-react-context', - '!node_modules/resize-observer-polyfill', - '!node_modules/geojson-vt', - '!node_modules/geojson-flatten', - '!node_modules/filesize', - '!node_modules/emoji-mart/**', - '!node_modules/@emoji-mart/**', - '!node_modules/moment', - '!node_modules/@blueprintjs/core/lib/css/blueprint-hi-contrast.css', - '!node_modules/@blueprintjs/core/lib/cjs', - '!node_modules/@blueprintjs/core/lib/esm', - '!node_modules/@blueprintjs/core/lib/esnext', - '!node_modules/@blueprintjs/core/lib/less', - '!node_modules/@blueprintjs/core/dist/*.js', - '!node_modules/@blueprintjs/core/src', - '!node_modules/@blueprintjs/core/node_modules/tslib', - '!node_modules/@blueprintjs/core/package.json', - '!node_modules/@blueprintjs/core/scripts', - '!node_modules/@blueprintjs/icons/lib/cjs', - '!node_modules/@blueprintjs/icons/lib/esm', - '!node_modules/@blueprintjs/icons/lib/esnext', - '!node_modules/@blueprintjs/icons/lib/less', - '!node_modules/@blueprintjs/icons/dist/*.js', - '!node_modules/@blueprintjs/icons/src', - '!node_modules/@blueprintjs/icons/package.json', - '!node_modules/@blueprintjs/icons/node_modules/tslib', - '!node_modules/popper.js/*', - '!node_modules/camel-case', - '!node_modules/capital-case', - '!node_modules/constant-case', - '!node_modules/change-case', - '!node_modules/dot-case', - '!node_modules/header-case', - '!node_modules/no-case', - '!node_modules/param-case', - '!node_modules/pascal-case', - '!node_modules/path-case', - '!node_modules/sentence-case', - '!node_modules/snake-case', - '!node_modules/upper-case', - '!node_modules/upper-case-first', - '!node_modules/@juggle/resize-observer', - '!node_modules/dom4', - '!node_modules/@hypnosphi', - '!node_modules/typed-styles', - '!node_modules/csstype', - '!node_modules/warning', - '!node_modules/typed-styles', - '!node_modules/tslib', - '!node_modules/ajv', - '!node_modules/uri-js', - '!node_modules/dmg-license', - '!node_modules/crc', - '!node_modules/xmlbuilder', - '!node_modules/verror', - '!node_modules/plist', - '!node_modules/node-addon-api', - '!node_modules/iconv-corefoundation', - '!node_modules/tough-cookie', - '!node_modules/punycode', - '!node_modules/@deltachat/stdio-rpc-server-darwin-*${/*}', - '!node_modules/@deltachat/stdio-rpc-server-linux-*${/*}', - ], - }, - appx: { - applicationId: 'chat.delta.desktop.electron', - publisher: 'CN=C13753E5-D590-467C-9FCA-6799E1A5EC1E', - publisherDisplayName: 'merlinux', - identityName: 'merlinux.DeltaChat', - languages: [ - 'ar', - 'bg', - 'ca', - 'cs', - 'da', - 'de', - 'en', - 'el', - 'es', - 'eu', - 'fa', - 'fi', - 'fr', - 'gl', - 'hr', - 'hu', - 'id', - 'it', - 'ja-jp', - 'km', - 'ko', - 'lt', - 'nb', - 'nl-nl', - 'pl', - 'pt', - 'pt-br', - 'ro', - 'ru', - 'sk', - 'sq', - 'sv', - 'ta', - 'te', - 'tr', - 'uk', - 'vi', - 'zh-cn', - 'zh-tw', - ], - }, - nsis: { oneClick: false, allowToChangeInstallationDirectory: false }, -} diff --git a/images/backgrounds/thumb/bee.webp b/images/backgrounds/thumb/bee.webp index de3a0b38fa..d0ead19472 100644 Binary files a/images/backgrounds/thumb/bee.webp and b/images/backgrounds/thumb/bee.webp differ diff --git a/index.js b/index.js deleted file mode 100644 index 1fbfb08354..0000000000 --- a/index.js +++ /dev/null @@ -1,13 +0,0 @@ -//@ts-check -import sourceMap from 'source-map-support' -sourceMap.install() - -if (process.env.NODE_ENV === 'test') { - if(!process.env.TEST_DIR){ - const { mkdtempSync } = await import('fs') - const { tmpdir } = await import('os') - const { join } = await import('path') - process.env.TEST_DIR = mkdtempSync(join(tmpdir(), 'deltachat-')) - } -} -import './tsc-dist/main/index.js'; diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index f2f6a36eac..0000000000 --- a/package-lock.json +++ /dev/null @@ -1,7787 +0,0 @@ -{ - "name": "deltachat-desktop", - "version": "1.46.8", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "deltachat-desktop", - "version": "1.46.8", - "hasInstallScript": true, - "license": "GPL-3.0-or-later", - "dependencies": { - "@blueprintjs/core": "^4.20.2", - "@deltachat/jsonrpc-client": "^1.142.12", - "@deltachat/message_parser_wasm": "^0.11.0", - "@deltachat/stdio-rpc-server": "^1.142.12", - "@emoji-mart/data": "1.1.2", - "@emoji-mart/react": "1.1.1", - "application-config": "^1.0.1", - "classnames": "^2.5.1", - "debounce": "^1.2.1", - "emoji-js-clean": "^4.0.0", - "emoji-mart": "5.5.2", - "error-stack-parser": "^2.1.4", - "filesize": "^10.1.4", - "immutable": "^4.3.7", - "jsqr": "^1.4.0", - "mime-types": "^2.1.35", - "moment": "^2.30.1", - "path-browserify": "^1.0.1", - "rc": "^1.2.8", - "react": "^17.0.2", - "react-dom": "^17.0.2", - "react-string-replace": "^1.1.1", - "react-virtualized-auto-sizer": "^1.0.24", - "react-window": "^1.8.10", - "react-window-infinite-loader": "^1.0.9", - "react-zoom-pan-pinch": "^2.6.1", - "source-map-support": "^0.5.21", - "split2": "^4.2.0", - "stackframe": "^1.3.4", - "use-debounce": "^3.4.3", - "webxdc-types": "^1.0.1", - "ws": "7.5.10" - }, - "devDependencies": { - "@electron/notarize": "2.4", - "@types/chai": "^4.3.16", - "@types/debounce": "^1.2.4", - "@types/emoji-mart": "^3.0.14", - "@types/mime-types": "^2.1.4", - "@types/mocha": "^9.1.1", - "@types/node": "^20.14.13", - "@types/node-fetch": "^2.6.11", - "@types/rc": "^1.2.4", - "@types/react": "^17.0.80", - "@types/react-dom": "^17.0.25", - "@types/react-window": "^1.8.8", - "@types/react-window-infinite-loader": "^1.0.9", - "@typescript-eslint/eslint-plugin": "^7.18.0", - "@typescript-eslint/parser": "^7.18.0", - "adm-zip": "^0.5.14", - "chai": "^4.5.0", - "chokidar": "^3.6.0", - "electron": "^30.3.1", - "electron-builder": "^24.13.3", - "esbuild": "^0.19.12", - "esbuild-plugin-inline-worker": "^0.1.1", - "eslint": "^8.57.0", - "eslint-config-prettier": "^9.1.0", - "eslint-plugin-prettier": "^5.2.1", - "eslint-plugin-react-hooks": "^4.6.2", - "mocha": "^9.2.2", - "node-fetch": "^2.7.0", - "prettier": "3.1.0", - "sass": "^1.77.8", - "ts-node": "^10.9.2", - "typescript": "^5.5.4", - "typescript-plugin-css-modules": "^5.1.0", - "walk": "^2.3.15", - "xml-js": "^1.6.11" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/@adobe/css-tools": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.3.3.tgz", - "integrity": "sha512-rE0Pygv0sEZ4vBWHlAgJLGDU7Pm8xoO6p3wsEceb7GYAjScrOHpEo8KK/eVkAcnSM+slAEtXjA2JpdjLp4fJQQ==", - "dev": true - }, - "node_modules/@babel/runtime": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.0.tgz", - "integrity": "sha512-7dRy4DwXwtzBrPbZflqxnvfxLF8kdZXPkhymtDeFoFqE6ldzjQFgYTtYIFARcLEYDrqfBfYcZt1WqFxRoyC9Rw==", - "dependencies": { - "regenerator-runtime": "^0.14.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@blueprintjs/colors": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@blueprintjs/colors/-/colors-4.2.1.tgz", - "integrity": "sha512-Cx7J2YnUuxn+fi+y5XtXnBB7+cFHN4xBrRkaAetp78i3VTCXjUk+d1omrOr8TqbRucUXTdrhbZOUHpzRLFcJpQ==", - "dependencies": { - "tslib": "~2.5.0" - } - }, - "node_modules/@blueprintjs/core": { - "version": "4.20.2", - "resolved": "https://registry.npmjs.org/@blueprintjs/core/-/core-4.20.2.tgz", - "integrity": "sha512-5v4Nr0jozfAjiOkjY4zvt1XSpt4ldnrSaxtwo506S2cxJYfwFeMTmDshXNPFcc8L1fjZMxi0IWI2WABXzZXS6w==", - "dependencies": { - "@blueprintjs/colors": "^4.2.1", - "@blueprintjs/icons": "^4.16.0", - "@juggle/resize-observer": "^3.4.0", - "@types/dom4": "^2.0.2", - "classnames": "^2.3.1", - "dom4": "^2.1.5", - "normalize.css": "^8.0.1", - "popper.js": "^1.16.1", - "react-popper": "^1.3.11", - "react-transition-group": "^4.4.5", - "tslib": "~2.5.0" - }, - "bin": { - "upgrade-blueprint-2.0.0-rename": "scripts/upgrade-blueprint-2.0.0-rename.sh", - "upgrade-blueprint-3.0.0-rename": "scripts/upgrade-blueprint-3.0.0-rename.sh" - }, - "peerDependencies": { - "@types/react": "^16.14.32 || 17 || 18", - "react": "^16.8 || 17 || 18", - "react-dom": "^16.8 || 17 || 18" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@blueprintjs/icons": { - "version": "4.16.0", - "resolved": "https://registry.npmjs.org/@blueprintjs/icons/-/icons-4.16.0.tgz", - "integrity": "sha512-cyfgjUZcZCtQrXWUV8FwqYTFEzduV4a0N7yhOU38jY+cBRCLu/sDrD0Osvfk4DGRvNe4YjY7pohVLFSxpg68Uw==", - "dependencies": { - "change-case": "^4.1.2", - "classnames": "^2.3.1", - "tslib": "~2.5.0" - } - }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@deltachat/jsonrpc-client": { - "version": "1.142.12", - "resolved": "https://registry.npmjs.org/@deltachat/jsonrpc-client/-/jsonrpc-client-1.142.12.tgz", - "integrity": "sha512-xzqV8uz4LrH7zhG4CQ00vRnZnILJkttc+4Hbp5PHX3CEgFTlFE0xPf5WCXEiVRo57MY4FqgaWhEq9wlehS4h/Q==", - "dependencies": { - "@deltachat/tiny-emitter": "3.0.0", - "isomorphic-ws": "^4.0.1", - "yerpc": "^0.6.2" - } - }, - "node_modules/@deltachat/message_parser_wasm": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@deltachat/message_parser_wasm/-/message_parser_wasm-0.11.0.tgz", - "integrity": "sha512-8GpJ+JO36jrH80kWqDo3+f+jaTgJJo+2x9IK2n0AUhwm5DzVw9TZKAZU7tuiYlXpN/a56BJvfzwmRTLjYFSMCg==" - }, - "node_modules/@deltachat/stdio-rpc-server": { - "version": "1.142.12", - "resolved": "https://registry.npmjs.org/@deltachat/stdio-rpc-server/-/stdio-rpc-server-1.142.12.tgz", - "integrity": "sha512-smhr6J2UWKrHZzlK2nYpTnlmUpkLvu0rznB8twTjDT1xVjBqgTzPi3dMD4OahfNKPPVoLphcjVbi9zcE53TEHg==", - "optionalDependencies": { - "@deltachat/stdio-rpc-server-android-arm": "1.142.12", - "@deltachat/stdio-rpc-server-android-arm64": "1.142.12", - "@deltachat/stdio-rpc-server-darwin-arm64": "1.142.12", - "@deltachat/stdio-rpc-server-darwin-x64": "1.142.12", - "@deltachat/stdio-rpc-server-linux-arm": "1.142.12", - "@deltachat/stdio-rpc-server-linux-arm64": "1.142.12", - "@deltachat/stdio-rpc-server-linux-ia32": "1.142.12", - "@deltachat/stdio-rpc-server-linux-x64": "1.142.12", - "@deltachat/stdio-rpc-server-win32-ia32": "1.142.12", - "@deltachat/stdio-rpc-server-win32-x64": "1.142.12" - }, - "peerDependencies": { - "@deltachat/jsonrpc-client": "*" - } - }, - "node_modules/@deltachat/stdio-rpc-server-android-arm": { - "version": "1.142.12", - "resolved": "https://registry.npmjs.org/@deltachat/stdio-rpc-server-android-arm/-/stdio-rpc-server-android-arm-1.142.12.tgz", - "integrity": "sha512-PB413W7NJWlqql8AOBZ5glRUyZKASFreskbFq44XqfpfLRMlrAwbDUXWImITuxy+DtFav4IOuLrtgJ0ZUEDo8A==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@deltachat/stdio-rpc-server-android-arm64": { - "version": "1.142.12", - "resolved": "https://registry.npmjs.org/@deltachat/stdio-rpc-server-android-arm64/-/stdio-rpc-server-android-arm64-1.142.12.tgz", - "integrity": "sha512-8ihIPJ61yUlii2VakIlmrkP8n2ZvUU+ixowViQ3VRp4L144DefKaia2aAPvmtYZgJ/O8oz9G8uSEgY+w7wqibg==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@deltachat/stdio-rpc-server-darwin-arm64": { - "version": "1.142.12", - "resolved": "https://registry.npmjs.org/@deltachat/stdio-rpc-server-darwin-arm64/-/stdio-rpc-server-darwin-arm64-1.142.12.tgz", - "integrity": "sha512-I6gumRQGZo9MQfh7hkM0EuiBERHglB5NM/v3DqzxS0B2yv5JlMnFoNaVVmja2iNprSnOtkAm2zRkcSfjAJX7JA==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@deltachat/stdio-rpc-server-darwin-x64": { - "version": "1.142.12", - "resolved": "https://registry.npmjs.org/@deltachat/stdio-rpc-server-darwin-x64/-/stdio-rpc-server-darwin-x64-1.142.12.tgz", - "integrity": "sha512-Q1ouB7K99Xtn7jI/RAynP+tWVKWLD/JmuUlgfIhYy7o3U4vezujWa+1/TOxgYvV4xfItbT/QHoQIECZmsj1Rhg==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@deltachat/stdio-rpc-server-linux-arm": { - "version": "1.142.12", - "resolved": "https://registry.npmjs.org/@deltachat/stdio-rpc-server-linux-arm/-/stdio-rpc-server-linux-arm-1.142.12.tgz", - "integrity": "sha512-eKCiXXxXCkKn23u6FIfWQsUoM2m9YaBRgTtiVYKEFga9zQ6r/fWT4I3R1uTCVYhWMwooVSGWcPVeJU+2tC3lJA==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@deltachat/stdio-rpc-server-linux-arm64": { - "version": "1.142.12", - "resolved": "https://registry.npmjs.org/@deltachat/stdio-rpc-server-linux-arm64/-/stdio-rpc-server-linux-arm64-1.142.12.tgz", - "integrity": "sha512-0B5fZSHKB8t89LveLgQn6SPFuWVlDgtAWKsXYoiDZrF9IOHNzK57vd7C2bu9L1NrR3UxaNV+ouBbFOKa4j6nOQ==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@deltachat/stdio-rpc-server-linux-ia32": { - "version": "1.142.12", - "resolved": "https://registry.npmjs.org/@deltachat/stdio-rpc-server-linux-ia32/-/stdio-rpc-server-linux-ia32-1.142.12.tgz", - "integrity": "sha512-4JQiBSfqtI4BywDOmGBkmfiZiJ2i2XDvl1W+OJR/VCH/LMdpKiERFP9YAsq6sXJ+YMVvI+tPU+KHRXMsRItuxw==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@deltachat/stdio-rpc-server-linux-x64": { - "version": "1.142.12", - "resolved": "https://registry.npmjs.org/@deltachat/stdio-rpc-server-linux-x64/-/stdio-rpc-server-linux-x64-1.142.12.tgz", - "integrity": "sha512-iOc/Ki52M7N+kkASyVEtU+XMy5SpTM9oB5y4Msd2JB0NCK/cYRoyzCyv51++S+2dfpwj6V2yTjZkW5MrmLXLKg==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@deltachat/stdio-rpc-server-win32-ia32": { - "version": "1.142.12", - "resolved": "https://registry.npmjs.org/@deltachat/stdio-rpc-server-win32-ia32/-/stdio-rpc-server-win32-ia32-1.142.12.tgz", - "integrity": "sha512-IcSg2GkkuVLoDk9hw7QHq0Vu+WzK5kMaVLdzq0u0dGIE7n6yD0oL3ImbM5HTIjerQ+xUO7/a++d64yodAMZjRA==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@deltachat/stdio-rpc-server-win32-x64": { - "version": "1.142.12", - "resolved": "https://registry.npmjs.org/@deltachat/stdio-rpc-server-win32-x64/-/stdio-rpc-server-win32-x64-1.142.12.tgz", - "integrity": "sha512-y8GEzALOqjDkOgGoc6RvE23CtulGOsqNX8CxRSpWyX9Jux7CYUnhLsjf+7E+gtwveFDR58/L8Yrz5NSnkvDbOQ==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@deltachat/tiny-emitter": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@deltachat/tiny-emitter/-/tiny-emitter-3.0.0.tgz", - "integrity": "sha512-iapvwGCEWFjXtObQ/vNzXS0+M9hrZrY2tMdV7SaX8kHXKVm3oIuJUVmUj5jhABTL7GstO6uKzV+36FUZVGOqCA==" - }, - "node_modules/@develar/schema-utils": { - "version": "2.6.5", - "resolved": "https://registry.npmjs.org/@develar/schema-utils/-/schema-utils-2.6.5.tgz", - "integrity": "sha512-0cp4PsWQ/9avqTVMCtZ+GirikIA36ikvjtHweU4/j8yLtgObI0+JUPhYFScgwlteveGB1rt3Cm8UhN04XayDig==", - "dev": true, - "dependencies": { - "ajv": "^6.12.0", - "ajv-keywords": "^3.4.1" - }, - "engines": { - "node": ">= 8.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/@electron/asar": { - "version": "3.2.10", - "resolved": "https://registry.npmjs.org/@electron/asar/-/asar-3.2.10.tgz", - "integrity": "sha512-mvBSwIBUeiRscrCeJE1LwctAriBj65eUDm0Pc11iE5gRwzkmsdbS7FnZ1XUWjpSeQWL1L5g12Fc/SchPM9DUOw==", - "dev": true, - "dependencies": { - "commander": "^5.0.0", - "glob": "^7.1.6", - "minimatch": "^3.0.4" - }, - "bin": { - "asar": "bin/asar.js" - }, - "engines": { - "node": ">=10.12.0" - } - }, - "node_modules/@electron/asar/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/@electron/asar/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/@electron/get": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@electron/get/-/get-2.0.3.tgz", - "integrity": "sha512-Qkzpg2s9GnVV2I2BjRksUi43U5e6+zaQMcjoJy0C+C5oxaKl+fmckGDQFtRpZpZV0NQekuZZ+tGz7EA9TVnQtQ==", - "dev": true, - "dependencies": { - "debug": "^4.1.1", - "env-paths": "^2.2.0", - "fs-extra": "^8.1.0", - "got": "^11.8.5", - "progress": "^2.0.3", - "semver": "^6.2.0", - "sumchecker": "^3.0.1" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "global-agent": "^3.0.0" - } - }, - "node_modules/@electron/get/node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/@electron/get/node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "dev": true, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/@electron/get/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@electron/get/node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/@electron/notarize": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@electron/notarize/-/notarize-2.4.0.tgz", - "integrity": "sha512-ArHnRPIJJGrmV+uWNQSINAht+cM4gAo3uA3WFI54bYF93mzmD15gzhPQ0Dd+v/fkMhnRiiIO8NNkGdn87Vsy0g==", - "dev": true, - "dependencies": { - "debug": "^4.1.1", - "fs-extra": "^9.0.1", - "promise-retry": "^2.0.1" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/@electron/osx-sign": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@electron/osx-sign/-/osx-sign-1.0.5.tgz", - "integrity": "sha512-k9ZzUQtamSoweGQDV2jILiRIHUu7lYlJ3c6IEmjv1hC17rclE+eb9U+f6UFlOOETo0JzY1HNlXy4YOlCvl+Lww==", - "dev": true, - "dependencies": { - "compare-version": "^0.1.2", - "debug": "^4.3.4", - "fs-extra": "^10.0.0", - "isbinaryfile": "^4.0.8", - "minimist": "^1.2.6", - "plist": "^3.0.5" - }, - "bin": { - "electron-osx-flat": "bin/electron-osx-flat.js", - "electron-osx-sign": "bin/electron-osx-sign.js" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/@electron/osx-sign/node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@electron/osx-sign/node_modules/isbinaryfile": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.10.tgz", - "integrity": "sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==", - "dev": true, - "engines": { - "node": ">= 8.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/gjtorikian/" - } - }, - "node_modules/@electron/universal": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/@electron/universal/-/universal-1.5.1.tgz", - "integrity": "sha512-kbgXxyEauPJiQQUNG2VgUeyfQNFk6hBF11ISN2PNI6agUgPl55pv4eQmaqHzTAzchBvqZ2tQuRVaPStGf0mxGw==", - "dev": true, - "dependencies": { - "@electron/asar": "^3.2.1", - "@malept/cross-spawn-promise": "^1.1.0", - "debug": "^4.3.1", - "dir-compare": "^3.0.0", - "fs-extra": "^9.0.1", - "minimatch": "^3.0.4", - "plist": "^3.0.4" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/@electron/universal/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/@electron/universal/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/@emoji-mart/data": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@emoji-mart/data/-/data-1.1.2.tgz", - "integrity": "sha512-1HP8BxD2azjqWJvxIaWAMyTySeZY0Osr83ukYjltPVkNXeJvTz7yDrPLBtnrD5uqJ3tg4CcLuuBW09wahqL/fg==" - }, - "node_modules/@emoji-mart/react": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@emoji-mart/react/-/react-1.1.1.tgz", - "integrity": "sha512-NMlFNeWgv1//uPsvLxvGQoIerPuVdXwK/EUek8OOkJ6wVOWPUizRBJU0hDqWZCOROVpfBgCemaC3m6jDOXi03g==", - "peerDependencies": { - "emoji-mart": "^5.2", - "react": "^16.8 || ^17 || ^18" - } - }, - "node_modules/@esbuild/aix-ppc64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz", - "integrity": "sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.12.tgz", - "integrity": "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz", - "integrity": "sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.12.tgz", - "integrity": "sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz", - "integrity": "sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz", - "integrity": "sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz", - "integrity": "sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz", - "integrity": "sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz", - "integrity": "sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz", - "integrity": "sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz", - "integrity": "sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz", - "integrity": "sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==", - "cpu": [ - "loong64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz", - "integrity": "sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==", - "cpu": [ - "mips64el" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz", - "integrity": "sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz", - "integrity": "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz", - "integrity": "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz", - "integrity": "sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz", - "integrity": "sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz", - "integrity": "sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz", - "integrity": "sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz", - "integrity": "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz", - "integrity": "sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz", - "integrity": "sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.11.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.0.tgz", - "integrity": "sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==", - "dev": true, - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", - "dev": true, - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/@eslint/eslintrc/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/@eslint/js": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", - "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.11.14", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", - "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", - "deprecated": "Use @eslint/config-array instead", - "dev": true, - "dependencies": { - "@humanwhocodes/object-schema": "^2.0.2", - "debug": "^4.3.1", - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", - "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", - "deprecated": "Use @eslint/object-schema instead", - "dev": true - }, - "node_modules/@hypnosphi/create-react-context": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@hypnosphi/create-react-context/-/create-react-context-0.3.1.tgz", - "integrity": "sha512-V1klUed202XahrWJLLOT3EXNeCpFHCcJntdFGI15ntCwau+jfT386w7OFTMaCqOgXUH1fa0w/I1oZs+i/Rfr0A==", - "dependencies": { - "gud": "^1.0.0", - "warning": "^4.0.3" - }, - "peerDependencies": { - "prop-types": "^15.0.0", - "react": ">=0.14.0" - } - }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dev": true, - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true - }, - "node_modules/@isaacs/cliui/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", - "dev": true - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "node_modules/@juggle/resize-observer": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@juggle/resize-observer/-/resize-observer-3.4.0.tgz", - "integrity": "sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA==" - }, - "node_modules/@malept/cross-spawn-promise": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@malept/cross-spawn-promise/-/cross-spawn-promise-1.1.1.tgz", - "integrity": "sha512-RTBGWL5FWQcg9orDOCcp4LvItNzUPcyEU9bwaeJX0rJ1IQxzucC48Y0/sQLp/g6t99IQgAlGIaesJS+gTn7tVQ==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/malept" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/subscription/pkg/npm-.malept-cross-spawn-promise?utm_medium=referral&utm_source=npm_fund" - } - ], - "dependencies": { - "cross-spawn": "^7.0.1" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/@malept/flatpak-bundler": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@malept/flatpak-bundler/-/flatpak-bundler-0.4.0.tgz", - "integrity": "sha512-9QOtNffcOF/c1seMCDnjckb3R9WHcG34tky+FHpNKKCW0wc/scYLwMtO+ptyGUfMW0/b/n4qRiALlaFHc9Oj7Q==", - "dev": true, - "dependencies": { - "debug": "^4.1.1", - "fs-extra": "^9.0.0", - "lodash": "^4.17.15", - "tmp-promise": "^3.0.2" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "dev": true, - "optional": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/@pkgr/core": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz", - "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==", - "dev": true, - "engines": { - "node": "^12.20.0 || ^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/unts" - } - }, - "node_modules/@sindresorhus/is": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", - "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/is?sponsor=1" - } - }, - "node_modules/@szmarczak/http-timer": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", - "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", - "dev": true, - "dependencies": { - "defer-to-connect": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@tootallnate/once": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tsconfig/node10": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", - "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", - "dev": true - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "dev": true - }, - "node_modules/@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "dev": true - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", - "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", - "dev": true - }, - "node_modules/@types/cacheable-request": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", - "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", - "dev": true, - "dependencies": { - "@types/http-cache-semantics": "*", - "@types/keyv": "^3.1.4", - "@types/node": "*", - "@types/responselike": "^1.0.0" - } - }, - "node_modules/@types/chai": { - "version": "4.3.16", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.16.tgz", - "integrity": "sha512-PatH4iOdyh3MyWtmHVFXLWCCIhUbopaltqddG9BzB+gMIzee2MJrvd+jouii9Z3wzQJruGWAm7WOMjgfG8hQlQ==", - "dev": true - }, - "node_modules/@types/debounce": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/debounce/-/debounce-1.2.4.tgz", - "integrity": "sha512-jBqiORIzKDOToaF63Fm//haOCHuwQuLa2202RK4MozpA6lh93eCBc+/8+wZn5OzjJt3ySdc+74SXWXB55Ewtyw==", - "dev": true - }, - "node_modules/@types/debug": { - "version": "4.1.12", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", - "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", - "dev": true, - "dependencies": { - "@types/ms": "*" - } - }, - "node_modules/@types/dom4": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/dom4/-/dom4-2.0.4.tgz", - "integrity": "sha512-PD+wqNhrjWFjAlSVd18jvChZvOXB2SOwAILBmuYev5zswBats5qmzs/QFoooLKd2omj9BT05a8MeSeRmXLGY+Q==" - }, - "node_modules/@types/emoji-mart": { - "version": "3.0.14", - "resolved": "https://registry.npmjs.org/@types/emoji-mart/-/emoji-mart-3.0.14.tgz", - "integrity": "sha512-/vMkVnet466bK37ugf2jry9ldCZklFPXYMB2m+qNo3vkP2I7L0cvtNFPKAjfcHgPg9Z8pbYqVqZn7AgsC0qf+g==", - "dev": true, - "dependencies": { - "@types/react": "*" - } - }, - "node_modules/@types/fs-extra": { - "version": "9.0.13", - "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.13.tgz", - "integrity": "sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/http-cache-semantics": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", - "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==", - "dev": true - }, - "node_modules/@types/keyv": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", - "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/mime-types": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@types/mime-types/-/mime-types-2.1.4.tgz", - "integrity": "sha512-lfU4b34HOri+kAY5UheuFMWPDOI+OPceBSHZKp69gEyTL/mmJ4cnU6Y/rlme3UL3GyOn6Y42hyIEw0/q8sWx5w==", - "dev": true - }, - "node_modules/@types/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==", - "dev": true - }, - "node_modules/@types/mocha": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.1.1.tgz", - "integrity": "sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==", - "dev": true - }, - "node_modules/@types/ms": { - "version": "0.7.34", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz", - "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==", - "dev": true - }, - "node_modules/@types/node": { - "version": "20.14.13", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.13.tgz", - "integrity": "sha512-+bHoGiZb8UiQ0+WEtmph2IWQCjIqg8MDZMAV+ppRRhUZnquF5mQkP/9vpSwJClEiSM/C7fZZExPzfU0vJTyp8w==", - "dependencies": { - "undici-types": "~5.26.4" - } - }, - "node_modules/@types/node-fetch": { - "version": "2.6.11", - "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.11.tgz", - "integrity": "sha512-24xFj9R5+rfQJLRyM56qh+wnVSYhyXC2tkoBndtY0U+vubqNsYXGjufB2nn8Q6gt0LrARwL6UBtMCSVCwl4B1g==", - "dev": true, - "dependencies": { - "@types/node": "*", - "form-data": "^4.0.0" - } - }, - "node_modules/@types/plist": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/plist/-/plist-3.0.5.tgz", - "integrity": "sha512-E6OCaRmAe4WDmWNsL/9RMqdkkzDCY1etutkflWk4c+AcjDU07Pcz1fQwTX0TQz+Pxqn9i4L1TU3UFpjnrcDgxA==", - "dev": true, - "optional": true, - "dependencies": { - "@types/node": "*", - "xmlbuilder": ">=11.0.1" - } - }, - "node_modules/@types/postcss-modules-local-by-default": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.2.tgz", - "integrity": "sha512-CtYCcD+L+trB3reJPny+bKWKMzPfxEyQpKIwit7kErnOexf5/faaGpkFy4I5AwbV4hp1sk7/aTg0tt0B67VkLQ==", - "dev": true, - "dependencies": { - "postcss": "^8.0.0" - } - }, - "node_modules/@types/postcss-modules-scope": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/postcss-modules-scope/-/postcss-modules-scope-3.0.4.tgz", - "integrity": "sha512-//ygSisVq9kVI0sqx3UPLzWIMCmtSVrzdljtuaAEJtGoGnpjBikZ2sXO5MpH9SnWX9HRfXxHifDAXcQjupWnIQ==", - "dev": true, - "dependencies": { - "postcss": "^8.0.0" - } - }, - "node_modules/@types/prop-types": { - "version": "15.7.12", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz", - "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==", - "devOptional": true - }, - "node_modules/@types/rc": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/rc/-/rc-1.2.4.tgz", - "integrity": "sha512-xD6+epQoMH79A1uwmJIq25D+XZ57jUzCQ1DGSvs3tGKdx7QDYOOaMh6m5KBkEIW4+Cy5++bZ7NLDfdpNiYVKYA==", - "dev": true, - "dependencies": { - "@types/minimist": "*" - } - }, - "node_modules/@types/react": { - "version": "17.0.80", - "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.80.tgz", - "integrity": "sha512-LrgHIu2lEtIo8M7d1FcI3BdwXWoRQwMoXOZ7+dPTW0lYREjmlHl3P0U1VD0i/9tppOuv8/sam7sOjx34TxSFbA==", - "devOptional": true, - "dependencies": { - "@types/prop-types": "*", - "@types/scheduler": "^0.16", - "csstype": "^3.0.2" - } - }, - "node_modules/@types/react-dom": { - "version": "17.0.25", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-17.0.25.tgz", - "integrity": "sha512-urx7A7UxkZQmThYA4So0NelOVjx3V4rNFVJwp0WZlbIK5eM4rNJDiN3R/E9ix0MBh6kAEojk/9YL+Te6D9zHNA==", - "dev": true, - "dependencies": { - "@types/react": "^17" - } - }, - "node_modules/@types/react-window": { - "version": "1.8.8", - "resolved": "https://registry.npmjs.org/@types/react-window/-/react-window-1.8.8.tgz", - "integrity": "sha512-8Ls660bHR1AUA2kuRvVG9D/4XpRC6wjAaPT9dil7Ckc76eP9TKWZwwmgfq8Q1LANX3QNDnoU4Zp48A3w+zK69Q==", - "dev": true, - "dependencies": { - "@types/react": "*" - } - }, - "node_modules/@types/react-window-infinite-loader": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@types/react-window-infinite-loader/-/react-window-infinite-loader-1.0.9.tgz", - "integrity": "sha512-gEInTjQwURCnDOFyIEK2+fWB5gTjqwx30O62QfxA9stE5aiB6EWkGj4UMhc0axq7/FV++Gs/TGW8FtgEx0S6Tw==", - "dev": true, - "dependencies": { - "@types/react": "*", - "@types/react-window": "*" - } - }, - "node_modules/@types/responselike": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.3.tgz", - "integrity": "sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/scheduler": { - "version": "0.16.8", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.8.tgz", - "integrity": "sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==", - "devOptional": true - }, - "node_modules/@types/verror": { - "version": "1.10.10", - "resolved": "https://registry.npmjs.org/@types/verror/-/verror-1.10.10.tgz", - "integrity": "sha512-l4MM0Jppn18hb9xmM6wwD1uTdShpf9Pn80aXTStnK1C94gtPvJcV2FrDmbOQUAQfJ1cKZHktkQUDwEqaAKXMMg==", - "dev": true, - "optional": true - }, - "node_modules/@types/ws": { - "version": "8.5.12", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.12.tgz", - "integrity": "sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/yauzl": { - "version": "2.10.3", - "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", - "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", - "dev": true, - "optional": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.18.0.tgz", - "integrity": "sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==", - "dev": true, - "dependencies": { - "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "7.18.0", - "@typescript-eslint/type-utils": "7.18.0", - "@typescript-eslint/utils": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0", - "graphemer": "^1.4.0", - "ignore": "^5.3.1", - "natural-compare": "^1.4.0", - "ts-api-utils": "^1.3.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^7.0.0", - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.18.0.tgz", - "integrity": "sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==", - "dev": true, - "dependencies": { - "@typescript-eslint/scope-manager": "7.18.0", - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/typescript-estree": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0", - "debug": "^4.3.4" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz", - "integrity": "sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/type-utils": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.18.0.tgz", - "integrity": "sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==", - "dev": true, - "dependencies": { - "@typescript-eslint/typescript-estree": "7.18.0", - "@typescript-eslint/utils": "7.18.0", - "debug": "^4.3.4", - "ts-api-utils": "^1.3.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/types": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz", - "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==", - "dev": true, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz", - "integrity": "sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "ts-api-utils": "^1.3.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/utils": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.18.0.tgz", - "integrity": "sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==", - "dev": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "7.18.0", - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/typescript-estree": "7.18.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.56.0" - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz", - "integrity": "sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "7.18.0", - "eslint-visitor-keys": "^3.4.3" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@ungap/promise-all-settled": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", - "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", - "dev": true - }, - "node_modules/@ungap/structured-clone": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", - "dev": true - }, - "node_modules/@xmldom/xmldom": { - "version": "0.8.10", - "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.10.tgz", - "integrity": "sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==", - "dev": true, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/7zip-bin": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/7zip-bin/-/7zip-bin-5.2.0.tgz", - "integrity": "sha512-ukTPVhqG4jNzMro2qA9HSCSSVJN3aN7tlb+hfqYCt3ER0yWroeA2VR38MNrOHLQ/cVj+DaIMad0kFCtWWowh/A==", - "dev": true - }, - "node_modules/acorn": { - "version": "8.12.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", - "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/acorn-walk": { - "version": "8.3.3", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.3.tgz", - "integrity": "sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==", - "dev": true, - "dependencies": { - "acorn": "^8.11.0" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/adm-zip": { - "version": "0.5.14", - "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.14.tgz", - "integrity": "sha512-DnyqqifT4Jrcvb8USYjp6FHtBpEIz1mnXu6pTRHZ0RL69LbQYiO+0lDFg5+OKA7U29oWSs3a/i8fhn8ZcceIWg==", - "dev": true, - "engines": { - "node": ">=12.0" - } - }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/app-builder-bin": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/app-builder-bin/-/app-builder-bin-4.0.0.tgz", - "integrity": "sha512-xwdG0FJPQMe0M0UA4Tz0zEB8rBJTRA5a476ZawAqiBkMv16GRK5xpXThOjMaEOFnZ6zabejjG4J3da0SXG63KA==", - "dev": true - }, - "node_modules/app-builder-lib": { - "version": "24.13.3", - "resolved": "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-24.13.3.tgz", - "integrity": "sha512-FAzX6IBit2POXYGnTCT8YHFO/lr5AapAII6zzhQO3Rw4cEDOgK+t1xhLc5tNcKlicTHlo9zxIwnYCX9X2DLkig==", - "dev": true, - "dependencies": { - "@develar/schema-utils": "~2.6.5", - "@electron/notarize": "2.2.1", - "@electron/osx-sign": "1.0.5", - "@electron/universal": "1.5.1", - "@malept/flatpak-bundler": "^0.4.0", - "@types/fs-extra": "9.0.13", - "async-exit-hook": "^2.0.1", - "bluebird-lst": "^1.0.9", - "builder-util": "24.13.1", - "builder-util-runtime": "9.2.4", - "chromium-pickle-js": "^0.2.0", - "debug": "^4.3.4", - "ejs": "^3.1.8", - "electron-publish": "24.13.1", - "form-data": "^4.0.0", - "fs-extra": "^10.1.0", - "hosted-git-info": "^4.1.0", - "is-ci": "^3.0.0", - "isbinaryfile": "^5.0.0", - "js-yaml": "^4.1.0", - "lazy-val": "^1.0.5", - "minimatch": "^5.1.1", - "read-config-file": "6.3.2", - "sanitize-filename": "^1.6.3", - "semver": "^7.3.8", - "tar": "^6.1.12", - "temp-file": "^3.4.0" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "dmg-builder": "24.13.3", - "electron-builder-squirrel-windows": "24.13.3" - } - }, - "node_modules/app-builder-lib/node_modules/@electron/notarize": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@electron/notarize/-/notarize-2.2.1.tgz", - "integrity": "sha512-aL+bFMIkpR0cmmj5Zgy0LMKEpgy43/hw5zadEArgmAMWWlKc5buwFvFT9G/o/YJkvXAJm5q3iuTuLaiaXW39sg==", - "dev": true, - "dependencies": { - "debug": "^4.1.1", - "fs-extra": "^9.0.1", - "promise-retry": "^2.0.1" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/app-builder-lib/node_modules/@electron/notarize/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/app-builder-lib/node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/app-builder-lib/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/application-config": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/application-config/-/application-config-1.0.1.tgz", - "integrity": "sha512-4/pxvg7ujMT7UD+b0OyXwlYntRnqZxjBUoA+vtYwdUA6Nxfx4rGPMaP3kQQcm1aZ9fnXl6Aw2sJy+ZID85/nug==", - "dependencies": { - "application-config-path": "^0.1.0", - "mkdirp": "^0.5.1" - } - }, - "node_modules/application-config-path": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/application-config-path/-/application-config-path-0.1.1.tgz", - "integrity": "sha512-zy9cHePtMP0YhwG+CfHm0bgwdnga2X3gZexpdCwEj//dpb+TKajtiC8REEUJUSq6Ab4f9cgNy2l8ObXzCXFkEw==" - }, - "node_modules/archiver": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.3.2.tgz", - "integrity": "sha512-+25nxyyznAXF7Nef3y0EbBeqmGZgeN/BxHX29Rs39djAfaFalmQ89SE6CWyDCHzGL0yt/ycBtNOmGTW0FyGWNw==", - "dev": true, - "peer": true, - "dependencies": { - "archiver-utils": "^2.1.0", - "async": "^3.2.4", - "buffer-crc32": "^0.2.1", - "readable-stream": "^3.6.0", - "readdir-glob": "^1.1.2", - "tar-stream": "^2.2.0", - "zip-stream": "^4.1.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/archiver-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz", - "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==", - "dev": true, - "peer": true, - "dependencies": { - "glob": "^7.1.4", - "graceful-fs": "^4.2.0", - "lazystream": "^1.0.0", - "lodash.defaults": "^4.2.0", - "lodash.difference": "^4.5.0", - "lodash.flatten": "^4.4.0", - "lodash.isplainobject": "^4.0.6", - "lodash.union": "^4.6.0", - "normalize-path": "^3.0.0", - "readable-stream": "^2.0.0" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/archiver-utils/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "peer": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/archiver-utils/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true, - "peer": true - }, - "node_modules/archiver-utils/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "peer": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true, - "optional": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/async": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", - "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==", - "dev": true - }, - "node_modules/async-exit-hook": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/async-exit-hook/-/async-exit-hook-2.0.1.tgz", - "integrity": "sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true - }, - "node_modules/at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/binary-extensions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dev": true, - "peer": true, - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true - }, - "node_modules/bluebird-lst": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/bluebird-lst/-/bluebird-lst-1.0.9.tgz", - "integrity": "sha512-7B1Rtx82hjnSD4PGLAjVWeYH3tHAcVUmChh85a3lltKQm6FresXh9ErQo6oAv6CqxttczC3/kEg8SY5NluPuUw==", - "dev": true, - "dependencies": { - "bluebird": "^3.5.5" - } - }, - "node_modules/boolean": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.2.0.tgz", - "integrity": "sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==", - "dev": true, - "optional": true - }, - "node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true - }, - "node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/buffer-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.1.tgz", - "integrity": "sha512-QoV3ptgEaQpvVwbXdSO39iqPQTCxSF7A5U99AxbHYqUdCizL/lH2Z0A2y6nbZucxMEOtNyZfG2s6gsVugGpKkg==", - "dev": true, - "engines": { - "node": ">=0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" - }, - "node_modules/builder-util": { - "version": "24.13.1", - "resolved": "https://registry.npmjs.org/builder-util/-/builder-util-24.13.1.tgz", - "integrity": "sha512-NhbCSIntruNDTOVI9fdXz0dihaqX2YuE1D6zZMrwiErzH4ELZHE6mdiB40wEgZNprDia+FghRFgKoAqMZRRjSA==", - "dev": true, - "dependencies": { - "@types/debug": "^4.1.6", - "7zip-bin": "~5.2.0", - "app-builder-bin": "4.0.0", - "bluebird-lst": "^1.0.9", - "builder-util-runtime": "9.2.4", - "chalk": "^4.1.2", - "cross-spawn": "^7.0.3", - "debug": "^4.3.4", - "fs-extra": "^10.1.0", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.1", - "is-ci": "^3.0.0", - "js-yaml": "^4.1.0", - "source-map-support": "^0.5.19", - "stat-mode": "^1.0.0", - "temp-file": "^3.4.0" - } - }, - "node_modules/builder-util-runtime": { - "version": "9.2.4", - "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.2.4.tgz", - "integrity": "sha512-upp+biKpN/XZMLim7aguUyW8s0FUpDvOtK6sbanMFDAMBzpHDqdhgVYm6zc9HJ6nWo7u2Lxk60i2M6Jd3aiNrA==", - "dev": true, - "dependencies": { - "debug": "^4.3.4", - "sax": "^1.2.4" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/builder-util/node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/cacheable-lookup": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", - "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", - "dev": true, - "engines": { - "node": ">=10.6.0" - } - }, - "node_modules/cacheable-request": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.4.tgz", - "integrity": "sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==", - "dev": true, - "dependencies": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^4.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^6.0.1", - "responselike": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/call-bind": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/camel-case": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", - "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", - "dependencies": { - "pascal-case": "^3.1.2", - "tslib": "^2.0.3" - } - }, - "node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/capital-case": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/capital-case/-/capital-case-1.0.4.tgz", - "integrity": "sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3", - "upper-case-first": "^2.0.2" - } - }, - "node_modules/chai": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.5.0.tgz", - "integrity": "sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==", - "dev": true, - "dependencies": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.3", - "deep-eql": "^4.1.3", - "get-func-name": "^2.0.2", - "loupe": "^2.3.6", - "pathval": "^1.1.1", - "type-detect": "^4.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/change-case": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/change-case/-/change-case-4.1.2.tgz", - "integrity": "sha512-bSxY2ws9OtviILG1EiY5K7NNxkqg/JnRnFxLtKQ96JaviiIxi7djMrSd0ECT9AC+lttClmYwKw53BWpOMblo7A==", - "dependencies": { - "camel-case": "^4.1.2", - "capital-case": "^1.0.4", - "constant-case": "^3.0.4", - "dot-case": "^3.0.4", - "header-case": "^2.0.4", - "no-case": "^3.0.4", - "param-case": "^3.0.4", - "pascal-case": "^3.1.2", - "path-case": "^3.0.4", - "sentence-case": "^3.0.4", - "snake-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/check-error": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", - "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", - "dev": true, - "dependencies": { - "get-func-name": "^2.0.2" - }, - "engines": { - "node": "*" - } - }, - "node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "dev": true, - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/chromium-pickle-js": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz", - "integrity": "sha512-1R5Fho+jBq0DDydt+/vHWj5KJNJCKdARKOCwZUen84I5BreWoLqRLANH1U87eJy1tiASPtMnGqJJq0ZsLoRPOw==", - "dev": true - }, - "node_modules/ci-info": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", - "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "engines": { - "node": ">=8" - } - }, - "node_modules/classnames": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz", - "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==" - }, - "node_modules/cli-truncate": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", - "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", - "dev": true, - "optional": true, - "dependencies": { - "slice-ansi": "^3.0.0", - "string-width": "^4.2.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/clone-response": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", - "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", - "dev": true, - "dependencies": { - "mimic-response": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/commander": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", - "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", - "dev": true - }, - "node_modules/compare-version": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/compare-version/-/compare-version-0.1.2.tgz", - "integrity": "sha512-pJDh5/4wrEnXX/VWRZvruAGHkzKdr46z11OlTPN+VrATlWWhSKewNCJ1futCO5C7eJB3nPMFZA1LeYtcFboZ2A==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/compress-commons": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.1.2.tgz", - "integrity": "sha512-D3uMHtGc/fcO1Gt1/L7i1e33VOvD4A9hfQLP+6ewd+BvG/gQ84Yh4oftEhAdjSMgBgwGL+jsppT7JYNpo6MHHg==", - "dev": true, - "peer": true, - "dependencies": { - "buffer-crc32": "^0.2.13", - "crc32-stream": "^4.0.2", - "normalize-path": "^3.0.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "node_modules/config-file-ts": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/config-file-ts/-/config-file-ts-0.2.6.tgz", - "integrity": "sha512-6boGVaglwblBgJqGyxm4+xCmEGcWgnWHSWHY5jad58awQhB6gftq0G8HbzU39YqCIYHMLAiL1yjwiZ36m/CL8w==", - "dev": true, - "dependencies": { - "glob": "^10.3.10", - "typescript": "^5.3.3" - } - }, - "node_modules/config-file-ts/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "dev": true, - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/config-file-ts/node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "dev": true, - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/constant-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/constant-case/-/constant-case-3.0.4.tgz", - "integrity": "sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ==", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3", - "upper-case": "^2.0.2" - } - }, - "node_modules/copy-anything": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz", - "integrity": "sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==", - "dev": true, - "dependencies": { - "is-what": "^3.14.1" - }, - "funding": { - "url": "https://github.com/sponsors/mesqueeb" - } - }, - "node_modules/core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", - "dev": true - }, - "node_modules/crc": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/crc/-/crc-3.8.0.tgz", - "integrity": "sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==", - "dev": true, - "optional": true, - "dependencies": { - "buffer": "^5.1.0" - } - }, - "node_modules/crc-32": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", - "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", - "dev": true, - "peer": true, - "bin": { - "crc32": "bin/crc32.njs" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/crc32-stream": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.3.tgz", - "integrity": "sha512-NT7w2JVU7DFroFdYkeq8cywxrgjPHWkdX1wjpRQXPX5Asews3tA+Ght6lddQO5Mkumffp3X7GEqku3epj2toIw==", - "dev": true, - "peer": true, - "dependencies": { - "crc-32": "^1.2.0", - "readable-stream": "^3.4.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true, - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/csstype": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", - "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" - }, - "node_modules/debounce": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", - "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==" - }, - "node_modules/debug": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", - "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decamelize": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "dev": true, - "dependencies": { - "mimic-response": "^3.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/decompress-response/node_modules/mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/deep-eql": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.4.tgz", - "integrity": "sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==", - "dev": true, - "dependencies": { - "type-detect": "^4.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/deep-equal": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.2.tgz", - "integrity": "sha512-5tdhKF6DbU7iIzrIOa1AOUt39ZRm13cmL1cGEh//aqR8x9+tNfbywRf0n5FD/18OKMdo7DNEtrX2t22ZAkI+eg==", - "dependencies": { - "is-arguments": "^1.1.1", - "is-date-object": "^1.0.5", - "is-regex": "^1.1.4", - "object-is": "^1.1.5", - "object-keys": "^1.1.1", - "regexp.prototype.flags": "^1.5.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "node_modules/defer-to-connect": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", - "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/define-properties": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", - "dependencies": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", - "dev": true, - "optional": true - }, - "node_modules/diff": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/dir-compare": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/dir-compare/-/dir-compare-3.3.0.tgz", - "integrity": "sha512-J7/et3WlGUCxjdnD3HAAzQ6nsnc0WL6DD7WcwJb7c39iH1+AWfg+9OqzJNaI6PkBwBvm1mhZNL9iY/nRiZXlPg==", - "dev": true, - "dependencies": { - "buffer-equal": "^1.0.0", - "minimatch": "^3.0.4" - } - }, - "node_modules/dir-compare/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/dir-compare/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/dmg-builder": { - "version": "24.13.3", - "resolved": "https://registry.npmjs.org/dmg-builder/-/dmg-builder-24.13.3.tgz", - "integrity": "sha512-rcJUkMfnJpfCboZoOOPf4L29TRtEieHNOeAbYPWPxlaBw/Z1RKrRA86dOI9rwaI4tQSc/RD82zTNHprfUHXsoQ==", - "dev": true, - "dependencies": { - "app-builder-lib": "24.13.3", - "builder-util": "24.13.1", - "builder-util-runtime": "9.2.4", - "fs-extra": "^10.1.0", - "iconv-lite": "^0.6.2", - "js-yaml": "^4.1.0" - }, - "optionalDependencies": { - "dmg-license": "^1.0.11" - } - }, - "node_modules/dmg-builder/node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/dmg-license": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/dmg-license/-/dmg-license-1.0.11.tgz", - "integrity": "sha512-ZdzmqwKmECOWJpqefloC5OJy1+WZBBse5+MR88z9g9Zn4VY+WYUkAyojmhzJckH5YbbZGcYIuGAkY5/Ys5OM2Q==", - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "dependencies": { - "@types/plist": "^3.0.1", - "@types/verror": "^1.10.3", - "ajv": "^6.10.0", - "crc": "^3.8.0", - "iconv-corefoundation": "^1.1.7", - "plist": "^3.0.4", - "smart-buffer": "^4.0.2", - "verror": "^1.10.0" - }, - "bin": { - "dmg-license": "bin/dmg-license.js" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/dom-helpers": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", - "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", - "dependencies": { - "@babel/runtime": "^7.8.7", - "csstype": "^3.0.2" - } - }, - "node_modules/dom4": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/dom4/-/dom4-2.1.6.tgz", - "integrity": "sha512-JkCVGnN4ofKGbjf5Uvc8mmxaATIErKQKSgACdBXpsQ3fY6DlIpAyWfiBSrGkttATssbDCp3psiAKWXk5gmjycA==" - }, - "node_modules/dot-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", - "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/dotenv": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-9.0.2.tgz", - "integrity": "sha512-I9OvvrHp4pIARv4+x9iuewrWycX6CcZtoAu1XrzPxc5UygMJXJZYmBsynku8IkrJwgypE5DGNjDPmPRhDCptUg==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/dotenv-expand": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", - "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", - "dev": true - }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true - }, - "node_modules/ejs": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", - "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", - "dev": true, - "dependencies": { - "jake": "^10.8.5" - }, - "bin": { - "ejs": "bin/cli.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/electron": { - "version": "30.3.1", - "resolved": "https://registry.npmjs.org/electron/-/electron-30.3.1.tgz", - "integrity": "sha512-Ai/OZ7VlbFAVYMn9J5lyvtr+ZWyEbXDVd5wBLb5EVrp4352SRmMAmN5chcIe3n9mjzcgehV9n4Hwy15CJW+YbA==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "@electron/get": "^2.0.0", - "@types/node": "^20.9.0", - "extract-zip": "^2.0.1" - }, - "bin": { - "electron": "cli.js" - }, - "engines": { - "node": ">= 12.20.55" - } - }, - "node_modules/electron-builder": { - "version": "24.13.3", - "resolved": "https://registry.npmjs.org/electron-builder/-/electron-builder-24.13.3.tgz", - "integrity": "sha512-yZSgVHft5dNVlo31qmJAe4BVKQfFdwpRw7sFp1iQglDRCDD6r22zfRJuZlhtB5gp9FHUxCMEoWGq10SkCnMAIg==", - "dev": true, - "dependencies": { - "app-builder-lib": "24.13.3", - "builder-util": "24.13.1", - "builder-util-runtime": "9.2.4", - "chalk": "^4.1.2", - "dmg-builder": "24.13.3", - "fs-extra": "^10.1.0", - "is-ci": "^3.0.0", - "lazy-val": "^1.0.5", - "read-config-file": "6.3.2", - "simple-update-notifier": "2.0.0", - "yargs": "^17.6.2" - }, - "bin": { - "electron-builder": "cli.js", - "install-app-deps": "install-app-deps.js" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/electron-builder-squirrel-windows": { - "version": "24.13.3", - "resolved": "https://registry.npmjs.org/electron-builder-squirrel-windows/-/electron-builder-squirrel-windows-24.13.3.tgz", - "integrity": "sha512-oHkV0iogWfyK+ah9ZIvMDpei1m9ZRpdXcvde1wTpra2U8AFDNNpqJdnin5z+PM1GbQ5BoaKCWas2HSjtR0HwMg==", - "dev": true, - "peer": true, - "dependencies": { - "app-builder-lib": "24.13.3", - "archiver": "^5.3.1", - "builder-util": "24.13.1", - "fs-extra": "^10.1.0" - } - }, - "node_modules/electron-builder-squirrel-windows/node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dev": true, - "peer": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/electron-builder/node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/electron-publish": { - "version": "24.13.1", - "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-24.13.1.tgz", - "integrity": "sha512-2ZgdEqJ8e9D17Hwp5LEq5mLQPjqU3lv/IALvgp+4W8VeNhryfGhYEQC/PgDPMrnWUp+l60Ou5SJLsu+k4mhQ8A==", - "dev": true, - "dependencies": { - "@types/fs-extra": "^9.0.11", - "builder-util": "24.13.1", - "builder-util-runtime": "9.2.4", - "chalk": "^4.1.2", - "fs-extra": "^10.1.0", - "lazy-val": "^1.0.5", - "mime": "^2.5.2" - } - }, - "node_modules/electron-publish/node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/emoji-js-clean": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/emoji-js-clean/-/emoji-js-clean-4.0.0.tgz", - "integrity": "sha512-6WZ/WH61ABR/s3TZpRW+nXBSRu6xMTdZSGjNTHo1ptv1vRjwOfbzEPQp9mtgbCi1vkFsFi1SZYz/UIliVxvLwg==" - }, - "node_modules/emoji-mart": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/emoji-mart/-/emoji-mart-5.5.2.tgz", - "integrity": "sha512-Sqc/nso4cjxhOwWJsp9xkVm8OF5c+mJLZJFoFfzRuKO+yWiN7K8c96xmtughYb0d/fZ8UC6cLIQ/p4BR6Pv3/A==" - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/err-code": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", - "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", - "dev": true - }, - "node_modules/errno": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", - "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", - "dev": true, - "optional": true, - "dependencies": { - "prr": "~1.0.1" - }, - "bin": { - "errno": "cli.js" - } - }, - "node_modules/error-stack-parser": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz", - "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", - "dependencies": { - "stackframe": "^1.3.4" - } - }, - "node_modules/es-define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", - "dependencies": { - "get-intrinsic": "^1.2.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es6-error": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", - "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", - "dev": true, - "optional": true - }, - "node_modules/esbuild": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.12.tgz", - "integrity": "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==", - "dev": true, - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.19.12", - "@esbuild/android-arm": "0.19.12", - "@esbuild/android-arm64": "0.19.12", - "@esbuild/android-x64": "0.19.12", - "@esbuild/darwin-arm64": "0.19.12", - "@esbuild/darwin-x64": "0.19.12", - "@esbuild/freebsd-arm64": "0.19.12", - "@esbuild/freebsd-x64": "0.19.12", - "@esbuild/linux-arm": "0.19.12", - "@esbuild/linux-arm64": "0.19.12", - "@esbuild/linux-ia32": "0.19.12", - "@esbuild/linux-loong64": "0.19.12", - "@esbuild/linux-mips64el": "0.19.12", - "@esbuild/linux-ppc64": "0.19.12", - "@esbuild/linux-riscv64": "0.19.12", - "@esbuild/linux-s390x": "0.19.12", - "@esbuild/linux-x64": "0.19.12", - "@esbuild/netbsd-x64": "0.19.12", - "@esbuild/openbsd-x64": "0.19.12", - "@esbuild/sunos-x64": "0.19.12", - "@esbuild/win32-arm64": "0.19.12", - "@esbuild/win32-ia32": "0.19.12", - "@esbuild/win32-x64": "0.19.12" - } - }, - "node_modules/esbuild-plugin-inline-worker": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/esbuild-plugin-inline-worker/-/esbuild-plugin-inline-worker-0.1.1.tgz", - "integrity": "sha512-VmFqsQKxUlbM51C1y5bRiMeyc1x2yTdMXhKB6S//++g9aCBg8TfGsbKxl5ZDkCGquqLY+RmEk93TBNd0i35dPA==", - "dev": true, - "dependencies": { - "esbuild": "latest", - "find-cache-dir": "^3.3.1" - } - }, - "node_modules/escalade": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", - "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", - "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", - "dev": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.0", - "@humanwhocodes/config-array": "^0.11.14", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-config-prettier": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", - "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", - "dev": true, - "bin": { - "eslint-config-prettier": "bin/cli.js" - }, - "peerDependencies": { - "eslint": ">=7.0.0" - } - }, - "node_modules/eslint-plugin-prettier": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.2.1.tgz", - "integrity": "sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw==", - "dev": true, - "dependencies": { - "prettier-linter-helpers": "^1.0.0", - "synckit": "^0.9.1" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint-plugin-prettier" - }, - "peerDependencies": { - "@types/eslint": ">=8.0.0", - "eslint": ">=8.0.0", - "eslint-config-prettier": "*", - "prettier": ">=3.0.0" - }, - "peerDependenciesMeta": { - "@types/eslint": { - "optional": true - }, - "eslint-config-prettier": { - "optional": true - } - } - }, - "node_modules/eslint-plugin-react-hooks": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz", - "integrity": "sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" - } - }, - "node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/eslint/node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/eslint/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", - "dev": true, - "dependencies": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esquery": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", - "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", - "dev": true, - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extract-zip": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", - "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", - "dev": true, - "dependencies": { - "debug": "^4.1.1", - "get-stream": "^5.1.0", - "yauzl": "^2.10.0" - }, - "bin": { - "extract-zip": "cli.js" - }, - "engines": { - "node": ">= 10.17.0" - }, - "optionalDependencies": { - "@types/yauzl": "^2.9.1" - } - }, - "node_modules/extsprintf": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.4.1.tgz", - "integrity": "sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA==", - "dev": true, - "engines": [ - "node >=0.6.0" - ], - "optional": true - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "node_modules/fast-diff": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", - "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", - "dev": true - }, - "node_modules/fast-glob": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true - }, - "node_modules/fastq": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", - "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", - "dev": true, - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", - "dev": true, - "dependencies": { - "pend": "~1.2.0" - } - }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/filelist": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", - "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", - "dev": true, - "dependencies": { - "minimatch": "^5.0.1" - } - }, - "node_modules/filelist/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/filesize": { - "version": "10.1.4", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-10.1.4.tgz", - "integrity": "sha512-ryBwPIIeErmxgPnm6cbESAzXjuEFubs+yKYLBZvg3CaiNcmkJChoOGcBSrZ6IwkMwPABwPpVXE6IlNdGJJrvEg==", - "engines": { - "node": ">= 10.4.0" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-cache-dir": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", - "dev": true, - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/avajs/find-cache-dir?sponsor=1" - } - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "dev": true, - "bin": { - "flat": "cli.js" - } - }, - "node_modules/flat-cache": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", - "dev": true, - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flatted": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", - "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", - "dev": true - }, - "node_modules/foreachasync": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/foreachasync/-/foreachasync-3.0.0.tgz", - "integrity": "sha512-J+ler7Ta54FwwNcx6wQRDhTIbNeyDcARMkOcguEqnEdtm0jKvN3Li3PDAb2Du3ubJYEWfYL83XMROXdsXAXycw==", - "dev": true - }, - "node_modules/foreground-child": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.2.1.tgz", - "integrity": "sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dev": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "dev": true, - "peer": true - }, - "node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/fs-minipass/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-func-name": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", - "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/glob/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/glob/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/global-agent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-3.0.0.tgz", - "integrity": "sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==", - "dev": true, - "optional": true, - "dependencies": { - "boolean": "^3.0.1", - "es6-error": "^4.1.1", - "matcher": "^3.0.0", - "roarr": "^2.15.3", - "semver": "^7.3.2", - "serialize-error": "^7.0.1" - }, - "engines": { - "node": ">=10.0" - } - }, - "node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globalthis": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", - "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", - "dev": true, - "optional": true, - "dependencies": { - "define-properties": "^1.2.1", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dependencies": { - "get-intrinsic": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/got": { - "version": "11.8.6", - "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", - "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", - "dev": true, - "dependencies": { - "@sindresorhus/is": "^4.0.0", - "@szmarczak/http-timer": "^4.0.5", - "@types/cacheable-request": "^6.0.1", - "@types/responselike": "^1.0.0", - "cacheable-lookup": "^5.0.3", - "cacheable-request": "^7.0.2", - "decompress-response": "^6.0.0", - "http2-wrapper": "^1.0.0-beta.5.2", - "lowercase-keys": "^2.0.0", - "p-cancelable": "^2.0.0", - "responselike": "^2.0.0" - }, - "engines": { - "node": ">=10.19.0" - }, - "funding": { - "url": "https://github.com/sindresorhus/got?sponsor=1" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true - }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true - }, - "node_modules/growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "dev": true, - "engines": { - "node": ">=4.x" - } - }, - "node_modules/gud": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/gud/-/gud-1.0.0.tgz", - "integrity": "sha512-zGEOVKFM5sVPPrYs7J5/hYEw2Pof8KCyOwyhG8sAF26mCAeUFAcYPu1mwB7hhpIP29zOIBaDqwuHdLp0jvZXjw==" - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "dependencies": { - "es-define-property": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "dependencies": { - "has-symbols": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true, - "bin": { - "he": "bin/he" - } - }, - "node_modules/header-case": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/header-case/-/header-case-2.0.4.tgz", - "integrity": "sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q==", - "dependencies": { - "capital-case": "^1.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/http-cache-semantics": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", - "dev": true - }, - "node_modules/http-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", - "dev": true, - "dependencies": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/http2-wrapper": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", - "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", - "dev": true, - "dependencies": { - "quick-lru": "^5.1.1", - "resolve-alpn": "^1.0.0" - }, - "engines": { - "node": ">=10.19.0" - } - }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dev": true, - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/iconv-corefoundation": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/iconv-corefoundation/-/iconv-corefoundation-1.1.7.tgz", - "integrity": "sha512-T10qvkw0zz4wnm560lOEg0PovVqUXuOFhhHAkixw8/sycy7TJt7v/RrkEKEQnAw2viPSJu6iAkErxnzR0g8PpQ==", - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "dependencies": { - "cli-truncate": "^2.1.0", - "node-addon-api": "^1.6.3" - }, - "engines": { - "node": "^8.11.2 || >=10" - } - }, - "node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/icss-utils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/ignore": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", - "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/image-size": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", - "integrity": "sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==", - "dev": true, - "optional": true, - "bin": { - "image-size": "bin/image-size.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/immutable": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.7.tgz", - "integrity": "sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==" - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" - }, - "node_modules/is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-ci": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", - "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", - "dev": true, - "dependencies": { - "ci-info": "^3.2.0" - }, - "bin": { - "is-ci": "bin.js" - } - }, - "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-what": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz", - "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==", - "dev": true - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true, - "peer": true - }, - "node_modules/isbinaryfile": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-5.0.2.tgz", - "integrity": "sha512-GvcjojwonMjWbTkfMpnVHVqXW/wKMYDfEpY94/8zy8HFMOqb/VL6oeONq9v87q4ttVlaTLnGXnJD4B5B1OTGIg==", - "dev": true, - "engines": { - "node": ">= 18.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/gjtorikian/" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "node_modules/isomorphic-ws": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz", - "integrity": "sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==", - "peerDependencies": { - "ws": "*" - } - }, - "node_modules/jackspeak": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", - "dev": true, - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, - "node_modules/jake": { - "version": "10.9.2", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz", - "integrity": "sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==", - "dev": true, - "dependencies": { - "async": "^3.2.3", - "chalk": "^4.0.2", - "filelist": "^1.0.4", - "minimatch": "^3.1.2" - }, - "bin": { - "jake": "bin/cli.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jake/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/jake/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true - }, - "node_modules/json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", - "dev": true, - "optional": true - }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jsqr": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/jsqr/-/jsqr-1.4.0.tgz", - "integrity": "sha512-dxLob7q65Xg2DvstYkRpkYtmKm2sPJ9oFhrhmudT1dZvNFFTlroai3AWSpLey/w5vMcLBXRgOJsbXpdN9HzU/A==" - }, - "node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "dev": true, - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/lazy-val": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/lazy-val/-/lazy-val-1.0.5.tgz", - "integrity": "sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q==", - "dev": true - }, - "node_modules/lazystream": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", - "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", - "dev": true, - "peer": true, - "dependencies": { - "readable-stream": "^2.0.5" - }, - "engines": { - "node": ">= 0.6.3" - } - }, - "node_modules/lazystream/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "peer": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/lazystream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true, - "peer": true - }, - "node_modules/lazystream/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "peer": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/less": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/less/-/less-4.2.0.tgz", - "integrity": "sha512-P3b3HJDBtSzsXUl0im2L7gTO5Ubg8mEN6G8qoTS77iXxXX4Hvu4Qj540PZDvQ8V6DmX6iXo98k7Md0Cm1PrLaA==", - "dev": true, - "dependencies": { - "copy-anything": "^2.0.1", - "parse-node-version": "^1.0.1", - "tslib": "^2.3.0" - }, - "bin": { - "lessc": "bin/lessc" - }, - "engines": { - "node": ">=6" - }, - "optionalDependencies": { - "errno": "^0.1.1", - "graceful-fs": "^4.1.2", - "image-size": "~0.5.0", - "make-dir": "^2.1.0", - "mime": "^1.4.1", - "needle": "^3.1.0", - "source-map": "~0.6.0" - } - }, - "node_modules/less/node_modules/make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "optional": true, - "dependencies": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/less/node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true, - "optional": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/less/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "optional": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/lilconfig": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", - "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "node_modules/lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", - "dev": true - }, - "node_modules/lodash.defaults": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", - "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==", - "dev": true, - "peer": true - }, - "node_modules/lodash.difference": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", - "integrity": "sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA==", - "dev": true, - "peer": true - }, - "node_modules/lodash.flatten": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", - "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==", - "dev": true, - "peer": true - }, - "node_modules/lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", - "dev": true, - "peer": true - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "node_modules/lodash.union": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", - "integrity": "sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw==", - "dev": true, - "peer": true - }, - "node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/loupe": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", - "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", - "dev": true, - "dependencies": { - "get-func-name": "^2.0.1" - } - }, - "node_modules/lower-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", - "dependencies": { - "tslib": "^2.0.3" - } - }, - "node_modules/lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-dir/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true - }, - "node_modules/matcher": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz", - "integrity": "sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==", - "dev": true, - "optional": true, - "dependencies": { - "escape-string-regexp": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/memoize-one": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz", - "integrity": "sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==" - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", - "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", - "dev": true, - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", - "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", - "dev": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minizlib/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/mocha": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.2.tgz", - "integrity": "sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==", - "dev": true, - "dependencies": { - "@ungap/promise-all-settled": "1.1.2", - "ansi-colors": "4.1.1", - "browser-stdout": "1.3.1", - "chokidar": "3.5.3", - "debug": "4.3.3", - "diff": "5.0.0", - "escape-string-regexp": "4.0.0", - "find-up": "5.0.0", - "glob": "7.2.0", - "growl": "1.10.5", - "he": "1.2.0", - "js-yaml": "4.1.0", - "log-symbols": "4.1.0", - "minimatch": "4.2.1", - "ms": "2.1.3", - "nanoid": "3.3.1", - "serialize-javascript": "6.0.0", - "strip-json-comments": "3.1.1", - "supports-color": "8.1.1", - "which": "2.0.2", - "workerpool": "6.2.0", - "yargs": "16.2.0", - "yargs-parser": "20.2.4", - "yargs-unparser": "2.0.0" - }, - "bin": { - "_mocha": "bin/_mocha", - "mocha": "bin/mocha" - }, - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mochajs" - } - }, - "node_modules/mocha/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/mocha/node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/mocha/node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/mocha/node_modules/debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/mocha/node_modules/debug/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/mocha/node_modules/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/mocha/node_modules/glob/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/mocha/node_modules/minimatch": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-4.2.1.tgz", - "integrity": "sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/mocha/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "node_modules/mocha/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/mocha/node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/moment": { - "version": "2.30.1", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", - "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", - "engines": { - "node": "*" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/nanoid": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz", - "integrity": "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==", - "dev": true, - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "node_modules/needle": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/needle/-/needle-3.3.1.tgz", - "integrity": "sha512-6k0YULvhpw+RoLNiQCRKOl09Rv1dPLr8hHnVjHqdolKwDrdNyk+Hmrthi4lIGPPz3r39dLx0hsF5s40sZ3Us4Q==", - "dev": true, - "optional": true, - "dependencies": { - "iconv-lite": "^0.6.3", - "sax": "^1.2.4" - }, - "bin": { - "needle": "bin/needle" - }, - "engines": { - "node": ">= 4.4.x" - } - }, - "node_modules/no-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", - "dependencies": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" - } - }, - "node_modules/node-addon-api": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.7.2.tgz", - "integrity": "sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg==", - "dev": true, - "optional": true - }, - "node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "dev": true, - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/normalize.css": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/normalize.css/-/normalize.css-8.0.1.tgz", - "integrity": "sha512-qizSNPO93t1YUuUhP22btGOo3chcvDFqFaj2TRybP0DMxkHOCTYwp3n34fel4a31ORXy4m1Xq0Gyqpb5m33qIg==" - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-is": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.6.tgz", - "integrity": "sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/optionator": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", - "dev": true, - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.5" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/p-cancelable": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", - "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/package-json-from-dist": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz", - "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==", - "dev": true - }, - "node_modules/param-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", - "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", - "dependencies": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-node-version": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", - "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/pascal-case": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", - "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/path-browserify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", - "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==" - }, - "node_modules/path-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/path-case/-/path-case-3.0.4.tgz", - "integrity": "sha512-qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg==", - "dependencies": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-scurry": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", - "dev": true, - "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/path-scurry/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/pathval": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", - "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", - "dev": true - }, - "node_modules/picocolors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", - "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", - "dev": true - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true, - "optional": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-dir/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/plist": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/plist/-/plist-3.1.0.tgz", - "integrity": "sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ==", - "dev": true, - "dependencies": { - "@xmldom/xmldom": "^0.8.8", - "base64-js": "^1.5.1", - "xmlbuilder": "^15.1.1" - }, - "engines": { - "node": ">=10.4.0" - } - }, - "node_modules/popper.js": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1.tgz", - "integrity": "sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ==", - "deprecated": "You can find the new Popper v2 at @popperjs/core, this package is dedicated to the legacy v1", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/popperjs" - } - }, - "node_modules/postcss": { - "version": "8.4.40", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.40.tgz", - "integrity": "sha512-YF2kKIUzAofPMpfH6hOi2cGnv/HrUlfucspc7pDyvv7kGdqXrfj8SCl/t8owkEgKEuu8ZcRjSOxFxVLqwChZ2Q==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "nanoid": "^3.3.7", - "picocolors": "^1.0.1", - "source-map-js": "^1.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/postcss-load-config": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz", - "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", - "dev": true, - "dependencies": { - "lilconfig": "^2.0.5", - "yaml": "^1.10.2" - }, - "engines": { - "node": ">= 10" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": ">=8.0.9", - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "postcss": { - "optional": true - }, - "ts-node": { - "optional": true - } - } - }, - "node_modules/postcss-modules-extract-imports": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz", - "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-local-by-default": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.5.tgz", - "integrity": "sha512-6MieY7sIfTK0hYfafw1OMEG+2bg8Q1ocHCpoWLqOKj3JXlKu4G7btkmM/B7lFubYkYWmRSPLZi5chid63ZaZYw==", - "dev": true, - "dependencies": { - "icss-utils": "^5.0.0", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-scope": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.0.tgz", - "integrity": "sha512-oq+g1ssrsZOsx9M96c5w8laRmvEu9C3adDSjI8oTcbfkrTE8hx/zfyobUoWIxaKPO8bt6S62kxpw5GqypEw1QQ==", - "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.4" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-selector-parser": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.1.tgz", - "integrity": "sha512-b4dlw/9V8A71rLIDsSwVmak9z2DuBUB7CA1/wSdelNEzqsjoSPeADTWNO09lpH49Diy3/JIZ2bSPB1dI3LJCHg==", - "dev": true, - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true - }, - "node_modules/postcss/node_modules/nanoid": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prettier": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.1.0.tgz", - "integrity": "sha512-TQLvXjq5IAibjh8EpBIkNKxO749UEWABoiIZehEPiY4GNpVdhaFKqSTu+QrlU6D2dPAfubRmtJTi4K4YkQ5eXw==", - "dev": true, - "bin": { - "prettier": "bin/prettier.cjs" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/prettier-linter-helpers": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", - "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", - "dev": true, - "dependencies": { - "fast-diff": "^1.1.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true, - "peer": true - }, - "node_modules/progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/promise-retry": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", - "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", - "dev": true, - "dependencies": { - "err-code": "^2.0.2", - "retry": "^0.12.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "node_modules/prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", - "dev": true, - "optional": true - }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/quick-lru": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "bin": { - "rc": "cli.js" - } - }, - "node_modules/rc/node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", - "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-dom": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", - "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "scheduler": "^0.20.2" - }, - "peerDependencies": { - "react": "17.0.2" - } - }, - "node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, - "node_modules/react-popper": { - "version": "1.3.11", - "resolved": "https://registry.npmjs.org/react-popper/-/react-popper-1.3.11.tgz", - "integrity": "sha512-VSA/bS+pSndSF2fiasHK/PTEEAyOpX60+H5EPAjoArr8JGm+oihu4UbrqcEBpQibJxBVCpYyjAX7abJ+7DoYVg==", - "dependencies": { - "@babel/runtime": "^7.1.2", - "@hypnosphi/create-react-context": "^0.3.1", - "deep-equal": "^1.1.1", - "popper.js": "^1.14.4", - "prop-types": "^15.6.1", - "typed-styles": "^0.0.7", - "warning": "^4.0.2" - }, - "peerDependencies": { - "react": "0.14.x || ^15.0.0 || ^16.0.0 || ^17.0.0" - } - }, - "node_modules/react-string-replace": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/react-string-replace/-/react-string-replace-1.1.1.tgz", - "integrity": "sha512-26TUbLzLfHQ5jO5N7y3Mx88eeKo0Ml0UjCQuX4BMfOd/JX+enQqlKpL1CZnmjeBRvQE8TR+ds9j1rqx9CxhKHQ==", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/react-transition-group": { - "version": "4.4.5", - "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", - "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", - "dependencies": { - "@babel/runtime": "^7.5.5", - "dom-helpers": "^5.0.1", - "loose-envify": "^1.4.0", - "prop-types": "^15.6.2" - }, - "peerDependencies": { - "react": ">=16.6.0", - "react-dom": ">=16.6.0" - } - }, - "node_modules/react-virtualized-auto-sizer": { - "version": "1.0.24", - "resolved": "https://registry.npmjs.org/react-virtualized-auto-sizer/-/react-virtualized-auto-sizer-1.0.24.tgz", - "integrity": "sha512-3kCn7N9NEb3FlvJrSHWGQ4iVl+ydQObq2fHMn12i5wbtm74zHOPhz/i64OL3c1S1vi9i2GXtZqNqUJTQ+BnNfg==", - "peerDependencies": { - "react": "^15.3.0 || ^16.0.0-alpha || ^17.0.0 || ^18.0.0", - "react-dom": "^15.3.0 || ^16.0.0-alpha || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/react-window": { - "version": "1.8.10", - "resolved": "https://registry.npmjs.org/react-window/-/react-window-1.8.10.tgz", - "integrity": "sha512-Y0Cx+dnU6NLa5/EvoHukUD0BklJ8qITCtVEPY1C/nL8wwoZ0b5aEw8Ff1dOVHw7fCzMt55XfJDd8S8W8LCaUCg==", - "dependencies": { - "@babel/runtime": "^7.0.0", - "memoize-one": ">=3.1.1 <6" - }, - "engines": { - "node": ">8.0.0" - }, - "peerDependencies": { - "react": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/react-window-infinite-loader": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/react-window-infinite-loader/-/react-window-infinite-loader-1.0.9.tgz", - "integrity": "sha512-5Hg89IdU4Vrp0RT8kZYKeTIxWZYhNkVXeI1HbKo01Vm/Z7qztDvXljwx16sMzsa9yapRJQW3ODZfMUw38SOWHw==", - "engines": { - "node": ">8.0.0" - }, - "peerDependencies": { - "react": "^15.3.0 || ^16.0.0-alpha || ^17.0.0 || ^18.0.0", - "react-dom": "^15.3.0 || ^16.0.0-alpha || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/react-zoom-pan-pinch": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/react-zoom-pan-pinch/-/react-zoom-pan-pinch-2.6.1.tgz", - "integrity": "sha512-4Cgdnn6OwN4DomY/E9NpAf0TyCtslEgwdYn96ZV/f5LKuw/FE3gcIBJiaKFmMGThDGV0yKN5mzO8noi34+UE4Q==", - "engines": { - "node": ">=8", - "npm": ">=5" - }, - "peerDependencies": { - "react": "*", - "react-dom": "*" - } - }, - "node_modules/read-config-file": { - "version": "6.3.2", - "resolved": "https://registry.npmjs.org/read-config-file/-/read-config-file-6.3.2.tgz", - "integrity": "sha512-M80lpCjnE6Wt6zb98DoW8WHR09nzMSpu8XHtPkiTHrJ5Az9CybfeQhTJ8D7saeBHpGhLPIVyA8lcL6ZmdKwY6Q==", - "dev": true, - "dependencies": { - "config-file-ts": "^0.2.4", - "dotenv": "^9.0.2", - "dotenv-expand": "^5.1.0", - "js-yaml": "^4.1.0", - "json5": "^2.2.0", - "lazy-val": "^1.0.4" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "peer": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/readdir-glob": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.3.tgz", - "integrity": "sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==", - "dev": true, - "peer": true, - "dependencies": { - "minimatch": "^5.1.0" - } - }, - "node_modules/readdir-glob/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dev": true, - "peer": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", - "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" - }, - "node_modules/regexp.prototype.flags": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", - "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", - "dependencies": { - "call-bind": "^1.0.6", - "define-properties": "^1.2.1", - "es-errors": "^1.3.0", - "set-function-name": "^2.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/reserved-words": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/reserved-words/-/reserved-words-0.1.2.tgz", - "integrity": "sha512-0S5SrIUJ9LfpbVl4Yzij6VipUdafHrOTzvmfazSw/jeZrZtQK303OPZW+obtkaw7jQlTQppy0UvZWm9872PbRw==", - "dev": true - }, - "node_modules/resolve-alpn": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", - "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", - "dev": true - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/responselike": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", - "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", - "dev": true, - "dependencies": { - "lowercase-keys": "^2.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/roarr": { - "version": "2.15.4", - "resolved": "https://registry.npmjs.org/roarr/-/roarr-2.15.4.tgz", - "integrity": "sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==", - "dev": true, - "optional": true, - "dependencies": { - "boolean": "^3.0.1", - "detect-node": "^2.0.4", - "globalthis": "^1.0.1", - "json-stringify-safe": "^5.0.1", - "semver-compare": "^1.0.0", - "sprintf-js": "^1.1.2" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "node_modules/sanitize-filename": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz", - "integrity": "sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==", - "dev": true, - "dependencies": { - "truncate-utf8-bytes": "^1.0.0" - } - }, - "node_modules/sass": { - "version": "1.77.8", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.77.8.tgz", - "integrity": "sha512-4UHg6prsrycW20fqLGPShtEvo/WyHRVRHwOP4DzkUrObWoWI05QBSfzU71TVB7PFaL104TwNaHpjlWXAZbQiNQ==", - "dev": true, - "dependencies": { - "chokidar": ">=3.0.0 <4.0.0", - "immutable": "^4.0.0", - "source-map-js": ">=0.6.2 <2.0.0" - }, - "bin": { - "sass": "sass.js" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/sax": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", - "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==", - "dev": true - }, - "node_modules/scheduler": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", - "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - }, - "node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver-compare": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", - "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==", - "dev": true, - "optional": true - }, - "node_modules/sentence-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/sentence-case/-/sentence-case-3.0.4.tgz", - "integrity": "sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg==", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3", - "upper-case-first": "^2.0.2" - } - }, - "node_modules/serialize-error": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz", - "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==", - "dev": true, - "optional": true, - "dependencies": { - "type-fest": "^0.13.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/serialize-error/node_modules/type-fest": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", - "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", - "dev": true, - "optional": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", - "dev": true, - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/set-function-length": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/set-function-name": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", - "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "functions-have-names": "^1.2.3", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/simple-update-notifier": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", - "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==", - "dev": true, - "dependencies": { - "semver": "^7.5.3" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/slice-ansi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", - "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", - "dev": true, - "optional": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/smart-buffer": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", - "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", - "dev": true, - "optional": true, - "engines": { - "node": ">= 6.0.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/snake-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz", - "integrity": "sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==", - "dependencies": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-js": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", - "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/split2": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", - "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", - "engines": { - "node": ">= 10.x" - } - }, - "node_modules/sprintf-js": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", - "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", - "dev": true, - "optional": true - }, - "node_modules/stackframe": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", - "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==" - }, - "node_modules/stat-mode": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/stat-mode/-/stat-mode-1.0.0.tgz", - "integrity": "sha512-jH9EhtKIjuXZ2cWxmXS8ZP80XyC3iasQxMDV8jzhNJpfDb7VbQLVW4Wvsxz9QZvzV+G4YoSfBUVKDOyxLzi/sg==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "peer": true, - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/stylus": { - "version": "0.62.0", - "resolved": "https://registry.npmjs.org/stylus/-/stylus-0.62.0.tgz", - "integrity": "sha512-v3YCf31atbwJQIMtPNX8hcQ+okD4NQaTuKGUWfII8eaqn+3otrbttGL1zSMZAAtiPsBztQnujVBugg/cXFUpyg==", - "dev": true, - "dependencies": { - "@adobe/css-tools": "~4.3.1", - "debug": "^4.3.2", - "glob": "^7.1.6", - "sax": "~1.3.0", - "source-map": "^0.7.3" - }, - "bin": { - "stylus": "bin/stylus" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://opencollective.com/stylus" - } - }, - "node_modules/stylus/node_modules/sax": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.3.0.tgz", - "integrity": "sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==", - "dev": true - }, - "node_modules/stylus/node_modules/source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/sumchecker": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-3.0.1.tgz", - "integrity": "sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==", - "dev": true, - "dependencies": { - "debug": "^4.1.0" - }, - "engines": { - "node": ">= 8.0" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/synckit": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.1.tgz", - "integrity": "sha512-7gr8p9TQP6RAHusBOSLs46F4564ZrjV8xFmw5zCmgmhGUcw2hxsShhJ6CEiHQMgPDwAQ1fWHPM0ypc4RMAig4A==", - "dev": true, - "dependencies": { - "@pkgr/core": "^0.1.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/unts" - } - }, - "node_modules/synckit/node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", - "dev": true - }, - "node_modules/tar": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", - "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", - "dev": true, - "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^5.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "dev": true, - "peer": true, - "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tar/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/temp-file": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/temp-file/-/temp-file-3.4.0.tgz", - "integrity": "sha512-C5tjlC/HCtVUOi3KWVokd4vHVViOmGjtLwIh4MuzPo/nMYTV/p1urt3RnMz2IWXDdKEGJH3k5+KPxtqRsUYGtg==", - "dev": true, - "dependencies": { - "async-exit-hook": "^2.0.1", - "fs-extra": "^10.0.0" - } - }, - "node_modules/temp-file/node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true - }, - "node_modules/tmp": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", - "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", - "dev": true, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/tmp-promise": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/tmp-promise/-/tmp-promise-3.0.3.tgz", - "integrity": "sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==", - "dev": true, - "dependencies": { - "tmp": "^0.2.0" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "dev": true - }, - "node_modules/truncate-utf8-bytes": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", - "integrity": "sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==", - "dev": true, - "dependencies": { - "utf8-byte-length": "^1.0.1" - } - }, - "node_modules/ts-api-utils": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", - "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", - "dev": true, - "engines": { - "node": ">=16" - }, - "peerDependencies": { - "typescript": ">=4.2.0" - } - }, - "node_modules/ts-node": { - "version": "10.9.2", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", - "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", - "dev": true, - "dependencies": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } - } - }, - "node_modules/ts-node/node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/tsconfig-paths": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz", - "integrity": "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==", - "dev": true, - "dependencies": { - "json5": "^2.2.2", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tslib": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", - "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-detect": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.1.0.tgz", - "integrity": "sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/typed-styles": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/typed-styles/-/typed-styles-0.0.7.tgz", - "integrity": "sha512-pzP0PWoZUhsECYjABgCGQlRGL1n7tOHsgwYv3oIiEpJwGhFTuty/YNeduxQYzXXa3Ge5BdT6sHYIQYpl4uJ+5Q==" - }, - "node_modules/typescript": { - "version": "5.5.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz", - "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/typescript-plugin-css-modules": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/typescript-plugin-css-modules/-/typescript-plugin-css-modules-5.1.0.tgz", - "integrity": "sha512-6h+sLBa4l+XYSTn/31vZHd/1c3SvAbLpobY6FxDiUOHJQG1eD9Gh3eCs12+Eqc+TCOAdxcO+zAPvUq0jBfdciw==", - "dev": true, - "dependencies": { - "@types/postcss-modules-local-by-default": "^4.0.2", - "@types/postcss-modules-scope": "^3.0.4", - "dotenv": "^16.4.2", - "icss-utils": "^5.1.0", - "less": "^4.2.0", - "lodash.camelcase": "^4.3.0", - "postcss": "^8.4.35", - "postcss-load-config": "^3.1.4", - "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.4", - "postcss-modules-scope": "^3.1.1", - "reserved-words": "^0.1.2", - "sass": "^1.70.0", - "source-map-js": "^1.0.2", - "stylus": "^0.62.0", - "tsconfig-paths": "^4.2.0" - }, - "peerDependencies": { - "typescript": ">=4.0.0" - } - }, - "node_modules/typescript-plugin-css-modules/node_modules/dotenv": { - "version": "16.4.5", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", - "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://dotenvx.com" - } - }, - "node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" - }, - "node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "dev": true, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/upper-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-2.0.2.tgz", - "integrity": "sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg==", - "dependencies": { - "tslib": "^2.0.3" - } - }, - "node_modules/upper-case-first": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/upper-case-first/-/upper-case-first-2.0.2.tgz", - "integrity": "sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==", - "dependencies": { - "tslib": "^2.0.3" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/use-debounce": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/use-debounce/-/use-debounce-3.4.3.tgz", - "integrity": "sha512-nxy+opOxDccWfhMl36J5BSCTpvcj89iaQk2OZWLAtBJQj7ISCtx1gh+rFbdjGfMl6vtCZf6gke/kYvrkVfHMoA==", - "peerDependencies": { - "react": ">=16.8.0" - } - }, - "node_modules/utf8-byte-length": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.5.tgz", - "integrity": "sha512-Xn0w3MtiQ6zoz2vFyUVruaCL53O/DwUvkEeOvj+uulMm0BkUGYWmBYVyElqZaSLhY6ZD0ulfU3aBra2aVT4xfA==", - "dev": true - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true - }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "dev": true - }, - "node_modules/verror": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.1.tgz", - "integrity": "sha512-veufcmxri4e3XSrT0xwfUR7kguIkaxBeosDg00yDWhk49wdwkSUrvvsm7nc75e1PUyvIeZj6nS8VQRYz2/S4Xg==", - "dev": true, - "optional": true, - "dependencies": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/walk": { - "version": "2.3.15", - "resolved": "https://registry.npmjs.org/walk/-/walk-2.3.15.tgz", - "integrity": "sha512-4eRTBZljBfIISK1Vnt69Gvr2w/wc3U6Vtrw7qiN5iqYJPH7LElcYh/iU4XWhdCy2dZqv1ToMyYlybDylfG/5Vg==", - "dev": true, - "dependencies": { - "foreachasync": "^3.0.0" - } - }, - "node_modules/warning": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", - "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", - "dependencies": { - "loose-envify": "^1.0.0" - } - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "dev": true - }, - "node_modules/webxdc-types": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/webxdc-types/-/webxdc-types-1.0.1.tgz", - "integrity": "sha512-voocssWnUiMoJoicPWmCKnjd6OG8TNuUq+5n9+0gMSBMg0h1KxapnN9Vq6WssK0jhKcGBSZvcQf8tGK+X88IaQ==" - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dev": true, - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/workerpool": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz", - "integrity": "sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==", - "dev": true - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs": { - "name": "wrap-ansi", - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "node_modules/ws": { - "version": "7.5.10", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", - "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/xml-js": { - "version": "1.6.11", - "resolved": "https://registry.npmjs.org/xml-js/-/xml-js-1.6.11.tgz", - "integrity": "sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==", - "dev": true, - "dependencies": { - "sax": "^1.2.4" - }, - "bin": { - "xml-js": "bin/cli.js" - } - }, - "node_modules/xmlbuilder": { - "version": "15.1.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.1.1.tgz", - "integrity": "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==", - "dev": true, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dev": true, - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-unparser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", - "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", - "dev": true, - "dependencies": { - "camelcase": "^6.0.0", - "decamelize": "^4.0.0", - "flat": "^5.0.2", - "is-plain-obj": "^2.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs/node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", - "dev": true, - "dependencies": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" - } - }, - "node_modules/yerpc": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/yerpc/-/yerpc-0.6.2.tgz", - "integrity": "sha512-w+lggouyGD7Tq/BVrxB2LWBNiNexpM2Nx4x8cHx31EGcHAl+sUlmFodDJaw5M/QkCbQcLPUyP46ei8tpfWnSDg==", - "dependencies": { - "@types/ws": "^8.2.2", - "isomorphic-ws": "^4.0.1", - "typescript": "^4.6.3" - }, - "optionalDependencies": { - "ws": "^8.5.0" - } - }, - "node_modules/yerpc/node_modules/typescript": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/yerpc/node_modules/ws": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", - "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", - "optional": true, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/zip-stream": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.1.1.tgz", - "integrity": "sha512-9qv4rlDiopXg4E69k+vMHjNN63YFMe9sZMrdlvKnCjlCRWeCBswPPMPUfx+ipsAWq1LXHe70RcbaHdJJpS6hyQ==", - "dev": true, - "peer": true, - "dependencies": { - "archiver-utils": "^3.0.4", - "compress-commons": "^4.1.2", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/zip-stream/node_modules/archiver-utils": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-3.0.4.tgz", - "integrity": "sha512-KVgf4XQVrTjhyWmx6cte4RxonPLR9onExufI1jhvw/MQ4BB6IsZD5gT8Lq+u/+pRkWna/6JoHpiQioaqFP5Rzw==", - "dev": true, - "peer": true, - "dependencies": { - "glob": "^7.2.3", - "graceful-fs": "^4.2.0", - "lazystream": "^1.0.0", - "lodash.defaults": "^4.2.0", - "lodash.difference": "^4.5.0", - "lodash.flatten": "^4.4.0", - "lodash.isplainobject": "^4.0.6", - "lodash.union": "^4.6.0", - "normalize-path": "^3.0.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": ">= 10" - } - } - } -} diff --git a/package.json b/package.json index d39d3b9866..dbf2c15687 100644 --- a/package.json +++ b/package.json @@ -1,150 +1,63 @@ { + "private": "true", "name": "deltachat-desktop", - "version": "1.46.8", - "description": "Desktop Application for delta.chat", - "main": "index.js", "type": "module", + "version": "1.46.2-monorepo", "scripts": { "preinstall": "node ./bin/check-nodejs-version.js", - "test": "npm run check && npm run test-log-conventions && npm run test-unit && npm run test-misc", - "check": "npm run check:types && npm run check:lint && npm run check:format", - "check:types": "tsc -b src/check-all-tsconfig.json", + "check": "pnpm check:types && pnpm check:lint && pnpm check:format && pnpm check:target-versions && pnpm check:log-conventions", + "check:types": "pnpm -r --no-bail check:types", "check:lint": "eslint . --ext .js,.ts,.tsx", - "check:format": "prettier --check \"**/*.scss\" \"src/**/*.{js,ts,tsx,json}\" \"**/*.md\"", - "fix": "npm run fix:lint && npm run fix:format", + "check:format": "prettier --check \"**/*.scss\" \"packages/**/*.{js,ts,tsx,json}\" \"**/*.md\"", + "check:log-conventions": "node ./bin/log-conventions", + "fix": "pnpm fix:lint && pnpm fix:format", "fix:lint": "eslint . --ext .js,.ts,.tsx --fix || true", - "fix:format": "prettier --write \"**/*.scss\" \"src/**/*.{js,ts,tsx,json}\" \"**/*.md\"", - "test-misc": "node ./bin/test_package_lock_version", - "test-log-conventions": "node ./bin/log-conventions", - "test-unit": "mocha 'test/mocha/**/*.js'", - "dev": "npm run build && npm run start --", - "start": "electron . --devmode --disable-http-cache --translation-watch", - "clean": "rm -rf ./tsc-dist ./html-dist ./dist", - "build": "npm run build:shared && npm run build:backend && npm run build:frontend", - "build:shared": "npm run build:shared:translations && npm run build:shared:version", - "build:shared:translations": "node ./bin/build-shared-convert-translations.mjs ./_locales", - "build:shared:version": "node ./bin/build-shared-version-info.js", - "build:backend": "tsc --build src/main", - "build:frontend": "npm run build:frontend:ts && npm run build:frontend:themes && npm run build:frontend:static && npm run build:frontend:source-map-support && npm run build:frontend:scss", - "build:frontend:ts": "node ./bin/build-frontend-ts.mjs", - "build:frontend:themes": "sass themes/light.scss static/fallback-theme.css --style=compressed --embed-source-map && node ./bin/build-frontend-themes.js", - "build:frontend:static": "node ./bin/copy.js ./static ./html-dist", - "build:frontend:source-map-support": "node ./bin/build-frontend-source_map_support.js", - "build:frontend:scss": "sass ./scss/manifest.scss ./html-dist/main.css --embed-source-map --style=compressed", - "watch": "npm run watch:shared & npm run watch:frontend", - "watch:shared": "npm run watch:shared:translations", - "watch:shared:translations": "npm run build:shared:translations -- -w", - "watch:frontend": "npm run build:frontend:source-map-support && npm run watch:frontend:ts & npm run watch:frontend:static & npm run watch:frontend:scss & npm run watch:frontend:types", - "watch:frontend:ts": "npm run build:frontend:ts -- -w", - "watch:frontend:types": "npx tsc -b src/renderer --pretty -w --preserveWatchOutput", - "watch:frontend:static": "npm run build:frontend:static -- -w", - "watch:frontend:scss": "npm run build:frontend:scss -- --watch", - "build4production": "NODE_ENV=production npm run build && npm run check:types", - "translations-pull": "tx pull -s -f && tx pull -f -a", - "translations-update": "npm run translations-pull && npm run build:shared:translations && ./bin/find_complete_translations.sh", - "pack": "npm run pack:generate_config && npm run pack:all", - "pack:generate_config": "node ./build/gen-electron-builder-config.js && prettier --write ./electron-builder.json5 --log-level silent", - "pack:win": "electron-builder --config ./electron-builder.json5 --win nsis portable", - "pack:mac": "electron-builder --config ./electron-builder.json5 --mac dmg mas", - "pack:linux:dir": "electron-builder --config ./electron-builder.json5 --linux --dir", - "pack:linux": "electron-builder --config ./electron-builder.json5 --linux AppImage deb", - "pack:all": "electron-builder --config ./electron-builder.json5 --mac dmg --win nsis portable --linux AppImage deb" - }, - "repository": { - "type": "git", - "url": "git+ssh://git@github.com/deltachat/deltachat-desktop.git" - }, - "keywords": [ - "deltachat", - "email", - "messaging", - "desktop" - ], - "author": { - "name": "DeltaChat Developers", - "email": "delta-systems@codespeak.net" - }, - "license": "GPL-3.0-or-later", - "bugs": { - "url": "https://github.com/deltachat/deltachat-desktop/issues" + "fix:format": "prettier --write \"**/*.scss\" \"packages/**/*.{js,ts,tsx,json}\" \"**/*.md\"", + "dev": "pnpm dev:electron", + "start:electron": "pnpm --filter=@deltachat-desktop/target-electron start", + "build:electron": "pnpm --filter=@deltachat-desktop/target-electron build", + "dev:electron": "pnpm --filter=@deltachat-desktop/target-electron dev", + "watch:electron": "pnpm --filter=@deltachat-desktop/target-electron watch", + "translations:pull": "tx pull -s -f && tx pull -f -a", + "translations:convert": "node ./bin/build-shared-convert-translations.mjs ./_locales", + "translations:update": "pnpm translations:pull && pnpm translations:convert && ./bin/find_complete_translations.sh", + "update:target-versions": "node ./bin/update_desktop_version.js && prettier --write --log-level=silent \"packages/target**/package.json\"", + "check:target-versions": "node ./bin/update_desktop_version.js --check", + "test": "pnpm -r --no-bail test", + "test-and-check": "pnpm test && pnpm check", + "reset:node_modules": "rm -rf node_modules && rm -rf packages/*/node_modules || true && pnpm i" }, + "dependencies": {}, + "engineStrict": true, "engines": { - "node": ">=20.0.0" - }, - "productName": "DeltaChat", - "homepage": "https://delta.chat", - "browser": { - "path": "path-browserify" + "node": "^20", + "pnpm": "^9.6.0" }, - "dependencies": { - "@blueprintjs/core": "^4.20.2", - "@deltachat/jsonrpc-client": "^1.142.12", - "@deltachat/message_parser_wasm": "^0.11.0", - "@deltachat/stdio-rpc-server": "^1.142.12", - "@emoji-mart/data": "1.1.2", - "@emoji-mart/react": "1.1.1", - "application-config": "^1.0.1", - "classnames": "^2.5.1", - "debounce": "^1.2.1", - "emoji-js-clean": "^4.0.0", - "emoji-mart": "5.5.2", - "error-stack-parser": "^2.1.4", - "filesize": "^10.1.4", - "immutable": "^4.3.7", - "jsqr": "^1.4.0", - "mime-types": "^2.1.35", - "moment": "^2.30.1", - "path-browserify": "^1.0.1", - "rc": "^1.2.8", - "react": "^17.0.2", - "react-dom": "^17.0.2", - "react-string-replace": "^1.1.1", - "react-virtualized-auto-sizer": "^1.0.24", - "react-window": "^1.8.10", - "react-window-infinite-loader": "^1.0.9", - "react-zoom-pan-pinch": "^2.6.1", - "source-map-support": "^0.5.21", - "split2": "^4.2.0", - "stackframe": "^1.3.4", - "use-debounce": "^3.4.3", - "webxdc-types": "^1.0.1", - "ws": "7.5.10" + "pnpm": { + "supportedArchitectures": { + "os": [ + "darwin", + "win32", + "linux" + ], + "cpu": [ + "x64", + "arm64" + ] + } }, "devDependencies": { - "@electron/notarize": "2.4", - "@types/chai": "^4.3.16", - "@types/debounce": "^1.2.4", - "@types/emoji-mart": "^3.0.14", - "@types/mime-types": "^2.1.4", - "@types/mocha": "^9.1.1", - "@types/node": "^20.14.13", - "@types/node-fetch": "^2.6.11", - "@types/rc": "^1.2.4", - "@types/react": "^17.0.80", - "@types/react-dom": "^17.0.25", - "@types/react-window": "^1.8.8", - "@types/react-window-infinite-loader": "^1.0.9", - "@typescript-eslint/eslint-plugin": "^7.18.0", - "@typescript-eslint/parser": "^7.18.0", - "adm-zip": "^0.5.14", - "chai": "^4.5.0", - "chokidar": "^3.6.0", - "electron": "^30.3.1", - "electron-builder": "^24.13.3", - "esbuild": "^0.19.12", - "esbuild-plugin-inline-worker": "^0.1.1", + "yaml": "^2.4.5", "eslint": "^8.57.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-prettier": "^5.2.1", "eslint-plugin-react-hooks": "^4.6.2", - "mocha": "^9.2.2", - "node-fetch": "^2.7.0", + "@typescript-eslint/eslint-plugin": "^7.8.0", + "@typescript-eslint/parser": "^7.8.0", "prettier": "3.1.0", - "sass": "^1.77.8", - "ts-node": "^10.9.2", - "typescript": "^5.5.4", - "typescript-plugin-css-modules": "^5.1.0", "walk": "^2.3.15", - "xml-js": "^1.6.11" + "xml-js": "^1.6.11", + "typescript": "catalog:", + "chokidar": "^3.6.0" } } diff --git a/packages/frontend/.gitignore b/packages/frontend/.gitignore new file mode 100644 index 0000000000..f74a7a999f --- /dev/null +++ b/packages/frontend/.gitignore @@ -0,0 +1,4 @@ +static/fallback-theme.css +themes/*.css + +html-dist \ No newline at end of file diff --git a/bin/build-frontend-source_map_support.js b/packages/frontend/bin/build-frontend-source_map_support.js similarity index 100% rename from bin/build-frontend-source_map_support.js rename to packages/frontend/bin/build-frontend-source_map_support.js diff --git a/packages/frontend/bin/build-frontend-themes.js b/packages/frontend/bin/build-frontend-themes.js new file mode 100644 index 0000000000..b15540f4ab --- /dev/null +++ b/packages/frontend/bin/build-frontend-themes.js @@ -0,0 +1,49 @@ +//@ts-check +import { readdir, readFile, writeFile, rm, mkdir } from 'fs/promises' +import { compile, compileString, renderSync } from 'sass' +import { join, dirname } from 'path' + +import { fileURLToPath } from 'url' + +const __dirname = dirname(fileURLToPath(import.meta.url)) + +const dc_theme_in_dir = join(__dirname, '../themes') +const dc_theme_out_dir = join(__dirname, '../html-dist/themes') + +;(async () => { + const files = await readdir(dc_theme_in_dir) + + await mkdir(dc_theme_out_dir, { recursive: true }) + + // remove old files + await Promise.all( + files + .filter(f => f.includes('.css')) + .map(file => rm(join(dc_theme_out_dir, file))) + ) + + const themes = files.filter(f => f.includes('.scss') && f.charAt(0) !== '_') + try { + const result = await Promise.all( + themes.map(async theme => { + const start = performance.now() + const theme_data = await readFile(join(dc_theme_in_dir, theme), 'utf-8') + + const result = compileString(theme_data, { + style: 'compressed', + loadPaths: [dc_theme_in_dir], + sourceMap: false, + }) + const resulting_filename = theme.replace('.scss', '.css') + await writeFile(join(dc_theme_out_dir, resulting_filename), result.css) + const end = performance.now() + return [theme, end - start] + }) + ) + // result.forEach(([theme, duration]) => { + // console.log(theme, 'took', duration) + // }) + } catch (error) { + console.error(error) + } +})() diff --git a/bin/build-frontend-ts.mjs b/packages/frontend/bin/build-frontend-ts.mjs similarity index 97% rename from bin/build-frontend-ts.mjs rename to packages/frontend/bin/build-frontend-ts.mjs index 0b4c0fd5bd..54337a6c25 100755 --- a/bin/build-frontend-ts.mjs +++ b/packages/frontend/bin/build-frontend-ts.mjs @@ -10,6 +10,8 @@ import { compile } from 'sass' /** * Helper method returning a bundle configuration which is shared amongst * different `esbuild` methods. + * + * @returns {esbuild.BuildOptions} */ function config(options) { const { isProduction, isMinify, isWatch } = options @@ -22,16 +24,20 @@ function config(options) { } return { - entryPoints: ['src/renderer/main.tsx'], + entryPoints: ['src/main.tsx'], bundle: true, minify: isMinify, sourcemap: true, outfile: 'html-dist/bundle.js', + platform: 'browser', define: { 'process.env.NODE_ENV': isProduction ? '"production"' : '"development"', }, plugins, external: ['*.jpg', '*.png', '*.webp', '*.svg'], + alias: { + 'path': 'path-browserify' + } } } diff --git a/packages/frontend/package.json b/packages/frontend/package.json new file mode 100644 index 0000000000..b4efa4eeee --- /dev/null +++ b/packages/frontend/package.json @@ -0,0 +1,74 @@ +{ + "private": true, + "name": "@deltachat-desktop/frontend", + "type": "module", + "license": "GPL-3.0-or-later", + "scripts": { + "check:types": "tsc --noEmit", + "build": "pnpm build:ts && pnpm build:themes && pnpm build:static && pnpm build:source-map-support && pnpm build:scss", + "build:ts": "node ./bin/build-frontend-ts.mjs", + "build:source-map-support": "node ./bin/build-frontend-source_map_support.js", + "build:scss": "sass ./scss/manifest.scss ./html-dist/main.css --embed-source-map --style=compressed", + "build:static": "node ../../bin/copy.js ../../static ./html-dist && node ../../bin/copy.js ./static ./html-dist && node ../../bin/copy.js ../../images ./html-dist/images", + "build:themes": "sass themes/light.scss static/fallback-theme.css --style=compressed --embed-source-map && node ./bin/build-frontend-themes.js", + "watch": "pnpm build:source-map-support && pnpm watch:ts & pnpm watch:static & pnpm watch:scss & pnpm watch:types", + "watch:ts": "pnpm build:ts -- -w", + "watch:types": "npx tsc --noEmit --pretty -w --preserveWatchOutput", + "watch:static": "node ../../bin/copy.js ../../static ./html-dist -w & node ../../bin/copy.js ./static ./html-dist -w & node ../../bin/copy.js ../../images ./html-dist/images -w", + "watch:scss": "pnpm build:scss --watch" + }, + "browser": { + "path": "path-browserify" + }, + "dependencies": { + "@blueprintjs/core": "^4.20.2", + "@deltachat-desktop/runtime-interface": "link:../runtime", + "@deltachat-desktop/shared": "link:../shared", + "@deltachat/jsonrpc-client": "catalog:", + "@deltachat/message_parser_wasm": "^0.11.0", + "@emoji-mart/data": "1.1.2", + "@emoji-mart/react": "1.1.1", + "classnames": "^2.5.1", + "debounce": "^1.2.1", + "emoji-js-clean": "^4.0.0", + "emoji-mart": "5.5.2", + "filesize": "^10.1.4", + "immutable": "^4.3.7", + "jsqr": "^1.4.0", + "mime-types": "catalog:", + "moment": "^2.30.1", + "path-browserify": "^1.0.1", + "react": "^17.0.2", + "react-dom": "^17.0.2", + "react-string-replace": "^1.1.1", + "react-virtualized-auto-sizer": "^1.0.24", + "react-window": "^1.8.10", + "react-window-infinite-loader": "^1.0.9", + "react-zoom-pan-pinch": "^2.6.1", + "split2": "^4.2.0", + "use-debounce": "^3.3.0", + "ws": "7.5.10" + }, + "devDependencies": { + "@types/debounce": "^1.2.4", + "@types/emoji-mart": "^3.0.14", + "@types/mime-types": "catalog:", + "@types/react": "^17.0.80", + "@types/react-dom": "^17.0.25", + "@types/react-window": "^1.8.8", + "@types/react-window-infinite-loader": "^1.0.9", + "@typescript-eslint/eslint-plugin": "^7.18.0", + "@typescript-eslint/parser": "^7.18.0", + "esbuild": "^0.23.0", + "esbuild-plugin-inline-worker": "^0.1.1", + "eslint": "^8.57.0", + "eslint-config-prettier": "^9.1.0", + "eslint-plugin-prettier": "^5.2.1", + "eslint-plugin-react-hooks": "^4.6.2", + "normalize.css": "^8.0.1", + "sass": "catalog:", + "source-map-support": "^0.5.21", + "typescript": "catalog:", + "typescript-plugin-css-modules": "catalog:" + } +} diff --git a/scss/_connectivity-toast.scss b/packages/frontend/scss/_connectivity-toast.scss similarity index 100% rename from scss/_connectivity-toast.scss rename to packages/frontend/scss/_connectivity-toast.scss diff --git a/scss/_emoji.scss b/packages/frontend/scss/_emoji.scss similarity index 91% rename from scss/_emoji.scss rename to packages/frontend/scss/_emoji.scss index 560ada757b..1d8a7a7027 100644 --- a/scss/_emoji.scss +++ b/packages/frontend/scss/_emoji.scss @@ -41,7 +41,7 @@ button.emoji { display: inline-block; width: $button-height; height: $button-height; - @include color-svg('../images/smile.svg', var(--composerBtnColor)); + @include color-svg('./images/smile.svg', var(--composerBtnColor)); } &:focus, diff --git a/scss/_global.scss b/packages/frontend/scss/_global.scss similarity index 100% rename from scss/_global.scss rename to packages/frontend/scss/_global.scss diff --git a/scss/_icons.scss b/packages/frontend/scss/_icons.scss similarity index 86% rename from scss/_icons.scss rename to packages/frontend/scss/_icons.scss index d5834cd94b..eb4f968d7a 100644 --- a/scss/_icons.scss +++ b/packages/frontend/scss/_icons.scss @@ -4,7 +4,7 @@ height: 48px; &.videocamera { - background-image: url('../images/videocamera.svg'); + background-image: url('./images/videocamera.svg'); background-repeat: no-repeat; margin: 5px; background-size: 38px; @@ -59,7 +59,7 @@ i.material-svg-icon { } i.material-icon-schedule { - mask-image: url(../images/icons/schedule.svg); - -webkit-mask-image: url(../images/icons/schedule.svg); + mask-image: url(./images/icons/schedule.svg); + -webkit-mask-image: url(./images/icons/schedule.svg); transform: translate(0px, -0.07em); } diff --git a/scss/_mixins.scss b/packages/frontend/scss/_mixins.scss similarity index 100% rename from scss/_mixins.scss rename to packages/frontend/scss/_mixins.scss diff --git a/scss/_variables.scss b/packages/frontend/scss/_variables.scss similarity index 100% rename from scss/_variables.scss rename to packages/frontend/scss/_variables.scss diff --git a/scss/chat/_chat-list-item.scss b/packages/frontend/scss/chat/_chat-list-item.scss similarity index 98% rename from scss/chat/_chat-list-item.scss rename to packages/frontend/scss/chat/_chat-list-item.scss index 9cfb9bbc0d..ab20edfb05 100644 --- a/scss/chat/_chat-list-item.scss +++ b/packages/frontend/scss/chat/_chat-list-item.scss @@ -250,7 +250,7 @@ } .pin_icon { flex-shrink: 0; - @include color-svg('../images/pin.svg', var(--globalText)); + @include color-svg('./images/pin.svg', var(--globalText)); width: 16px; height: 16px; margin-left: 6px; @@ -263,7 +263,7 @@ } .mute_icon { flex-shrink: 0; - @include color-svg('../images/mute.png', var(--globalText)); + @include color-svg('./images/mute.png', var(--globalText)); width: 16px; height: 16px; } diff --git a/scss/chat/_chat-list.scss b/packages/frontend/scss/chat/_chat-list.scss similarity index 100% rename from scss/chat/_chat-list.scss rename to packages/frontend/scss/chat/_chat-list.scss diff --git a/scss/components/_radios.scss b/packages/frontend/scss/components/_radios.scss similarity index 100% rename from scss/components/_radios.scss rename to packages/frontend/scss/components/_radios.scss diff --git a/scss/composer/_composer.scss b/packages/frontend/scss/composer/_composer.scss similarity index 96% rename from scss/composer/_composer.scss rename to packages/frontend/scss/composer/_composer.scss index 82066de771..a640418692 100644 --- a/scss/composer/_composer.scss +++ b/packages/frontend/scss/composer/_composer.scss @@ -91,7 +91,7 @@ display: block; width: 25px; height: 25px; - background-image: url(../images/emoji.png); + background-image: url(./images/emoji.png); background-size: contain; } } @@ -115,7 +115,7 @@ width: 24px; margin: 4px; border: none; - background-image: url(../images/send-button.png); + background-image: url(./images/send-button.png); background-color: transparent; background-repeat: no-repeat; background-position: 3px 1px; diff --git a/scss/composer/_emoji-sticker-picker.scss b/packages/frontend/scss/composer/_emoji-sticker-picker.scss similarity index 100% rename from scss/composer/_emoji-sticker-picker.scss rename to packages/frontend/scss/composer/_emoji-sticker-picker.scss diff --git a/scss/contact/_contact-list.scss b/packages/frontend/scss/contact/_contact-list.scss similarity index 100% rename from scss/contact/_contact-list.scss rename to packages/frontend/scss/contact/_contact-list.scss diff --git a/scss/contact/_contact.scss b/packages/frontend/scss/contact/_contact.scss similarity index 100% rename from scss/contact/_contact.scss rename to packages/frontend/scss/contact/_contact.scss diff --git a/scss/dialogs/_about.scss b/packages/frontend/scss/dialogs/_about.scss similarity index 100% rename from scss/dialogs/_about.scss rename to packages/frontend/scss/dialogs/_about.scss diff --git a/scss/dialogs/_audit_log.scss b/packages/frontend/scss/dialogs/_audit_log.scss similarity index 100% rename from scss/dialogs/_audit_log.scss rename to packages/frontend/scss/dialogs/_audit_log.scss diff --git a/scss/dialogs/_autocrypt_setup.scss b/packages/frontend/scss/dialogs/_autocrypt_setup.scss similarity index 100% rename from scss/dialogs/_autocrypt_setup.scss rename to packages/frontend/scss/dialogs/_autocrypt_setup.scss diff --git a/scss/dialogs/_ephermeral_message.scss b/packages/frontend/scss/dialogs/_ephermeral_message.scss similarity index 100% rename from scss/dialogs/_ephermeral_message.scss rename to packages/frontend/scss/dialogs/_ephermeral_message.scss diff --git a/scss/dialogs/_forward-message.scss b/packages/frontend/scss/dialogs/_forward-message.scss similarity index 100% rename from scss/dialogs/_forward-message.scss rename to packages/frontend/scss/dialogs/_forward-message.scss diff --git a/scss/dialogs/_group-styles.scss b/packages/frontend/scss/dialogs/_group-styles.scss similarity index 94% rename from scss/dialogs/_group-styles.scss rename to packages/frontend/scss/dialogs/_group-styles.scss index 825ef2ced4..26c4517466 100644 --- a/scss/dialogs/_group-styles.scss +++ b/packages/frontend/scss/dialogs/_group-styles.scss @@ -63,7 +63,7 @@ input.group-name-input { div { height: 20px; width: 20px; - @include color-svg('../images/icons/lead-pencil.svg', white); + @include color-svg('./images/icons/lead-pencil.svg', white); } } } diff --git a/scss/dialogs/_mailto-dialog.scss b/packages/frontend/scss/dialogs/_mailto-dialog.scss similarity index 100% rename from scss/dialogs/_mailto-dialog.scss rename to packages/frontend/scss/dialogs/_mailto-dialog.scss diff --git a/scss/dialogs/_qr-code.scss b/packages/frontend/scss/dialogs/_qr-code.scss similarity index 100% rename from scss/dialogs/_qr-code.scss rename to packages/frontend/scss/dialogs/_qr-code.scss diff --git a/scss/dialogs/_qr-import.scss b/packages/frontend/scss/dialogs/_qr-import.scss similarity index 100% rename from scss/dialogs/_qr-import.scss rename to packages/frontend/scss/dialogs/_qr-import.scss diff --git a/scss/dialogs/_settings.scss b/packages/frontend/scss/dialogs/_settings.scss similarity index 100% rename from scss/dialogs/_settings.scss rename to packages/frontend/scss/dialogs/_settings.scss diff --git a/scss/dialogs/_view_profile.scss b/packages/frontend/scss/dialogs/_view_profile.scss similarity index 81% rename from scss/dialogs/_view_profile.scss rename to packages/frontend/scss/dialogs/_view_profile.scss index 1c661da13d..190bf296b7 100644 --- a/scss/dialogs/_view_profile.scss +++ b/packages/frontend/scss/dialogs/_view_profile.scss @@ -1,9 +1,3 @@ -.status-text { - padding: 15px 15px; - color: var(--globalText); - white-space: pre-wrap; -} - .mutual-chats { .chat-list-item { padding: 0px 20px; diff --git a/scss/dialogs/_webxdc_send_to_chat.scss b/packages/frontend/scss/dialogs/_webxdc_send_to_chat.scss similarity index 100% rename from scss/dialogs/_webxdc_send_to_chat.scss rename to packages/frontend/scss/dialogs/_webxdc_send_to_chat.scss diff --git a/scss/dialogs/multidevice/send_backup.scss b/packages/frontend/scss/dialogs/multidevice/send_backup.scss similarity index 90% rename from scss/dialogs/multidevice/send_backup.scss rename to packages/frontend/scss/dialogs/multidevice/send_backup.scss index 32f2a407f3..41559de2e9 100644 --- a/scss/dialogs/multidevice/send_backup.scss +++ b/packages/frontend/scss/dialogs/multidevice/send_backup.scss @@ -73,8 +73,8 @@ height: 2em; background-color: var(--colorPrimary); display: inline-block; - -webkit-mask: url(../images/icons/open_in_new.svg) center center no-repeat; - mask: url(../images/icons/open_in_new.svg) center center no-repeat; + -webkit-mask: url(./images/icons/open_in_new.svg) center center no-repeat; + mask: url(./images/icons/open_in_new.svg) center center no-repeat; -webkit-mask-size: 80%; mask-size: 80%; } diff --git a/scss/gallery/_attachment-view.scss b/packages/frontend/scss/gallery/_attachment-view.scss similarity index 97% rename from scss/gallery/_attachment-view.scss rename to packages/frontend/scss/gallery/_attachment-view.scss index d92715a840..4066f27a16 100644 --- a/scss/gallery/_attachment-view.scss +++ b/packages/frontend/scss/gallery/_attachment-view.scss @@ -42,7 +42,7 @@ display: inline-block; vertical-align: text-bottom; @include color-svg( - '../images/download.svg', + './images/download.svg', var(--fullScreenMediaButtons) ); cursor: pointer; diff --git a/scss/gallery/_media-attachment.scss b/packages/frontend/scss/gallery/_media-attachment.scss similarity index 97% rename from scss/gallery/_media-attachment.scss rename to packages/frontend/scss/gallery/_media-attachment.scss index 1fc231f9e2..e3ddf05205 100644 --- a/scss/gallery/_media-attachment.scss +++ b/packages/frontend/scss/gallery/_media-attachment.scss @@ -44,7 +44,7 @@ height: 36px; width: 36px; - @include color-svg('../images/play.svg', var(--videoPlayBtnIcon)); + @include color-svg('./images/play.svg', var(--videoPlayBtnIcon)); } } } @@ -101,7 +101,7 @@ } & > .file-icon { - background: url('../images/file-gradient.svg') no-repeat center; + background: url('./images/file-gradient.svg') no-repeat center; height: 49px; $file-icon-width: 42px; width: $file-icon-width; diff --git a/scss/gallery/_media.scss b/packages/frontend/scss/gallery/_media.scss similarity index 100% rename from scss/gallery/_media.scss rename to packages/frontend/scss/gallery/_media.scss diff --git a/scss/login/_login.scss b/packages/frontend/scss/login/_login.scss similarity index 98% rename from scss/login/_login.scss rename to packages/frontend/scss/login/_login.scss index 6e2a3d66e4..99f67333fc 100644 --- a/scss/login/_login.scss +++ b/packages/frontend/scss/login/_login.scss @@ -34,7 +34,7 @@ div.advanced-icon { width: 20px; height: 20px; - -webkit-mask: url(../images/dc-cross.svg) no-repeat center; + -webkit-mask: url(./images/dc-cross.svg) no-repeat center; -webkit-mask-size: 100%; background-color: var(--loginInputFocusColor); display: -webkit-inline-box; diff --git a/scss/main_screen/_main_screen.scss b/packages/frontend/scss/main_screen/_main_screen.scss similarity index 96% rename from scss/main_screen/_main_screen.scss rename to packages/frontend/scss/main_screen/_main_screen.scss index 8dc14d8733..2adf624d0c 100644 --- a/scss/main_screen/_main_screen.scss +++ b/packages/frontend/scss/main_screen/_main_screen.scss @@ -78,7 +78,7 @@ .disapearing-messages-icon { display: inline-block; - @include color-svg('../images/clock.svg', var(--navBarGroupSubtitle)); + @include color-svg('./images/clock.svg', var(--navBarGroupSubtitle)); } } } diff --git a/scss/main_screen/_navbar_wrapper.scss b/packages/frontend/scss/main_screen/_navbar_wrapper.scss similarity index 100% rename from scss/main_screen/_navbar_wrapper.scss rename to packages/frontend/scss/main_screen/_navbar_wrapper.scss diff --git a/scss/manifest.scss b/packages/frontend/scss/manifest.scss similarity index 87% rename from scss/manifest.scss rename to packages/frontend/scss/manifest.scss index 852f70afb4..4713dafe12 100644 --- a/scss/manifest.scss +++ b/packages/frontend/scss/manifest.scss @@ -1,9 +1,9 @@ // Using BEM syntax explained here: https://csswizardry.com/2013/01/mindbemding-getting-your-head-round-bem-syntax/ -// import node_module dependencies -@import '../node_modules/normalize.css/normalize.css'; -@import '../node_modules/@blueprintjs/icons/lib/css/blueprint-icons.css'; -@import '../node_modules/@blueprintjs/core/lib/css/blueprint.css'; +// import node_module dependencies (without ".css" means include) +@import '../node_modules/normalize.css/normalize'; +// @import '../node_modules/@blueprintjs/icons/lib/css/blueprint-icons'; - did not exist anymore? +@import '../node_modules/@blueprintjs/core/lib/css/blueprint'; // Overwrites for third party node modules. // Above our styles, so that our styles take priority by being defined after. diff --git a/scss/message/_message-attachment.scss b/packages/frontend/scss/message/_message-attachment.scss similarity index 96% rename from scss/message/_message-attachment.scss rename to packages/frontend/scss/message/_message-attachment.scss index aa117773bb..a2a2b22eaa 100644 --- a/scss/message/_message-attachment.scss +++ b/packages/frontend/scss/message/_message-attachment.scss @@ -52,7 +52,7 @@ height: 36px; width: 36px; - @include color-svg('../images/play.svg', var(--videoPlayBtnIcon)); + @include color-svg('./images/play.svg', var(--videoPlayBtnIcon)); } } @@ -112,7 +112,7 @@ } & > .file-icon { - background: url('../images/file-gradient.svg') no-repeat center; + background: url('./images/file-gradient.svg') no-repeat center; height: 44px; width: 56px; margin-left: -13px; diff --git a/scss/message/_message-calls.scss b/packages/frontend/scss/message/_message-calls.scss similarity index 100% rename from scss/message/_message-calls.scss rename to packages/frontend/scss/message/_message-calls.scss diff --git a/scss/message/_message-detail.scss b/packages/frontend/scss/message/_message-detail.scss similarity index 100% rename from scss/message/_message-detail.scss rename to packages/frontend/scss/message/_message-detail.scss diff --git a/scss/message/_message-list.scss b/packages/frontend/scss/message/_message-list.scss similarity index 91% rename from scss/message/_message-list.scss rename to packages/frontend/scss/message/_message-list.scss index a3a9da09cf..f36cec3d59 100644 --- a/scss/message/_message-list.scss +++ b/packages/frontend/scss/message/_message-list.scss @@ -61,14 +61,14 @@ width: $width; background-color: var(--jumpDownButtonIconColor); &.down { - mask: url(../images/ic_scroll_down.png) no-repeat center; - -webkit-mask: url(../images/ic_scroll_down.png) no-repeat center; + mask: url(./images/ic_scroll_down.png) no-repeat center; + -webkit-mask: url(./images/ic_scroll_down.png) no-repeat center; mask-size: 65%; -webkit-mask-size: 65%; } &.back { - mask: url(../images/ic_scroll_back.svg) no-repeat center; - -webkit-mask: url(../images/ic_scroll_back.svg) no-repeat center; + mask: url(./images/ic_scroll_back.svg) no-repeat center; + -webkit-mask: url(./images/ic_scroll_back.svg) no-repeat center; mask-size: 65%; -webkit-mask-size: 65%; } diff --git a/scss/message/_message-markdown.scss b/packages/frontend/scss/message/_message-markdown.scss similarity index 100% rename from scss/message/_message-markdown.scss rename to packages/frontend/scss/message/_message-markdown.scss diff --git a/scss/message/_message.scss b/packages/frontend/scss/message/_message.scss similarity index 96% rename from scss/message/_message.scss rename to packages/frontend/scss/message/_message.scss index 72bfbdfc9e..a69f98d5dd 100644 --- a/scss/message/_message.scss +++ b/packages/frontend/scss/message/_message.scss @@ -144,7 +144,7 @@ .metadata:not(.with-image-no-caption) { & > .padlock-icon { @include color-svg( - '../images/padlock.svg', + './images/padlock.svg', var(--messagePadlockIncoming), 125% ); @@ -152,7 +152,7 @@ & > .location-icon { @include color-svg( - '../images/map-marker.svg', + './images/map-marker.svg', var(--messagePadlockIncoming), 100% ); @@ -186,7 +186,7 @@ & > .padlock-icon { @include color-svg( - '../images/padlock.svg', + './images/padlock.svg', var(--messagePadlockOutgoing), 125% ); @@ -194,7 +194,7 @@ & > .location-icon { @include color-svg( - '../images/map-marker.svg', + './images/map-marker.svg', var(--messagePadlockOutgoing), 100% ); @@ -270,11 +270,11 @@ } & > .padlock-icon { - @include color-svg('../images/padlock.svg', white, 125%); + @include color-svg('./images/padlock.svg', white, 125%); } & > .location-icon { - @include color-svg('../images/map-marker.svg', white, 100%); + @include color-svg('./images/map-marker.svg', white, 100%); } } @@ -570,11 +570,11 @@ margin: 0; & > .padlock-icon { - @include color-svg('../images/padlock.svg', white, 125%); + @include color-svg('./images/padlock.svg', white, 125%); } & > .location-icon { - @include color-svg('../images/map-marker.svg', white, 100%); + @include color-svg('./images/map-marker.svg', white, 100%); } & > .date { diff --git a/scss/message/_metadata.scss b/packages/frontend/scss/message/_metadata.scss similarity index 94% rename from scss/message/_metadata.scss rename to packages/frontend/scss/message/_metadata.scss index e952a93043..e0a40793e5 100644 --- a/scss/message/_metadata.scss +++ b/packages/frontend/scss/message/_metadata.scss @@ -22,7 +22,7 @@ } & > .padlock-icon { - @include color-svg('../images/padlock.svg', white, 125%); + @include color-svg('./images/padlock.svg', white, 125%); } .status-icon.sending { diff --git a/scss/message/_status-icon.scss b/packages/frontend/scss/message/_status-icon.scss similarity index 66% rename from scss/message/_status-icon.scss rename to packages/frontend/scss/message/_status-icon.scss index 0991f10765..42ff2ddf68 100644 --- a/scss/message/_status-icon.scss +++ b/packages/frontend/scss/message/_status-icon.scss @@ -14,25 +14,22 @@ margin-left: 2px; &.sending { - @include color-svg( - '../images/sending.svg', - var(--messageStatusIconSending) - ); + @include color-svg('./images/sending.svg', var(--messageStatusIconSending)); animation: __status-icon--spinning 4s linear infinite; // ensure the element takes always the same width: width: 12px; margin-left: 8px; } &.delivered { - @include color-svg('../images/sent.svg', var(--messageStatusIcon)); + @include color-svg('./images/sent.svg', var(--messageStatusIcon)); } &.read { - @include color-svg('../images/read.svg', var(--messageStatusIcon)); + @include color-svg('./images/read.svg', var(--messageStatusIcon)); } &.error { - @include color-svg('../images/error.svg', var(--errorColor)); + @include color-svg('./images/error.svg', var(--errorColor)); // ensure the element takes always the same width: width: 12px; margin-left: 8px; diff --git a/scss/misc/_avatar.scss b/packages/frontend/scss/misc/_avatar.scss similarity index 86% rename from scss/misc/_avatar.scss rename to packages/frontend/scss/misc/_avatar.scss index 09c74fcae3..7a7eda5c50 100644 --- a/scss/misc/_avatar.scss +++ b/packages/frontend/scss/misc/_avatar.scss @@ -24,9 +24,9 @@ div.content, img.content { border-radius: 0; - mask: url('../images/avatar/online-avatar-mask-smaller.svg') no-repeat + mask: url('./images/avatar/online-avatar-mask-smaller.svg') no-repeat center; - -webkit-mask: url('../images/avatar/online-avatar-mask-smaller.svg') + -webkit-mask: url('./images/avatar/online-avatar-mask-smaller.svg') no-repeat center; mask-size: var(--local-avatar-size); -webkit-mask-size: var(--local-avatar-size); @@ -42,8 +42,8 @@ width: var(--local-avatar-size); background-color: var(--recently-seen-indicator-color); - mask: url('../images/avatar/online-avatar-dot.svg') no-repeat center; - -webkit-mask: url('../images/avatar/online-avatar-dot.svg') no-repeat + mask: url('./images/avatar/online-avatar-dot.svg') no-repeat center; + -webkit-mask: url('./images/avatar/online-avatar-dot.svg') no-repeat center; mask-size: var(--local-avatar-size); -webkit-mask-size: var(--local-avatar-size); diff --git a/scss/misc/_context_menu.scss b/packages/frontend/scss/misc/_context_menu.scss similarity index 96% rename from scss/misc/_context_menu.scss rename to packages/frontend/scss/misc/_context_menu.scss index 59539a6ab8..361519fa70 100644 --- a/scss/misc/_context_menu.scss +++ b/packages/frontend/scss/misc/_context_menu.scss @@ -48,7 +48,7 @@ height: 18px; margin-left: auto; @include color-svg( - '../images/icons/navigate_next.svg', + './images/icons/navigate_next.svg', var(--textPrimary), 100% ); diff --git a/scss/misc/_keyboard_hint_box.scss b/packages/frontend/scss/misc/_keyboard_hint_box.scss similarity index 100% rename from scss/misc/_keyboard_hint_box.scss rename to packages/frontend/scss/misc/_keyboard_hint_box.scss diff --git a/scss/misc/_search-input.scss b/packages/frontend/scss/misc/_search-input.scss similarity index 100% rename from scss/misc/_search-input.scss rename to packages/frontend/scss/misc/_search-input.scss diff --git a/scss/overwrites/_bp4-overwrites.scss b/packages/frontend/scss/overwrites/_bp4-overwrites.scss similarity index 100% rename from scss/overwrites/_bp4-overwrites.scss rename to packages/frontend/scss/overwrites/_bp4-overwrites.scss diff --git a/src/renderer/App.tsx b/packages/frontend/src/App.tsx similarity index 96% rename from src/renderer/App.tsx rename to packages/frontend/src/App.tsx index d3c0945acc..d328474e02 100644 --- a/src/renderer/App.tsx +++ b/packages/frontend/src/App.tsx @@ -2,12 +2,12 @@ import React, { useState, useEffect, useLayoutEffect } from 'react' import moment from 'moment' import ScreenController from './ScreenController' -import { translate, LocaleData } from '../shared/localize' +import { translate, LocaleData } from '../../shared/localize' import { ThemeManager, ThemeContext } from './ThemeManager' import { CrashScreen } from './components/screens/CrashScreen' -import { runtime } from './runtime' +import { runtime } from '@deltachat-desktop/runtime-interface' import { updateCoreStrings } from './stockStrings' -import { getLogger } from '../shared/logger' +import { getLogger } from '../../shared/logger' import { BackendRemote } from './backend-com' import { runPostponedFunctions } from './onready' import { I18nContext } from './contexts/I18nContext' diff --git a/src/renderer/ScreenController.tsx b/packages/frontend/src/ScreenController.tsx similarity index 99% rename from src/renderer/ScreenController.tsx rename to packages/frontend/src/ScreenController.tsx index 211ed25798..0e44164a2d 100644 --- a/src/renderer/ScreenController.tsx +++ b/packages/frontend/src/ScreenController.tsx @@ -4,12 +4,12 @@ import { DcEventType } from '@deltachat/jsonrpc-client' import { debounce } from 'debounce' import MainScreen from './components/screens/MainScreen' -import { getLogger } from '../shared/logger' +import { getLogger } from '../../shared/logger' import AccountSetupScreen from './components/screens/AccountSetupScreen' import WelcomeScreen from './components/screens/WelcomeScreen' import { BackendRemote, EffectfulBackendActions } from './backend-com' import { updateDeviceChat, updateDeviceChats } from './deviceMessages' -import { runtime } from './runtime' +import { runtime } from '@deltachat-desktop/runtime-interface' import { updateTimestamps } from './components/conversations/Timestamp' import { ScreenContext } from './contexts/ScreenContext' import { KeybindingsContextProvider } from './contexts/KeybindingsContext' diff --git a/src/renderer/ThemeManager.tsx b/packages/frontend/src/ThemeManager.tsx similarity index 93% rename from src/renderer/ThemeManager.tsx rename to packages/frontend/src/ThemeManager.tsx index 3f9e6e9256..30d6e93441 100644 --- a/src/renderer/ThemeManager.tsx +++ b/packages/frontend/src/ThemeManager.tsx @@ -1,6 +1,6 @@ -import { Theme } from '../shared/shared-types' +import { Theme } from '../../shared/shared-types' import React, { useContext, useMemo } from 'react' -import { runtime } from './runtime' +import { runtime } from '@deltachat-desktop/runtime-interface' export namespace ThemeManager { let currentThemeMetaData: Theme diff --git a/src/renderer/backend-com.ts b/packages/frontend/src/backend-com.ts similarity index 65% rename from src/renderer/backend-com.ts rename to packages/frontend/src/backend-com.ts index 5d9f52add0..f9bd591e7c 100644 --- a/src/renderer/backend-com.ts +++ b/packages/frontend/src/backend-com.ts @@ -1,52 +1,13 @@ -import { BaseDeltaChat, yerpc, DcEvent } from '@deltachat/jsonrpc-client' -import { runtime } from './runtime' -import { hasDebugEnabled } from '../shared/logger' +import { BaseDeltaChat, DcEvent } from '@deltachat/jsonrpc-client' +import { runtime } from '@deltachat-desktop/runtime-interface' +import { hasDebugEnabled } from '../../shared/logger' import { clearNotificationsForChat } from './system-integration/notifications' import { countCall } from './debug-tools' export { T as Type } from '@deltachat/jsonrpc-client' -const { BaseTransport } = yerpc - -class ElectronTransport extends BaseTransport { - constructor() { - super() - window.electron_functions.ipcRenderer.on( - 'json-rpc-message', - (_ev: any, response: any) => { - const message: yerpc.Message = JSON.parse(response) - if (hasDebugEnabled()) { - /* ignore-console-log */ - console.debug('%c▼ %c[JSONRPC]', 'color: red', 'color:grey', message) - } - this._onmessage(message) - } - ) - } - _send(message: yerpc.Message): void { - const serialized = JSON.stringify(message) - window.electron_functions.ipcRenderer.invoke('json-rpc-request', serialized) - if (hasDebugEnabled()) { - /* ignore-console-log */ - console.debug('%c▲ %c[JSONRPC]', 'color: green', 'color:grey', message) - if ((message as any)['method']) { - countCall((message as any).method) - countCall('total') - } - } - } -} - -class ElectronDeltachat extends BaseDeltaChat { - close() { - /** noop */ - } - constructor() { - super(new ElectronTransport(), true) - } -} - -export const BackendRemote: BaseDeltaChat = new ElectronDeltachat() +export const BackendRemote: BaseDeltaChat = + runtime.createDeltaChatConnection(hasDebugEnabled(), countCall) /** Functions with side-effects */ export namespace EffectfulBackendActions { diff --git a/src/renderer/backend/account.ts b/packages/frontend/src/backend/account.ts similarity index 100% rename from src/renderer/backend/account.ts rename to packages/frontend/src/backend/account.ts diff --git a/src/renderer/backend/chat.ts b/packages/frontend/src/backend/chat.ts similarity index 100% rename from src/renderer/backend/chat.ts rename to packages/frontend/src/backend/chat.ts diff --git a/src/renderer/backend/group.ts b/packages/frontend/src/backend/group.ts similarity index 100% rename from src/renderer/backend/group.ts rename to packages/frontend/src/backend/group.ts diff --git a/src/renderer/backend/qr.ts b/packages/frontend/src/backend/qr.ts similarity index 100% rename from src/renderer/backend/qr.ts rename to packages/frontend/src/backend/qr.ts diff --git a/src/renderer/components/AbsolutePositioningHelper/index.tsx b/packages/frontend/src/components/AbsolutePositioningHelper/index.tsx similarity index 100% rename from src/renderer/components/AbsolutePositioningHelper/index.tsx rename to packages/frontend/src/components/AbsolutePositioningHelper/index.tsx diff --git a/src/renderer/components/AbsolutePositioningHelper/styles.module.scss b/packages/frontend/src/components/AbsolutePositioningHelper/styles.module.scss similarity index 74% rename from src/renderer/components/AbsolutePositioningHelper/styles.module.scss rename to packages/frontend/src/components/AbsolutePositioningHelper/styles.module.scss index dde7854691..a73af8a65f 100644 --- a/src/renderer/components/AbsolutePositioningHelper/styles.module.scss +++ b/packages/frontend/src/components/AbsolutePositioningHelper/styles.module.scss @@ -1,4 +1,4 @@ -@import '../../../../scss/variables'; +@import '../../../scss/variables'; .absolutePositioningHelper { position: fixed; diff --git a/src/renderer/components/AccountListSidebar/AccountHoverInfo.tsx b/packages/frontend/src/components/AccountListSidebar/AccountHoverInfo.tsx similarity index 97% rename from src/renderer/components/AccountListSidebar/AccountHoverInfo.tsx rename to packages/frontend/src/components/AccountListSidebar/AccountHoverInfo.tsx index d48605e4da..61b6454fdd 100644 --- a/src/renderer/components/AccountListSidebar/AccountHoverInfo.tsx +++ b/packages/frontend/src/components/AccountListSidebar/AccountHoverInfo.tsx @@ -5,8 +5,8 @@ import { C } from '@deltachat/jsonrpc-client' import Icon from '../Icon' import useTranslationFunction from '../../hooks/useTranslationFunction' import { BackendRemote, onDCEvent } from '../../backend-com' -import { getLogger } from '../../../shared/logger' -import { runtime } from '../../runtime' +import { getLogger } from '../../../../shared/logger' +import { runtime } from '@deltachat-desktop/runtime-interface' import styles from './styles.module.scss' diff --git a/src/renderer/components/AccountListSidebar/AccountItem.tsx b/packages/frontend/src/components/AccountListSidebar/AccountItem.tsx similarity index 99% rename from src/renderer/components/AccountListSidebar/AccountItem.tsx rename to packages/frontend/src/components/AccountListSidebar/AccountItem.tsx index c07af754cb..267bbc2868 100644 --- a/src/renderer/components/AccountListSidebar/AccountItem.tsx +++ b/packages/frontend/src/components/AccountListSidebar/AccountItem.tsx @@ -8,7 +8,7 @@ import { EffectfulBackendActions, } from '../../backend-com' import { avatarInitial } from '../Avatar' -import { getLogger } from '../../../shared/logger' +import { getLogger } from '../../../../shared/logger' import useTranslationFunction from '../../hooks/useTranslationFunction' import { useContextMenuWithActiveState } from '../ContextMenu' import { ActionEmitter, KeybindAction } from '../../keybindings' diff --git a/src/renderer/components/AccountListSidebar/AccountListSidebar.tsx b/packages/frontend/src/components/AccountListSidebar/AccountListSidebar.tsx similarity index 98% rename from src/renderer/components/AccountListSidebar/AccountListSidebar.tsx rename to packages/frontend/src/components/AccountListSidebar/AccountListSidebar.tsx index 656611f11b..ab24dd0c0a 100644 --- a/src/renderer/components/AccountListSidebar/AccountListSidebar.tsx +++ b/packages/frontend/src/components/AccountListSidebar/AccountListSidebar.tsx @@ -14,7 +14,7 @@ import Icon from '../Icon' import Settings from '../Settings' import useDialog from '../../hooks/dialog/useDialog' import { BackendRemote } from '../../backend-com' -import { runtime } from '../../runtime' +import { runtime } from '@deltachat-desktop/runtime-interface' import { useAccountNotificationStore } from '../../stores/accountNotifications' import styles from './styles.module.scss' diff --git a/src/renderer/components/AccountListSidebar/styles.module.scss b/packages/frontend/src/components/AccountListSidebar/styles.module.scss similarity index 98% rename from src/renderer/components/AccountListSidebar/styles.module.scss rename to packages/frontend/src/components/AccountListSidebar/styles.module.scss index 93f6810f40..75846cd755 100644 --- a/src/renderer/components/AccountListSidebar/styles.module.scss +++ b/packages/frontend/src/components/AccountListSidebar/styles.module.scss @@ -1,5 +1,5 @@ -@import '../../../../scss/variables'; -@import '../../../../scss/mixins'; +@import '../../../scss/variables'; +@import '../../../scss/mixins'; .avatar { --local-avatar-size: 48px; diff --git a/src/renderer/components/AudioPlayer/index.tsx b/packages/frontend/src/components/AudioPlayer/index.tsx similarity index 100% rename from src/renderer/components/AudioPlayer/index.tsx rename to packages/frontend/src/components/AudioPlayer/index.tsx diff --git a/src/renderer/components/AudioPlayer/styles.module.scss b/packages/frontend/src/components/AudioPlayer/styles.module.scss similarity index 100% rename from src/renderer/components/AudioPlayer/styles.module.scss rename to packages/frontend/src/components/AudioPlayer/styles.module.scss diff --git a/src/renderer/components/Avatar.tsx b/packages/frontend/src/components/Avatar.tsx similarity index 97% rename from src/renderer/components/Avatar.tsx rename to packages/frontend/src/components/Avatar.tsx index ca1f7bdd7e..17c43409cb 100644 --- a/src/renderer/components/Avatar.tsx +++ b/packages/frontend/src/components/Avatar.tsx @@ -12,7 +12,7 @@ export function QRAvatar() { return (
- +
) diff --git a/src/renderer/components/Button/index.tsx b/packages/frontend/src/components/Button/index.tsx similarity index 100% rename from src/renderer/components/Button/index.tsx rename to packages/frontend/src/components/Button/index.tsx diff --git a/src/renderer/components/Button/style.module.scss b/packages/frontend/src/components/Button/style.module.scss similarity index 100% rename from src/renderer/components/Button/style.module.scss rename to packages/frontend/src/components/Button/style.module.scss diff --git a/src/renderer/components/Callout/index.tsx b/packages/frontend/src/components/Callout/index.tsx similarity index 100% rename from src/renderer/components/Callout/index.tsx rename to packages/frontend/src/components/Callout/index.tsx diff --git a/src/renderer/components/Callout/styles.module.scss b/packages/frontend/src/components/Callout/styles.module.scss similarity index 100% rename from src/renderer/components/Callout/styles.module.scss rename to packages/frontend/src/components/Callout/styles.module.scss diff --git a/src/renderer/components/ConnectivityToast.tsx b/packages/frontend/src/components/ConnectivityToast.tsx similarity index 99% rename from src/renderer/components/ConnectivityToast.tsx rename to packages/frontend/src/components/ConnectivityToast.tsx index e6bc324e04..adbb18fd8d 100644 --- a/src/renderer/components/ConnectivityToast.tsx +++ b/packages/frontend/src/components/ConnectivityToast.tsx @@ -2,7 +2,7 @@ import React, { useEffect, useState, useCallback, useMemo } from 'react' import { C } from '@deltachat/jsonrpc-client' import { debounce } from 'debounce' -import { getLogger } from '../../shared/logger' +import { getLogger } from '../../../shared/logger' import { KeybindAction } from '../keybindings' import { debounceWithInit } from './chat/ChatListHelpers' import { BackendRemote, onDCEvent } from '../backend-com' diff --git a/src/renderer/components/ContactName/index.tsx b/packages/frontend/src/components/ContactName/index.tsx similarity index 100% rename from src/renderer/components/ContactName/index.tsx rename to packages/frontend/src/components/ContactName/index.tsx diff --git a/src/renderer/components/ContactName/styles.module.scss b/packages/frontend/src/components/ContactName/styles.module.scss similarity index 100% rename from src/renderer/components/ContactName/styles.module.scss rename to packages/frontend/src/components/ContactName/styles.module.scss diff --git a/src/renderer/components/ContextMenu.tsx b/packages/frontend/src/components/ContextMenu.tsx similarity index 100% rename from src/renderer/components/ContextMenu.tsx rename to packages/frontend/src/components/ContextMenu.tsx diff --git a/src/renderer/components/CopyContentAlertDialog.tsx b/packages/frontend/src/components/CopyContentAlertDialog.tsx similarity index 94% rename from src/renderer/components/CopyContentAlertDialog.tsx rename to packages/frontend/src/components/CopyContentAlertDialog.tsx index 179b2b7735..011daa49f1 100644 --- a/src/renderer/components/CopyContentAlertDialog.tsx +++ b/packages/frontend/src/components/CopyContentAlertDialog.tsx @@ -7,7 +7,7 @@ import Dialog, { FooterActionButton, FooterActions, } from './Dialog' -import { runtime } from '../runtime' +import { runtime } from '@deltachat-desktop/runtime-interface' import useTranslationFunction from '../hooks/useTranslationFunction' import type { DialogProps } from '../contexts/DialogContext' diff --git a/src/renderer/components/Dialog/BackButton.tsx b/packages/frontend/src/components/Dialog/BackButton.tsx similarity index 100% rename from src/renderer/components/Dialog/BackButton.tsx rename to packages/frontend/src/components/Dialog/BackButton.tsx diff --git a/src/renderer/components/Dialog/CloseButton.tsx b/packages/frontend/src/components/Dialog/CloseButton.tsx similarity index 100% rename from src/renderer/components/Dialog/CloseButton.tsx rename to packages/frontend/src/components/Dialog/CloseButton.tsx diff --git a/src/renderer/components/Dialog/CloseFooterAction.tsx b/packages/frontend/src/components/Dialog/CloseFooterAction.tsx similarity index 100% rename from src/renderer/components/Dialog/CloseFooterAction.tsx rename to packages/frontend/src/components/Dialog/CloseFooterAction.tsx diff --git a/src/renderer/components/Dialog/Dialog.tsx b/packages/frontend/src/components/Dialog/Dialog.tsx similarity index 100% rename from src/renderer/components/Dialog/Dialog.tsx rename to packages/frontend/src/components/Dialog/Dialog.tsx diff --git a/src/renderer/components/Dialog/DialogBody.tsx b/packages/frontend/src/components/Dialog/DialogBody.tsx similarity index 100% rename from src/renderer/components/Dialog/DialogBody.tsx rename to packages/frontend/src/components/Dialog/DialogBody.tsx diff --git a/src/renderer/components/Dialog/DialogContent.tsx b/packages/frontend/src/components/Dialog/DialogContent.tsx similarity index 100% rename from src/renderer/components/Dialog/DialogContent.tsx rename to packages/frontend/src/components/Dialog/DialogContent.tsx diff --git a/src/renderer/components/Dialog/DialogFooter.tsx b/packages/frontend/src/components/Dialog/DialogFooter.tsx similarity index 100% rename from src/renderer/components/Dialog/DialogFooter.tsx rename to packages/frontend/src/components/Dialog/DialogFooter.tsx diff --git a/src/renderer/components/Dialog/DialogHeader.tsx b/packages/frontend/src/components/Dialog/DialogHeader.tsx similarity index 100% rename from src/renderer/components/Dialog/DialogHeader.tsx rename to packages/frontend/src/components/Dialog/DialogHeader.tsx diff --git a/src/renderer/components/Dialog/DialogHeading.tsx b/packages/frontend/src/components/Dialog/DialogHeading.tsx similarity index 100% rename from src/renderer/components/Dialog/DialogHeading.tsx rename to packages/frontend/src/components/Dialog/DialogHeading.tsx diff --git a/src/renderer/components/Dialog/DialogWithHeader.tsx b/packages/frontend/src/components/Dialog/DialogWithHeader.tsx similarity index 100% rename from src/renderer/components/Dialog/DialogWithHeader.tsx rename to packages/frontend/src/components/Dialog/DialogWithHeader.tsx diff --git a/src/renderer/components/Dialog/EditButton.tsx b/packages/frontend/src/components/Dialog/EditButton.tsx similarity index 100% rename from src/renderer/components/Dialog/EditButton.tsx rename to packages/frontend/src/components/Dialog/EditButton.tsx diff --git a/src/renderer/components/Dialog/FooterActionButton.tsx b/packages/frontend/src/components/Dialog/FooterActionButton.tsx similarity index 100% rename from src/renderer/components/Dialog/FooterActionButton.tsx rename to packages/frontend/src/components/Dialog/FooterActionButton.tsx diff --git a/src/renderer/components/Dialog/FooterActions.tsx b/packages/frontend/src/components/Dialog/FooterActions.tsx similarity index 100% rename from src/renderer/components/Dialog/FooterActions.tsx rename to packages/frontend/src/components/Dialog/FooterActions.tsx diff --git a/src/renderer/components/Dialog/HeaderButton.tsx b/packages/frontend/src/components/Dialog/HeaderButton.tsx similarity index 100% rename from src/renderer/components/Dialog/HeaderButton.tsx rename to packages/frontend/src/components/Dialog/HeaderButton.tsx diff --git a/src/renderer/components/Dialog/OkCancelFooterAction.tsx b/packages/frontend/src/components/Dialog/OkCancelFooterAction.tsx similarity index 100% rename from src/renderer/components/Dialog/OkCancelFooterAction.tsx rename to packages/frontend/src/components/Dialog/OkCancelFooterAction.tsx diff --git a/src/renderer/components/Dialog/index.tsx b/packages/frontend/src/components/Dialog/index.tsx similarity index 100% rename from src/renderer/components/Dialog/index.tsx rename to packages/frontend/src/components/Dialog/index.tsx diff --git a/src/renderer/components/Dialog/styles.module.scss b/packages/frontend/src/components/Dialog/styles.module.scss similarity index 96% rename from src/renderer/components/Dialog/styles.module.scss rename to packages/frontend/src/components/Dialog/styles.module.scss index a932bd3f38..556c07dca4 100644 --- a/src/renderer/components/Dialog/styles.module.scss +++ b/packages/frontend/src/components/Dialog/styles.module.scss @@ -91,6 +91,7 @@ $paddingVertical: 20px; justify-content: center; padding: 0; width: $headerButtonSize; + -webkit-app-region: no-drag; // make it clickable, even when it is on top of navbar & + & { margin-left: 5px; diff --git a/src/renderer/components/EmojiPicker/index.tsx b/packages/frontend/src/components/EmojiPicker/index.tsx similarity index 100% rename from src/renderer/components/EmojiPicker/index.tsx rename to packages/frontend/src/components/EmojiPicker/index.tsx diff --git a/src/renderer/components/EmojiPicker/styles.module.scss b/packages/frontend/src/components/EmojiPicker/styles.module.scss similarity index 100% rename from src/renderer/components/EmojiPicker/styles.module.scss rename to packages/frontend/src/components/EmojiPicker/styles.module.scss diff --git a/src/renderer/components/Gallery.tsx b/packages/frontend/src/components/Gallery.tsx similarity index 99% rename from src/renderer/components/Gallery.tsx rename to packages/frontend/src/components/Gallery.tsx index 3eb784708c..9fe0e8f5d0 100644 --- a/src/renderer/components/Gallery.tsx +++ b/packages/frontend/src/components/Gallery.tsx @@ -11,7 +11,7 @@ import { VideoAttachment, WebxdcAttachment, } from './attachment/mediaAttachment' -import { getLogger } from '../../shared/logger' +import { getLogger } from '../../../shared/logger' import { BackendRemote, Type } from '../backend-com' import { selectedAccountId } from '../ScreenController' import SettingsStoreInstance, { SettingsStoreState } from '../stores/settings' diff --git a/src/renderer/components/GroupImage.tsx b/packages/frontend/src/components/GroupImage.tsx similarity index 100% rename from src/renderer/components/GroupImage.tsx rename to packages/frontend/src/components/GroupImage.tsx diff --git a/src/renderer/components/Icon/index.tsx b/packages/frontend/src/components/Icon/index.tsx similarity index 94% rename from src/renderer/components/Icon/index.tsx rename to packages/frontend/src/components/Icon/index.tsx index d81fde066b..55a1bad9be 100644 --- a/src/renderer/components/Icon/index.tsx +++ b/packages/frontend/src/components/Icon/index.tsx @@ -63,7 +63,7 @@ export default function Icon({ )} style={{ transform: `rotate(${rotation}deg)`, - WebkitMaskImage: `url(../images/icons/${icon}.svg)`, + WebkitMaskImage: `url(./images/icons/${icon}.svg)`, height: `${size}px`, width: `${size}px`, }} diff --git a/src/renderer/components/Icon/styles.module.scss b/packages/frontend/src/components/Icon/styles.module.scss similarity index 100% rename from src/renderer/components/Icon/styles.module.scss rename to packages/frontend/src/components/Icon/styles.module.scss diff --git a/src/renderer/components/ImageBackdrop/index.tsx b/packages/frontend/src/components/ImageBackdrop/index.tsx similarity index 100% rename from src/renderer/components/ImageBackdrop/index.tsx rename to packages/frontend/src/components/ImageBackdrop/index.tsx diff --git a/packages/frontend/src/components/ImageBackdrop/styles.module.scss b/packages/frontend/src/components/ImageBackdrop/styles.module.scss new file mode 100644 index 0000000000..705771a02e --- /dev/null +++ b/packages/frontend/src/components/ImageBackdrop/styles.module.scss @@ -0,0 +1,13 @@ +.imageBackdrop { + background-size: cover; + height: 100%; + width: 100%; + + &.welcome { + background-image: url('./images/backgrounds/petito-moreno.webp'); + } + + &.deletion { + background-image: url('./images/account_deletion_background.jpg'); + } +} diff --git a/src/renderer/components/ImageCropper/index.tsx b/packages/frontend/src/components/ImageCropper/index.tsx similarity index 99% rename from src/renderer/components/ImageCropper/index.tsx rename to packages/frontend/src/components/ImageCropper/index.tsx index b099c184c6..c9f1463ce9 100644 --- a/src/renderer/components/ImageCropper/index.tsx +++ b/packages/frontend/src/components/ImageCropper/index.tsx @@ -2,7 +2,7 @@ import React, { useRef, useLayoutEffect } from 'react' import { dirname } from 'path' -import { runtime } from '../../runtime' +import { runtime } from '@deltachat-desktop/runtime-interface' import Dialog, { DialogBody, diff --git a/src/renderer/components/ImageCropper/styles.module.scss b/packages/frontend/src/components/ImageCropper/styles.module.scss similarity index 100% rename from src/renderer/components/ImageCropper/styles.module.scss rename to packages/frontend/src/components/ImageCropper/styles.module.scss diff --git a/src/renderer/components/ImageSelector/index.tsx b/packages/frontend/src/components/ImageSelector/index.tsx similarity index 97% rename from src/renderer/components/ImageSelector/index.tsx rename to packages/frontend/src/components/ImageSelector/index.tsx index 7b447ce41c..fb0fdaccf8 100644 --- a/src/renderer/components/ImageSelector/index.tsx +++ b/packages/frontend/src/components/ImageSelector/index.tsx @@ -5,7 +5,7 @@ import Icon from '../Icon' import LargeProfileImage from '../LargeProfileImage' import useTranslationFunction from '../../hooks/useTranslationFunction' import { LastUsedSlot, rememberLastUsedPath } from '../../utils/lastUsedPaths' -import { runtime } from '../../runtime' +import { runtime } from '@deltachat-desktop/runtime-interface' import styles from './styles.module.scss' diff --git a/src/renderer/components/ImageSelector/styles.module.scss b/packages/frontend/src/components/ImageSelector/styles.module.scss similarity index 100% rename from src/renderer/components/ImageSelector/styles.module.scss rename to packages/frontend/src/components/ImageSelector/styles.module.scss diff --git a/src/renderer/components/InputTransferKey.tsx b/packages/frontend/src/components/InputTransferKey.tsx similarity index 100% rename from src/renderer/components/InputTransferKey.tsx rename to packages/frontend/src/components/InputTransferKey.tsx diff --git a/src/renderer/components/KeyboardShortcutHint.tsx b/packages/frontend/src/components/KeyboardShortcutHint.tsx similarity index 97% rename from src/renderer/components/KeyboardShortcutHint.tsx rename to packages/frontend/src/components/KeyboardShortcutHint.tsx index d1818c259b..7460ad291a 100644 --- a/src/renderer/components/KeyboardShortcutHint.tsx +++ b/packages/frontend/src/components/KeyboardShortcutHint.tsx @@ -1,6 +1,6 @@ import React, { useEffect, useState } from 'react' -import { DesktopSettingsType } from '../../shared/shared-types' -import { runtime } from '../runtime' +import { DesktopSettingsType } from '../../../shared/shared-types' +import { runtime } from '@deltachat-desktop/runtime-interface' const keySymbols: { [key: string]: string } = { Control: '^', diff --git a/src/renderer/components/LargeProfileImage/index.tsx b/packages/frontend/src/components/LargeProfileImage/index.tsx similarity index 100% rename from src/renderer/components/LargeProfileImage/index.tsx rename to packages/frontend/src/components/LargeProfileImage/index.tsx diff --git a/src/renderer/components/LargeProfileImage/styles.module.scss b/packages/frontend/src/components/LargeProfileImage/styles.module.scss similarity index 100% rename from src/renderer/components/LargeProfileImage/styles.module.scss rename to packages/frontend/src/components/LargeProfileImage/styles.module.scss diff --git a/src/renderer/components/Login-Styles.tsx b/packages/frontend/src/components/Login-Styles.tsx similarity index 100% rename from src/renderer/components/Login-Styles.tsx rename to packages/frontend/src/components/Login-Styles.tsx diff --git a/src/renderer/components/LoginForm.tsx b/packages/frontend/src/components/LoginForm.tsx similarity index 99% rename from src/renderer/components/LoginForm.tsx rename to packages/frontend/src/components/LoginForm.tsx index 5827abc8ca..67dba40753 100644 --- a/src/renderer/components/LoginForm.tsx +++ b/packages/frontend/src/components/LoginForm.tsx @@ -13,8 +13,8 @@ import { DeltaSwitch, } from './Login-Styles' import ClickableLink from './helpers/ClickableLink' -import { Credentials } from '../../shared/shared-types' -import { getLogger } from '../../shared/logger' +import { Credentials } from '../types-app' +import { getLogger } from '../../../shared/logger' import { BackendRemote, Type } from '../backend-com' import { selectedAccountId } from '../ScreenController' import Dialog, { diff --git a/src/renderer/components/MessageListView.tsx b/packages/frontend/src/components/MessageListView.tsx similarity index 100% rename from src/renderer/components/MessageListView.tsx rename to packages/frontend/src/components/MessageListView.tsx diff --git a/src/renderer/components/NoChatSelected.tsx b/packages/frontend/src/components/NoChatSelected.tsx similarity index 100% rename from src/renderer/components/NoChatSelected.tsx rename to packages/frontend/src/components/NoChatSelected.tsx diff --git a/src/renderer/components/OutsideClickHelper.tsx b/packages/frontend/src/components/OutsideClickHelper.tsx similarity index 100% rename from src/renderer/components/OutsideClickHelper.tsx rename to packages/frontend/src/components/OutsideClickHelper.tsx diff --git a/src/renderer/components/ProfileInfoHeader/index.tsx b/packages/frontend/src/components/ProfileInfoHeader/index.tsx similarity index 100% rename from src/renderer/components/ProfileInfoHeader/index.tsx rename to packages/frontend/src/components/ProfileInfoHeader/index.tsx diff --git a/src/renderer/components/ProfileInfoHeader/styles.module.scss b/packages/frontend/src/components/ProfileInfoHeader/styles.module.scss similarity index 100% rename from src/renderer/components/ProfileInfoHeader/styles.module.scss rename to packages/frontend/src/components/ProfileInfoHeader/styles.module.scss diff --git a/src/renderer/components/QrReader/index.tsx b/packages/frontend/src/components/QrReader/index.tsx similarity index 99% rename from src/renderer/components/QrReader/index.tsx rename to packages/frontend/src/components/QrReader/index.tsx index 1a2eae7d9f..2532f6296a 100644 --- a/src/renderer/components/QrReader/index.tsx +++ b/packages/frontend/src/components/QrReader/index.tsx @@ -13,11 +13,11 @@ import Spinner from '../Spinner' import useTranslationFunction from '../../hooks/useTranslationFunction' import { ContextMenuContext } from '../../contexts/ContextMenuContext' import { ScreenContext } from '../../contexts/ScreenContext' -import { runtime } from '../../runtime' +import { runtime } from '@deltachat-desktop/runtime-interface' // @ts-ignore:next-line: We're importing a worker here with the help of the // "esbuild-plugin-inline-worker" plugin -import Worker from './qr.worker.ts' +import Worker from './qr.worker' import styles from './styles.module.scss' diff --git a/src/renderer/components/QrReader/qr.worker.ts b/packages/frontend/src/components/QrReader/qr.worker.ts similarity index 100% rename from src/renderer/components/QrReader/qr.worker.ts rename to packages/frontend/src/components/QrReader/qr.worker.ts diff --git a/src/renderer/components/QrReader/styles.module.scss b/packages/frontend/src/components/QrReader/styles.module.scss similarity index 100% rename from src/renderer/components/QrReader/styles.module.scss rename to packages/frontend/src/components/QrReader/styles.module.scss diff --git a/src/renderer/components/Radio.tsx b/packages/frontend/src/components/Radio.tsx similarity index 100% rename from src/renderer/components/Radio.tsx rename to packages/frontend/src/components/Radio.tsx diff --git a/src/renderer/components/RadioGroup.tsx b/packages/frontend/src/components/RadioGroup.tsx similarity index 100% rename from src/renderer/components/RadioGroup.tsx rename to packages/frontend/src/components/RadioGroup.tsx diff --git a/src/renderer/components/Reactions/index.tsx b/packages/frontend/src/components/Reactions/index.tsx similarity index 100% rename from src/renderer/components/Reactions/index.tsx rename to packages/frontend/src/components/Reactions/index.tsx diff --git a/src/renderer/components/Reactions/styles.module.scss b/packages/frontend/src/components/Reactions/styles.module.scss similarity index 100% rename from src/renderer/components/Reactions/styles.module.scss rename to packages/frontend/src/components/Reactions/styles.module.scss diff --git a/src/renderer/components/ReactionsBar/ReactionsBar.tsx b/packages/frontend/src/components/ReactionsBar/ReactionsBar.tsx similarity index 100% rename from src/renderer/components/ReactionsBar/ReactionsBar.tsx rename to packages/frontend/src/components/ReactionsBar/ReactionsBar.tsx diff --git a/src/renderer/components/ReactionsBar/ReactionsBarContext.tsx b/packages/frontend/src/components/ReactionsBar/ReactionsBarContext.tsx similarity index 100% rename from src/renderer/components/ReactionsBar/ReactionsBarContext.tsx rename to packages/frontend/src/components/ReactionsBar/ReactionsBarContext.tsx diff --git a/src/renderer/components/ReactionsBar/index.ts b/packages/frontend/src/components/ReactionsBar/index.ts similarity index 100% rename from src/renderer/components/ReactionsBar/index.ts rename to packages/frontend/src/components/ReactionsBar/index.ts diff --git a/src/renderer/components/ReactionsBar/styles.module.scss b/packages/frontend/src/components/ReactionsBar/styles.module.scss similarity index 100% rename from src/renderer/components/ReactionsBar/styles.module.scss rename to packages/frontend/src/components/ReactionsBar/styles.module.scss diff --git a/src/renderer/components/ReactionsBar/useReactionsBar.ts b/packages/frontend/src/components/ReactionsBar/useReactionsBar.ts similarity index 100% rename from src/renderer/components/ReactionsBar/useReactionsBar.ts rename to packages/frontend/src/components/ReactionsBar/useReactionsBar.ts diff --git a/src/renderer/components/RuntimeAdapter.tsx b/packages/frontend/src/components/RuntimeAdapter.tsx similarity index 97% rename from src/renderer/components/RuntimeAdapter.tsx rename to packages/frontend/src/components/RuntimeAdapter.tsx index 8d127221f8..77f979bf22 100644 --- a/src/renderer/components/RuntimeAdapter.tsx +++ b/packages/frontend/src/components/RuntimeAdapter.tsx @@ -3,7 +3,7 @@ import React, { useEffect, useRef } from 'react' import useMessage from '../hooks/chat/useMessage' import useProcessQr from '../hooks/useProcessQr' import { clearNotificationsForChat } from '../system-integration/notifications' -import { runtime } from '../runtime' +import { runtime } from '@deltachat-desktop/runtime-interface' import type { PropsWithChildren } from 'react' import { ActionEmitter, KeybindAction } from '../keybindings' diff --git a/src/renderer/components/SearchInput/SearchInputButton.tsx b/packages/frontend/src/components/SearchInput/SearchInputButton.tsx similarity index 100% rename from src/renderer/components/SearchInput/SearchInputButton.tsx rename to packages/frontend/src/components/SearchInput/SearchInputButton.tsx diff --git a/src/renderer/components/SearchInput/index.tsx b/packages/frontend/src/components/SearchInput/index.tsx similarity index 100% rename from src/renderer/components/SearchInput/index.tsx rename to packages/frontend/src/components/SearchInput/index.tsx diff --git a/src/renderer/components/SearchInput/styles.module.scss b/packages/frontend/src/components/SearchInput/styles.module.scss similarity index 100% rename from src/renderer/components/SearchInput/styles.module.scss rename to packages/frontend/src/components/SearchInput/styles.module.scss diff --git a/src/renderer/components/Settings/Advanced.tsx b/packages/frontend/src/components/Settings/Advanced.tsx similarity index 100% rename from src/renderer/components/Settings/Advanced.tsx rename to packages/frontend/src/components/Settings/Advanced.tsx diff --git a/src/renderer/components/Settings/Appearance.tsx b/packages/frontend/src/components/Settings/Appearance.tsx similarity index 97% rename from src/renderer/components/Settings/Appearance.tsx rename to packages/frontend/src/components/Settings/Appearance.tsx index d94e3e3725..789e8716af 100644 --- a/src/renderer/components/Settings/Appearance.tsx +++ b/packages/frontend/src/components/Settings/Appearance.tsx @@ -3,16 +3,16 @@ import React, { useEffect, useState } from 'react' import { Icon } from '@blueprintjs/core' import { ThemeManager } from '../../ThemeManager' -import { runtime } from '../../runtime' +import { runtime } from '@deltachat-desktop/runtime-interface' import { DesktopSettingsType, RC_Config, Theme, -} from '../../../shared/shared-types' +} from '../../../../shared/shared-types' import SettingsStoreInstance, { SettingsStoreState, } from '../../stores/settings' -import { getLogger } from '../../../shared/logger' +import { getLogger } from '../../../../shared/logger' import SettingsSelector from './SettingsSelector' import DesktopSettingsSwitch from './DesktopSettingsSwitch' import SmallSelectDialog, { SelectDialogOption } from '../SmallSelectDialog' @@ -300,7 +300,7 @@ function BackgroundSelector({
+ ) } diff --git a/src/renderer/components/attachment/Attachment.tsx b/packages/frontend/src/components/attachment/Attachment.tsx similarity index 97% rename from src/renderer/components/attachment/Attachment.tsx rename to packages/frontend/src/components/attachment/Attachment.tsx index 937437caa8..476bb9acdf 100644 --- a/src/renderer/components/attachment/Attachment.tsx +++ b/packages/frontend/src/components/attachment/Attachment.tsx @@ -1,6 +1,6 @@ import mimeTypes from 'mime-types' import { Type } from '../../backend-com' -import { runtime } from '../../runtime' +import { runtime } from '@deltachat-desktop/runtime-interface' /* Section - Data Copied in part from Signal */ // Supported media types in google chrome diff --git a/src/renderer/components/attachment/mediaAttachment.tsx b/packages/frontend/src/components/attachment/mediaAttachment.tsx similarity index 98% rename from src/renderer/components/attachment/mediaAttachment.tsx rename to packages/frontend/src/components/attachment/mediaAttachment.tsx index 72ddd614f3..7ef1692cac 100644 --- a/src/renderer/components/attachment/mediaAttachment.tsx +++ b/packages/frontend/src/components/attachment/mediaAttachment.tsx @@ -15,9 +15,9 @@ import { } from './Attachment' import Timestamp from '../conversations/Timestamp' import { makeContextMenu, OpenContextMenu } from '../ContextMenu' -import { runtime } from '../../runtime' -import { getLogger } from '../../../shared/logger' -import { truncateText } from '../../../shared/util' +import { runtime } from '@deltachat-desktop/runtime-interface' +import { getLogger } from '../../../../shared/logger' +import { truncateText } from '@deltachat-desktop/shared/util' import { selectedAccountId } from '../../ScreenController' import ConfirmationDialog from '../dialogs/ConfirmationDialog' import useDialog from '../../hooks/dialog/useDialog' diff --git a/src/renderer/components/attachment/messageAttachment.tsx b/packages/frontend/src/components/attachment/messageAttachment.tsx similarity index 98% rename from src/renderer/components/attachment/messageAttachment.tsx rename to packages/frontend/src/components/attachment/messageAttachment.tsx index 30f18b5dcb..e89ca920c1 100644 --- a/src/renderer/components/attachment/messageAttachment.tsx +++ b/packages/frontend/src/components/attachment/messageAttachment.tsx @@ -12,9 +12,9 @@ import { dragAttachmentOut, MessageTypeAttachmentSubset, } from './Attachment' -import { runtime } from '../../runtime' +import { runtime } from '@deltachat-desktop/runtime-interface' import { ConversationType } from '../message/MessageList' -import { getDirection } from '../../../shared/util' +import { getDirection } from '../../utils/getDirection' import { Type } from '../../backend-com' import FullscreenMedia, { NeighboringMediaMode, diff --git a/src/renderer/components/chat/ChatList.tsx b/packages/frontend/src/components/chat/ChatList.tsx similarity index 99% rename from src/renderer/components/chat/ChatList.tsx rename to packages/frontend/src/components/chat/ChatList.tsx index 0a208fe270..31da3c0dc8 100644 --- a/src/renderer/components/chat/ChatList.tsx +++ b/packages/frontend/src/components/chat/ChatList.tsx @@ -43,7 +43,7 @@ import type { ContactChatListItemData, MessageChatListItemData, } from './ChatListItemRow' -import { isInviteLink } from '../../../shared/util' +import { isInviteLink } from '../../../../shared/util' const enum LoadStatus { FETCHING = 1, @@ -470,8 +470,7 @@ export default function ChatList(props: {
diff --git a/src/renderer/components/chat/ChatListContextMenu.tsx b/packages/frontend/src/components/chat/ChatListContextMenu.tsx similarity index 99% rename from src/renderer/components/chat/ChatListContextMenu.tsx rename to packages/frontend/src/components/chat/ChatListContextMenu.tsx index 60ebe6d61b..201fadc96f 100644 --- a/src/renderer/components/chat/ChatListContextMenu.tsx +++ b/packages/frontend/src/components/chat/ChatListContextMenu.tsx @@ -1,7 +1,7 @@ import React, { useContext, useState } from 'react' import { C } from '@deltachat/jsonrpc-client' -import { Timespans } from '../../../shared/constants' +import { Timespans } from '../../../../shared/constants' import { ContextMenuItem } from '../ContextMenu' import MailingListProfile from '../dialogs/MessageListProfile' import { BackendRemote } from '../../backend-com' diff --git a/src/renderer/components/chat/ChatListHelpers.tsx b/packages/frontend/src/components/chat/ChatListHelpers.tsx similarity index 98% rename from src/renderer/components/chat/ChatListHelpers.tsx rename to packages/frontend/src/components/chat/ChatListHelpers.tsx index b70e3daeb7..5f5fc33350 100644 --- a/src/renderer/components/chat/ChatListHelpers.tsx +++ b/packages/frontend/src/components/chat/ChatListHelpers.tsx @@ -1,5 +1,5 @@ import { useState, useEffect, useMemo } from 'react' -import { getLogger } from '../../../shared/logger' +import { getLogger } from '../../../../shared/logger' import { debounce } from 'debounce' import { BackendRemote, onDCEvent } from '../../backend-com' import { selectedAccountId } from '../../ScreenController' diff --git a/src/renderer/components/chat/ChatListItem.tsx b/packages/frontend/src/components/chat/ChatListItem.tsx similarity index 97% rename from src/renderer/components/chat/ChatListItem.tsx rename to packages/frontend/src/components/chat/ChatListItem.tsx index b52cf5bc87..a28a532d24 100644 --- a/src/renderer/components/chat/ChatListItem.tsx +++ b/packages/frontend/src/components/chat/ChatListItem.tsx @@ -6,11 +6,11 @@ import Timestamp from '../conversations/Timestamp' import { Avatar } from '../Avatar' import { Type, EffectfulBackendActions } from '../../backend-com' import { mapCoreMsgStatus2String } from '../helpers/MapMsgStatus' -import { getLogger } from '../../../shared/logger' +import { getLogger } from '../../../../shared/logger' import { useContextMenuWithActiveState } from '../ContextMenu' import { selectedAccountId } from '../../ScreenController' import { InlineVerifiedIcon } from '../VerifiedIcon' -import { runtime } from '../../runtime' +import { runtime } from '@deltachat-desktop/runtime-interface' import { message2React } from '../message/MessageMarkdown' const log = getLogger('renderer/chatlist/item') @@ -102,17 +102,17 @@ function Message({ {summaryPreviewImage && !iswebxdc && (
)} {iswebxdc && lastMessageId && (
)} @@ -174,7 +174,7 @@ function ChatListItemArchiveLink({ }`} >
- +
{tx('chat_archived_chats_title')}
diff --git a/src/renderer/components/chat/ChatListItemRow.tsx b/packages/frontend/src/components/chat/ChatListItemRow.tsx similarity index 100% rename from src/renderer/components/chat/ChatListItemRow.tsx rename to packages/frontend/src/components/chat/ChatListItemRow.tsx diff --git a/src/renderer/components/composer/Composer.tsx b/packages/frontend/src/components/composer/Composer.tsx similarity index 98% rename from src/renderer/components/composer/Composer.tsx rename to packages/frontend/src/components/composer/Composer.tsx index 16638a747b..61ffb2311f 100644 --- a/src/renderer/components/composer/Composer.tsx +++ b/packages/frontend/src/components/composer/Composer.tsx @@ -10,7 +10,7 @@ import { C, T } from '@deltachat/jsonrpc-client' import MenuAttachment from './menuAttachment' import ComposerMessageInput from './ComposerMessageInput' -import { getLogger } from '../../../shared/logger' +import { getLogger } from '../../../../shared/logger' import { EmojiAndStickerPicker } from './EmojiAndStickerPicker' import { replaceColonsSafe } from '../conversations/emoji' import { Quote } from '../message/Message' @@ -24,7 +24,7 @@ import { } from '../../backend-com' import { selectedAccountId } from '../../ScreenController' import { MessageTypeAttachmentSubset } from '../attachment/Attachment' -import { runtime } from '../../runtime' +import { runtime } from '@deltachat-desktop/runtime-interface' import { confirmDialog } from '../message/messageFunctions' import { ProtectionBrokenDialog } from '../dialogs/ProtectionStatusDialog' import useDialog from '../../hooks/dialog/useDialog' @@ -239,18 +239,12 @@ const Composer = forwardRef< const file = e.clipboardData.files[0] log.debug( - `paste: received file: "${file.path}" "${file.name}" ${file.type}`, + `paste: received file: "${file.name}" ${file.type}`, e.clipboardData.files ) const msgType: Viewtype = file.type.startsWith('image') ? 'Image' : 'File' - // file.path is always set to empty string? - if (file.path) { - addFileToDraft(file.path, msgType) - return - } - try { // Write clipboard to file then attach it to the draft const path = await runtime.writeClipboardToTempFile() diff --git a/src/renderer/components/composer/ComposerMessageInput.tsx b/packages/frontend/src/components/composer/ComposerMessageInput.tsx similarity index 99% rename from src/renderer/components/composer/ComposerMessageInput.tsx rename to packages/frontend/src/components/composer/ComposerMessageInput.tsx index 9a0d394e91..3c0318890f 100644 --- a/src/renderer/components/composer/ComposerMessageInput.tsx +++ b/packages/frontend/src/components/composer/ComposerMessageInput.tsx @@ -2,7 +2,7 @@ import React from 'react' import debounce from 'debounce' import { ActionEmitter, KeybindAction } from '../../keybindings' -import { getLogger } from '../../../shared/logger' +import { getLogger } from '../../../../shared/logger' import { DialogContext } from '../../contexts/DialogContext' const log = getLogger('renderer/composer/ComposerMessageInput') diff --git a/src/renderer/components/composer/EmojiAndStickerPicker.tsx b/packages/frontend/src/components/composer/EmojiAndStickerPicker.tsx similarity index 98% rename from src/renderer/components/composer/EmojiAndStickerPicker.tsx rename to packages/frontend/src/components/composer/EmojiAndStickerPicker.tsx index df939b0a73..63d3072b79 100644 --- a/src/renderer/components/composer/EmojiAndStickerPicker.tsx +++ b/packages/frontend/src/components/composer/EmojiAndStickerPicker.tsx @@ -8,7 +8,7 @@ import classNames from 'classnames' import { BackendRemote } from '../../backend-com' import { selectedAccountId } from '../../ScreenController' -import { runtime } from '../../runtime' +import { runtime } from '@deltachat-desktop/runtime-interface' import EmojiPicker from '../EmojiPicker' import Button from '../Button' import useTranslationFunction from '../../hooks/useTranslationFunction' diff --git a/src/renderer/components/composer/menuAttachment.tsx b/packages/frontend/src/components/composer/menuAttachment.tsx similarity index 97% rename from src/renderer/components/composer/menuAttachment.tsx rename to packages/frontend/src/components/composer/menuAttachment.tsx index 9934fdbf1f..7884260a6a 100644 --- a/src/renderer/components/composer/menuAttachment.tsx +++ b/packages/frontend/src/components/composer/menuAttachment.tsx @@ -1,10 +1,10 @@ import React, { useCallback, useContext } from 'react' import { dirname } from 'path' -import { runtime } from '../../runtime' +import { runtime } from '@deltachat-desktop/runtime-interface' import { useStore } from '../../stores/store' import SettingsStoreInstance from '../../stores/settings' -import { IMAGE_EXTENSIONS } from '../../../shared/constants' +import { IMAGE_EXTENSIONS } from '../../../../shared/constants' import useConfirmationDialog from '../../hooks/dialog/useConfirmationDialog' import useTranslationFunction from '../../hooks/useTranslationFunction' import useDialog from '../../hooks/dialog/useDialog' diff --git a/src/renderer/components/composer/styles.module.scss b/packages/frontend/src/components/composer/styles.module.scss similarity index 100% rename from src/renderer/components/composer/styles.module.scss rename to packages/frontend/src/components/composer/styles.module.scss diff --git a/src/renderer/components/contact/Contact.tsx b/packages/frontend/src/components/contact/Contact.tsx similarity index 100% rename from src/renderer/components/contact/Contact.tsx rename to packages/frontend/src/components/contact/Contact.tsx diff --git a/src/renderer/components/contact/ContactList.tsx b/packages/frontend/src/components/contact/ContactList.tsx similarity index 100% rename from src/renderer/components/contact/ContactList.tsx rename to packages/frontend/src/components/contact/ContactList.tsx diff --git a/src/renderer/components/contact/ContactListItem.tsx b/packages/frontend/src/components/contact/ContactListItem.tsx similarity index 100% rename from src/renderer/components/contact/ContactListItem.tsx rename to packages/frontend/src/components/contact/ContactListItem.tsx diff --git a/src/renderer/components/conversations/Timestamp.tsx b/packages/frontend/src/components/conversations/Timestamp.tsx similarity index 98% rename from src/renderer/components/conversations/Timestamp.tsx rename to packages/frontend/src/components/conversations/Timestamp.tsx index 48fbba293c..99ac569e89 100644 --- a/src/renderer/components/conversations/Timestamp.tsx +++ b/packages/frontend/src/components/conversations/Timestamp.tsx @@ -2,7 +2,7 @@ import React, { useState, useEffect, useCallback } from 'react' import classNames from 'classnames' import moment from 'moment' import formatRelativeTime from './formatRelativeTime' -import { getLogger } from '../../../shared/logger' +import { getLogger } from '../../../../shared/logger' const log = getLogger('renderer/Component/Timestamp') diff --git a/src/renderer/components/conversations/emoji.ts b/packages/frontend/src/components/conversations/emoji.ts similarity index 97% rename from src/renderer/components/conversations/emoji.ts rename to packages/frontend/src/components/conversations/emoji.ts index f2f0c35dfc..aedb40aa6e 100644 --- a/src/renderer/components/conversations/emoji.ts +++ b/packages/frontend/src/components/conversations/emoji.ts @@ -1,7 +1,7 @@ // @ts-ignore // We only really need the emoji data of this module import EmojiConvertor from 'emoji-js-clean' -import { getLogger } from '../../../shared/logger' +import { getLogger } from '../../../../shared/logger' import { count_emojis_if_only_contains_emoji } from '@deltachat/message_parser_wasm' const log = getLogger('renderer/emoji') diff --git a/src/renderer/components/conversations/formatRelativeTime.ts b/packages/frontend/src/components/conversations/formatRelativeTime.ts similarity index 100% rename from src/renderer/components/conversations/formatRelativeTime.ts rename to packages/frontend/src/components/conversations/formatRelativeTime.ts diff --git a/src/renderer/components/dialogs/About.tsx b/packages/frontend/src/components/dialogs/About.tsx similarity index 95% rename from src/renderer/components/dialogs/About.tsx rename to packages/frontend/src/components/dialogs/About.tsx index d851f4c999..5f2cbfc091 100644 --- a/src/renderer/components/dialogs/About.tsx +++ b/packages/frontend/src/components/dialogs/About.tsx @@ -1,11 +1,10 @@ import React, { useState, useEffect } from 'react' import reactStringReplace from 'react-string-replace' -import { getLogger } from '../../../shared/logger' -import { gitHubUrl, gitHubLicenseUrl } from '../../../shared/constants' -import { VERSION, GIT_REF } from '../../../shared/build-info' +import { getLogger } from '../../../../shared/logger' +import { gitHubUrl, gitHubLicenseUrl } from '../../../../shared/constants' import ClickableLink from '../helpers/ClickableLink' -import { runtime } from '../../runtime' +import { runtime } from '@deltachat-desktop/runtime-interface' import { BackendRemote } from '../../backend-com' import { DialogBody, DialogContent, DialogWithHeader } from '../Dialog' import useTranslationFunction from '../../hooks/useTranslationFunction' @@ -114,6 +113,7 @@ export default function About({ onClose }: DialogProps) { ) ) + const { VERSION, GIT_REF } = runtime.getRuntimeInfo().buildInfo return ( void - sanitizedFileList: Pick[] + sanitizedFileList: Pick[] chatName: string } & DialogProps diff --git a/src/renderer/components/dialogs/ConfirmationDialog.tsx b/packages/frontend/src/components/dialogs/ConfirmationDialog.tsx similarity index 100% rename from src/renderer/components/dialogs/ConfirmationDialog.tsx rename to packages/frontend/src/components/dialogs/ConfirmationDialog.tsx diff --git a/src/renderer/components/dialogs/ConnectivityDialog.tsx b/packages/frontend/src/components/dialogs/ConnectivityDialog.tsx similarity index 100% rename from src/renderer/components/dialogs/ConnectivityDialog.tsx rename to packages/frontend/src/components/dialogs/ConnectivityDialog.tsx diff --git a/src/renderer/components/dialogs/CreateChat/index.tsx b/packages/frontend/src/components/dialogs/CreateChat/index.tsx similarity index 99% rename from src/renderer/components/dialogs/CreateChat/index.tsx rename to packages/frontend/src/components/dialogs/CreateChat/index.tsx index c854978864..18aab5cac3 100644 --- a/src/renderer/components/dialogs/CreateChat/index.tsx +++ b/packages/frontend/src/components/dialogs/CreateChat/index.tsx @@ -19,7 +19,7 @@ import { PseudoListItemAddContact, } from '../../helpers/PseudoListItem' import GroupImage from '../../GroupImage' -import { runtime } from '../../../runtime' +import { runtime } from '@deltachat-desktop/runtime-interface' import { QRAvatar } from '../../Avatar' import { AddMemberDialog } from '../AddMember/AddMemberDialog' import { ContactListItem } from '../../contact/ContactListItem' diff --git a/src/renderer/components/dialogs/CreateChat/styles.module.scss b/packages/frontend/src/components/dialogs/CreateChat/styles.module.scss similarity index 100% rename from src/renderer/components/dialogs/CreateChat/styles.module.scss rename to packages/frontend/src/components/dialogs/CreateChat/styles.module.scss diff --git a/src/renderer/components/dialogs/DisappearingMessages.tsx b/packages/frontend/src/components/dialogs/DisappearingMessages.tsx similarity index 98% rename from src/renderer/components/dialogs/DisappearingMessages.tsx rename to packages/frontend/src/components/dialogs/DisappearingMessages.tsx index f7064e91ea..893b6fcc6e 100644 --- a/src/renderer/components/dialogs/DisappearingMessages.tsx +++ b/packages/frontend/src/components/dialogs/DisappearingMessages.tsx @@ -1,7 +1,7 @@ import React, { useState, useEffect } from 'react' import { RadioGroup, Radio } from '@blueprintjs/core' -import { Timespans } from '../../../shared/constants' +import { Timespans } from '../../../../shared/constants' import { BackendRemote } from '../../backend-com' import { selectedAccountId } from '../../ScreenController' import Dialog, { diff --git a/src/renderer/components/dialogs/EditAccountAndPasswordDialog.tsx b/packages/frontend/src/components/dialogs/EditAccountAndPasswordDialog.tsx similarity index 98% rename from src/renderer/components/dialogs/EditAccountAndPasswordDialog.tsx rename to packages/frontend/src/components/dialogs/EditAccountAndPasswordDialog.tsx index c3fd35b842..7cf85b6b43 100644 --- a/src/renderer/components/dialogs/EditAccountAndPasswordDialog.tsx +++ b/packages/frontend/src/components/dialogs/EditAccountAndPasswordDialog.tsx @@ -1,7 +1,7 @@ import React, { useState, useEffect, useCallback } from 'react' import { BackendRemote } from '../../backend-com' -import { Credentials } from '../../../shared/shared-types' +import { Credentials } from '../../types-app' import LoginForm, { ConfigureProgressDialog, defaultCredentials, diff --git a/src/renderer/components/dialogs/EditProfileDialog/ProfileImageSelector.tsx b/packages/frontend/src/components/dialogs/EditProfileDialog/ProfileImageSelector.tsx similarity index 100% rename from src/renderer/components/dialogs/EditProfileDialog/ProfileImageSelector.tsx rename to packages/frontend/src/components/dialogs/EditProfileDialog/ProfileImageSelector.tsx diff --git a/src/renderer/components/dialogs/EditProfileDialog/index.tsx b/packages/frontend/src/components/dialogs/EditProfileDialog/index.tsx similarity index 100% rename from src/renderer/components/dialogs/EditProfileDialog/index.tsx rename to packages/frontend/src/components/dialogs/EditProfileDialog/index.tsx diff --git a/src/renderer/components/dialogs/EditProfileDialog/styles.module.scss b/packages/frontend/src/components/dialogs/EditProfileDialog/styles.module.scss similarity index 100% rename from src/renderer/components/dialogs/EditProfileDialog/styles.module.scss rename to packages/frontend/src/components/dialogs/EditProfileDialog/styles.module.scss diff --git a/src/renderer/components/dialogs/EditVideochatInstanceDialog.tsx b/packages/frontend/src/components/dialogs/EditVideochatInstanceDialog.tsx similarity index 99% rename from src/renderer/components/dialogs/EditVideochatInstanceDialog.tsx rename to packages/frontend/src/components/dialogs/EditVideochatInstanceDialog.tsx index 89f77a3e78..6f3299672a 100644 --- a/src/renderer/components/dialogs/EditVideochatInstanceDialog.tsx +++ b/packages/frontend/src/components/dialogs/EditVideochatInstanceDialog.tsx @@ -7,7 +7,7 @@ import Radio from '../Radio' import { VIDEO_CHAT_INSTANCE_AUTISTICI, VIDEO_CHAT_INSTANCE_SYSTEMLI, -} from '../../../shared/constants' +} from '../../../../shared/constants' import Dialog, { DialogBody, DialogContent, diff --git a/src/renderer/components/dialogs/EncryptionInfo.tsx b/packages/frontend/src/components/dialogs/EncryptionInfo.tsx similarity index 100% rename from src/renderer/components/dialogs/EncryptionInfo.tsx rename to packages/frontend/src/components/dialogs/EncryptionInfo.tsx diff --git a/src/renderer/components/dialogs/EnterAutocryptSetupMessage.tsx b/packages/frontend/src/components/dialogs/EnterAutocryptSetupMessage.tsx similarity index 98% rename from src/renderer/components/dialogs/EnterAutocryptSetupMessage.tsx rename to packages/frontend/src/components/dialogs/EnterAutocryptSetupMessage.tsx index 32e662ec40..11fd7147db 100644 --- a/src/renderer/components/dialogs/EnterAutocryptSetupMessage.tsx +++ b/packages/frontend/src/components/dialogs/EnterAutocryptSetupMessage.tsx @@ -1,7 +1,7 @@ import React, { useState, useContext } from 'react' import { T } from '@deltachat/jsonrpc-client' -import { getLogger } from '../../../shared/logger' +import { getLogger } from '../../../../shared/logger' import { BackendRemote } from '../../backend-com' import { selectedAccountId } from '../../ScreenController' import InputTransferKey from '../InputTransferKey' diff --git a/src/renderer/components/dialogs/ForwardMessage/index.tsx b/packages/frontend/src/components/dialogs/ForwardMessage/index.tsx similarity index 100% rename from src/renderer/components/dialogs/ForwardMessage/index.tsx rename to packages/frontend/src/components/dialogs/ForwardMessage/index.tsx diff --git a/src/renderer/components/dialogs/ForwardMessage/styles.module.scss b/packages/frontend/src/components/dialogs/ForwardMessage/styles.module.scss similarity index 100% rename from src/renderer/components/dialogs/ForwardMessage/styles.module.scss rename to packages/frontend/src/components/dialogs/ForwardMessage/styles.module.scss diff --git a/src/renderer/components/dialogs/FullscreenAvatar.tsx b/packages/frontend/src/components/dialogs/FullscreenAvatar.tsx similarity index 97% rename from src/renderer/components/dialogs/FullscreenAvatar.tsx rename to packages/frontend/src/components/dialogs/FullscreenAvatar.tsx index 25eb2de1b6..229507513d 100644 --- a/src/renderer/components/dialogs/FullscreenAvatar.tsx +++ b/packages/frontend/src/components/dialogs/FullscreenAvatar.tsx @@ -3,7 +3,7 @@ import { basename } from 'path' import { Icon, Overlay } from '@blueprintjs/core' import { TransformWrapper, TransformComponent } from 'react-zoom-pan-pinch' -import { runtime } from '../../runtime' +import { runtime } from '@deltachat-desktop/runtime-interface' import useTranslationFunction from '../../hooks/useTranslationFunction' import useContextMenu from '../../hooks/useContextMenu' diff --git a/src/renderer/components/dialogs/FullscreenMedia.tsx b/packages/frontend/src/components/dialogs/FullscreenMedia.tsx similarity index 94% rename from src/renderer/components/dialogs/FullscreenMedia.tsx rename to packages/frontend/src/components/dialogs/FullscreenMedia.tsx index da2cbd0813..3009543ffb 100644 --- a/src/renderer/components/dialogs/FullscreenMedia.tsx +++ b/packages/frontend/src/components/dialogs/FullscreenMedia.tsx @@ -4,12 +4,11 @@ import { TransformWrapper, TransformComponent } from 'react-zoom-pan-pinch' import debounce from 'debounce' import { onDownload } from '../message/messageFunctions' -import { runtime } from '../../runtime' +import { runtime } from '@deltachat-desktop/runtime-interface' import { isImage, isVideo, isAudio } from '../attachment/Attachment' -import { getLogger } from '../../../shared/logger' -import { gitHubIssuesUrl } from '../../../shared/constants' +import { getLogger } from '../../../../shared/logger' +import { gitHubIssuesUrl } from '../../../../shared/constants' import { useInitEffect } from '../helpers/hooks' -import { preventDefault } from '../../../shared/util' import { BackendRemote, onDCEvent, Type } from '../../backend-com' import { selectedAccountId } from '../../ScreenController' import useTranslationFunction from '../../hooks/useTranslationFunction' @@ -20,6 +19,17 @@ import type { DialogProps } from '../../contexts/DialogContext' const log = getLogger('renderer/fullscreen_media') +/** wraps a callback so that `event.preventDefault()` is called before it */ +export function preventDefault( + callback: Function +) { + const wrapper = (cb: Function, ev: EventType) => { + ev.preventDefault() + cb() + } + return wrapper.bind(null, callback) +} + export enum NeighboringMediaMode { Chat, Global, diff --git a/src/renderer/components/dialogs/InvalidUnencryptedMail.tsx b/packages/frontend/src/components/dialogs/InvalidUnencryptedMail.tsx similarity index 96% rename from src/renderer/components/dialogs/InvalidUnencryptedMail.tsx rename to packages/frontend/src/components/dialogs/InvalidUnencryptedMail.tsx index 7855b7a6c4..c745a03f00 100644 --- a/src/renderer/components/dialogs/InvalidUnencryptedMail.tsx +++ b/packages/frontend/src/components/dialogs/InvalidUnencryptedMail.tsx @@ -1,7 +1,7 @@ import React from 'react' import { BackendRemote } from '../../backend-com' -import { runtime } from '../../runtime' +import { runtime } from '@deltachat-desktop/runtime-interface' import { selectedAccountId } from '../../ScreenController' import QrCode from './QrCode' import Dialog, { diff --git a/src/renderer/components/dialogs/KeybindingCheatSheet.tsx b/packages/frontend/src/components/dialogs/KeybindingCheatSheet.tsx similarity index 100% rename from src/renderer/components/dialogs/KeybindingCheatSheet.tsx rename to packages/frontend/src/components/dialogs/KeybindingCheatSheet.tsx diff --git a/src/renderer/components/dialogs/MailtoDialog/index.tsx b/packages/frontend/src/components/dialogs/MailtoDialog/index.tsx similarity index 100% rename from src/renderer/components/dialogs/MailtoDialog/index.tsx rename to packages/frontend/src/components/dialogs/MailtoDialog/index.tsx diff --git a/src/renderer/components/dialogs/MailtoDialog/styles.module.scss b/packages/frontend/src/components/dialogs/MailtoDialog/styles.module.scss similarity index 100% rename from src/renderer/components/dialogs/MailtoDialog/styles.module.scss rename to packages/frontend/src/components/dialogs/MailtoDialog/styles.module.scss diff --git a/src/renderer/components/dialogs/MessageDetail/MessageDetail.tsx b/packages/frontend/src/components/dialogs/MessageDetail/MessageDetail.tsx similarity index 100% rename from src/renderer/components/dialogs/MessageDetail/MessageDetail.tsx rename to packages/frontend/src/components/dialogs/MessageDetail/MessageDetail.tsx diff --git a/src/renderer/components/dialogs/MessageDetail/ReadReceipts.tsx b/packages/frontend/src/components/dialogs/MessageDetail/ReadReceipts.tsx similarity index 100% rename from src/renderer/components/dialogs/MessageDetail/ReadReceipts.tsx rename to packages/frontend/src/components/dialogs/MessageDetail/ReadReceipts.tsx diff --git a/src/renderer/components/dialogs/MessageDetail/styles.module.scss b/packages/frontend/src/components/dialogs/MessageDetail/styles.module.scss similarity index 96% rename from src/renderer/components/dialogs/MessageDetail/styles.module.scss rename to packages/frontend/src/components/dialogs/MessageDetail/styles.module.scss index 7790e7c6d3..3ff23543e7 100644 --- a/src/renderer/components/dialogs/MessageDetail/styles.module.scss +++ b/packages/frontend/src/components/dialogs/MessageDetail/styles.module.scss @@ -17,7 +17,7 @@ .DoubleCheckmarkIcon { height: 1.5em; width: 2.25em; - $svg: '../images/read.svg'; + $svg: './images/read.svg'; mask: url($svg) no-repeat center; mask-size: 1.5em; background-color: var(--messageStatusIcon); diff --git a/src/renderer/components/dialogs/MessageListProfile.tsx b/packages/frontend/src/components/dialogs/MessageListProfile.tsx similarity index 100% rename from src/renderer/components/dialogs/MessageListProfile.tsx rename to packages/frontend/src/components/dialogs/MessageListProfile.tsx diff --git a/src/renderer/components/dialogs/MuteChat.tsx b/packages/frontend/src/components/dialogs/MuteChat.tsx similarity index 96% rename from src/renderer/components/dialogs/MuteChat.tsx rename to packages/frontend/src/components/dialogs/MuteChat.tsx index db4defb7d4..9c477a2ba2 100644 --- a/src/renderer/components/dialogs/MuteChat.tsx +++ b/packages/frontend/src/components/dialogs/MuteChat.tsx @@ -1,6 +1,6 @@ import React from 'react' -import { Timespans } from '../../../shared/constants' +import { Timespans } from '../../../../shared/constants' import { selectedAccountId } from '../../ScreenController' import { BackendRemote, Type } from '../../backend-com' import SmallSelectDialog, { SelectDialogOption } from '../SmallSelectDialog' diff --git a/src/renderer/components/dialogs/ProtectionStatusDialog.tsx b/packages/frontend/src/components/dialogs/ProtectionStatusDialog.tsx similarity index 98% rename from src/renderer/components/dialogs/ProtectionStatusDialog.tsx rename to packages/frontend/src/components/dialogs/ProtectionStatusDialog.tsx index 8f6a57ccce..a7280327fa 100644 --- a/src/renderer/components/dialogs/ProtectionStatusDialog.tsx +++ b/packages/frontend/src/components/dialogs/ProtectionStatusDialog.tsx @@ -1,7 +1,7 @@ import React from 'react' import { BackendRemote } from '../../backend-com' -import { runtime } from '../../runtime' +import { runtime } from '@deltachat-desktop/runtime-interface' import { selectedAccountId } from '../../ScreenController' import QrCode from './QrCode' import Dialog, { diff --git a/src/renderer/components/dialogs/QrCode.tsx b/packages/frontend/src/components/dialogs/QrCode.tsx similarity index 98% rename from src/renderer/components/dialogs/QrCode.tsx rename to packages/frontend/src/components/dialogs/QrCode.tsx index 6243742847..90fa9bdda9 100644 --- a/src/renderer/components/dialogs/QrCode.tsx +++ b/packages/frontend/src/components/dialogs/QrCode.tsx @@ -17,8 +17,8 @@ import Dialog, { import FooterActionButton from '../Dialog/FooterActionButton' import QrReader from '../QrReader' import { BackendRemote } from '../../backend-com' -import { getLogger } from '../../../shared/logger' -import { runtime } from '../../runtime' +import { getLogger } from '../../../../shared/logger' +import { runtime } from '@deltachat-desktop/runtime-interface' import { ScreenContext } from '../../contexts/ScreenContext' import useContextMenu from '../../hooks/useContextMenu' import useProcessQr from '../../hooks/useProcessQr' diff --git a/src/renderer/components/dialogs/QrCodeScanner.tsx b/packages/frontend/src/components/dialogs/QrCodeScanner.tsx similarity index 100% rename from src/renderer/components/dialogs/QrCodeScanner.tsx rename to packages/frontend/src/components/dialogs/QrCodeScanner.tsx diff --git a/src/renderer/components/dialogs/ReactionsDialog/index.tsx b/packages/frontend/src/components/dialogs/ReactionsDialog/index.tsx similarity index 100% rename from src/renderer/components/dialogs/ReactionsDialog/index.tsx rename to packages/frontend/src/components/dialogs/ReactionsDialog/index.tsx diff --git a/src/renderer/components/dialogs/ReactionsDialog/styles.module.scss b/packages/frontend/src/components/dialogs/ReactionsDialog/styles.module.scss similarity index 100% rename from src/renderer/components/dialogs/ReactionsDialog/styles.module.scss rename to packages/frontend/src/components/dialogs/ReactionsDialog/styles.module.scss diff --git a/src/renderer/components/dialogs/SelectContact/index.tsx b/packages/frontend/src/components/dialogs/SelectContact/index.tsx similarity index 100% rename from src/renderer/components/dialogs/SelectContact/index.tsx rename to packages/frontend/src/components/dialogs/SelectContact/index.tsx diff --git a/src/renderer/components/dialogs/SelectContact/styles.module.scss b/packages/frontend/src/components/dialogs/SelectContact/styles.module.scss similarity index 100% rename from src/renderer/components/dialogs/SelectContact/styles.module.scss rename to packages/frontend/src/components/dialogs/SelectContact/styles.module.scss diff --git a/src/renderer/components/dialogs/SetupMultiDevice/ReceiveBackupDialog.tsx b/packages/frontend/src/components/dialogs/SetupMultiDevice/ReceiveBackupDialog.tsx similarity index 95% rename from src/renderer/components/dialogs/SetupMultiDevice/ReceiveBackupDialog.tsx rename to packages/frontend/src/components/dialogs/SetupMultiDevice/ReceiveBackupDialog.tsx index ca6744e4ab..56c2e4142e 100644 --- a/src/renderer/components/dialogs/SetupMultiDevice/ReceiveBackupDialog.tsx +++ b/packages/frontend/src/components/dialogs/SetupMultiDevice/ReceiveBackupDialog.tsx @@ -7,13 +7,13 @@ import useProcessQr from '../../../hooks/useProcessQr' import { selectedAccountId } from '../../../ScreenController' import { DialogWithHeader } from '../../Dialog' import useTranslationFunction from '../../../hooks/useTranslationFunction' -import { getLogger } from '../../../../shared/logger' +import { getLogger } from '../../../../../shared/logger' import styles from './styles.module.scss' import type { DialogProps } from '../../../contexts/DialogContext' import useAlertDialog from '../../../hooks/dialog/useAlertDialog' -import { runtime } from '../../../runtime' +import { runtime } from '@deltachat-desktop/runtime-interface' const log = getLogger('renderer/dialogs/SetupMultiDevice/ReceiveBackup') diff --git a/src/renderer/components/dialogs/SetupMultiDevice/ReceiveBackupProgressDialog.tsx b/packages/frontend/src/components/dialogs/SetupMultiDevice/ReceiveBackupProgressDialog.tsx similarity index 97% rename from src/renderer/components/dialogs/SetupMultiDevice/ReceiveBackupProgressDialog.tsx rename to packages/frontend/src/components/dialogs/SetupMultiDevice/ReceiveBackupProgressDialog.tsx index 0cdf282d0e..ca2621d01a 100644 --- a/src/renderer/components/dialogs/SetupMultiDevice/ReceiveBackupProgressDialog.tsx +++ b/packages/frontend/src/components/dialogs/SetupMultiDevice/ReceiveBackupProgressDialog.tsx @@ -2,7 +2,7 @@ import { Intent } from '@blueprintjs/core' import { DcEventType } from '@deltachat/jsonrpc-client' import React, { useEffect, useState } from 'react' -import { getLogger } from '../../../../shared/logger' +import { getLogger } from '../../../../../shared/logger' import { BackendRemote } from '../../../backend-com' import { selectedAccountId } from '../../../ScreenController' import { DeltaProgressBar } from '../../Login-Styles' diff --git a/src/renderer/components/dialogs/SetupMultiDevice/SendBackupDialog.tsx b/packages/frontend/src/components/dialogs/SetupMultiDevice/SendBackupDialog.tsx similarity index 98% rename from src/renderer/components/dialogs/SetupMultiDevice/SendBackupDialog.tsx rename to packages/frontend/src/components/dialogs/SetupMultiDevice/SendBackupDialog.tsx index a248d12a84..34dba53819 100644 --- a/src/renderer/components/dialogs/SetupMultiDevice/SendBackupDialog.tsx +++ b/packages/frontend/src/components/dialogs/SetupMultiDevice/SendBackupDialog.tsx @@ -1,8 +1,8 @@ import React, { useState, useEffect, useCallback } from 'react' -import { getLogger } from '../../../../shared/logger' +import { getLogger } from '../../../../../shared/logger' import { BackendRemote, onDCEvent } from '../../../backend-com' -import { runtime } from '../../../runtime' +import { runtime } from '@deltachat-desktop/runtime-interface' import { selectedAccountId } from '../../../ScreenController' import Dialog, { DialogBody, diff --git a/src/renderer/components/dialogs/SetupMultiDevice/index.ts b/packages/frontend/src/components/dialogs/SetupMultiDevice/index.ts similarity index 100% rename from src/renderer/components/dialogs/SetupMultiDevice/index.ts rename to packages/frontend/src/components/dialogs/SetupMultiDevice/index.ts diff --git a/src/renderer/components/dialogs/SetupMultiDevice/styles.module.scss b/packages/frontend/src/components/dialogs/SetupMultiDevice/styles.module.scss similarity index 100% rename from src/renderer/components/dialogs/SetupMultiDevice/styles.module.scss rename to packages/frontend/src/components/dialogs/SetupMultiDevice/styles.module.scss diff --git a/src/renderer/components/dialogs/UnblockContacts.tsx b/packages/frontend/src/components/dialogs/UnblockContacts.tsx similarity index 100% rename from src/renderer/components/dialogs/UnblockContacts.tsx rename to packages/frontend/src/components/dialogs/UnblockContacts.tsx diff --git a/src/renderer/components/dialogs/ViewGroup.tsx b/packages/frontend/src/components/dialogs/ViewGroup.tsx similarity index 100% rename from src/renderer/components/dialogs/ViewGroup.tsx rename to packages/frontend/src/components/dialogs/ViewGroup.tsx diff --git a/src/renderer/components/dialogs/ViewProfile/index.tsx b/packages/frontend/src/components/dialogs/ViewProfile/index.tsx similarity index 80% rename from src/renderer/components/dialogs/ViewProfile/index.tsx rename to packages/frontend/src/components/dialogs/ViewProfile/index.tsx index cde23cc4cc..8974e291f9 100644 --- a/src/renderer/components/dialogs/ViewProfile/index.tsx +++ b/packages/frontend/src/components/dialogs/ViewProfile/index.tsx @@ -12,7 +12,7 @@ import { DeltaInput } from '../../Login-Styles' import { BackendRemote, onDCEvent } from '../../../backend-com' import { selectedAccountId } from '../../../ScreenController' import { InlineVerifiedIcon } from '../../VerifiedIcon' -import { getLogger } from '../../../../shared/logger' +import { getLogger } from '../../../../../shared/logger' import Dialog, { DialogBody, DialogContent, @@ -230,79 +230,85 @@ export function ViewProfileInner({ avatarPath = selfChatAvatar } + const maxMinHeightItems = 5 + const mutualChatsMinHeight = + CHATLISTITEM_CHAT_HEIGHT * + Math.max(Math.min(maxMinHeightItems, chatListIds.length), 1) + return ( <> -
- - - {!isSelfChat && ( -
- {verifier && ( -
- - {verifier.label} -
- )} - {contact.lastSeen !== 0 && ( -
- - -
- )} -
- )} -
-
- {!isDeviceChat && ( - - )} -
- {statusText != '' && ( - <> -
- {tx('pref_default_status_label')} -
-
- + + {!isSelfChat && ( +
+ {verifier && ( +
- - -
- + + {verifier.label} +
+ )} + {contact.lastSeen !== 0 && ( +
+ + +
+ )} +
+ )} + +
+ {!isDeviceChat && ( + )}
+ {statusText != '' && ( + <> +
+ {tx('pref_default_status_label')} +
+
+ + + +
+ + )} {!(isDeviceChat || isSelfChat) && ( <>
{tx('profile_shared_chats')}
-
+
{({ width, height }) => ( 'key' + chatListIds[index]} itemHeight={CHATLISTITEM_CHAT_HEIGHT} > diff --git a/src/renderer/components/dialogs/ViewProfile/styles.module.scss b/packages/frontend/src/components/dialogs/ViewProfile/styles.module.scss similarity index 56% rename from src/renderer/components/dialogs/ViewProfile/styles.module.scss rename to packages/frontend/src/components/dialogs/ViewProfile/styles.module.scss index 4d6d2748cf..6ee656aa78 100644 --- a/src/renderer/components/dialogs/ViewProfile/styles.module.scss +++ b/packages/frontend/src/components/dialogs/ViewProfile/styles.module.scss @@ -6,5 +6,12 @@ .viewProfileDialogBody { display: flex; flex-direction: column; - padding-bottom: 0.6px; + padding-bottom: 2px; +} + +.statusText { + padding: 15px 15px; + color: var(--globalText); + white-space: pre-wrap; + overflow-y: scroll; } diff --git a/src/renderer/components/dialogs/WebxdcSendToChat/index.tsx b/packages/frontend/src/components/dialogs/WebxdcSendToChat/index.tsx similarity index 98% rename from src/renderer/components/dialogs/WebxdcSendToChat/index.tsx rename to packages/frontend/src/components/dialogs/WebxdcSendToChat/index.tsx index 17f551a30b..92837d4318 100644 --- a/src/renderer/components/dialogs/WebxdcSendToChat/index.tsx +++ b/packages/frontend/src/components/dialogs/WebxdcSendToChat/index.tsx @@ -10,7 +10,7 @@ import { useChatList } from '../../chat/ChatListHelpers' import { useThemeCssVar } from '../../../ThemeManager' import { BackendRemote } from '../../../backend-com' import { selectedAccountId } from '../../../ScreenController' -import { runtime } from '../../../runtime' +import { runtime } from '@deltachat-desktop/runtime-interface' import Dialog, { DialogBody, DialogFooter, diff --git a/src/renderer/components/dialogs/WebxdcSendToChat/styles.module.scss b/packages/frontend/src/components/dialogs/WebxdcSendToChat/styles.module.scss similarity index 100% rename from src/renderer/components/dialogs/WebxdcSendToChat/styles.module.scss rename to packages/frontend/src/components/dialogs/WebxdcSendToChat/styles.module.scss diff --git a/src/renderer/components/helpers/ClickableLink.tsx b/packages/frontend/src/components/helpers/ClickableLink.tsx similarity index 100% rename from src/renderer/components/helpers/ClickableLink.tsx rename to packages/frontend/src/components/helpers/ClickableLink.tsx diff --git a/src/renderer/components/helpers/MapMsgStatus.ts b/packages/frontend/src/components/helpers/MapMsgStatus.ts similarity index 92% rename from src/renderer/components/helpers/MapMsgStatus.ts rename to packages/frontend/src/components/helpers/MapMsgStatus.ts index ec7cb5122f..527e570635 100644 --- a/src/renderer/components/helpers/MapMsgStatus.ts +++ b/packages/frontend/src/components/helpers/MapMsgStatus.ts @@ -1,5 +1,5 @@ import { C } from '@deltachat/jsonrpc-client' -import { msgStatus } from '../../../shared/shared-types' +import { msgStatus } from '../../types-app' export function mapCoreMsgStatus2String(state: number): msgStatus { switch (state) { diff --git a/src/renderer/components/helpers/PseudoListItem.tsx b/packages/frontend/src/components/helpers/PseudoListItem.tsx similarity index 100% rename from src/renderer/components/helpers/PseudoListItem.tsx rename to packages/frontend/src/components/helpers/PseudoListItem.tsx diff --git a/src/renderer/components/helpers/SessionStorage.ts b/packages/frontend/src/components/helpers/SessionStorage.ts similarity index 100% rename from src/renderer/components/helpers/SessionStorage.ts rename to packages/frontend/src/components/helpers/SessionStorage.ts diff --git a/src/renderer/components/helpers/hooks.ts b/packages/frontend/src/components/helpers/hooks.ts similarity index 100% rename from src/renderer/components/helpers/hooks.ts rename to packages/frontend/src/components/helpers/hooks.ts diff --git a/src/renderer/components/message/EmptyChatMessage.tsx b/packages/frontend/src/components/message/EmptyChatMessage.tsx similarity index 100% rename from src/renderer/components/message/EmptyChatMessage.tsx rename to packages/frontend/src/components/message/EmptyChatMessage.tsx diff --git a/src/renderer/components/message/Link.tsx b/packages/frontend/src/components/message/Link.tsx similarity index 97% rename from src/renderer/components/message/Link.tsx rename to packages/frontend/src/components/message/Link.tsx index dd86e6ad90..7ceda653fb 100644 --- a/src/renderer/components/message/Link.tsx +++ b/packages/frontend/src/components/message/Link.tsx @@ -1,9 +1,9 @@ import React, { useContext, useState } from 'react' import { DeltaCheckbox } from '../contact/ContactListItem' -import { getLogger } from '../../../shared/logger' +import { getLogger } from '../../../../shared/logger' import reactStringReplace from 'react-string-replace' -import { runtime } from '../../runtime' +import { runtime } from '@deltachat-desktop/runtime-interface' import Dialog, { DialogBody, DialogContent, @@ -15,7 +15,7 @@ import useDialog from '../../hooks/dialog/useDialog' import useOpenLinkSafely from '../../hooks/useOpenLinkSafely' import useProcessQr from '../../hooks/useProcessQr' import useTranslationFunction from '../../hooks/useTranslationFunction' -import { isInviteLink } from '../../../shared/util' +import { isInviteLink } from '@deltachat-desktop/shared/util' import { MessagesDisplayContext } from '../../contexts/MessagesDisplayContext' import { selectedAccountId } from '../../ScreenController' diff --git a/src/renderer/components/message/Message.tsx b/packages/frontend/src/components/message/Message.tsx similarity index 98% rename from src/renderer/components/message/Message.tsx rename to packages/frontend/src/components/message/Message.tsx index 43b7bddc38..824c312f57 100644 --- a/src/renderer/components/message/Message.tsx +++ b/packages/frontend/src/components/message/Message.tsx @@ -18,10 +18,11 @@ import { } from './messageFunctions' import Attachment from '../attachment/messageAttachment' import { isGenericAttachment } from '../attachment/Attachment' -import { runtime } from '../../runtime' +import { runtime } from '@deltachat-desktop/runtime-interface' import { AvatarFromContact } from '../Avatar' import { ConversationType } from './MessageList' -import { getDirection, truncateText } from '../../../shared/util' +import { truncateText } from '@deltachat-desktop/shared/util' +import { getDirection } from '../../utils/getDirection' import { mapCoreMsgStatus2String } from '../helpers/MapMsgStatus' import { ContextMenuItem } from '../ContextMenu' import { onDCEvent, BackendRemote } from '../../backend-com' @@ -479,8 +480,8 @@ export default function Message(props: { className='verified-icon-info-msg' src={ isProtectionBrokenMsg - ? '../images/verified_broken.svg' - : '../images/verified.svg' + ? './images/verified_broken.svg' + : './images/verified.svg' } /> )} diff --git a/src/renderer/components/message/MessageBody.tsx b/packages/frontend/src/components/message/MessageBody.tsx similarity index 100% rename from src/renderer/components/message/MessageBody.tsx rename to packages/frontend/src/components/message/MessageBody.tsx diff --git a/src/renderer/components/message/MessageList.tsx b/packages/frontend/src/components/message/MessageList.tsx similarity index 99% rename from src/renderer/components/message/MessageList.tsx rename to packages/frontend/src/components/message/MessageList.tsx index 558f714b7e..fb79cdb3d8 100644 --- a/src/renderer/components/message/MessageList.tsx +++ b/packages/frontend/src/components/message/MessageList.tsx @@ -13,7 +13,7 @@ import { C } from '@deltachat/jsonrpc-client' import { debounce } from 'debounce' import { MessageWrapper } from './MessageWrapper' -import { getLogger } from '../../../shared/logger' +import { getLogger } from '../../../../shared/logger' import { KeybindAction } from '../../keybindings' import { useMessageList } from '../../stores/messagelist' import { BackendRemote, onDCEvent } from '../../backend-com' diff --git a/src/renderer/components/message/MessageListAndComposer.tsx b/packages/frontend/src/components/message/MessageListAndComposer.tsx similarity index 75% rename from src/renderer/components/message/MessageListAndComposer.tsx rename to packages/frontend/src/components/message/MessageListAndComposer.tsx index 71ea364694..111045dd82 100644 --- a/src/renderer/components/message/MessageListAndComposer.tsx +++ b/packages/frontend/src/components/message/MessageListAndComposer.tsx @@ -3,11 +3,11 @@ import { join, parse } from 'path' import { Viewtype } from '@deltachat/jsonrpc-client/dist/generated/types' import Composer, { useDraft } from '../composer/Composer' -import { getLogger } from '../../../shared/logger' +import { getLogger } from '../../../../shared/logger' import MessageList from './MessageList' import ComposerMessageInput from '../composer/ComposerMessageInput' -import { DesktopSettingsType } from '../../../shared/shared-types' -import { runtime } from '../../runtime' +import { DesktopSettingsType } from '../../../../shared/shared-types' +import { runtime } from '@deltachat-desktop/runtime-interface' import { RecoverableCrashScreen } from '../screens/RecoverableCrashScreen' import { useSettingsStore } from '../../stores/settings' import ConfirmSendingFiles from '../dialogs/ConfirmSendingFiles' @@ -88,7 +88,7 @@ export default function MessageListAndComposer({ accountId, chat }: Props) { messageInputRef ) - const onDrop = (e: React.DragEvent) => { + const onDrop = async (e: React.DragEvent) => { if (chat === null) { log.warn('dropped something, but no chat is selected') return @@ -97,22 +97,18 @@ export default function MessageListAndComposer({ accountId, chat }: Props) { e.preventDefault() e.stopPropagation() - const sanitizedFileList: Pick[] = [] + const sanitizedFileList: File[] = [] { - const fileList: FileList = (e.target as any).files || e.dataTransfer.files - // TODO maybe add a clause here for windows because that uses backslash instead of slash - const forbiddenPathRegEx = /DeltaChat\/.+?\.sqlite-blobs\//gi + const fileList: FileList = + /* (e.target as any).files */ e.dataTransfer.files for (let i = 0; i < fileList.length; i++) { - const { path, name, type } = fileList[i] - // TODO filter out folders somehow - // if that is possible without a backend call to check whether the file exists, - // maybe some browser api like FileReader could help - if (!forbiddenPathRegEx.test(path.replace('\\', '/'))) { - sanitizedFileList.push({ path, name, type }) + const file = fileList[i] + if (runtime.isDroppedFileFromOutside(file)) { + sanitizedFileList.push(file) } else { log.warn( 'Prevented a file from being send again while dragging it out', - name + file.name ) } } @@ -124,14 +120,47 @@ export default function MessageListAndComposer({ accountId, chat }: Props) { return } + function writeTempFileFromFile(file: File): Promise { + if (file.size > 1e8 /* 100mb */) { + log.warn( + `dropped file is bigger than 100mb ${file.name} ${file.size} ${file.type}` + ) + } + return new Promise((resolve, reject) => { + const reader = new FileReader() + reader.onload = _ => { + if (reader.result === null) { + return reject(new Error('result empty')) + } else if (typeof reader.result !== 'string') { + return reject(new Error('wrong type')) + } + const base64Content = reader.result.split(',')[1] + runtime + .writeTempFileFromBase64(file.name, base64Content) + .then(tempUrl => { + resolve(tempUrl) + }) + .catch(err => { + reject(err) + }) + } + reader.onerror = err => { + reject(err) + } + reader.readAsDataURL(file) + }) + } + if (fileCount === 1) { - log.debug(`dropped image of type ${sanitizedFileList[0].type}`) - const msgViewType: Viewtype = sanitizedFileList[0].type.startsWith( - 'image' - ) + const file = sanitizedFileList[0] + log.debug(`dropped image of type ${file.type}`) + const msgViewType: Viewtype = file.type.startsWith('image') ? 'Image' : 'File' - addFileToDraft(sanitizedFileList[0].path, msgViewType) + + const path = await writeTempFileFromFile(sanitizedFileList[0]) + await addFileToDraft(path, msgViewType) + await runtime.removeTempFile(path) return } @@ -139,13 +168,20 @@ export default function MessageListAndComposer({ accountId, chat }: Props) { openDialog(ConfirmSendingFiles, { sanitizedFileList, chatName: chat.name, - onClick: (isConfirmed: boolean) => { + onClick: async (isConfirmed: boolean) => { if (!isConfirmed) { return } for (const file of sanitizedFileList) { - sendMessage(accountId, chat.id, { file: file.path, viewtype: 'File' }) + const path = await writeTempFileFromFile(file) + sendMessage(accountId, chat.id, { + file: path, + viewtype: 'File', + }).then(() => { + // start sending other files, don't wait until last file is sent + runtime.removeTempFile(path) + }) } }, }) diff --git a/src/renderer/components/message/MessageMarkdown.tsx b/packages/frontend/src/components/message/MessageMarkdown.tsx similarity index 99% rename from src/renderer/components/message/MessageMarkdown.tsx rename to packages/frontend/src/components/message/MessageMarkdown.tsx index a364e6ec9a..582b6223a3 100644 --- a/src/renderer/components/message/MessageMarkdown.tsx +++ b/packages/frontend/src/components/message/MessageMarkdown.tsx @@ -6,7 +6,7 @@ import { } from '@deltachat/message_parser_wasm/message_parser_wasm' import { LabeledLink, Link } from './Link' -import { getLogger } from '../../../shared/logger' +import { getLogger } from '../../../../shared/logger' import { ActionEmitter, KeybindAction } from '../../keybindings' import { BackendRemote } from '../../backend-com' import { selectedAccountId } from '../../ScreenController' diff --git a/src/renderer/components/message/MessageMetaData.tsx b/packages/frontend/src/components/message/MessageMetaData.tsx similarity index 97% rename from src/renderer/components/message/MessageMetaData.tsx rename to packages/frontend/src/components/message/MessageMetaData.tsx index a5b48c8266..c06ffbbfbc 100644 --- a/src/renderer/components/message/MessageMetaData.tsx +++ b/packages/frontend/src/components/message/MessageMetaData.tsx @@ -4,7 +4,7 @@ import { T } from '@deltachat/jsonrpc-client' import Timestamp from '../conversations/Timestamp' import { isImage, isVideo } from '../attachment/Attachment' -import { msgStatus } from '../../../shared/shared-types' +import { msgStatus } from '../../types-app' import useTranslationFunction from '../../hooks/useTranslationFunction' type Props = { diff --git a/src/renderer/components/message/MessageWrapper.tsx b/packages/frontend/src/components/message/MessageWrapper.tsx similarity index 97% rename from src/renderer/components/message/MessageWrapper.tsx rename to packages/frontend/src/components/message/MessageWrapper.tsx index ba6a0b360f..d578035982 100644 --- a/src/renderer/components/message/MessageWrapper.tsx +++ b/packages/frontend/src/components/message/MessageWrapper.tsx @@ -3,7 +3,7 @@ import { C } from '@deltachat/jsonrpc-client' import Message from './Message' import { ConversationType } from './MessageList' -import { getLogger } from '../../../shared/logger' +import { getLogger } from '../../../../shared/logger' import type { T } from '@deltachat/jsonrpc-client' diff --git a/src/renderer/components/message/VCard.tsx b/packages/frontend/src/components/message/VCard.tsx similarity index 100% rename from src/renderer/components/message/VCard.tsx rename to packages/frontend/src/components/message/VCard.tsx diff --git a/src/renderer/components/message/messageFunctions.ts b/packages/frontend/src/components/message/messageFunctions.ts similarity index 97% rename from src/renderer/components/message/messageFunctions.ts rename to packages/frontend/src/components/message/messageFunctions.ts index d8eb04b1b2..d8ece5a9b1 100644 --- a/src/renderer/components/message/messageFunctions.ts +++ b/packages/frontend/src/components/message/messageFunctions.ts @@ -1,7 +1,7 @@ import moment from 'moment' -import { getLogger } from '../../../shared/logger' -import { runtime } from '../../runtime' +import { getLogger } from '../../../../shared/logger' +import { runtime } from '@deltachat-desktop/runtime-interface' import { BackendRemote, Type } from '../../backend-com' import { selectedAccountId } from '../../ScreenController' import { internalOpenWebxdc } from '../../system-integration/webxdc' diff --git a/src/renderer/components/message/styles.module.scss b/packages/frontend/src/components/message/styles.module.scss similarity index 100% rename from src/renderer/components/message/styles.module.scss rename to packages/frontend/src/components/message/styles.module.scss diff --git a/src/renderer/components/screens/AccountDeletionScreen/AccountDeletionScreen.tsx b/packages/frontend/src/components/screens/AccountDeletionScreen/AccountDeletionScreen.tsx similarity index 98% rename from src/renderer/components/screens/AccountDeletionScreen/AccountDeletionScreen.tsx rename to packages/frontend/src/components/screens/AccountDeletionScreen/AccountDeletionScreen.tsx index 066bb9ac2f..3eff924eb3 100644 --- a/src/renderer/components/screens/AccountDeletionScreen/AccountDeletionScreen.tsx +++ b/packages/frontend/src/components/screens/AccountDeletionScreen/AccountDeletionScreen.tsx @@ -16,7 +16,7 @@ import { T } from '@deltachat/jsonrpc-client' import { BackendRemote } from '../../../backend-com' import { Screens } from '../../../ScreenController' import { avatarInitial } from '../../Avatar' -import { getLogger } from '../../../../shared/logger' +import { getLogger } from '../../../../../shared/logger' import ImageBackdrop from '../../ImageBackdrop' const log = getLogger('AccountDeletionScreen') diff --git a/src/renderer/components/screens/AccountDeletionScreen/styles.module.scss b/packages/frontend/src/components/screens/AccountDeletionScreen/styles.module.scss similarity index 100% rename from src/renderer/components/screens/AccountDeletionScreen/styles.module.scss rename to packages/frontend/src/components/screens/AccountDeletionScreen/styles.module.scss diff --git a/src/renderer/components/screens/AccountSetupScreen.tsx b/packages/frontend/src/components/screens/AccountSetupScreen.tsx similarity index 98% rename from src/renderer/components/screens/AccountSetupScreen.tsx rename to packages/frontend/src/components/screens/AccountSetupScreen.tsx index 5ebf751b80..ec7f9bfb36 100644 --- a/src/renderer/components/screens/AccountSetupScreen.tsx +++ b/packages/frontend/src/components/screens/AccountSetupScreen.tsx @@ -1,6 +1,6 @@ import React, { useState, useEffect, useCallback } from 'react' -import { Credentials } from '../../../shared/shared-types' +import { Credentials } from '../../types-app' import ImageBackdrop from '../ImageBackdrop' import LoginForm, { defaultCredentials, diff --git a/src/renderer/components/screens/CrashScreen.tsx b/packages/frontend/src/components/screens/CrashScreen.tsx similarity index 91% rename from src/renderer/components/screens/CrashScreen.tsx rename to packages/frontend/src/components/screens/CrashScreen.tsx index 33c3226371..e9e5143228 100644 --- a/src/renderer/components/screens/CrashScreen.tsx +++ b/packages/frontend/src/components/screens/CrashScreen.tsx @@ -1,8 +1,7 @@ import React from 'react' -import { runtime } from '../../runtime' -import { VERSION, GIT_REF } from '../../../shared/build-info' -import { getLogger } from '../../../shared/logger' +import { runtime } from '@deltachat-desktop/runtime-interface' +import { getLogger } from '../../../../shared/logger' import { DialogContext } from '../../contexts/DialogContext' const log = getLogger('renderer/react-crashhandler') @@ -34,6 +33,7 @@ export class CrashScreen extends React.Component { render() { if (this.state.hasError) { + const { VERSION, GIT_REF } = runtime.getRuntimeInfo().buildInfo return (

Ooops something crashed

diff --git a/src/renderer/components/screens/MainScreen.tsx b/packages/frontend/src/components/screens/MainScreen.tsx similarity index 100% rename from src/renderer/components/screens/MainScreen.tsx rename to packages/frontend/src/components/screens/MainScreen.tsx diff --git a/src/renderer/components/screens/NoAccountSelectedScreen/NoAccountSelectedScreen.tsx b/packages/frontend/src/components/screens/NoAccountSelectedScreen/NoAccountSelectedScreen.tsx similarity index 100% rename from src/renderer/components/screens/NoAccountSelectedScreen/NoAccountSelectedScreen.tsx rename to packages/frontend/src/components/screens/NoAccountSelectedScreen/NoAccountSelectedScreen.tsx diff --git a/src/renderer/components/screens/NoAccountSelectedScreen/styles.module.scss b/packages/frontend/src/components/screens/NoAccountSelectedScreen/styles.module.scss similarity index 84% rename from src/renderer/components/screens/NoAccountSelectedScreen/styles.module.scss rename to packages/frontend/src/components/screens/NoAccountSelectedScreen/styles.module.scss index cab0d3e217..b12be217a1 100644 --- a/src/renderer/components/screens/NoAccountSelectedScreen/styles.module.scss +++ b/packages/frontend/src/components/screens/NoAccountSelectedScreen/styles.module.scss @@ -4,7 +4,7 @@ .background { background-size: cover; - background-image: url('../images/backgrounds/petito-moreno.webp'); + background-image: url('./images/backgrounds/petito-moreno.webp'); height: 100vh; margin-top: 0px; diff --git a/src/renderer/components/screens/RecoverableCrashScreen.tsx b/packages/frontend/src/components/screens/RecoverableCrashScreen.tsx similarity index 93% rename from src/renderer/components/screens/RecoverableCrashScreen.tsx rename to packages/frontend/src/components/screens/RecoverableCrashScreen.tsx index f34be2209c..28a8568003 100644 --- a/src/renderer/components/screens/RecoverableCrashScreen.tsx +++ b/packages/frontend/src/components/screens/RecoverableCrashScreen.tsx @@ -1,8 +1,7 @@ import React from 'react' -import { runtime } from '../../runtime' -import { VERSION, GIT_REF } from '../../../shared/build-info' -import { getLogger } from '../../../shared/logger' +import { runtime } from '@deltachat-desktop/runtime-interface' +import { getLogger } from '../../../../shared/logger' import { DialogContext } from '../../contexts/DialogContext' const log = getLogger('renderer/react-crashhandler') @@ -57,6 +56,7 @@ export class RecoverableCrashScreen extends React.Component<{ this.state.hasError && this.state.old_error_reset_key === this.props.reset_on_change_key ) { + const { VERSION, GIT_REF } = runtime.getRuntimeInfo().buildInfo return (
{this.props.reset_on_change_key}:{this.state.timestamp} diff --git a/src/renderer/components/screens/WelcomeScreen/AdditionalActionInfo.tsx b/packages/frontend/src/components/screens/WelcomeScreen/AdditionalActionInfo.tsx similarity index 100% rename from src/renderer/components/screens/WelcomeScreen/AdditionalActionInfo.tsx rename to packages/frontend/src/components/screens/WelcomeScreen/AdditionalActionInfo.tsx diff --git a/src/renderer/components/screens/WelcomeScreen/AlternativeSetupsDialog.tsx b/packages/frontend/src/components/screens/WelcomeScreen/AlternativeSetupsDialog.tsx similarity index 97% rename from src/renderer/components/screens/WelcomeScreen/AlternativeSetupsDialog.tsx rename to packages/frontend/src/components/screens/WelcomeScreen/AlternativeSetupsDialog.tsx index cac23f4874..5e2308de5f 100644 --- a/src/renderer/components/screens/WelcomeScreen/AlternativeSetupsDialog.tsx +++ b/packages/frontend/src/components/screens/WelcomeScreen/AlternativeSetupsDialog.tsx @@ -11,7 +11,7 @@ import { LastUsedSlot, rememberLastUsedPath, } from '../../../utils/lastUsedPaths' -import { runtime } from '../../../runtime' +import { runtime } from '@deltachat-desktop/runtime-interface' import styles from './styles.module.scss' diff --git a/src/renderer/components/screens/WelcomeScreen/ImportBackupProgressDialog.tsx b/packages/frontend/src/components/screens/WelcomeScreen/ImportBackupProgressDialog.tsx similarity index 97% rename from src/renderer/components/screens/WelcomeScreen/ImportBackupProgressDialog.tsx rename to packages/frontend/src/components/screens/WelcomeScreen/ImportBackupProgressDialog.tsx index ca8f4e51da..2249b86db8 100644 --- a/src/renderer/components/screens/WelcomeScreen/ImportBackupProgressDialog.tsx +++ b/packages/frontend/src/components/screens/WelcomeScreen/ImportBackupProgressDialog.tsx @@ -5,7 +5,7 @@ import useTranslationFunction from '../../../hooks/useTranslationFunction' import { BackendRemote } from '../../../backend-com' import { DeltaProgressBar } from '../../Login-Styles' import { DialogBody, DialogContent, DialogWithHeader } from '../../Dialog' -import { getLogger } from '../../../../shared/logger' +import { getLogger } from '../../../../../shared/logger' import { selectedAccountId } from '../../../ScreenController' import type { DcEventType } from '@deltachat/jsonrpc-client' diff --git a/src/renderer/components/screens/WelcomeScreen/InstantOnboardingScreen.tsx b/packages/frontend/src/components/screens/WelcomeScreen/InstantOnboardingScreen.tsx similarity index 100% rename from src/renderer/components/screens/WelcomeScreen/InstantOnboardingScreen.tsx rename to packages/frontend/src/components/screens/WelcomeScreen/InstantOnboardingScreen.tsx diff --git a/src/renderer/components/screens/WelcomeScreen/OnboardingScreen.tsx b/packages/frontend/src/components/screens/WelcomeScreen/OnboardingScreen.tsx similarity index 96% rename from src/renderer/components/screens/WelcomeScreen/OnboardingScreen.tsx rename to packages/frontend/src/components/screens/WelcomeScreen/OnboardingScreen.tsx index b477530cb0..06259187bf 100644 --- a/src/renderer/components/screens/WelcomeScreen/OnboardingScreen.tsx +++ b/packages/frontend/src/components/screens/WelcomeScreen/OnboardingScreen.tsx @@ -7,7 +7,7 @@ import useDialog from '../../../hooks/dialog/useDialog' import useTranslationFunction from '../../../hooks/useTranslationFunction' import { BackendRemote, EffectfulBackendActions } from '../../../backend-com' import { DialogBody, DialogContent, DialogHeader } from '../../Dialog' -import { getLogger } from '../../../../shared/logger' +import { getLogger } from '../../../../../shared/logger' import styles from './styles.module.scss' @@ -71,7 +71,7 @@ export default function OnboardingScreen(props: Props) {

{tx('welcome_chat_over_email')} diff --git a/src/renderer/components/screens/WelcomeScreen/UseOtherServerDialog.tsx b/packages/frontend/src/components/screens/WelcomeScreen/UseOtherServerDialog.tsx similarity index 97% rename from src/renderer/components/screens/WelcomeScreen/UseOtherServerDialog.tsx rename to packages/frontend/src/components/screens/WelcomeScreen/UseOtherServerDialog.tsx index ec0b83a7b1..fe515faf81 100644 --- a/src/renderer/components/screens/WelcomeScreen/UseOtherServerDialog.tsx +++ b/packages/frontend/src/components/screens/WelcomeScreen/UseOtherServerDialog.tsx @@ -7,7 +7,7 @@ import useDialog from '../../../hooks/dialog/useDialog' import useTranslationFunction from '../../../hooks/useTranslationFunction' import { ScreenContext } from '../../../contexts/ScreenContext' import { Screens } from '../../../ScreenController' -import { runtime } from '../../../runtime' +import { runtime } from '@deltachat-desktop/runtime-interface' import styles from './styles.module.scss' diff --git a/src/renderer/components/screens/WelcomeScreen/UserAgreement.tsx b/packages/frontend/src/components/screens/WelcomeScreen/UserAgreement.tsx similarity index 100% rename from src/renderer/components/screens/WelcomeScreen/UserAgreement.tsx rename to packages/frontend/src/components/screens/WelcomeScreen/UserAgreement.tsx diff --git a/src/renderer/components/screens/WelcomeScreen/chatmailInstances.ts b/packages/frontend/src/components/screens/WelcomeScreen/chatmailInstances.ts similarity index 100% rename from src/renderer/components/screens/WelcomeScreen/chatmailInstances.ts rename to packages/frontend/src/components/screens/WelcomeScreen/chatmailInstances.ts diff --git a/src/renderer/components/screens/WelcomeScreen/index.tsx b/packages/frontend/src/components/screens/WelcomeScreen/index.tsx similarity index 100% rename from src/renderer/components/screens/WelcomeScreen/index.tsx rename to packages/frontend/src/components/screens/WelcomeScreen/index.tsx diff --git a/src/renderer/components/screens/WelcomeScreen/styles.module.scss b/packages/frontend/src/components/screens/WelcomeScreen/styles.module.scss similarity index 100% rename from src/renderer/components/screens/WelcomeScreen/styles.module.scss rename to packages/frontend/src/components/screens/WelcomeScreen/styles.module.scss diff --git a/src/renderer/contexts.ts b/packages/frontend/src/contexts.ts similarity index 100% rename from src/renderer/contexts.ts rename to packages/frontend/src/contexts.ts diff --git a/src/renderer/contexts/ChatContext.tsx b/packages/frontend/src/contexts/ChatContext.tsx similarity index 100% rename from src/renderer/contexts/ChatContext.tsx rename to packages/frontend/src/contexts/ChatContext.tsx diff --git a/src/renderer/contexts/ContextMenuContext.tsx b/packages/frontend/src/contexts/ContextMenuContext.tsx similarity index 100% rename from src/renderer/contexts/ContextMenuContext.tsx rename to packages/frontend/src/contexts/ContextMenuContext.tsx diff --git a/src/renderer/contexts/DialogContext.tsx b/packages/frontend/src/contexts/DialogContext.tsx similarity index 100% rename from src/renderer/contexts/DialogContext.tsx rename to packages/frontend/src/contexts/DialogContext.tsx diff --git a/src/renderer/contexts/I18nContext.tsx b/packages/frontend/src/contexts/I18nContext.tsx similarity index 65% rename from src/renderer/contexts/I18nContext.tsx rename to packages/frontend/src/contexts/I18nContext.tsx index 0b7a2212a5..5f52da8343 100644 --- a/src/renderer/contexts/I18nContext.tsx +++ b/packages/frontend/src/contexts/I18nContext.tsx @@ -1,5 +1,5 @@ import { createContext } from 'react' -import { getMessageFunction } from '../../shared/localize' +import { getMessageFunction } from '../../../shared/localize' export const I18nContext = createContext(key => key as any) diff --git a/src/renderer/contexts/InstantOnboardingContext.tsx b/packages/frontend/src/contexts/InstantOnboardingContext.tsx similarity index 100% rename from src/renderer/contexts/InstantOnboardingContext.tsx rename to packages/frontend/src/contexts/InstantOnboardingContext.tsx diff --git a/src/renderer/contexts/KeybindingsContext.tsx b/packages/frontend/src/contexts/KeybindingsContext.tsx similarity index 100% rename from src/renderer/contexts/KeybindingsContext.tsx rename to packages/frontend/src/contexts/KeybindingsContext.tsx diff --git a/src/renderer/contexts/MessagesDisplayContext.tsx b/packages/frontend/src/contexts/MessagesDisplayContext.tsx similarity index 100% rename from src/renderer/contexts/MessagesDisplayContext.tsx rename to packages/frontend/src/contexts/MessagesDisplayContext.tsx diff --git a/src/renderer/contexts/ScreenContext.tsx b/packages/frontend/src/contexts/ScreenContext.tsx similarity index 100% rename from src/renderer/contexts/ScreenContext.tsx rename to packages/frontend/src/contexts/ScreenContext.tsx diff --git a/src/renderer/debug-tools.ts b/packages/frontend/src/debug-tools.ts similarity index 100% rename from src/renderer/debug-tools.ts rename to packages/frontend/src/debug-tools.ts diff --git a/src/renderer/deviceMessages.ts b/packages/frontend/src/deviceMessages.ts similarity index 100% rename from src/renderer/deviceMessages.ts rename to packages/frontend/src/deviceMessages.ts diff --git a/src/renderer/experimental.ts b/packages/frontend/src/experimental.ts similarity index 82% rename from src/renderer/experimental.ts rename to packages/frontend/src/experimental.ts index f37140e0aa..760cd7c016 100644 --- a/src/renderer/experimental.ts +++ b/packages/frontend/src/experimental.ts @@ -1,7 +1,7 @@ -import { getLogger } from '../shared/logger' +import { getLogger } from '../../shared/logger' import { BackendRemote } from './backend-com' import { printCallCounterResult } from './debug-tools' -import { runtime } from './runtime' +import { runtime } from '@deltachat-desktop/runtime-interface' import { selectedAccountId } from './ScreenController' const log = getLogger('renderer/experiments') @@ -20,6 +20,7 @@ only for debugging: - getContextEmitters() - printCallCounterResult() // for profiling you can track what is called how often with 'countCall(label: string)' - .rpc // only available in devmode, gives full access to jsonrpc +- .runtime // only available in devmode, gives full access to runtime `) } constructor() { @@ -67,6 +68,15 @@ only for debugging: } return BackendRemote.rpc } + + get runtime() { + if (!runtime.getRC_Config().devmode) { + throw new Error( + "you need to enable devmode to access this. This is dangerous don't continue if you don't know what you are doing." + ) + } + return runtime + } } export const exp = new Experimental() diff --git a/src/renderer/global.d.ts b/packages/frontend/src/global.d.ts similarity index 68% rename from src/renderer/global.d.ts rename to packages/frontend/src/global.d.ts index 0d061a7e13..f6739cbc98 100644 --- a/src/renderer/global.d.ts +++ b/packages/frontend/src/global.d.ts @@ -1,18 +1,10 @@ -import { getMessageFunction, LocaleData } from '../shared/localize' import { userFeedback, Screens } from './ScreenController' +import '@deltachat-desktop/shared/global.d.ts' + declare global { interface Window { - localeData: LocaleData - /** not auto updated translate, for a translate function that responds to language updates use i18nContext */ - static_translate: getMessageFunction exp: todo - electron_functions: { - // see static/preload.js, - // but when importing other things, please do it in runtime.ts - // we will move the ipcRenderer there too eventually - ipcRenderer: import('electron').IpcRenderer - } __userFeedback: (message: userFeedback | false) => void __changeScreen: (screen: Screens) => void __selectAccount: (accountId: number) => Promise diff --git a/src/renderer/hooks/chat/useChat.ts b/packages/frontend/src/hooks/chat/useChat.ts similarity index 100% rename from src/renderer/hooks/chat/useChat.ts rename to packages/frontend/src/hooks/chat/useChat.ts diff --git a/src/renderer/hooks/chat/useChatDialog.ts b/packages/frontend/src/hooks/chat/useChatDialog.ts similarity index 100% rename from src/renderer/hooks/chat/useChatDialog.ts rename to packages/frontend/src/hooks/chat/useChatDialog.ts diff --git a/src/renderer/hooks/chat/useCreateChatByContactId.ts b/packages/frontend/src/hooks/chat/useCreateChatByContactId.ts similarity index 100% rename from src/renderer/hooks/chat/useCreateChatByContactId.ts rename to packages/frontend/src/hooks/chat/useCreateChatByContactId.ts diff --git a/src/renderer/hooks/chat/useCreateChatByEmail.ts b/packages/frontend/src/hooks/chat/useCreateChatByEmail.ts similarity index 100% rename from src/renderer/hooks/chat/useCreateChatByEmail.ts rename to packages/frontend/src/hooks/chat/useCreateChatByEmail.ts diff --git a/src/renderer/hooks/chat/useCreateDraftMesssage.ts b/packages/frontend/src/hooks/chat/useCreateDraftMesssage.ts similarity index 100% rename from src/renderer/hooks/chat/useCreateDraftMesssage.ts rename to packages/frontend/src/hooks/chat/useCreateDraftMesssage.ts diff --git a/src/renderer/hooks/chat/useMessage.ts b/packages/frontend/src/hooks/chat/useMessage.ts similarity index 98% rename from src/renderer/hooks/chat/useMessage.ts rename to packages/frontend/src/hooks/chat/useMessage.ts index f8dd19c21f..f34ce804f4 100644 --- a/src/renderer/hooks/chat/useMessage.ts +++ b/packages/frontend/src/hooks/chat/useMessage.ts @@ -3,7 +3,7 @@ import { useCallback } from 'react' import useChat from './useChat' import { BackendRemote } from '../../backend-com' import { ChatView } from '../../contexts/ChatContext' -import { getLogger } from '../../../shared/logger' +import { getLogger } from '../../../../shared/logger' import type { T } from '@deltachat/jsonrpc-client' diff --git a/src/renderer/hooks/chat/usePrivateReply.ts b/packages/frontend/src/hooks/chat/usePrivateReply.ts similarity index 100% rename from src/renderer/hooks/chat/usePrivateReply.ts rename to packages/frontend/src/hooks/chat/usePrivateReply.ts diff --git a/src/renderer/hooks/chat/useSelectLastChat.ts b/packages/frontend/src/hooks/chat/useSelectLastChat.ts similarity index 100% rename from src/renderer/hooks/chat/useSelectLastChat.ts rename to packages/frontend/src/hooks/chat/useSelectLastChat.ts diff --git a/src/renderer/hooks/dialog/useAlertDialog.ts b/packages/frontend/src/hooks/dialog/useAlertDialog.ts similarity index 100% rename from src/renderer/hooks/dialog/useAlertDialog.ts rename to packages/frontend/src/hooks/dialog/useAlertDialog.ts diff --git a/src/renderer/hooks/dialog/useConfirmationDialog.ts b/packages/frontend/src/hooks/dialog/useConfirmationDialog.ts similarity index 100% rename from src/renderer/hooks/dialog/useConfirmationDialog.ts rename to packages/frontend/src/hooks/dialog/useConfirmationDialog.ts diff --git a/src/renderer/hooks/dialog/useDialog.ts b/packages/frontend/src/hooks/dialog/useDialog.ts similarity index 100% rename from src/renderer/hooks/dialog/useDialog.ts rename to packages/frontend/src/hooks/dialog/useDialog.ts diff --git a/src/renderer/hooks/dialog/useOpenViewGroupDialog.ts b/packages/frontend/src/hooks/dialog/useOpenViewGroupDialog.ts similarity index 100% rename from src/renderer/hooks/dialog/useOpenViewGroupDialog.ts rename to packages/frontend/src/hooks/dialog/useOpenViewGroupDialog.ts diff --git a/src/renderer/hooks/dialog/useOpenViewProfileDialog.ts b/packages/frontend/src/hooks/dialog/useOpenViewProfileDialog.ts similarity index 100% rename from src/renderer/hooks/dialog/useOpenViewProfileDialog.ts rename to packages/frontend/src/hooks/dialog/useOpenViewProfileDialog.ts diff --git a/src/renderer/hooks/useContextMenu.ts b/packages/frontend/src/hooks/useContextMenu.ts similarity index 100% rename from src/renderer/hooks/useContextMenu.ts rename to packages/frontend/src/hooks/useContextMenu.ts diff --git a/src/renderer/hooks/useHasChanged.ts b/packages/frontend/src/hooks/useHasChanged.ts similarity index 100% rename from src/renderer/hooks/useHasChanged.ts rename to packages/frontend/src/hooks/useHasChanged.ts diff --git a/src/renderer/hooks/useInstantOnboarding.ts b/packages/frontend/src/hooks/useInstantOnboarding.ts similarity index 99% rename from src/renderer/hooks/useInstantOnboarding.ts rename to packages/frontend/src/hooks/useInstantOnboarding.ts index d24140271a..b4a52035f3 100644 --- a/src/renderer/hooks/useInstantOnboarding.ts +++ b/packages/frontend/src/hooks/useInstantOnboarding.ts @@ -1,6 +1,6 @@ import { useCallback, useContext } from 'react' -import useDialog from '../hooks/dialog/useDialog' +import useDialog from './dialog/useDialog' import useSecureJoin from './useSecureJoin' import { BackendRemote } from '../backend-com' import { ConfigureProgressDialog } from '../components/LoginForm' diff --git a/src/renderer/hooks/useKeyBindingAction.ts b/packages/frontend/src/hooks/useKeyBindingAction.ts similarity index 100% rename from src/renderer/hooks/useKeyBindingAction.ts rename to packages/frontend/src/hooks/useKeyBindingAction.ts diff --git a/src/renderer/hooks/useOpenLinkSafely.ts b/packages/frontend/src/hooks/useOpenLinkSafely.ts similarity index 89% rename from src/renderer/hooks/useOpenLinkSafely.ts rename to packages/frontend/src/hooks/useOpenLinkSafely.ts index b18ebd8a5a..4e10205163 100644 --- a/src/renderer/hooks/useOpenLinkSafely.ts +++ b/packages/frontend/src/hooks/useOpenLinkSafely.ts @@ -2,8 +2,8 @@ import { useCallback } from 'react' import useConfirmationDialog from './dialog/useConfirmationDialog' import useOpenMailtoLink from './useOpenMailtoLink' -import useTranslationFunction from '../hooks/useTranslationFunction' -import { runtime } from '../runtime' +import useTranslationFunction from './useTranslationFunction' +import { runtime } from '@deltachat-desktop/runtime-interface' /** * Opens http, https and mailto links, offers to copy all other links. diff --git a/src/renderer/hooks/useOpenMailtoLink.ts b/packages/frontend/src/hooks/useOpenMailtoLink.ts similarity index 95% rename from src/renderer/hooks/useOpenMailtoLink.ts rename to packages/frontend/src/hooks/useOpenMailtoLink.ts index bf2308e799..a8cdc517d2 100644 --- a/src/renderer/hooks/useOpenMailtoLink.ts +++ b/packages/frontend/src/hooks/useOpenMailtoLink.ts @@ -7,8 +7,8 @@ import useCreateChatByEmail from './chat/useCreateChatByEmail' import useCreateDraftMessage from './chat/useCreateDraftMesssage' import useDialog from './dialog/useDialog' import useTranslationFunction from './useTranslationFunction' -import { getLogger } from '../../shared/logger' -import { parseMailto } from '../../shared/parse_mailto' +import { getLogger } from '../../../shared/logger' +import { parseMailto } from '../../../shared/parse_mailto' const log = getLogger('renderer/hooks/useOpenMailtoLink') diff --git a/src/renderer/hooks/usePrevious.ts b/packages/frontend/src/hooks/usePrevious.ts similarity index 100% rename from src/renderer/hooks/usePrevious.ts rename to packages/frontend/src/hooks/usePrevious.ts diff --git a/src/renderer/hooks/useProcessQr.ts b/packages/frontend/src/hooks/useProcessQr.ts similarity index 99% rename from src/renderer/hooks/useProcessQr.ts rename to packages/frontend/src/hooks/useProcessQr.ts index a92afa1c79..c75f2ffdf8 100644 --- a/src/renderer/hooks/useProcessQr.ts +++ b/packages/frontend/src/hooks/useProcessQr.ts @@ -11,7 +11,7 @@ import useTranslationFunction from './useTranslationFunction' import { BackendRemote } from '../backend-com' import { ReceiveBackupProgressDialog } from '../components/dialogs/SetupMultiDevice' import { ScreenContext } from '../contexts/ScreenContext' -import { getLogger } from '../../shared/logger' +import { getLogger } from '../../../shared/logger' import { processQr } from '../backend/qr' import type { T } from '@deltachat/jsonrpc-client' diff --git a/src/renderer/hooks/useSecureJoin.ts b/packages/frontend/src/hooks/useSecureJoin.ts similarity index 100% rename from src/renderer/hooks/useSecureJoin.ts rename to packages/frontend/src/hooks/useSecureJoin.ts diff --git a/src/renderer/hooks/useTranslationFunction.ts b/packages/frontend/src/hooks/useTranslationFunction.ts similarity index 100% rename from src/renderer/hooks/useTranslationFunction.ts rename to packages/frontend/src/hooks/useTranslationFunction.ts diff --git a/src/renderer/hooks/useVideoChat.ts b/packages/frontend/src/hooks/useVideoChat.ts similarity index 97% rename from src/renderer/hooks/useVideoChat.ts rename to packages/frontend/src/hooks/useVideoChat.ts index 9f5fc77cbe..96ef37ed82 100644 --- a/src/renderer/hooks/useVideoChat.ts +++ b/packages/frontend/src/hooks/useVideoChat.ts @@ -5,7 +5,7 @@ import useDialog from './dialog/useDialog' import useMessage from './chat/useMessage' import useOpenLinkSafely from './useOpenLinkSafely' import { BackendRemote } from '../backend-com' -import { getLogger } from '../../shared/logger' +import { getLogger } from '../../../shared/logger' const log = getLogger('hooks/useCall') diff --git a/src/renderer/keybindings.ts b/packages/frontend/src/keybindings.ts similarity index 99% rename from src/renderer/keybindings.ts rename to packages/frontend/src/keybindings.ts index a4566e23e9..b5d441c057 100644 --- a/src/renderer/keybindings.ts +++ b/packages/frontend/src/keybindings.ts @@ -1,4 +1,4 @@ -import { getLogger } from '../shared/logger' +import { getLogger } from '../../shared/logger' const log = getLogger('renderer/keybindings') diff --git a/src/renderer/main.tsx b/packages/frontend/src/main.tsx similarity index 76% rename from src/renderer/main.tsx rename to packages/frontend/src/main.tsx index e7029f7a15..85727147ee 100644 --- a/src/renderer/main.tsx +++ b/packages/frontend/src/main.tsx @@ -5,13 +5,17 @@ import initWasm from '@deltachat/message_parser_wasm' import App from './App' import initSystemIntegration from './system-integration' import { exp } from './experimental' -import { printProcessLogLevelInfo } from '../shared/logger' -import { runtime } from './runtime' +import { + getLogger, + printProcessLogLevelInfo, + setLogHandler, +} from '../../shared/logger' +import { runtime } from '@deltachat-desktop/runtime-interface' async function main() { exp.help //make sure experimental.ts is used try { - runtime.initialize() + runtime.initialize(setLogHandler, getLogger) printProcessLogLevelInfo() await initWasm('./message_parser_wasm_bg.wasm') diff --git a/src/renderer/onready.ts b/packages/frontend/src/onready.ts similarity index 100% rename from src/renderer/onready.ts rename to packages/frontend/src/onready.ts diff --git a/src/renderer/stockStrings.ts b/packages/frontend/src/stockStrings.ts similarity index 99% rename from src/renderer/stockStrings.ts rename to packages/frontend/src/stockStrings.ts index b844747587..4ec2523144 100644 --- a/src/renderer/stockStrings.ts +++ b/packages/frontend/src/stockStrings.ts @@ -1,6 +1,6 @@ import { C } from '@deltachat/jsonrpc-client' -import { getLogger } from '../shared/logger' +import { getLogger } from '../../shared/logger' import { BackendRemote } from './backend-com' const log = getLogger('renderer/stockstrings') diff --git a/src/renderer/stores/accountNotifications.ts b/packages/frontend/src/stores/accountNotifications.ts similarity index 100% rename from src/renderer/stores/accountNotifications.ts rename to packages/frontend/src/stores/accountNotifications.ts diff --git a/src/renderer/stores/chat/chat_scheduler.ts b/packages/frontend/src/stores/chat/chat_scheduler.ts similarity index 99% rename from src/renderer/stores/chat/chat_scheduler.ts rename to packages/frontend/src/stores/chat/chat_scheduler.ts index 5f65643824..7ccba30a91 100644 --- a/src/renderer/stores/chat/chat_scheduler.ts +++ b/packages/frontend/src/stores/chat/chat_scheduler.ts @@ -1,4 +1,4 @@ -import { getLogger } from '../../../shared/logger' +import { getLogger } from '../../../../shared/logger' const log = getLogger('renderer/stores/chat/scheduler') diff --git a/src/renderer/stores/chat/chat_view_reducer.ts b/packages/frontend/src/stores/chat/chat_view_reducer.ts similarity index 100% rename from src/renderer/stores/chat/chat_view_reducer.ts rename to packages/frontend/src/stores/chat/chat_view_reducer.ts diff --git a/src/renderer/stores/locations.ts b/packages/frontend/src/stores/locations.ts similarity index 100% rename from src/renderer/stores/locations.ts rename to packages/frontend/src/stores/locations.ts diff --git a/src/renderer/stores/messagelist.ts b/packages/frontend/src/stores/messagelist.ts similarity index 100% rename from src/renderer/stores/messagelist.ts rename to packages/frontend/src/stores/messagelist.ts diff --git a/src/renderer/stores/settings.ts b/packages/frontend/src/stores/settings.ts similarity index 97% rename from src/renderer/stores/settings.ts rename to packages/frontend/src/stores/settings.ts index a910576479..7217f8ea4a 100644 --- a/src/renderer/stores/settings.ts +++ b/packages/frontend/src/stores/settings.ts @@ -1,8 +1,8 @@ import { C } from '@deltachat/jsonrpc-client' -import { DesktopSettingsType, RC_Config } from '../../shared/shared-types' +import { DesktopSettingsType, RC_Config } from '../../../shared/shared-types' import { BackendRemote, Type } from '../backend-com' import { onReady } from '../onready' -import { runtime } from '../runtime' +import { runtime } from '@deltachat-desktop/runtime-interface' import { Store, useStore } from './store' import { debouncedUpdateBadgeCounter } from '../system-integration/badge-counter' diff --git a/src/renderer/stores/store.ts b/packages/frontend/src/stores/store.ts similarity index 98% rename from src/renderer/stores/store.ts rename to packages/frontend/src/stores/store.ts index 1199faed5a..6092087ec6 100644 --- a/src/renderer/stores/store.ts +++ b/packages/frontend/src/stores/store.ts @@ -1,5 +1,5 @@ import { useState, useEffect } from 'react' -import { getLogger } from '../../shared/logger' +import { getLogger } from '../../../shared/logger' export function useStore>( StoreInstance: T diff --git a/src/renderer/system-integration/badge-counter.ts b/packages/frontend/src/system-integration/badge-counter.ts similarity index 94% rename from src/renderer/system-integration/badge-counter.ts rename to packages/frontend/src/system-integration/badge-counter.ts index 3d91103ee2..9dee07b4bc 100644 --- a/src/renderer/system-integration/badge-counter.ts +++ b/packages/frontend/src/system-integration/badge-counter.ts @@ -1,6 +1,6 @@ import { debounce } from 'debounce' import { BackendRemote } from '../backend-com' -import { runtime } from '../runtime' +import { runtime } from '@deltachat-desktop/runtime-interface' import AccountNotificationStoreInstance from '../stores/accountNotifications' async function updateBadgeCounter() { diff --git a/src/renderer/system-integration/index.ts b/packages/frontend/src/system-integration/index.ts similarity index 100% rename from src/renderer/system-integration/index.ts rename to packages/frontend/src/system-integration/index.ts diff --git a/src/renderer/system-integration/notifications.ts b/packages/frontend/src/system-integration/notifications.ts similarity index 97% rename from src/renderer/system-integration/notifications.ts rename to packages/frontend/src/system-integration/notifications.ts index 70832645d8..d511a7374a 100644 --- a/src/renderer/system-integration/notifications.ts +++ b/packages/frontend/src/system-integration/notifications.ts @@ -1,8 +1,8 @@ -import { appName } from '../../shared/constants' -import { getLogger } from '../../shared/logger' +import { appName } from '../../../shared/constants' +import { getLogger } from '../../../shared/logger' import { BackendRemote } from '../backend-com' import { isImage } from '../components/attachment/Attachment' -import { runtime } from '../runtime' +import { runtime } from '@deltachat-desktop/runtime-interface' import SettingsStoreInstance from '../stores/settings' import AccountNotificationStoreInstance from '../stores/accountNotifications' diff --git a/src/renderer/system-integration/webxdc.ts b/packages/frontend/src/system-integration/webxdc.ts similarity index 95% rename from src/renderer/system-integration/webxdc.ts rename to packages/frontend/src/system-integration/webxdc.ts index db16272f85..bf38243346 100644 --- a/src/renderer/system-integration/webxdc.ts +++ b/packages/frontend/src/system-integration/webxdc.ts @@ -3,7 +3,7 @@ // and heavily uses the events import { BackendRemote } from '../backend-com' -import { runtime } from '../runtime' +import { runtime } from '@deltachat-desktop/runtime-interface' export function initWebxdc() { BackendRemote.on('WebxdcStatusUpdate', (accountId, { msgId }) => { diff --git a/packages/frontend/src/types-app.d.ts b/packages/frontend/src/types-app.d.ts new file mode 100644 index 0000000000..9033076d58 --- /dev/null +++ b/packages/frontend/src/types-app.d.ts @@ -0,0 +1,33 @@ +// moved from shared/shared-types because only used by frontend. +// TODO: find a better place than this file for those types + +export type Credentials = { + [key: string]: any + addr?: string + mail_user?: string + mail_pw?: string + mail_server?: string + mail_port?: string + mail_security?: 'automatic' | '' | 'ssl' | 'default' + imap_certificate_checks?: any + send_user?: string + send_pw?: string + send_server?: string + send_port?: string + send_security?: 'automatic' | '' | 'ssl' | 'starttls' | 'plain' + smtp_certificate_checks?: any + socks5_enabled: '1' | '0' + socks5_host: string + socks5_port: string + socks5_user: string + socks5_password: string +} + +export type msgStatus = + | 'error' + | 'sending' + | 'draft' + | 'delivered' + | 'read' + | 'sent' + | '' diff --git a/src/renderer/types.d.ts b/packages/frontend/src/types.d.ts similarity index 100% rename from src/renderer/types.d.ts rename to packages/frontend/src/types.d.ts diff --git a/packages/frontend/src/utils/getDirection.ts b/packages/frontend/src/utils/getDirection.ts new file mode 100644 index 0000000000..0d97d64808 --- /dev/null +++ b/packages/frontend/src/utils/getDirection.ts @@ -0,0 +1,6 @@ +import { C } from '@deltachat/jsonrpc-client' + +// TODO: move to frontend +export function getDirection({ fromId }: { fromId: number }) { + return fromId === C.DC_CONTACT_ID_SELF ? 'outgoing' : 'incoming' +} diff --git a/src/renderer/utils/invite.ts b/packages/frontend/src/utils/invite.ts similarity index 100% rename from src/renderer/utils/invite.ts rename to packages/frontend/src/utils/invite.ts diff --git a/src/renderer/utils/lastUsedPaths.ts b/packages/frontend/src/utils/lastUsedPaths.ts similarity index 94% rename from src/renderer/utils/lastUsedPaths.ts rename to packages/frontend/src/utils/lastUsedPaths.ts index bf1abfafbc..7e5902b6c7 100644 --- a/src/renderer/utils/lastUsedPaths.ts +++ b/packages/frontend/src/utils/lastUsedPaths.ts @@ -1,4 +1,4 @@ -import { runtime } from '../runtime' +import { runtime } from '@deltachat-desktop/runtime-interface' export const enum LastUsedSlot { Attachment = 'last_directory:attachment', diff --git a/src/renderer/utils/random.ts b/packages/frontend/src/utils/random.ts similarity index 100% rename from src/renderer/utils/random.ts rename to packages/frontend/src/utils/random.ts diff --git a/static/avoid-eval.js b/packages/frontend/static/avoid-eval.js similarity index 72% rename from static/avoid-eval.js rename to packages/frontend/static/avoid-eval.js index 8f393bdebb..e7d87c7aef 100644 --- a/static/avoid-eval.js +++ b/packages/frontend/static/avoid-eval.js @@ -1,6 +1,6 @@ -const eval = window.eval = function () { +const eval = (window.eval = function () { throw new Error(`Sorry, this app does not support window.eval().`) -} +}) try { global.eval = eval diff --git a/static/fix-missing-vars.js b/packages/frontend/static/fix-missing-vars.js similarity index 51% rename from static/fix-missing-vars.js rename to packages/frontend/static/fix-missing-vars.js index 92103c5255..8d26bdcca7 100644 --- a/static/fix-missing-vars.js +++ b/packages/frontend/static/fix-missing-vars.js @@ -1,4 +1,4 @@ -const process = {env:{}} +const process = { env: {} } const global = {} const development = process.env.NODE_ENV -sourceMapSupport.install() \ No newline at end of file +sourceMapSupport.install() diff --git a/static/main.html b/packages/frontend/static/main.html similarity index 95% rename from static/main.html rename to packages/frontend/static/main.html index 4a5d090229..523a635b18 100644 --- a/static/main.html +++ b/packages/frontend/static/main.html @@ -32,6 +32,7 @@ +