#209 implement electron-updater (#210)

* #209 implement electron-updater: enable gui to auto update if there are new builds in s3
---------

Co-authored-by: neil <neil@neils-MacBook-Pro.local>
This commit is contained in:
Neil 2023-02-21 21:03:24 +08:00 committed by GitHub
parent c3acb4a3fc
commit a1be911397
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
13 changed files with 709 additions and 467 deletions

32
.github/get-shasum-file.js vendored Executable file
View file

@ -0,0 +1,32 @@
const { createHash } = require("crypto");
const { createReadStream } = require("fs");
const file = "tea-0.0.2-arm64.dmg";
function hashFile(file, encoding = "base64") {
return new Promise((resolve, reject) => {
const hash = createHash("sha512")
hash.on("error", reject).setEncoding(encoding)
createReadStream(file, { highWaterMark: 1024 * 1024 /* better to use more memory but hash faster */ })
.on("error", reject)
.on("end", () => {
hash.end()
resolve(hash.read())
})
.pipe(hash, { end: false })
})
}
// hashFile(file)
// .then((res) => {
// console.log("res",res)
// })
async function main() {
const args = process.argv;
const filePath = args.pop();
const hash = await hashFile(filePath);
console.log(hash);
}
main();

View file

@ -103,13 +103,12 @@ jobs:
strategy:
matrix:
platform:
- os: macos-11
name: darwin+x86-64
# X86+64 is built with ARM64 also
- os: [self-hosted, macOS, ARM64]
name: darwin+aarch64
# TODO: #181 build for linux
# - os: ubuntu-latest
# name: linux+x86-64
- os: [self-hosted, macOS, ARM64]
name: darwin+aarch64
# err: Package atk was not found in the pkg-config search path.
# requires atk >= 2.18
# - os: [self-hosted, linux, ARM64]
@ -117,6 +116,12 @@ jobs:
steps:
- uses: actions/checkout@v3
- uses: teaxyz/setup@v0
- name: get gui version
id: gui-version
run: |
tea +stedolan.github.io/jq
export version=$(echo $(cat modules/desktop/package.json) | jq --raw-output .version)
echo "version=$version" >> $GITHUB_OUTPUT
- name: cache node_modules build
# TODO: cache issue in our self-hosted macos runner ESPIPE: invalid seek, read
@ -140,71 +145,197 @@ jobs:
./modules/desktop/.svelte-kit
./modules/desktop/build
./modules/desktop/dist
- run: rm -rf modules/desktop/dist || true
- name: build
if: startsWith(matrix.platform.name, 'darwin')
run: tea -ES xc dist
# run: tea -ES xc dist # temporary tea installs 19
run: tea -ES +nodejs.org@18 xc dist
env:
# PUBLISH_FOR_PULL_REQUEST: true
PUBLIC_VERSION: ${{ steps.gui-version.outputs.version }}-dev
USE_HARD_LINKS: false
CSC_FOR_PULL_REQUEST: true
CSC_LINK: ${{ secrets.GUI_APPLE_CERTIFICATE }}
CSC_KEY_PASSWORD: ${{ secrets.GUI_APPLE_CERTIFICATE_PASSWORD }}
CSC_NAME: ${{ secrets.APPLE_IDENTITY_NO_PREFIX }}
# APPLE_ID: ${{ secrets.APPLE_ID }}
# APPLE_APP_SPECIFIC_PASSWORD: ${{ secrets.APPLE_PASSWORD }}
- run: mkdir -p target
- run: cp ./modules/desktop/dist/*.zip ./target/tea.zip
- run: tar -czvf artifacts.tgz -C ./target/ .
- name: upload artifacts
uses: actions/upload-artifact@v3
with:
name: ${{ matrix.platform.name }}
path: artifacts.tgz
if-no-files-found: error
# NOTE: you might think the ff will work, it wont unless PR is properly tagged
# PUBLISH_FOR_PULL_REQUEST: true
# GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# APPLE_ID: ${{ secrets.APPLE_ID }}
# APPLE_APP_SPECIFIC_PASSWORD: ${{ secrets.APPLE_PASSWORD }}
notorize_app:
needs: [build_desktop]
# NOTE: atm notarization is only doable in gh macos-11 not in our self-hosted runner
- run: mkdir -p target
# build artifacts for publishing and notarization
- run: cp -r ./modules/desktop/dist/.icon-icns ./target/
- run: cp ./modules/desktop/dist/*.{zip,dmg,yml,blockmap} ./target/
- run: tar -czvf artifacts.tgz -C ./target/ .
- uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: us-east-1
- name: s3 artifact upload
env:
prefix: ${{ needs.changes.outputs.preview_folder }}
run: |
aws s3 cp artifacts.tgz "s3://preview.gui.tea.xyz/$prefix/artifacts.tgz"
notarize_desktop:
needs: [build_desktop, changes]
runs-on: macos-11
strategy:
matrix:
platform:
- darwin+x86-64
# no need for x86-64
- darwin+aarch64
steps:
- uses: actions/download-artifact@v3
- uses: teaxyz/setup@v0
- run: rm -rf ./*.{dmg,zip} || true
- uses: aws-actions/configure-aws-credentials@v1
with:
name: ${{ matrix.platform }}
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: us-east-1
- run: tar xzf artifacts.tgz
- name: s3 artifact download
env:
prefix: ${{ needs.changes.outputs.preview_folder }}
run: |
aws s3 cp "s3://preview.gui.tea.xyz/$prefix/artifacts.tgz" artifacts.tgz
# prepare folders
- run: mkdir dist
- run: tar xzf artifacts.tgz -C dist
- name: get .zip of arm64 and x86+64
id: app_files
working-directory: ./dist
run: |
ARM64_ZIP=$(ls | grep -Ev blockmap | grep arm64-mac.zip)
X86_ZIP=$(ls | grep -Ev blockmap | grep -Ev arm64 | grep mac.zip)
ARM64_DMG=$(ls | grep -Ev blockmap | grep arm64.dmg)
X86_DMG=$(ls | grep -Ev blockmap | grep -Ev arm64 | grep dmg)
echo zip_arm64=$ARM64_ZIP >> $GITHUB_OUTPUT
echo zip_x86=$X86_ZIP >> $GITHUB_OUTPUT
echo dmg_arm64=$ARM64_DMG >> $GITHUB_OUTPUT
echo dmg_x86=$X86_DMG >> $GITHUB_OUTPUT
# Notarize. Can take up to 10 minutes (and fail) asynchronously
- run: xcrun altool --notarize-app --username "$APPLE_ID" --password "$APPLE_PASSWORD" --primary-bundle-id "xyz.tea.gui" --file ./tea.zip
- name: notarize .app arm64
run: xcrun altool --notarize-app --username "$APPLE_ID" --password "$APPLE_PASSWORD" --primary-bundle-id "com.tea.xyz" --file dist/$ZIP_FILE || true
env:
APPLE_ID: ${{ secrets.APPLE_ID }}
APPLE_PASSWORD: ${{ secrets.APPLE_PASSWORD }}
ZIP_FILE: ${{ steps.app_files.outputs.zip_arm64 }}
- name: notarize .app x86+64
run: xcrun altool --notarize-app --username "$APPLE_ID" --password "$APPLE_PASSWORD" --primary-bundle-id "com.tea.xyz" --file dist/$ZIP_FILE || true
env:
APPLE_ID: ${{ secrets.APPLE_ID }}
APPLE_PASSWORD: ${{ secrets.APPLE_PASSWORD }}
ZIP_FILE: ${{ steps.app_files.outputs.zip_x86 }}
# prepare for DMG creation
- name: prepare installer folders
run: |
mkdir x86_installer && mkdir arm64_installer
tar xzf dist/$ZIP_FILE_X86 -C x86_installer/
tar xzf dist/$ZIP_FILE_ARM64 -C arm64_installer/
cp -r ./dist/.icon-icns x86_installer/
cp -r ./dist/.icon-icns arm64_installer/
env:
ZIP_FILE_X86: ${{ steps.app_files.outputs.zip_x86 }}
ZIP_FILE_ARM64: ${{ steps.app_files.outputs.zip_arm64 }}
- name: create x86 dmg
run: |
tea create-dmg \
--volname "Tea Installer" \
--window-pos 200 120 \
--window-size 800 400 \
--icon-size 100 \
--icon "tea.app" 200 190 \
--hide-extension "tea.app" \
--app-drop-link 600 185 \
--sandbox-safe \
"$filename" \
"$installer_folder"
env:
filename: ${{ steps.app_files.outputs.dmg_x86 }}
installer_folder: x86_installer/
- name: create arm64 dmg
run: |
tea create-dmg \
--volname "Tea Installer" \
--window-pos 200 120 \
--window-size 800 400 \
--icon-size 100 \
--icon "tea.app" 200 190 \
--hide-extension "tea.app" \
--app-drop-link 600 185 \
--sandbox-safe \
"$filename" \
"$installer_folder"
env:
filename: ${{ steps.app_files.outputs.dmg_arm64 }}
installer_folder: arm64_installer/
# finalize artifacts
- run: |
mv $x86dmg dist
mv $arm64dmg dist
env:
x86dmg: ${{ steps.app_files.outputs.dmg_x86 }}
arm64dmg: ${{ steps.app_files.outputs.dmg_arm64 }}
- run: tar -czvf dist.tgz -C dist/ .
- name: s3 artifact upload
env:
prefix: ${{ needs.changes.outputs.preview_folder }}
run: |
aws s3 cp dist.tgz "s3://preview.gui.tea.xyz/$prefix/dist.tgz"
upload:
needs: [notorize_app, changes]
needs: [notarize_desktop, changes]
runs-on: ubuntu-latest
strategy:
matrix:
platform:
- name: darwin+x86-64
id: mac_latest
# - name: linux+x86-64
# id: linux
# x86 included already in aarch64
- name: darwin+aarch64
id: mac_m1
# - name: linux+x86-64
# id: linux
# - name: linux+aarch64
# id: linux_arm64
steps:
- uses: actions/download-artifact@v3
- uses: aws-actions/configure-aws-credentials@v1
with:
name: ${{ matrix.platform.name }}
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: us-east-1
- name: s3 artifact download
env:
prefix: ${{ needs.changes.outputs.preview_folder }}
run: |
aws s3 cp "s3://preview.gui.tea.xyz/$prefix/dist.tgz" dist.tgz
- run: tar xzf artifacts.tgz
- run: mkdir dist
- run: tar xzf dist.tgz -C dist
- name: get installer filenames of arm64 and x86+64
id: app_files
working-directory: ./dist
run: |
ARM64_ZIP=$(ls | grep -Ev blockmap | grep arm64-mac.zip)
X86_ZIP=$(ls | grep -Ev blockmap | grep -Ev arm64 | grep mac.zip)
ARM64_DMG=$(ls | grep -Ev blockmap | grep arm64.dmg)
X86_DMG=$(ls | grep -Ev blockmap | grep -Ev arm64 | grep dmg)
echo zip_arm64=$ARM64_ZIP >> $GITHUB_OUTPUT
echo zip_x86=$X86_ZIP >> $GITHUB_OUTPUT
echo dmg_arm64=$ARM64_DMG >> $GITHUB_OUTPUT
echo dmg_x86=$X86_DMG >> $GITHUB_OUTPUT
- name: build platform output
id: build_platform
@ -224,11 +355,11 @@ jobs:
;;
"darwin+aarch64")
BUILD_PLATFORM="aarch64"
EXTENSION="zip"
EXTENSION="dmg"
;;
"darwin+x86-64")
BUILD_PLATFORM="x64"
EXTENSION="zip"
EXTENSION="dmg"
;;
*)
echo "Unknown platform $platform"
@ -247,12 +378,10 @@ jobs:
- name: cp package images from prod to preview bucket
env:
prefix: ${{ needs.changes.outputs.preview_folder }}
platform: ${{ steps.build_platform.outputs.build_platform }}
extension: ${{ steps.build_platform.outputs.extension }}
run: |
aws s3 cp \
"./tea.$extension" \
"s3://preview.gui.tea.xyz/$prefix/tea_$platform.$extension"
cd dist && \
aws s3 sync . \
"s3://preview.gui.tea.xyz/$prefix/"
- name: comment install for Linux
if: startsWith(matrix.platform.name, 'linux')
@ -262,7 +391,7 @@ jobs:
message: |
**installer for Linux ${{ matrix.platform.name }} is at**:
```bash
http://preview.gui.tea.xyz.s3-website-us-east-1.amazonaws.com/${{ needs.changes.outputs.preview_folder }}/tea_${{ steps.build_platform.outputs.build_platform }}.${{ steps.build_platform.outputs.extension }}
http://preview.gui.tea.xyz.s3-website-us-east-1.amazonaws.com/${{ needs.changes.outputs.preview_folder }}/${{ steps.build_platform.outputs.filename }}
```
copy-paste into a browser to download
@ -270,10 +399,21 @@ jobs:
if: startsWith(matrix.platform.name, 'darwin')
uses: mshick/add-pr-comment@v2
with:
message-id: ${{ matrix.platform.id }}-comment
message-id: darwin+aarch64-comment
message: |
**installers for MacOS ${{ matrix.platform.name }} is at**:
**installers for MacOS darwin+aarch64 is at**:
```bash
http://preview.gui.tea.xyz.s3-website-us-east-1.amazonaws.com/${{ needs.changes.outputs.preview_folder }}/tea_${{ steps.build_platform.outputs.build_platform }}.zip
http://preview.gui.tea.xyz.s3-website-us-east-1.amazonaws.com/${{ needs.changes.outputs.preview_folder }}/${{ steps.app_files.outputs.dmg_arm64 }}
```
copy-paste into a browser to download
- name: comment install for MacOS
if: startsWith(matrix.platform.name, 'darwin')
uses: mshick/add-pr-comment@v2
with:
message-id: darwin+x86-64-comment
message: |
**installers for MacOS darwin+x86-64 is at**:
```bash
http://preview.gui.tea.xyz.s3-website-us-east-1.amazonaws.com/${{ needs.changes.outputs.preview_folder }}/${{ steps.app_files.outputs.dmg_x86 }}
```
copy-paste into a browser to download

View file

@ -69,47 +69,156 @@ jobs:
./modules/desktop/build
./modules/desktop/dist
- name: get gui version
id: gui-version
run: |
tea +stedolan.github.io/jq
export version=$(echo $(cat modules/desktop/package.json) | jq --raw-output .version)
echo "version=$version" >> $GITHUB_OUTPUT
- name: build
if: startsWith(matrix.platform.name, 'darwin')
run: tea -ES xc dist
env:
PUBLIC_VERSION: ${{ steps.gui-version.outputs.version }}-main
USE_HARD_LINKS: false
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
CSC_LINK: ${{ secrets.GUI_APPLE_CERTIFICATE }}
CSC_KEY_PASSWORD: ${{ secrets.GUI_APPLE_CERTIFICATE_PASSWORD }}
CSC_NAME: ${{ secrets.APPLE_IDENTITY_NO_PREFIX }}
# APPLE_ID: ${{ secrets.APPLE_ID }}
# APPLE_APP_SPECIFIC_PASSWORD: ${{ secrets.APPLE_PASSWORD }}
- run: mkdir -p target
- run: cp ./modules/desktop/dist/*.zip ./target/tea.zip
- run: cp -r ./modules/desktop/dist/.icon-icns ./target/
- run: cp ./modules/desktop/dist/*.{zip,dmg,yml,blockmap} ./target/
- run: tar -czvf artifacts.tgz -C ./target/ .
- name: upload artifacts
uses: actions/upload-artifact@v3
- uses: aws-actions/configure-aws-credentials@v1
with:
name: ${{ matrix.platform.name }}
path: artifacts.tgz
if-no-files-found: error
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: us-east-1
- name: s3 artifact upload
env:
prefix: main
run: |
aws s3 cp artifacts.tgz "s3://preview.gui.tea.xyz/$prefix/artifacts.tgz"
notarize_desktop:
needs: [build_desktop]
needs: [build_desktop, changes]
runs-on: macos-11
strategy:
matrix:
platform:
- darwin+x86-64
# no need for x86-64
- darwin+aarch64
steps:
- uses: actions/download-artifact@v3
- uses: teaxyz/setup@v0
- uses: aws-actions/configure-aws-credentials@v1
with:
name: ${{ matrix.platform }}
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: us-east-1
- run: tar xzf artifacts.tgz
- name: s3 artifact download
env:
prefix: main
run: |
aws s3 cp "s3://preview.gui.tea.xyz/$prefix/artifacts.tgz" artifacts.tgz
# prepare folders
- run: mkdir dist
- run: tar xzf artifacts.tgz -C dist
# Notarize. Can take up to 10 minutes (and fail) asynchronously
- run: xcrun altool --notarize-app --username "$APPLE_ID" --password "$APPLE_PASSWORD" --primary-bundle-id "com.tea.xyz" --file ./tea.zip
- name: get .zip of arm64 and x86+64
id: app_files
working-directory: ./dist
run: |
ARM64_ZIP=$(ls | grep -Ev blockmap | grep arm64-mac.zip)
X86_ZIP=$(ls | grep -Ev blockmap | grep -Ev arm64 | grep mac.zip)
ARM64_DMG=$(ls | grep -Ev blockmap | grep arm64.dmg)
X86_DMG=$(ls | grep -Ev blockmap | grep -Ev arm64 | grep dmg)
echo zip_arm64=$ARM64_ZIP >> $GITHUB_OUTPUT
echo zip_x86=$X86_ZIP >> $GITHUB_OUTPUT
echo dmg_arm64=$ARM64_DMG >> $GITHUB_OUTPUT
echo dmg_x86=$X86_DMG >> $GITHUB_OUTPUT
# Notarize. Can take up to 10 minutes (and fail) asynchronously
- name: notarize .app arm64
run: xcrun altool --notarize-app --username "$APPLE_ID" --password "$APPLE_PASSWORD" --primary-bundle-id "com.tea.xyz" --file dist/$ZIP_FILE || true
env:
APPLE_ID: ${{ secrets.APPLE_ID }}
APPLE_PASSWORD: ${{ secrets.APPLE_PASSWORD }}
ZIP_FILE: ${{ steps.app_files.outputs.zip_arm64 }}
- name: notarize .app x86+64
run: xcrun altool --notarize-app --username "$APPLE_ID" --password "$APPLE_PASSWORD" --primary-bundle-id "com.tea.xyz" --file dist/$ZIP_FILE || true
env:
APPLE_ID: ${{ secrets.APPLE_ID }}
APPLE_PASSWORD: ${{ secrets.APPLE_PASSWORD }}
ZIP_FILE: ${{ steps.app_files.outputs.zip_x86 }}
# prepare for DMG creation
- name: prepare installer folders
run: |
mkdir x86_installer && mkdir arm64_installer
tar xzf dist/$ZIP_FILE_X86 -C x86_installer/
tar xzf dist/$ZIP_FILE_ARM64 -C arm64_installer/
cp -r ./dist/.icon-icns x86_installer/
cp -r ./dist/.icon-icns arm64_installer/
env:
ZIP_FILE_X86: ${{ steps.app_files.outputs.zip_x86 }}
ZIP_FILE_ARM64: ${{ steps.app_files.outputs.zip_arm64 }}
- name: create x86 dmg
run: |
tea create-dmg \
--volname "Tea Installer" \
--window-pos 200 120 \
--window-size 800 400 \
--icon-size 100 \
--icon "tea.app" 200 190 \
--hide-extension "tea.app" \
--app-drop-link 600 185 \
--sandbox-safe \
"$filename" \
"$installer_folder"
env:
filename: ${{ steps.app_files.outputs.dmg_x86 }}
installer_folder: x86_installer/
- name: create arm64 dmg
run: |
tea create-dmg \
--volname "Tea Installer" \
--window-pos 200 120 \
--window-size 800 400 \
--icon-size 100 \
--icon "tea.app" 200 190 \
--hide-extension "tea.app" \
--app-drop-link 600 185 \
--sandbox-safe \
"$filename" \
"$installer_folder"
env:
filename: ${{ steps.app_files.outputs.dmg_arm64 }}
installer_folder: arm64_installer/
# finalize artifacts
- run: |
mv $x86dmg dist
mv $arm64dmg dist
env:
x86dmg: ${{ steps.app_files.outputs.dmg_x86 }}
arm64dmg: ${{ steps.app_files.outputs.dmg_arm64 }}
- run: tar -czvf dist.tgz -C dist/ .
- name: s3 artifact upload
env:
prefix: main
run: |
aws s3 cp dist.tgz "s3://preview.gui.tea.xyz/$prefix/dist.tgz"
upload:
needs: [build_desktop, notarize_desktop]
@ -117,27 +226,40 @@ jobs:
strategy:
matrix:
platform:
- darwin+x86-64
# - linux+x86-64
- darwin+aarch64
# - linux+aarch64
steps:
- uses: actions/checkout@v3
- uses: actions/download-artifact@v3
with:
name: ${{ matrix.platform }}
- run: tar xzf artifacts.tgz
- name: Get current unix ts - seconds
id: date
run: echo "unix_seconds=$(date +'%s')" >> $GITHUB_OUTPUT
- uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: us-east-1
- name: s3 artifact download
env:
prefix: main
run: |
aws s3 cp "s3://preview.gui.tea.xyz/$prefix/dist.tgz" dist.tgz
- run: mkdir dist
- run: tar xzf dist.tgz -C dist
- name: get installer filenames of arm64 and x86+64
id: app_files
working-directory: ./dist
run: |
ARM64_ZIP=$(ls | grep -Ev blockmap | grep arm64-mac.zip)
X86_ZIP=$(ls | grep -Ev blockmap | grep -Ev arm64 | grep mac.zip)
ARM64_DMG=$(ls | grep -Ev blockmap | grep arm64.dmg)
X86_DMG=$(ls | grep -Ev blockmap | grep -Ev arm64 | grep dmg)
echo zip_arm64=$ARM64_ZIP >> $GITHUB_OUTPUT
echo zip_x86=$X86_ZIP >> $GITHUB_OUTPUT
echo dmg_arm64=$ARM64_DMG >> $GITHUB_OUTPUT
echo dmg_x86=$X86_DMG >> $GITHUB_OUTPUT
- name: Get current unix ts - seconds
id: date
run: echo "unix_seconds=$(date +'%s')" >> $GITHUB_OUTPUT
- name: build platform output
id: build_platform
@ -157,11 +279,11 @@ jobs:
;;
"darwin+aarch64")
BUILD_PLATFORM="aarch64"
EXTENSION="zip"
EXTENSION="dmg"
;;
"darwin+x86-64")
BUILD_PLATFORM="x64"
EXTENSION="zip"
EXTENSION="dmg"
;;
*)
echo "Unknown platform $platform"
@ -173,31 +295,32 @@ jobs:
- name: cp package images from prod to gui bucket
env:
platform: ${{ steps.build_platform.outputs.build_platform }}
build_platform: ${{ matrix.platform }}
extension: ${{steps.build_platform.outputs.extension}}
arm64: ${{ steps.app_files.outputs.dmg_arm64 }}
x86: ${{ steps.app_files.outputs.dmg_x86 }}
run: |
aws s3 cp \
"./tea.$extension" \
"s3://preview.gui.tea.xyz/release/tea_${{ steps.date.outputs.unix_seconds }}_$platform.$extension"
- name: cp package to s3
env:
platform: ${{ steps.build_platform.outputs.build_platform }}
build_platform: ${{ matrix.platform }}
extension: ${{ steps.build_platform.outputs.extension }}
run: |
aws s3 cp "./tea.$extension" \
"s3://preview.gui.tea.xyz/release/tea_${{ steps.date.outputs.unix_seconds }}_$platform.$extension"
"dist/$arm64" \
"s3://preview.gui.tea.xyz/main/$arm64"
aws s3 cp \
"dist/$x86" \
"s3://preview.gui.tea.xyz/main/$x86"
- uses: actions/setup-node@v3
with:
node-version: 18
- name: Slack Notification
- name: Slack Notification ARM64
run: ./.github/notify-slack.js
env:
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }}
PLATFORM: ${{ matrix.platform }}
EXT: ${{ steps.build_platform.outputs.extension }}
DOWNLOAD_URL: http://preview.gui.tea.xyz.s3-website-us-east-1.amazonaws.com/release/tea_${{ steps.date.outputs.unix_seconds }}_${{ steps.build_platform.outputs.build_platform }}.${{ steps.build_platform.outputs.extension }}
PLATFORM: darwin-aarch64
EXT: dmg
DOWNLOAD_URL: http://preview.gui.tea.xyz.s3-website-us-east-1.amazonaws.com/main/${{ steps.app_files.outputs.dmg_arm64 }}
- name: Slack Notification X86
run: ./.github/notify-slack.js
env:
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }}
PLATFORM: darwin-x86+64
EXT: dmg
DOWNLOAD_URL: http://preview.gui.tea.xyz.s3-website-us-east-1.amazonaws.com/main/${{ steps.app_files.outputs.dmg_x86 }}

View file

@ -9,10 +9,9 @@ jobs:
strategy:
matrix:
platform:
- os: macos-11
name: darwin+x86-64
# - os: ubuntu-latest
# name: linux+x86-64
# no need for macos-11 arm will build for both
- os: [self-hosted, macOS, ARM64]
name: darwin+aarch64
# - os: [self-hosted, linux, ARM64]
@ -21,18 +20,37 @@ jobs:
steps:
- uses: actions/checkout@v3
- uses: teaxyz/setup@v0
- name: get gui version
id: gui-version
run: |
tea +stedolan.github.io/jq
export version=$(echo $(cat modules/desktop/package.json) | jq --raw-output .version)
echo "version=$version" >> $GITHUB_OUTPUT
- name: build
if: startsWith(matrix.platform.name, 'darwin')
run: tea -ES xc dist
run: tea -ES +nodejs.org@18 xc dist
env:
# PUBLISH_FOR_PULL_REQUEST: true
PUBLIC_VERSION: ${{ steps.gui-version.outputs.version }}
USE_HARD_LINKS: false
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
CSC_LINK: ${{ secrets.GUI_APPLE_CERTIFICATE }}
CSC_KEY_PASSWORD: ${{ secrets.GUI_APPLE_CERTIFICATE_PASSWORD }}
CSC_NAME: ${{ secrets.APPLE_IDENTITY_NO_PREFIX }}
# notarization doesnt work
# APPLE_ID: ${{ secrets.APPLE_ID }}
# APPLE_APP_SPECIFIC_PASSWORD: ${{ secrets.APPLE_PASSWORD }}
# AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
# AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
# AWS_REGION: us-east-1
# build artifacts for publishing and notarization
- run: mkdir -p target
- run: cp ./modules/desktop/dist/*.zip ./target/tea.zip
- run: cp -r ./modules/desktop/dist/.icon-icns ./target/
- run: cp ./modules/desktop/dist/*.{zip,dmg,yml,blockmap} ./target/
- run: tar -czvf artifacts.tgz -C ./target/ .
- name: upload artifacts
uses: actions/upload-artifact@v3
with:
@ -46,20 +64,106 @@ jobs:
strategy:
matrix:
platform:
- darwin+x86-64
# no need for x86-64
- darwin+aarch64
steps:
- uses: teaxyz/setup@v0
- uses: actions/download-artifact@v3
with:
name: ${{ matrix.platform }}
- run: tar xzf artifacts.tgz
# prepare folders
- run: mkdir dist
- run: tar xzf artifacts.tgz -C dist
- name: get .zip of arm64 and x86+64
id: app_files
working-directory: ./dist
run: |
ARM64_ZIP=$(ls | grep -Ev blockmap | grep arm64-mac.zip)
X86_ZIP=$(ls | grep -Ev blockmap | grep -Ev arm64 | grep mac.zip)
ARM64_DMG=$(ls | grep -Ev blockmap | grep arm64.dmg)
X86_DMG=$(ls | grep -Ev blockmap | grep -Ev arm64 | grep dmg)
echo zip_arm64=$ARM64_ZIP >> $GITHUB_OUTPUT
echo zip_x86=$X86_ZIP >> $GITHUB_OUTPUT
echo dmg_arm64=$ARM64_DMG >> $GITHUB_OUTPUT
echo dmg_x86=$X86_DMG >> $GITHUB_OUTPUT
# Notarize. Can take up to 10 minutes (and fail) asynchronously
- run: xcrun altool --notarize-app --username "$APPLE_ID" --password "$APPLE_PASSWORD" --primary-bundle-id "com.tea.xyz" --file ./tea.zip
- name: notarize .app arm64
run: xcrun altool --notarize-app --username "$APPLE_ID" --password "$APPLE_PASSWORD" --primary-bundle-id "com.tea.xyz" --file dist/$ZIP_FILE
env:
APPLE_ID: ${{ secrets.APPLE_ID }}
APPLE_PASSWORD: ${{ secrets.APPLE_PASSWORD }}
ZIP_FILE: ${{ steps.app_files.outputs.zip_arm64 }}
- name: notarize .app x86+64
run: xcrun altool --notarize-app --username "$APPLE_ID" --password "$APPLE_PASSWORD" --primary-bundle-id "com.tea.xyz" --file dist/$ZIP_FILE
env:
APPLE_ID: ${{ secrets.APPLE_ID }}
APPLE_PASSWORD: ${{ secrets.APPLE_PASSWORD }}
ZIP_FILE: ${{ steps.app_files.outputs.zip_x86 }}
# prepare for DMG creation
- run: |
mkdir x86_installer && mkdir arm64_installer
tar xzf dist/$ZIP_FILE_X86 -C x86_installer/
tar xzf dist/$ZIP_FILE_ARM64 -C arm64_installer/
cp -r ./dist/.icon-icns x86_installer/
cp -r ./dist/.icon-icns arm64_installer/
env:
ZIP_FILE_X86: ${{ steps.app_files.outputs.zip_x86 }}
ZIP_FILE_ARM64: ${{ steps.app_files.outputs.zip_arm64 }}
- name: create x86 dmg
run: |
tea create-dmg \
--volname "Tea Installer" \
--window-pos 200 120 \
--window-size 800 400 \
--icon-size 100 \
--icon "tea.app" 200 190 \
--hide-extension "tea.app" \
--app-drop-link 600 185 \
--sandbox-safe \
"$filename" \
"$installer_folder"
env:
filename: ${{ steps.app_files.outputs.dmg_x86 }}
installer_folder: x86_installer/
- name: create arm64 dmg
run: |
tea create-dmg \
--volname "Tea Installer" \
--window-pos 200 120 \
--window-size 800 400 \
--icon-size 100 \
--icon "tea.app" 200 190 \
--hide-extension "tea.app" \
--app-drop-link 600 185 \
--sandbox-safe \
"$filename" \
"$installer_folder"
env:
filename: ${{ steps.app_files.outputs.dmg_arm64 }}
installer_folder: arm64_installer/
# finalize artifacts
- run: |
mv $x86dmg dist
mv $arm64dmg dist
env:
x86dmg: ${{ steps.app_files.outputs.dmg_x86 }}
arm64dmg: ${{ steps.app_files.outputs.dmg_arm64 }}
- run: tar -czvf dist.tgz -C dist/ .
- name: upload artifacts
uses: actions/upload-artifact@v3
with:
name: ${{ matrix.platform }}-dist
path: dist.tgz
if-no-files-found: error
upload:
needs: [build_desktop, notarize_desktop]
@ -67,19 +171,30 @@ jobs:
strategy:
matrix:
platform:
- darwin+x86-64
# - linux+x86-64
# no need for x86 mac
- darwin+aarch64
# - linux+aarch64
steps:
- uses: actions/checkout@v3
- uses: actions/download-artifact@v3
with:
name: ${{ matrix.platform }}
- run: tar xzf artifacts.tgz
- name: Get current unix ts - seconds
id: date
run: echo "unix_seconds=$(date +'%s')" >> $GITHUB_OUTPUT
name: ${{ matrix.platform }}-dist
- run: mkdir dist
- run: tar xzf dist.tgz -C dist
- name: get .zip of arm64 and x86+64
id: app_files
working-directory: ./dist
run: |
ARM64_ZIP=$(ls | grep -Ev blockmap | grep arm64-mac.zip)
X86_ZIP=$(ls | grep -Ev blockmap | grep -Ev arm64 | grep mac.zip)
ARM64_DMG=$(ls | grep -Ev blockmap | grep arm64.dmg)
X86_DMG=$(ls | grep -Ev blockmap | grep -Ev arm64 | grep dmg)
echo zip_arm64=$ARM64_ZIP >> $GITHUB_OUTPUT
echo zip_x86=$X86_ZIP >> $GITHUB_OUTPUT
echo dmg_arm64=$ARM64_DMG >> $GITHUB_OUTPUT
echo dmg_x86=$X86_DMG >> $GITHUB_OUTPUT
- name: build platform output
id: build_platform
@ -99,11 +214,11 @@ jobs:
;;
"darwin+aarch64")
BUILD_PLATFORM="aarch64"
EXTENSION="zip"
EXTENSION="dmg"
;;
"darwin+x86-64")
BUILD_PLATFORM="x64"
EXTENSION="zip"
EXTENSION="dmg"
;;
*)
echo "Unknown platform $platform"
@ -124,25 +239,39 @@ jobs:
id: tag
run: echo "tag=${GITHUB_REF#refs/*/}" >> $GITHUB_OUTPUT
# TODO:
# - configure correct blockmap and checksum hash on latest-mac.yml
- name: publish release
env:
platform: ${{ steps.build_platform.outputs.build_platform }}
extension: ${{ steps.build_platform.outputs.extension }}
tag: ${{ steps.tag.outputs.tag }}
run: |
aws s3 cp "./tea.$extension" \
"s3://preview.gui.tea.xyz/release/tea_gui_latest_$platform.$extension"
aws s3 cp "./tea.$extension" \
"s3://preview.gui.tea.xyz/release/tea_gui_${{ steps.tag.outputs.tag }}_$platform.$extension"
cd dist && \
aws s3 sync . \
"s3://preview.gui.tea.xyz/release/"
- uses: actions/setup-node@v3
with:
node-version: 18
- name: Slack Notification
- name: Slack Notification ARM64 Build
run: ./.github/notify-slack.js
env:
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }}
PLATFORM: ${{ matrix.platform }}
PLATFORM: darwin+aarch64
VERSION: ${{steps.tag.outputs.tag}}
EXT: "${{ steps.build_platform.outputs.extension }}"
DOWNLOAD_URL: http://preview.gui.tea.xyz.s3-website-us-east-1.amazonaws.com/release/${{ steps.app_files.outputs.dmg_arm64 }}
- name: Slack Notification X86 Build
run: ./.github/notify-slack.js
env:
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }}
PLATFORM: darwin+x86-64
VERSION: ${{steps.tag.outputs.tag}}
EXT: ${{ steps.build_platform.outputs.extension }}
DOWNLOAD_URL: http://preview.gui.tea.xyz.s3-website-us-east-1.amazonaws.com/release/tea_gui_${{steps.tag.outputs.tag}}_${{steps.build_platform.outputs.build_platform}}.${{ steps.build_platform.outputs.extension }}
DOWNLOAD_URL: http://preview.gui.tea.xyz.s3-website-us-east-1.amazonaws.com/release/${{ steps.app_files.outputs.dmg_x86 }}
- run: |
aws cloudfront create-invalidation \
--distribution-id ${{ secrets.AWS_CF_GUI_RELEASE_ID }} \
--paths '/latest-mac.yml'

View file

@ -53,7 +53,7 @@ $ AWS_PROFILE=tea/or/etc pnpm release
Refer to each package `README.md` for instructions on how to setup and
contribute to them:
* [tea/gui](./modules/gui/README.md)
* [tea/desktop](./modules/desktop/README.md)
* [tea/ui](./modules/ui/README.md)
&nbsp;
@ -88,21 +88,18 @@ pnpm dev
```sh
pnpm install
pnpm add -g vite
pnpm --filter desktop exec pnpm dist
```
# Dependencies
| Project | Version |
|---------------------|-----------|
| nodejs.org | =18.13.0 |
| pnpm.io | >=7.18.2 |
| rust-lang.org | >=1.62 |
| rust-lang.org/cargo | >=0.66 |
| xcfile.dev | >=0.0.110 |
| python.org | >=3.10 |
| Project | Version |
|-----------------------------------|-----------|
| nodejs.org | >=18.14 |
| pnpm.io | >=7.20 |
| xcfile.dev | >=0.0.110 |
| python.org | >=3.10 |
| github.com/create-dmg/create-dmg | >=1.1 |
[aws/cli]: https://aws.amazon.com/cli/

View file

@ -8,4 +8,5 @@ node_modules
!.env.example
coverage/*
dist/*
electron/dist/*
electron/dist/*
electron/package.json

View file

@ -7,7 +7,16 @@ module.exports = {
productName: "tea",
asar: false,
directories: { output: "dist" },
files: ["electron/dist/electron.cjs", { from: "build", to: "" }]
files: ["electron/dist/electron.cjs", { from: "build", to: "" }],
linux: {
icon: "./icon.png"
},
mac: {
target: {
target: "default",
arch: ["x64", "arm64"]
}
},
// TODO: if xcrun altool exists eventually in our self-hosted macos
// SOLUTION: is notarize separately in next pipeline step
// afterSign: async (params) => {
@ -38,6 +47,20 @@ module.exports = {
// console.error(error);
// }
// console.log(`Done notarizing ${appId}`);
// }
// console.log(`Done notarizing`);
// },
// publish: {
// provider: "github",
// repo: "gui",
// owner: "teaxyz",
// releaseType: "release"
// },
// this determines the configuration of the auto-update feature
publish: {
provider: "generic",
// TODO: replace this with tea branded domain: gui-dist.tea.xyz
url: "https://d2ovumu63qzbn6.cloudfront.net/"
}
};

View file

@ -7,7 +7,8 @@ import { getInstalledPackages } from "./libs/tea-dir";
import { readSessionData, writeSessionData } from "./libs/auth";
import type { Session } from "../src/libs/types";
import { installPackage, openTerminal } from "./libs/cli";
import { autoUpdater } from "electron-updater";
import * as log from "electron-log";
// try {
// //@ts-ignore only used in dev should not be packaged inprod
// /* eslint-disable */
@ -16,6 +17,8 @@ import { installPackage, openTerminal } from "./libs/cli";
// } catch (e) {
// console.error(e);
// }
autoUpdater.logger = log;
log.info("App starting...");
const serveURL = serve({ directory: "." });
const port = process.env.PORT || 3000;
@ -66,6 +69,34 @@ function createWindow() {
return mainWindow;
}
function sendStatusToWindow(text) {
log.info(text);
mainWindow?.webContents.send("message", text);
}
autoUpdater.on("checking-for-update", () => {
sendStatusToWindow("Checking for update...");
});
autoUpdater.on("update-available", (info) => {
sendStatusToWindow("Update available.");
});
autoUpdater.on("update-not-available", (info) => {
sendStatusToWindow("Update not available.");
});
autoUpdater.on("error", (err) => {
sendStatusToWindow("Error in auto-updater. " + err);
});
autoUpdater.on("download-progress", (progressObj) => {
let log_message = "Download speed: " + progressObj.bytesPerSecond;
log_message = log_message + " - Downloaded " + progressObj.percent + "%";
log_message = log_message + " (" + progressObj.transferred + "/" + progressObj.total + ")";
sendStatusToWindow(log_message);
});
autoUpdater.on("update-downloaded", (info) => {
sendStatusToWindow("Update downloaded");
});
contextMenu({
showLookUpSelection: false,
showSearchWithGoogle: false,
@ -87,6 +118,7 @@ function loadVite(port) {
}
function createMainWindow() {
autoUpdater.checkForUpdatesAndNotify();
mainWindow = createWindow();
mainWindow.once("close", () => {
mainWindow = null;

View file

@ -12,7 +12,7 @@
"dev:svelte": "vite dev",
"dev:electron": "electron electron/dist/electron.cjs",
"dev:main": "cd ./electron && vite build --config ./vite.config.js --watch",
"build:main": "cd ./electron && vite --config ./vite.config.js build --base .",
"build:main": "cp package.json electron && cd ./electron && vite --config ./vite.config.js build --base . && rm package.json",
"pack": "electron-builder --dir --config electron-builder.config.cjs",
"dist": "pnpm build && electron-builder --config electron-builder.config.cjs",
"package": "pnpm build && electron-builder --config electron-builder.config.cjs",
@ -64,7 +64,7 @@
"tailwindcss": "^3.2.4",
"tslib": "^2.3.1",
"typescript": "^4.7.4",
"vite": "^4.0.0",
"vite": "^4.1.1",
"vitest": "^0.28.3"
},
"type": "module",
@ -80,6 +80,7 @@
"electron-context-menu": "^3.6.1",
"electron-log": "^4.4.8",
"electron-serve": "^1.1.0",
"electron-updater": "^5.3.0",
"electron-vite": "^1.0.18",
"electron-window-state": "^5.0.3",
"fuse.js": "^6.6.2",
@ -97,13 +98,6 @@
"@tea/ui"
]
},
"build": {
"appId": "xyz.tea.gui",
"productName": "tea",
"linux": {
"icon": "./icon.png"
}
},
"homepage": "https://tea.xyz",
"repository": "https://github.com/teaxyz/gui.git"
}

View file

@ -1,5 +1,6 @@
<script lang="ts">
import Button from '@tea/ui/Button/Button.svelte';
import * as pub from '$env/static/public';
</script>
<footer class="font-machina relative h-auto w-full bg-black">
@ -39,7 +40,7 @@
</menu>
</section>
<section class="border-gray h-16 border border-r-0 p-4 px-16">
<section class="border-gray h-16 border border-r-0 p-4 px-16 flex justify-between">
<div class="text-gray flex gap-4 text-xs">
<a
href="https://tea.xyz/terms-of-use/"
@ -58,6 +59,11 @@
PRIVACY POLICY
</a>
</div>
{#if pub.PUBLIC_VERSION}
<div class="text-gray flex gap-4 text-xs">
<span>v{pub.PUBLIC_VERSION}</span>
</div>
{/if}
</section>
</footer>

View file

@ -44,7 +44,7 @@
"tailwindcss": "^3.2.4",
"tslib": "^2.3.1",
"typescript": "^4.7.4",
"vite": "^4.0.0",
"vite": "^4.1.1",
"vitest": "^0.27.1"
},
"type": "module",

View file

@ -48,7 +48,7 @@
"tailwindcss": "^3.2.4",
"tslib": "^2.3.1",
"typescript": "^4.7.4",
"vite": "^4.0.0"
"vite": "^4.1.1"
},
"type": "module",
"dependencies": {

View file

@ -37,6 +37,7 @@ importers:
electron-log: ^4.4.8
electron-reloader: ^1.2.3
electron-serve: ^1.1.0
electron-updater: ^5.3.0
electron-vite: ^1.0.18
electron-window-state: ^5.0.3
eslint: ^8.16.0
@ -62,7 +63,7 @@ importers:
tslib: ^2.3.1
typescript: ^4.7.4
upath: ^2.0.1
vite: ^4.0.0
vite: ^4.1.1
vitest: ^0.28.3
yaml: ^2.2.1
dependencies:
@ -77,7 +78,8 @@ importers:
electron-context-menu: 3.6.1
electron-log: 4.4.8
electron-serve: 1.1.0
electron-vite: 1.0.18_vite@4.0.4
electron-updater: 5.3.0
electron-vite: 1.0.18_vite@4.1.1
electron-window-state: 5.0.3
fuse.js: 6.6.2
lodash: 4.17.21
@ -95,7 +97,7 @@ importers:
'@sveltejs/adapter-auto': 1.0.0_@sveltejs+kit@1.0.1
'@sveltejs/adapter-node': 1.1.4_@sveltejs+kit@1.0.1
'@sveltejs/adapter-static': 1.0.0_@sveltejs+kit@1.0.1
'@sveltejs/kit': 1.0.1_svelte@3.55.1+vite@4.0.4
'@sveltejs/kit': 1.0.1_svelte@3.55.1+vite@4.1.1
'@tea/ui': link:../ui
'@testing-library/jest-dom': 5.16.5
'@testing-library/svelte': 3.2.2_svelte@3.55.1
@ -123,7 +125,7 @@ importers:
tailwindcss: 3.2.4_postcss@8.4.20
tslib: 2.4.1
typescript: 4.9.3
vite: 4.0.4
vite: 4.1.1
vitest: 0.28.3_jsdom@21.0.0
modules/gui:
@ -168,7 +170,7 @@ importers:
tslib: ^2.3.1
typescript: ^4.7.4
url-join: ^5.0.0
vite: ^4.0.0
vite: ^4.1.1
vitest: ^0.27.1
dependencies:
'@tauri-apps/api': 1.2.0
@ -188,7 +190,7 @@ importers:
'@playwright/test': 1.25.0
'@sveltejs/adapter-auto': 1.0.0_@sveltejs+kit@1.0.1
'@sveltejs/adapter-static': 1.0.0_@sveltejs+kit@1.0.1
'@sveltejs/kit': 1.0.1_svelte@3.55.0+vite@4.0.2
'@sveltejs/kit': 1.0.1_svelte@3.55.0+vite@4.1.1
'@tauri-apps/cli': 1.2.2
'@tea/ui': link:../ui
'@testing-library/jest-dom': 5.16.5
@ -212,7 +214,7 @@ importers:
tailwindcss: 3.2.4_postcss@8.4.20
tslib: 2.4.1
typescript: 4.9.3
vite: 4.0.2
vite: 4.1.1
vitest: 0.27.1_jsdom@21.0.0
modules/ui:
@ -251,7 +253,7 @@ importers:
tailwindcss: ^3.2.4
tslib: ^2.3.1
typescript: ^4.7.4
vite: ^4.0.0
vite: ^4.1.1
dependencies:
'@magidoc/plugin-svelte-prismjs': 3.0.6_prismjs@1.29.0
'@tailwindcss/line-clamp': 0.4.2_tailwindcss@3.2.4
@ -268,7 +270,7 @@ importers:
'@storybook/svelte-vite': 7.0.0-alpha.51_typescript@4.9.3
'@storybook/testing-library': 0.0.13
'@sveltejs/adapter-auto': 1.0.0_@sveltejs+kit@1.0.1
'@sveltejs/kit': 1.0.1_svelte@3.55.0+vite@4.0.2
'@sveltejs/kit': 1.0.1_svelte@3.55.0+vite@4.1.1
'@sveltejs/package': 1.0.1_ozwewin3tvouwvcwd5wmlkxtki
'@typescript-eslint/eslint-plugin': 5.43.0_wze2rj5tow7zwqpgbdx2buoy3m
'@typescript-eslint/parser': 5.43.0_e3uo4sehh4zr4i6m57mkkxxv7y
@ -288,7 +290,7 @@ importers:
tailwindcss: 3.2.4_postcss@8.4.20
tslib: 2.4.1
typescript: 4.9.3
vite: 4.0.2
vite: 4.1.1
packages:
@ -1903,29 +1905,12 @@ packages:
dev: true
optional: true
/@esbuild/android-arm/0.16.10:
resolution: {integrity: sha512-RmJjQTRrO6VwUWDrzTBLmV4OJZTarYsiepLGlF2rYTVB701hSorPywPGvP6d8HCuuRibyXa5JX4s3jN2kHEtjQ==}
engines: {node: '>=12'}
cpu: [arm]
os: [android]
requiresBuild: true
optional: true
/@esbuild/android-arm/0.16.17:
resolution: {integrity: sha512-N9x1CMXVhtWEAMS7pNNONyA14f71VPQN9Cnavj1XQh6T7bskqiLLrSca4O0Vr8Wdcga943eThxnVp3JLnBMYtw==}
engines: {node: '>=12'}
cpu: [arm]
os: [android]
requiresBuild: true
dev: false
optional: true
/@esbuild/android-arm64/0.16.10:
resolution: {integrity: sha512-47Y+NwVKTldTlDhSgJHZ/RpvBQMUDG7eKihqaF/u6g7s0ZPz4J1vy8A3rwnnUOF2CuDn7w7Gj/QcMoWz3U3SJw==}
engines: {node: '>=12'}
cpu: [arm64]
os: [android]
requiresBuild: true
optional: true
/@esbuild/android-arm64/0.16.17:
@ -1934,15 +1919,6 @@ packages:
cpu: [arm64]
os: [android]
requiresBuild: true
dev: false
optional: true
/@esbuild/android-x64/0.16.10:
resolution: {integrity: sha512-C4PfnrBMcuAcOurQzpF1tTtZz94IXO5JmICJJ3NFJRHbXXsQUg9RFG45KvydKqtFfBaFLCHpduUkUfXwIvGnRg==}
engines: {node: '>=12'}
cpu: [x64]
os: [android]
requiresBuild: true
optional: true
/@esbuild/android-x64/0.16.17:
@ -1951,15 +1927,6 @@ packages:
cpu: [x64]
os: [android]
requiresBuild: true
dev: false
optional: true
/@esbuild/darwin-arm64/0.16.10:
resolution: {integrity: sha512-bH/bpFwldyOKdi9HSLCLhhKeVgRYr9KblchwXgY2NeUHBB/BzTUHtUSBgGBmpydB1/4E37m+ggXXfSrnD7/E7g==}
engines: {node: '>=12'}
cpu: [arm64]
os: [darwin]
requiresBuild: true
optional: true
/@esbuild/darwin-arm64/0.16.17:
@ -1968,15 +1935,6 @@ packages:
cpu: [arm64]
os: [darwin]
requiresBuild: true
dev: false
optional: true
/@esbuild/darwin-x64/0.16.10:
resolution: {integrity: sha512-OXt7ijoLuy+AjDSKQWu+KdDFMBbdeaL6wtgMKtDUXKWHiAMKHan5+R1QAG6HD4+K0nnOvEJXKHeA9QhXNAjOTQ==}
engines: {node: '>=12'}
cpu: [x64]
os: [darwin]
requiresBuild: true
optional: true
/@esbuild/darwin-x64/0.16.17:
@ -1985,15 +1943,6 @@ packages:
cpu: [x64]
os: [darwin]
requiresBuild: true
dev: false
optional: true
/@esbuild/freebsd-arm64/0.16.10:
resolution: {integrity: sha512-shSQX/3GHuspE3Uxtq5kcFG/zqC+VuMnJkqV7LczO41cIe6CQaXHD3QdMLA4ziRq/m0vZo7JdterlgbmgNIAlQ==}
engines: {node: '>=12'}
cpu: [arm64]
os: [freebsd]
requiresBuild: true
optional: true
/@esbuild/freebsd-arm64/0.16.17:
@ -2002,15 +1951,6 @@ packages:
cpu: [arm64]
os: [freebsd]
requiresBuild: true
dev: false
optional: true
/@esbuild/freebsd-x64/0.16.10:
resolution: {integrity: sha512-5YVc1zdeaJGASijZmTzSO4h6uKzsQGG3pkjI6fuXvolhm3hVRhZwnHJkforaZLmzvNv5Tb7a3QL2FAVmrgySIA==}
engines: {node: '>=12'}
cpu: [x64]
os: [freebsd]
requiresBuild: true
optional: true
/@esbuild/freebsd-x64/0.16.17:
@ -2019,15 +1959,6 @@ packages:
cpu: [x64]
os: [freebsd]
requiresBuild: true
dev: false
optional: true
/@esbuild/linux-arm/0.16.10:
resolution: {integrity: sha512-c360287ZWI2miBnvIj23bPyVctgzeMT2kQKR+x94pVqIN44h3GF8VMEs1SFPH1UgyDr3yBbx3vowDS1SVhyVhA==}
engines: {node: '>=12'}
cpu: [arm]
os: [linux]
requiresBuild: true
optional: true
/@esbuild/linux-arm/0.16.17:
@ -2036,15 +1967,6 @@ packages:
cpu: [arm]
os: [linux]
requiresBuild: true
dev: false
optional: true
/@esbuild/linux-arm64/0.16.10:
resolution: {integrity: sha512-2aqeNVxIaRfPcIaMZIFoblLh588sWyCbmj1HHCCs9WmeNWm+EIN0SmvsmPvTa/TsNZFKnxTcvkX2eszTcCqIrA==}
engines: {node: '>=12'}
cpu: [arm64]
os: [linux]
requiresBuild: true
optional: true
/@esbuild/linux-arm64/0.16.17:
@ -2053,15 +1975,6 @@ packages:
cpu: [arm64]
os: [linux]
requiresBuild: true
dev: false
optional: true
/@esbuild/linux-ia32/0.16.10:
resolution: {integrity: sha512-sqMIEWeyrLGU7J5RB5fTkLRIFwsgsQ7ieWXlDLEmC2HblPYGb3AucD7inw2OrKFpRPKsec1l+lssiM3+NV5aOw==}
engines: {node: '>=12'}
cpu: [ia32]
os: [linux]
requiresBuild: true
optional: true
/@esbuild/linux-ia32/0.16.17:
@ -2070,7 +1983,6 @@ packages:
cpu: [ia32]
os: [linux]
requiresBuild: true
dev: false
optional: true
/@esbuild/linux-loong64/0.14.54:
@ -2091,29 +2003,12 @@ packages:
dev: true
optional: true
/@esbuild/linux-loong64/0.16.10:
resolution: {integrity: sha512-O7Pd5hLEtTg37NC73pfhUOGTjx/+aXu5YoSq3ahCxcN7Bcr2F47mv+kG5t840thnsEzrv0oB70+LJu3gUgchvg==}
engines: {node: '>=12'}
cpu: [loong64]
os: [linux]
requiresBuild: true
optional: true
/@esbuild/linux-loong64/0.16.17:
resolution: {integrity: sha512-dTzNnQwembNDhd654cA4QhbS9uDdXC3TKqMJjgOWsC0yNCbpzfWoXdZvp0mY7HU6nzk5E0zpRGGx3qoQg8T2DQ==}
engines: {node: '>=12'}
cpu: [loong64]
os: [linux]
requiresBuild: true
dev: false
optional: true
/@esbuild/linux-mips64el/0.16.10:
resolution: {integrity: sha512-FN8mZOH7531iPHM0kaFhAOqqNHoAb6r/YHW2ZIxNi0a85UBi2DO4Vuyn7t1p4UN8a4LoAnLOT1PqNgHkgBJgbA==}
engines: {node: '>=12'}
cpu: [mips64el]
os: [linux]
requiresBuild: true
optional: true
/@esbuild/linux-mips64el/0.16.17:
@ -2122,15 +2017,6 @@ packages:
cpu: [mips64el]
os: [linux]
requiresBuild: true
dev: false
optional: true
/@esbuild/linux-ppc64/0.16.10:
resolution: {integrity: sha512-Dg9RiqdvHOAWnOKIOTsIx8dFX9EDlY2IbPEY7YFzchrCiTZmMkD7jWA9UdZbNUygPjdmQBVPRCrLydReFlX9yg==}
engines: {node: '>=12'}
cpu: [ppc64]
os: [linux]
requiresBuild: true
optional: true
/@esbuild/linux-ppc64/0.16.17:
@ -2139,15 +2025,6 @@ packages:
cpu: [ppc64]
os: [linux]
requiresBuild: true
dev: false
optional: true
/@esbuild/linux-riscv64/0.16.10:
resolution: {integrity: sha512-XMqtpjwzbmlar0BJIxmzu/RZ7EWlfVfH68Vadrva0Wj5UKOdKvqskuev2jY2oPV3aoQUyXwnMbMrFmloO2GfAw==}
engines: {node: '>=12'}
cpu: [riscv64]
os: [linux]
requiresBuild: true
optional: true
/@esbuild/linux-riscv64/0.16.17:
@ -2156,15 +2033,6 @@ packages:
cpu: [riscv64]
os: [linux]
requiresBuild: true
dev: false
optional: true
/@esbuild/linux-s390x/0.16.10:
resolution: {integrity: sha512-fu7XtnoeRNFMx8DjK3gPWpFBDM2u5ba+FYwg27SjMJwKvJr4bDyKz5c+FLXLUSSAkMAt/UL+cUbEbra+rYtUgw==}
engines: {node: '>=12'}
cpu: [s390x]
os: [linux]
requiresBuild: true
optional: true
/@esbuild/linux-s390x/0.16.17:
@ -2173,15 +2041,6 @@ packages:
cpu: [s390x]
os: [linux]
requiresBuild: true
dev: false
optional: true
/@esbuild/linux-x64/0.16.10:
resolution: {integrity: sha512-61lcjVC/RldNNMUzQQdyCWjCxp9YLEQgIxErxU9XluX7juBdGKb0pvddS0vPNuCvotRbzijZ1pzII+26haWzbA==}
engines: {node: '>=12'}
cpu: [x64]
os: [linux]
requiresBuild: true
optional: true
/@esbuild/linux-x64/0.16.17:
@ -2190,15 +2049,6 @@ packages:
cpu: [x64]
os: [linux]
requiresBuild: true
dev: false
optional: true
/@esbuild/netbsd-x64/0.16.10:
resolution: {integrity: sha512-JeZXCX3viSA9j4HqSoygjssdqYdfHd6yCFWyfSekLbz4Ef+D2EjvsN02ZQPwYl5a5gg/ehdHgegHhlfOFP0HCA==}
engines: {node: '>=12'}
cpu: [x64]
os: [netbsd]
requiresBuild: true
optional: true
/@esbuild/netbsd-x64/0.16.17:
@ -2207,15 +2057,6 @@ packages:
cpu: [x64]
os: [netbsd]
requiresBuild: true
dev: false
optional: true
/@esbuild/openbsd-x64/0.16.10:
resolution: {integrity: sha512-3qpxQKuEVIIg8SebpXsp82OBrqjPV/OwNWmG+TnZDr3VGyChNnGMHccC1xkbxCHDQNnnXjxhMQNyHmdFJbmbRA==}
engines: {node: '>=12'}
cpu: [x64]
os: [openbsd]
requiresBuild: true
optional: true
/@esbuild/openbsd-x64/0.16.17:
@ -2224,15 +2065,6 @@ packages:
cpu: [x64]
os: [openbsd]
requiresBuild: true
dev: false
optional: true
/@esbuild/sunos-x64/0.16.10:
resolution: {integrity: sha512-z+q0xZ+et/7etz7WoMyXTHZ1rB8PMSNp/FOqURLJLOPb3GWJ2aj4oCqFCjPwEbW1rsT7JPpxeH/DwGAWk/I1Bg==}
engines: {node: '>=12'}
cpu: [x64]
os: [sunos]
requiresBuild: true
optional: true
/@esbuild/sunos-x64/0.16.17:
@ -2241,15 +2073,6 @@ packages:
cpu: [x64]
os: [sunos]
requiresBuild: true
dev: false
optional: true
/@esbuild/win32-arm64/0.16.10:
resolution: {integrity: sha512-+YYu5sbQ9npkNT9Dec+tn1F/kjg6SMgr6bfi/6FpXYZvCRfu2YFPZGb+3x8K30s8eRxFpoG4sGhiSUkr1xbHEw==}
engines: {node: '>=12'}
cpu: [arm64]
os: [win32]
requiresBuild: true
optional: true
/@esbuild/win32-arm64/0.16.17:
@ -2258,15 +2081,6 @@ packages:
cpu: [arm64]
os: [win32]
requiresBuild: true
dev: false
optional: true
/@esbuild/win32-ia32/0.16.10:
resolution: {integrity: sha512-Aw7Fupk7XNehR1ftHGYwUteyJ2q+em/aE+fVU3YMTBN2V5A7Z4aVCSV+SvCp9HIIHZavPFBpbdP3VfjQpdf6Xg==}
engines: {node: '>=12'}
cpu: [ia32]
os: [win32]
requiresBuild: true
optional: true
/@esbuild/win32-ia32/0.16.17:
@ -2275,15 +2089,6 @@ packages:
cpu: [ia32]
os: [win32]
requiresBuild: true
dev: false
optional: true
/@esbuild/win32-x64/0.16.10:
resolution: {integrity: sha512-qddWullt3sC1EIpfHvCRBq3H4g3L86DZpD6n8k2XFjFVyp01D++uNbN1hT/JRsHxTbyyemZcpwL5aRlJwc/zFw==}
engines: {node: '>=12'}
cpu: [x64]
os: [win32]
requiresBuild: true
optional: true
/@esbuild/win32-x64/0.16.17:
@ -2292,7 +2097,6 @@ packages:
cpu: [x64]
os: [win32]
requiresBuild: true
dev: false
optional: true
/@eslint/eslintrc/1.3.3:
@ -4094,7 +3898,7 @@ packages:
peerDependencies:
'@sveltejs/kit': ^1.0.0
dependencies:
'@sveltejs/kit': 1.0.1_svelte@3.55.1+vite@4.0.4
'@sveltejs/kit': 1.0.1_svelte@3.55.1+vite@4.1.1
import-meta-resolve: 2.2.0
dev: true
@ -4106,7 +3910,7 @@ packages:
'@rollup/plugin-commonjs': 24.0.1_rollup@3.7.5
'@rollup/plugin-json': 6.0.0_rollup@3.7.5
'@rollup/plugin-node-resolve': 15.0.1_rollup@3.7.5
'@sveltejs/kit': 1.0.1_svelte@3.55.1+vite@4.0.4
'@sveltejs/kit': 1.0.1_svelte@3.55.1+vite@4.1.1
rollup: 3.7.5
dev: true
@ -4115,10 +3919,10 @@ packages:
peerDependencies:
'@sveltejs/kit': ^1.0.0
dependencies:
'@sveltejs/kit': 1.0.1_svelte@3.55.1+vite@4.0.4
'@sveltejs/kit': 1.0.1_svelte@3.55.1+vite@4.1.1
dev: true
/@sveltejs/kit/1.0.1_svelte@3.55.0+vite@4.0.2:
/@sveltejs/kit/1.0.1_svelte@3.55.0+vite@4.1.1:
resolution: {integrity: sha512-C41aCaDjA7xoUdsrc/lSdU1059UdLPIRE1vEIRRynzpMujNgp82bTMHkDosb6vykH6LrLf3tT2w2/5NYQhKYGQ==}
engines: {node: ^16.14 || >=18}
hasBin: true
@ -4127,7 +3931,7 @@ packages:
svelte: ^3.54.0
vite: ^4.0.0
dependencies:
'@sveltejs/vite-plugin-svelte': 2.0.2_svelte@3.55.0+vite@4.0.2
'@sveltejs/vite-plugin-svelte': 2.0.2_svelte@3.55.0+vite@4.1.1
'@types/cookie': 0.5.1
cookie: 0.5.0
devalue: 4.2.0
@ -4141,12 +3945,12 @@ packages:
svelte: 3.55.0
tiny-glob: 0.2.9
undici: 5.14.0
vite: 4.0.2
vite: 4.1.1
transitivePeerDependencies:
- supports-color
dev: true
/@sveltejs/kit/1.0.1_svelte@3.55.1+vite@4.0.4:
/@sveltejs/kit/1.0.1_svelte@3.55.1+vite@4.1.1:
resolution: {integrity: sha512-C41aCaDjA7xoUdsrc/lSdU1059UdLPIRE1vEIRRynzpMujNgp82bTMHkDosb6vykH6LrLf3tT2w2/5NYQhKYGQ==}
engines: {node: ^16.14 || >=18}
hasBin: true
@ -4155,7 +3959,7 @@ packages:
svelte: ^3.54.0
vite: ^4.0.0
dependencies:
'@sveltejs/vite-plugin-svelte': 2.0.2_svelte@3.55.1+vite@4.0.4
'@sveltejs/vite-plugin-svelte': 2.0.2_svelte@3.55.1+vite@4.1.1
'@types/cookie': 0.5.1
cookie: 0.5.0
devalue: 4.2.0
@ -4169,7 +3973,7 @@ packages:
svelte: 3.55.1
tiny-glob: 0.2.9
undici: 5.14.0
vite: 4.0.4
vite: 4.1.1
transitivePeerDependencies:
- supports-color
dev: true
@ -4236,7 +4040,7 @@ packages:
- supports-color
dev: true
/@sveltejs/vite-plugin-svelte/2.0.2_svelte@3.55.0+vite@4.0.2:
/@sveltejs/vite-plugin-svelte/2.0.2_svelte@3.55.0+vite@4.1.1:
resolution: {integrity: sha512-xCEan0/NNpQuL0l5aS42FjwQ6wwskdxC3pW1OeFtEKNZwRg7Evro9lac9HesGP6TdFsTv2xMes5ASQVKbCacxg==}
engines: {node: ^14.18.0 || >= 16}
peerDependencies:
@ -4249,13 +4053,13 @@ packages:
magic-string: 0.27.0
svelte: 3.55.0
svelte-hmr: 0.15.1_svelte@3.55.0
vite: 4.0.2
vitefu: 0.2.4_vite@4.0.2
vite: 4.1.1
vitefu: 0.2.4_vite@4.1.1
transitivePeerDependencies:
- supports-color
dev: true
/@sveltejs/vite-plugin-svelte/2.0.2_svelte@3.55.1+vite@4.0.4:
/@sveltejs/vite-plugin-svelte/2.0.2_svelte@3.55.1+vite@4.1.1:
resolution: {integrity: sha512-xCEan0/NNpQuL0l5aS42FjwQ6wwskdxC3pW1OeFtEKNZwRg7Evro9lac9HesGP6TdFsTv2xMes5ASQVKbCacxg==}
engines: {node: ^14.18.0 || >= 16}
peerDependencies:
@ -4268,8 +4072,8 @@ packages:
magic-string: 0.27.0
svelte: 3.55.1
svelte-hmr: 0.15.1_svelte@3.55.1
vite: 4.0.4
vitefu: 0.2.4_vite@4.0.4
vite: 4.1.1
vitefu: 0.2.4_vite@4.1.1
transitivePeerDependencies:
- supports-color
dev: true
@ -4761,7 +4565,6 @@ packages:
/@types/semver/7.3.13:
resolution: {integrity: sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==}
dev: true
/@types/serve-static/1.15.0:
resolution: {integrity: sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg==}
@ -5249,7 +5052,6 @@ packages:
/argparse/2.0.1:
resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
dev: true
/aria-query/5.1.3:
resolution: {integrity: sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==}
@ -5673,7 +5475,6 @@ packages:
sax: 1.2.4
transitivePeerDependencies:
- supports-color
dev: true
/builder-util/23.6.0:
resolution: {integrity: sha512-QiQHweYsh8o+U/KNCZFSvISRnvRctb8m/2rB2I1JdByzvNKxPeFLlHFRPQRXab6aYeXc18j9LpsDLJ3sGQmWTQ==}
@ -6747,7 +6548,23 @@ packages:
/electron-to-chromium/1.4.284:
resolution: {integrity: sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==}
/electron-vite/1.0.18_vite@4.0.4:
/electron-updater/5.3.0:
resolution: {integrity: sha512-iKEr7yQBcvnQUPnSDYGSWC9t0eF2YbZWeYYYZzYxdl+HiRejXFENjYMnYjoOm2zxyD6Cr2JTHZhp9pqxiXuCOw==}
dependencies:
'@types/semver': 7.3.13
builder-util-runtime: 9.1.1
fs-extra: 10.1.0
js-yaml: 4.1.0
lazy-val: 1.0.5
lodash.escaperegexp: 4.1.2
lodash.isequal: 4.5.0
semver: 7.3.8
typed-emitter: 2.1.0
transitivePeerDependencies:
- supports-color
dev: false
/electron-vite/1.0.18_vite@4.1.1:
resolution: {integrity: sha512-oErozXFCE2YcJyFrKFfR8LKOBPFxXlaOxw/tz/xGEBNf9z+Hh6CA8xZrHKF7yVaCcOmRTw9R2cwBC4XUi4YkkA==}
engines: {node: ^14.18.0 || >=16.0.0}
hasBin: true
@ -6764,7 +6581,7 @@ packages:
esbuild: 0.16.17
magic-string: 0.27.0
picocolors: 1.0.0
vite: 4.0.4
vite: 4.1.1
transitivePeerDependencies:
- supports-color
dev: false
@ -7306,35 +7123,6 @@ packages:
esbuild-windows-arm64: 0.15.14
dev: true
/esbuild/0.16.10:
resolution: {integrity: sha512-z5dIViHoVnw2l+NCJ3zj5behdXjYvXne9gL18OOivCadXDUhyDkeSvEtLcGVAJW2fNmh33TDUpsi704XYlDodw==}
engines: {node: '>=12'}
hasBin: true
requiresBuild: true
optionalDependencies:
'@esbuild/android-arm': 0.16.10
'@esbuild/android-arm64': 0.16.10
'@esbuild/android-x64': 0.16.10
'@esbuild/darwin-arm64': 0.16.10
'@esbuild/darwin-x64': 0.16.10
'@esbuild/freebsd-arm64': 0.16.10
'@esbuild/freebsd-x64': 0.16.10
'@esbuild/linux-arm': 0.16.10
'@esbuild/linux-arm64': 0.16.10
'@esbuild/linux-ia32': 0.16.10
'@esbuild/linux-loong64': 0.16.10
'@esbuild/linux-mips64el': 0.16.10
'@esbuild/linux-ppc64': 0.16.10
'@esbuild/linux-riscv64': 0.16.10
'@esbuild/linux-s390x': 0.16.10
'@esbuild/linux-x64': 0.16.10
'@esbuild/netbsd-x64': 0.16.10
'@esbuild/openbsd-x64': 0.16.10
'@esbuild/sunos-x64': 0.16.10
'@esbuild/win32-arm64': 0.16.10
'@esbuild/win32-ia32': 0.16.10
'@esbuild/win32-x64': 0.16.10
/esbuild/0.16.17:
resolution: {integrity: sha512-G8LEkV0XzDMNwXKgM0Jwu3nY3lSTwSGY6XbxM9cr9+s0T/qSV1q1JVPBGzm3dcjhCic9+emZDmMffkwgPeOeLg==}
engines: {node: '>=12'}
@ -7363,7 +7151,6 @@ packages:
'@esbuild/win32-arm64': 0.16.17
'@esbuild/win32-ia32': 0.16.17
'@esbuild/win32-x64': 0.16.17
dev: false
/escalade/3.1.1:
resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==}
@ -8098,7 +7885,6 @@ packages:
graceful-fs: 4.2.10
jsonfile: 6.1.0
universalify: 2.0.0
dev: true
/fs-extra/8.1.0:
resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==}
@ -9259,7 +9045,6 @@ packages:
hasBin: true
dependencies:
argparse: 2.0.1
dev: true
/jscodeshift/0.13.1_@babel+preset-env@7.20.2:
resolution: {integrity: sha512-lGyiEbGOvmMRKgWk4vf+lUrCWO/8YR8sUR3FKF1Cq5fovjZDlIcw3Hu5ppLHAnEXshVffvaM0eyuY/AbOeYpnQ==}
@ -9388,7 +9173,6 @@ packages:
universalify: 2.0.0
optionalDependencies:
graceful-fs: 4.2.10
dev: true
/keyv/4.5.2:
resolution: {integrity: sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g==}
@ -9450,7 +9234,6 @@ packages:
/lazy-val/1.0.5:
resolution: {integrity: sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q==}
dev: true
/leven/3.1.0:
resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==}
@ -9509,6 +9292,14 @@ packages:
resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==}
dev: true
/lodash.escaperegexp/4.1.2:
resolution: {integrity: sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw==}
dev: false
/lodash.isequal/4.5.0:
resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==}
dev: false
/lodash.merge/4.6.2:
resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
dev: true
@ -10805,6 +10596,14 @@ packages:
picocolors: 1.0.0
source-map-js: 1.0.2
/postcss/8.4.21:
resolution: {integrity: sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==}
engines: {node: ^10 || ^12 || >=14}
dependencies:
nanoid: 3.3.4
picocolors: 1.0.0
source-map-js: 1.0.2
/prelude-ls/1.1.2:
resolution: {integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==}
engines: {node: '>= 0.8.0'}
@ -11423,12 +11222,20 @@ packages:
fsevents: 2.3.2
dev: true
/rollup/3.15.0:
resolution: {integrity: sha512-F9hrCAhnp5/zx/7HYmftvsNBkMfLfk/dXUh73hPSM2E3CRgap65orDNJbLetoiUFwSAk6iHPLvBrZ5iHYvzqsg==}
engines: {node: '>=14.18.0', npm: '>=8.0.0'}
hasBin: true
optionalDependencies:
fsevents: 2.3.2
/rollup/3.7.5:
resolution: {integrity: sha512-z0ZbqHBtS/et2EEUKMrAl2CoSdwN7ZPzL17UMiKN9RjjqHShTlv7F9J6ZJZJNREYjBh3TvBrdfjkFDIXFNeuiQ==}
engines: {node: '>=14.18.0', npm: '>=8.0.0'}
hasBin: true
optionalDependencies:
fsevents: 2.3.2
dev: true
/run-parallel/1.2.0:
resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
@ -11439,7 +11246,6 @@ packages:
resolution: {integrity: sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==}
dependencies:
tslib: 2.4.1
dev: true
/sade/1.8.1:
resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==}
@ -11486,7 +11292,6 @@ packages:
/sax/1.2.4:
resolution: {integrity: sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==}
dev: true
/saxes/6.0.0:
resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==}
@ -12607,7 +12412,6 @@ packages:
/tslib/2.4.1:
resolution: {integrity: sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==}
dev: true
/tsutils/3.21.0_typescript@4.9.3:
resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==}
@ -12675,6 +12479,12 @@ packages:
mime-types: 2.1.35
dev: true
/typed-emitter/2.1.0:
resolution: {integrity: sha512-g/KzbYKbH5C2vPkaXGu8DJlHrGKHLsM25Zg9WuC9pMGfuvT+X25tZQWo5fK1BjBm8+UrVE9LDCvaY0CQk+fXDA==}
optionalDependencies:
rxjs: 7.8.0
dev: false
/typedarray-to-buffer/3.1.5:
resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==}
dependencies:
@ -12850,7 +12660,6 @@ packages:
/universalify/2.0.0:
resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==}
engines: {node: '>= 10.0.0'}
dev: true
/unpipe/1.0.0:
resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==}
@ -13056,7 +12865,7 @@ packages:
picocolors: 1.0.0
source-map: 0.6.1
source-map-support: 0.5.21
vite: 4.0.4_@types+node@18.11.9
vite: 4.1.1_@types+node@18.11.9
transitivePeerDependencies:
- '@types/node'
- less
@ -13078,7 +12887,7 @@ packages:
picocolors: 1.0.0
source-map: 0.6.1
source-map-support: 0.5.21
vite: 4.0.4_@types+node@18.11.9
vite: 4.1.1_@types+node@18.11.9
transitivePeerDependencies:
- '@types/node'
- less
@ -13122,8 +12931,8 @@ packages:
fsevents: 2.3.2
dev: true
/vite/4.0.2:
resolution: {integrity: sha512-QJaY3R+tFlTagH0exVqbgkkw45B+/bXVBzF2ZD1KB5Z8RiAoiKo60vSUf6/r4c2Vh9jfGBKM4oBI9b4/1ZJYng==}
/vite/4.1.1:
resolution: {integrity: sha512-LM9WWea8vsxhr782r9ntg+bhSFS06FJgCvvB0+8hf8UWtvaiDagKYWXndjfX6kGl74keHJUcpzrQliDXZlF5yg==}
engines: {node: ^14.18.0 || >=16.0.0}
hasBin: true
peerDependencies:
@ -13147,48 +12956,15 @@ packages:
terser:
optional: true
dependencies:
esbuild: 0.16.10
postcss: 8.4.20
esbuild: 0.16.17
postcss: 8.4.21
resolve: 1.22.1
rollup: 3.7.5
optionalDependencies:
fsevents: 2.3.2
dev: true
/vite/4.0.4:
resolution: {integrity: sha512-xevPU7M8FU0i/80DMR+YhgrzR5KS2ORy1B4xcX/cXLsvnUWvfHuqMmVU6N0YiJ4JWGRJJsLCgjEzKjG9/GKoSw==}
engines: {node: ^14.18.0 || >=16.0.0}
hasBin: true
peerDependencies:
'@types/node': '>= 14'
less: '*'
sass: '*'
stylus: '*'
sugarss: '*'
terser: ^5.4.0
peerDependenciesMeta:
'@types/node':
optional: true
less:
optional: true
sass:
optional: true
stylus:
optional: true
sugarss:
optional: true
terser:
optional: true
dependencies:
esbuild: 0.16.10
postcss: 8.4.20
resolve: 1.22.1
rollup: 3.7.5
rollup: 3.15.0
optionalDependencies:
fsevents: 2.3.2
/vite/4.0.4_@types+node@18.11.9:
resolution: {integrity: sha512-xevPU7M8FU0i/80DMR+YhgrzR5KS2ORy1B4xcX/cXLsvnUWvfHuqMmVU6N0YiJ4JWGRJJsLCgjEzKjG9/GKoSw==}
/vite/4.1.1_@types+node@18.11.9:
resolution: {integrity: sha512-LM9WWea8vsxhr782r9ntg+bhSFS06FJgCvvB0+8hf8UWtvaiDagKYWXndjfX6kGl74keHJUcpzrQliDXZlF5yg==}
engines: {node: ^14.18.0 || >=16.0.0}
hasBin: true
peerDependencies:
@ -13213,10 +12989,10 @@ packages:
optional: true
dependencies:
'@types/node': 18.11.9
esbuild: 0.16.10
postcss: 8.4.20
esbuild: 0.16.17
postcss: 8.4.21
resolve: 1.22.1
rollup: 3.7.5
rollup: 3.15.0
optionalDependencies:
fsevents: 2.3.2
@ -13231,7 +13007,7 @@ packages:
vite: 3.2.4
dev: true
/vitefu/0.2.4_vite@4.0.2:
/vitefu/0.2.4_vite@4.1.1:
resolution: {integrity: sha512-fanAXjSaf9xXtOOeno8wZXIhgia+CZury481LsDaV++lSvcU2R9Ch2bPh3PYFyoHW+w9LqAeYRISVQjUIew14g==}
peerDependencies:
vite: ^3.0.0 || ^4.0.0
@ -13239,18 +13015,7 @@ packages:
vite:
optional: true
dependencies:
vite: 4.0.2
dev: true
/vitefu/0.2.4_vite@4.0.4:
resolution: {integrity: sha512-fanAXjSaf9xXtOOeno8wZXIhgia+CZury481LsDaV++lSvcU2R9Ch2bPh3PYFyoHW+w9LqAeYRISVQjUIew14g==}
peerDependencies:
vite: ^3.0.0 || ^4.0.0
peerDependenciesMeta:
vite:
optional: true
dependencies:
vite: 4.0.4
vite: 4.1.1
dev: true
/vitest/0.27.1_jsdom@21.0.0:
@ -13291,7 +13056,7 @@ packages:
tinybench: 2.3.1
tinypool: 0.3.0
tinyspy: 1.0.2
vite: 4.0.4_@types+node@18.11.9
vite: 4.1.1_@types+node@18.11.9
vite-node: 0.27.1_@types+node@18.11.9
why-is-node-running: 2.2.2
transitivePeerDependencies:
@ -13346,7 +13111,7 @@ packages:
tinybench: 2.3.1
tinypool: 0.3.1
tinyspy: 1.0.2
vite: 4.0.4_@types+node@18.11.9
vite: 4.1.1_@types+node@18.11.9
vite-node: 0.28.3_@types+node@18.11.9
why-is-node-running: 2.2.2
transitivePeerDependencies: