Fix vite build (tauri build still broken)

This commit is contained in:
Pierre Jacquier
2024-02-06 06:59:59 -05:00
parent a4d3263b88
commit 6b835d5149
19 changed files with 263 additions and 207 deletions

View File

@ -16,7 +16,10 @@
"@react-hook/resize-observer": "^1.2.6",
"@replit/codemirror-interact": "^6.3.0",
"@sentry/react": "^7.77.0",
"@tauri-apps/api": "^1.5.1",
"@tauri-apps/api": "^2.0.0-beta.0",
"@tauri-apps/plugin-dialog": "^2.0.0-beta.0",
"@tauri-apps/plugin-fs": "^2.0.0-beta.0",
"@tauri-apps/plugin-os": "^2.0.0-beta.0",
"@testing-library/jest-dom": "^5.14.1",
"@testing-library/react": "^14.0.0",
"@testing-library/user-event": "^14.5.1",
@ -106,7 +109,7 @@
"@babel/plugin-proposal-private-property-in-object": "^7.21.11",
"@babel/preset-env": "^7.23.3",
"@playwright/test": "^1.39.0",
"@tauri-apps/cli": "^1.5.6",
"@tauri-apps/cli": "^2.0.0-beta.1",
"@types/crypto-js": "^4.1.1",
"@types/debounce-promise": "^3.1.8",
"@types/isomorphic-fetch": "^0.0.36",

View File

@ -12,7 +12,7 @@ rust-version = "1.60"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[build-dependencies]
tauri-build = { version = "1.5.0", features = [] }
tauri-build = { version = "2.0.0-beta", features = [] }
[dependencies]
anyhow = "1"
@ -20,8 +20,8 @@ kittycad = "0.2.42"
oauth2 = "4.4.2"
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
tauri = { version = "1.5.3", features = [ "os-all", "dialog-all", "fs-all", "http-request", "path-all", "shell-open", "shell-open-api", "devtools"] }
tauri-plugin-fs-extra = { git = "https://github.com/tauri-apps/plugins-workspace", branch = "v1" }
tauri = { version = "2.0.0-beta", features = [ "devtools"] }
tauri-plugin-fs = "2"
tokio = { version = "1.34.0", features = ["time"] }
toml = "0.8.2"
@ -33,3 +33,6 @@ tauri-driver = "0.1.3"
# If you use cargo directly instead of tauri's cli you can use this feature flag to switch between tauri's `dev` and `build` modes.
# DO NOT REMOVE!!
custom-protocol = ["tauri/custom-protocol"]
[lib]
crate-type = ["staticlib", "cdylib", "rlib"]

View File

@ -0,0 +1,62 @@
{
"identifier": "migrated",
"description": "permissions that were migrated from v1",
"context": "local",
"windows": [
"main"
],
"permissions": [
"path:default",
"event:default",
"window:default",
"app:default",
"resources:default",
"menu:default",
"tray:default",
"fs:allow-read-file",
"fs:allow-write-file",
"fs:allow-read-dir",
"fs:allow-copy-file",
"fs:allow-mkdir",
"fs:allow-remove",
"fs:allow-remove",
"fs:allow-rename",
"fs:allow-exists",
{
"identifier": "fs:scope",
"allow": [
"$HOME/**/*",
"$APPDATA/**/*"
]
},
"shell:allow-open",
"dialog:allow-open",
"dialog:allow-save",
"dialog:allow-message",
"dialog:allow-ask",
"dialog:allow-confirm",
{
"identifier": "http:default",
"allow": [
"https://dev.kittycad.io/*",
"https://kittycad.io/*",
"https://api.dev.kittycad.io/*"
]
},
"os:allow-platform",
"os:allow-version",
"os:allow-os-type",
"os:allow-family",
"os:allow-arch",
"os:allow-exe-extension",
"os:allow-locale",
"os:allow-hostname"
],
"platforms": [
"linux",
"macOS",
"windows",
"android",
"iOS"
]
}

View File

@ -1,84 +1,9 @@
{
"$schema": "../node_modules/@tauri-apps/cli/schema.json",
"build": {
"beforeDevCommand": "yarn start",
"devPath": "http://localhost:3000",
"distDir": "../build"
},
"package": {
"productName": "zoo-modeling-app",
"version": "0.14.0"
},
"tauri": {
"allowlist": {
"all": false,
"dialog": {
"all": true,
"ask": true,
"confirm": true,
"message": true,
"open": true,
"save": true
},
"fs": {
"scope": [
"$HOME/**/*",
"$APPDATA/**/*"
],
"all": true
},
"http": {
"request": true,
"scope": [
"https://dev.kittycad.io/*",
"https://kittycad.io/*",
"https://api.dev.kittycad.io/*"
]
},
"os": {
"all": true
},
"shell": {
"open": true
},
"path": {
"all": true
}
},
"bundle": {
"active": true,
"category": "DeveloperTool",
"copyright": "",
"deb": {
"depends": []
},
"externalBin": [],
"icon": [
"icons/32x32.png",
"icons/128x128.png",
"icons/128x128@2x.png",
"icons/icon.icns",
"icons/icon.ico"
],
"identifier": "io.kittycad.modeling-app",
"longDescription": "",
"macOS": {
"entitlements": null,
"exceptionDomain": "",
"frameworks": [],
"providerShortName": null,
"signingIdentity": null
},
"resources": [],
"shortDescription": "",
"targets": "all"
},
"app": {
"security": {
"csp": null
},
"updater": {
"active": false
},
"windows": [
{
"fullscreen": false,
@ -88,5 +13,48 @@
"width": 1800
}
]
}
},
"build": {
"beforeDevCommand": "yarn start",
"devUrl": "http://localhost:3000",
"frontendDist": "../build"
},
"bundle": {
"active": true,
"category": "DeveloperTool",
"copyright": "",
"externalBin": [],
"icon": [
"icons/32x32.png",
"icons/128x128.png",
"icons/128x128@2x.png",
"icons/icon.icns",
"icons/icon.ico"
],
"linux": {
"deb": {
"depends": []
}
},
"longDescription": "",
"macOS": {
"entitlements": null,
"exceptionDomain": "",
"frameworks": [],
"providerShortName": null,
"signingIdentity": null
},
"resources": [],
"shortDescription": "",
"targets": "all"
},
"identifier": "io.kittycad.modeling-app",
"plugins": {
"shell": {
"open": true
},
"updater": {}
},
"productName": "zoo-modeling-app",
"version": "0.14.0"
}

View File

@ -22,7 +22,7 @@ import SignIn from './routes/SignIn'
import { Auth } from './Auth'
import { isTauri } from './lib/isTauri'
import Home from './routes/Home'
import { FileEntry, readDir, readTextFile } from '@tauri-apps/api/fs'
import { FileEntry, readDir, readTextFile } from '@tauri-apps/plugin-fs'
import makeUrlPathRelative from './lib/makeUrlPathRelative'
import {
initializeProjectDirectory,
@ -192,20 +192,20 @@ const router = createBrowserRouter(
const projectAndFile = decodedId.replace(defaultDir + sep, '')
const firstSlashIndex = projectAndFile.indexOf(sep)
const projectName = projectAndFile.slice(0, firstSlashIndex)
const projectPath = defaultDir + sep + projectName
const projectPath = defaultDir + sep() + projectName
const currentFileName = projectAndFile.slice(firstSlashIndex + 1)
if (firstSlashIndex === -1 || !currentFileName)
return redirect(
`${paths.FILE}/${encodeURIComponent(
`${params.id}${sep}${PROJECT_ENTRYPOINT}`
`${params.id}${sep()}${PROJECT_ENTRYPOINT}`
)}`
)
// Note that PROJECT_ENTRYPOINT is hardcoded until we support multiple files
const code = await readTextFile(decodedId)
const entrypointMetadata = await metadata(
projectPath + sep + PROJECT_ENTRYPOINT
projectPath + sep() + PROJECT_ENTRYPOINT
)
const children = await readDir(projectPath, { recursive: true })
kclManager.setCodeAndExecute(code, false)
@ -277,7 +277,7 @@ const router = createBrowserRouter(
const projects = await Promise.all(
projectsNoMeta.map(async (p: FileEntry) => ({
entrypointMetadata: await metadata(
p.path + sep + PROJECT_ENTRYPOINT
p.path + sep() + PROJECT_ENTRYPOINT
),
...p,
}))

View File

@ -14,12 +14,11 @@ import {
import { useCommandsContext } from 'hooks/useCommandsContext'
import { DEFAULT_FILE_NAME, fileMachine } from 'machines/fileMachine'
import {
createDir,
removeDir,
removeFile,
renameFile,
mkdir,
remove,
rename,
writeFile,
} from '@tauri-apps/api/fs'
} from '@tauri-apps/plugin-fs'
import { FILE_EXT, readProject } from 'lib/tauriFS'
import { isTauri } from 'lib/isTauri'
import { sep } from '@tauri-apps/api/path'
@ -57,7 +56,7 @@ export const FileMachineProvider = ({
commandBarSend({ type: 'Close' })
navigate(
`${paths.FILE}/${encodeURIComponent(
context.selectedDirectory + sep + event.data.name
context.selectedDirectory + sep() + event.data.name
)}`
)
}
@ -83,11 +82,11 @@ export const FileMachineProvider = ({
let name = event.data.name.trim() || DEFAULT_FILE_NAME
if (event.data.makeDir) {
await createDir(context.selectedDirectory.path + sep + name)
await mkdir(context.selectedDirectory.path + sep() + name)
} else {
await writeFile(
context.selectedDirectory.path +
sep +
sep() +
name +
(name.endsWith(FILE_EXT) ? '' : FILE_EXT),
''
@ -103,13 +102,13 @@ export const FileMachineProvider = ({
const { oldName, newName, isDir } = event.data
let name = newName ? newName : DEFAULT_FILE_NAME
await renameFile(
context.selectedDirectory.path + sep + oldName,
await rename(
context.selectedDirectory.path + sep() + oldName,
context.selectedDirectory.path +
sep +
sep() +
name +
(name.endsWith(FILE_EXT) || isDir ? '' : FILE_EXT)
)
, {})
return (
oldName !== name && `Successfully renamed "${oldName}" to "${name}"`
)
@ -121,11 +120,11 @@ export const FileMachineProvider = ({
const isDir = !!event.data.children
if (isDir) {
await removeDir(event.data.path, {
await remove(event.data.path, {
recursive: true,
}).catch((e) => console.error('Error deleting directory', e))
} else {
await removeFile(event.data.path).catch((e) =>
await remove(event.data.path).catch((e) =>
console.error('Error deleting file', e)
)
}

View File

@ -1,7 +1,7 @@
import { IndexLoaderData, paths } from 'Router'
import { ActionButton } from './ActionButton'
import Tooltip from './Tooltip'
import { FileEntry } from '@tauri-apps/api/fs'
import { FileEntry } from '@tauri-apps/plugin-fs'
import { Dispatch, useRef, useState } from 'react'
import { useNavigate } from 'react-router-dom'
import { Dialog, Disclosure } from '@headlessui/react'

View File

@ -1,4 +1,4 @@
import { Platform, platform } from '@tauri-apps/api/os'
import { Platform, platform } from '@tauri-apps/plugin-os'
import { isTauri } from 'lib/isTauri'
import { useEffect, useState } from 'react'

View File

@ -20,7 +20,7 @@ import { getNodeFromPath } from './queryAst'
import { IndexLoaderData } from 'Router'
import { Params, useLoaderData } from 'react-router-dom'
import { isTauri } from 'lib/isTauri'
import { writeTextFile } from '@tauri-apps/api/fs'
import { writeTextFile } from '@tauri-apps/plugin-fs'
import { toast } from 'react-hot-toast'
import { useParams } from 'react-router-dom'

View File

@ -1,8 +1,8 @@
import { isTauri } from './isTauri'
import { deserialize_files } from '../wasm-lib/pkg/wasm_lib'
import { browserSaveFile } from './browserSaveFile'
import { save } from '@tauri-apps/api/dialog'
import { writeBinaryFile } from '@tauri-apps/api/fs'
import { save } from '@tauri-apps/plugin-dialog'
import { writeFile } from '@tauri-apps/plugin-fs'
// Saves files locally from an export call.
export async function exportSave(data: ArrayBuffer) {
@ -25,7 +25,7 @@ export async function exportSave(data: ArrayBuffer) {
}
// Write the file.
await writeBinaryFile(filePath, file.contents)
await writeFile(filePath, file.contents)
} else {
// Download the file to the user's computer.
// Now we need to download the files to the user's downloads folder.

View File

@ -1,4 +1,4 @@
import { FileEntry } from '@tauri-apps/api/fs'
import { FileEntry } from '@tauri-apps/plugin-fs'
import {
MAX_PADDING,
deepFileFilter,

View File

@ -1,10 +1,9 @@
import {
FileEntry,
createDir,
mkdir,
exists,
readDir,
writeTextFile,
} from '@tauri-apps/api/fs'
} from '@tauri-apps/plugin-fs'
import { documentDir, homeDir, sep } from '@tauri-apps/api/path'
import { isTauri } from './isTauri'
import { ProjectWithEntryPointMetadata } from '../Router'
@ -28,7 +27,7 @@ export async function initializeProjectDirectory(directory: string) {
if (directory) {
const dirExists = await exists(directory)
if (!dirExists) {
await createDir(directory, { recursive: true })
await mkdir(directory, { recursive: true })
}
return directory
}
@ -46,13 +45,13 @@ export async function initializeProjectDirectory(directory: string) {
const defaultDirExists = await exists(INITIAL_DEFAULT_DIR)
if (!defaultDirExists) {
await createDir(INITIAL_DEFAULT_DIR, { recursive: true })
await mkdir(INITIAL_DEFAULT_DIR, { recursive: true })
}
return INITIAL_DEFAULT_DIR
}
export function isProjectDirectory(fileOrDir: Partial<FileEntry>) {
export function isProjectDirectory(fileOrDir: Partial<any>) {
return (
fileOrDir.children?.length &&
fileOrDir.children.some((child) => child.name === PROJECT_ENTRYPOINT)
@ -70,7 +69,7 @@ export async function getProjectsInDir(projectDir: string) {
const projectsWithMetadata = await Promise.all(
readProjects.map(async (p) => ({
entrypointMetadata: await metadata(p.path + sep + PROJECT_ENTRYPOINT),
entrypointMetadata: await metadata(p.path + sep() + PROJECT_ENTRYPOINT),
...p,
}))
)
@ -78,17 +77,17 @@ export async function getProjectsInDir(projectDir: string) {
return projectsWithMetadata
}
export const isHidden = (fileOrDir: FileEntry) =>
export const isHidden = (fileOrDir: any) =>
!!fileOrDir.name?.startsWith('.')
export const isDir = (fileOrDir: FileEntry) =>
export const isDir = (fileOrDir: any) =>
'children' in fileOrDir && fileOrDir.children !== undefined
export function deepFileFilter(
entries: FileEntry[],
filterFn: (f: FileEntry) => boolean
): FileEntry[] {
const filteredEntries: FileEntry[] = []
entries: any[],
filterFn: (f: any) => boolean
): any[] {
const filteredEntries: any[] = []
for (const fileOrDir of entries) {
if ('children' in fileOrDir && fileOrDir.children !== undefined) {
const filteredChildren = deepFileFilter(fileOrDir.children, filterFn)
@ -106,10 +105,10 @@ export function deepFileFilter(
}
export function deepFileFilterFlat(
entries: FileEntry[],
filterFn: (f: FileEntry) => boolean
): FileEntry[] {
const filteredEntries: FileEntry[] = []
entries: any[],
filterFn: (f: any) => boolean
): any[] {
const filteredEntries: any[] = []
for (const fileOrDir of entries) {
if ('children' in fileOrDir && fileOrDir.children !== undefined) {
const filteredChildren = deepFileFilterFlat(fileOrDir.children, filterFn)
@ -140,7 +139,7 @@ export async function readProject(projectDir: string) {
// Given a read project, return the number of .kcl files,
// both in the root directory and in sub-directories,
// and folders that contain at least one .kcl file
export function getPartsCount(project: FileEntry[]) {
export function getPartsCount(project: any[]) {
const flatProject = deepFileFilterFlat(project, isRelevantFileOrDir)
const kclFileCount = flatProject.filter((f) =>
@ -158,7 +157,7 @@ export function getPartsCount(project: FileEntry[]) {
// i.e. not a hidden file or directory, and is a relevant file type
// or contains at least one relevant file (even if it's nested)
// or is a completely empty directory
export function isRelevantFileOrDir(fileOrDir: FileEntry) {
export function isRelevantFileOrDir(fileOrDir: any) {
let isRelevantDir = false
if ('children' in fileOrDir && fileOrDir.children !== undefined) {
isRelevantDir =
@ -178,7 +177,7 @@ export function isRelevantFileOrDir(fileOrDir: FileEntry) {
// Deeply sort the files and directories in a project like VS Code does:
// The main.kcl file is always first, then files, then directories
// Files and directories are sorted alphabetically
export function sortProject(project: FileEntry[]): FileEntry[] {
export function sortProject(project: any[]): any[] {
const sortedProject = project.sort((a, b) => {
if (a.name === PROJECT_ENTRYPOINT) {
return -1
@ -195,7 +194,7 @@ export function sortProject(project: FileEntry[]): FileEntry[] {
}
})
return sortedProject.map((fileOrDir: FileEntry) => {
return sortedProject.map((fileOrDir: any) => {
if ('children' in fileOrDir && fileOrDir.children !== undefined) {
return {
...fileOrDir,
@ -219,13 +218,13 @@ export async function createNewProject(
const dirExists = await exists(path)
if (!dirExists) {
await createDir(path, { recursive: true }).catch((err) => {
await mkdir(path, { recursive: true }).catch((err) => {
console.error('Error creating new directory:', err)
throw err
})
}
await writeTextFile(path + sep + PROJECT_ENTRYPOINT, initCode).catch(
await writeTextFile(path + sep() + PROJECT_ENTRYPOINT, initCode).catch(
(err) => {
console.error('Error creating new file:', err)
throw err
@ -235,13 +234,13 @@ export async function createNewProject(
const m = await metadata(path)
return {
name: path.slice(path.lastIndexOf(sep) + 1),
name: path.slice(path.lastIndexOf(sep()) + 1),
path: path,
entrypointMetadata: m,
children: [
{
name: PROJECT_ENTRYPOINT,
path: path + sep + PROJECT_ENTRYPOINT,
path: path + sep() + PROJECT_ENTRYPOINT,
children: [],
},
],
@ -258,7 +257,7 @@ function interpolateProjectName(projectName: string) {
}
// Returns the next available index for a project name
export function getNextProjectIndex(projectName: string, files: FileEntry[]) {
export function getNextProjectIndex(projectName: string, files: any[]) {
const regex = interpolateProjectName(projectName)
const matches = files.map((file) => file.name?.match(regex))
const indices = matches

View File

@ -2,7 +2,7 @@ import { createMachine, assign } from 'xstate'
import { Models } from '@kittycad/lib'
import withBaseURL from '../lib/withBaseURL'
import { isTauri } from 'lib/isTauri'
import { invoke } from '@tauri-apps/api'
import { invoke } from '@tauri-apps/api/core'
import { VITE_KC_API_BASE_URL } from 'env'
const SKIP_AUTH =

View File

@ -1,6 +1,6 @@
import { assign, createMachine } from 'xstate'
import { ProjectWithEntryPointMetadata } from 'Router'
import { FileEntry } from '@tauri-apps/api/fs'
import { FileEntry } from '@tauri-apps/plugin-fs'
export const FILE_PERSIST_KEY = 'Last opened KCL files'
export const DEFAULT_FILE_NAME = 'Untitled'

View File

@ -1,5 +1,5 @@
import { FormEvent, useEffect } from 'react'
import { removeDir, renameFile } from '@tauri-apps/api/fs'
import { remove, rename } from '@tauri-apps/plugin-fs'
import {
createNewProject,
getNextProjectIndex,
@ -67,7 +67,7 @@ const Home = () => {
commandBarSend({ type: 'Close' })
navigate(
`${paths.FILE}/${encodeURIComponent(
context.defaultDirectory + sep + event.data.name
context.defaultDirectory + sep() + event.data.name
)}`
)
}
@ -100,7 +100,7 @@ const Home = () => {
name = interpolateProjectNameWithIndex(name, nextIndex)
}
await createNewProject(context.defaultDirectory + sep + name)
await createNewProject(context.defaultDirectory + sep() + name)
if (shouldUpdateDefaultProjectName) {
sendToSettings({
@ -122,9 +122,10 @@ const Home = () => {
name = interpolateProjectNameWithIndex(name, nextIndex)
}
await renameFile(
context.defaultDirectory + sep + oldName,
context.defaultDirectory + sep + name
await rename(
context.defaultDirectory + sep() + oldName,
context.defaultDirectory + sep() + name,
{}
)
return `Successfully renamed "${oldName}" to "${name}"`
},
@ -132,7 +133,7 @@ const Home = () => {
context: ContextFrom<typeof homeMachine>,
event: EventFrom<typeof homeMachine, 'Delete project'>
) => {
await removeDir(context.defaultDirectory + sep + event.data.name, {
await remove(context.defaultDirectory + sep() + event.data.name, {
recursive: true,
})
return `Successfully deleted "${event.data.name}"`

View File

@ -44,12 +44,12 @@ function OnboardingWithNewFile() {
nextIndex
)
const newFile = await createNewProject(
defaultDirectory + sep + name,
defaultDirectory + sep() + name,
bracket
)
navigate(
`${paths.FILE}/${encodeURIComponent(
newFile.path + sep + PROJECT_ENTRYPOINT
newFile.path + sep() + PROJECT_ENTRYPOINT
)}${paths.ONBOARDING.INDEX}`
)
}

View File

@ -1,7 +1,7 @@
import { faArrowRotateBack, faXmark } from '@fortawesome/free-solid-svg-icons'
import { ActionButton } from '../components/ActionButton'
import { AppHeader } from '../components/AppHeader'
import { open } from '@tauri-apps/api/dialog'
import { open } from '@tauri-apps/plugin-dialog'
import {
BaseUnit,
DEFAULT_PROJECT_NAME,
@ -94,7 +94,7 @@ export const Settings = () => {
nextIndex
)
const newFile = await createNewProject(
defaultDirectory + sep + name,
defaultDirectory + sep() + name,
bracket
)
navigate(`${paths.FILE}/${encodeURIComponent(newFile.path)}`)

View File

@ -1,6 +1,6 @@
import { ActionButton } from '../components/ActionButton'
import { isTauri } from '../lib/isTauri'
import { invoke } from '@tauri-apps/api/tauri'
import { invoke } from '@tauri-apps/api/core'
import { VITE_KC_SITE_BASE_URL, VITE_KC_API_BASE_URL } from '../env'
import { Themes, getSystemTheme } from '../lib/theme'
import { paths } from '../Router'

137
yarn.lock
View File

@ -1951,76 +1951,97 @@
resolved "https://registry.yarnpkg.com/@tauri-apps/api/-/api-1.4.0.tgz#b4013ca3d17b853f7df29fe14079ebb4d52dbffa"
integrity sha512-Jd6HPoTM1PZSFIzq7FB8VmMu3qSSyo/3lSwLpoapW+lQ41CL5Dow2KryLg+gyazA/58DRWI9vu/XpEeHK4uMdw==
"@tauri-apps/api@^1.5.1":
version "1.5.1"
resolved "https://registry.yarnpkg.com/@tauri-apps/api/-/api-1.5.1.tgz#9074476c4323f71351db624e9711c99277cdfb99"
integrity sha512-6unsZDOdlXTmauU3NhWhn+Cx0rODV+rvNvTdvolE5Kls5ybA6cqndQENDt1+FS0tF7ozCP66jwWoH6a5h90BrA==
"@tauri-apps/api@2.0.0-beta.0", "@tauri-apps/api@^2.0.0-beta.0":
version "2.0.0-beta.0"
resolved "https://registry.yarnpkg.com/@tauri-apps/api/-/api-2.0.0-beta.0.tgz#36b10e6f459fd125530ac083262a355b84ce9b95"
integrity sha512-WLoh/Vk8cgY7XrJV7Vpb6PssReBZWQCATfYBb1aCRDk+sp0NyPwumx6fZ2ECAKzAcs3OeanluwZcajruIW4CPQ==
"@tauri-apps/cli-darwin-arm64@1.5.6":
version "1.5.6"
resolved "https://registry.yarnpkg.com/@tauri-apps/cli-darwin-arm64/-/cli-darwin-arm64-1.5.6.tgz#0d68eaf6fa1b35197a9d4991ac5377e6085a569a"
integrity sha512-NNvG3XLtciCMsBahbDNUEvq184VZmOveTGOuy0So2R33b/6FDkuWaSgWZsR1mISpOuP034htQYW0VITCLelfqg==
"@tauri-apps/cli-darwin-arm64@2.0.0-beta.1":
version "2.0.0-beta.1"
resolved "https://registry.yarnpkg.com/@tauri-apps/cli-darwin-arm64/-/cli-darwin-arm64-2.0.0-beta.1.tgz#ad90a2b82dc0b3f2e08b4bcff2d95797120fc9ea"
integrity sha512-d71utEr9H3fXAI6nKPaPuINpnvMQn+UIscOTzTMcrmIDqptOO0ix8z6C3HSvNxV0OjtlxzNJGWwOb24U0OYrgw==
"@tauri-apps/cli-darwin-x64@1.5.6":
version "1.5.6"
resolved "https://registry.yarnpkg.com/@tauri-apps/cli-darwin-x64/-/cli-darwin-x64-1.5.6.tgz#a48e1f66b12c33cf6c9c216865f2e9a3ff18a923"
integrity sha512-nkiqmtUQw3N1j4WoVjv81q6zWuZFhBLya/RNGUL94oafORloOZoSY0uTZJAoeieb3Y1YK0rCHSDl02MyV2Fi4A==
"@tauri-apps/cli-darwin-x64@2.0.0-beta.1":
version "2.0.0-beta.1"
resolved "https://registry.yarnpkg.com/@tauri-apps/cli-darwin-x64/-/cli-darwin-x64-2.0.0-beta.1.tgz#8212d9d2c0d4492f23e4562588c2b1113cb6cd50"
integrity sha512-bzsWZjQt5NG1uhbDTGw8Hmvm+J1d+9J7HXMMMwQc4E3kBns95sr4bIoXvgIq3cZYS4uyZOvdhEdjkSGg1c65Lg==
"@tauri-apps/cli-linux-arm-gnueabihf@1.5.6":
version "1.5.6"
resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-arm-gnueabihf/-/cli-linux-arm-gnueabihf-1.5.6.tgz#385cd8054be7722cc07acc2d6d86f8e20c6265ef"
integrity sha512-z6SPx+axZexmWXTIVPNs4Tg7FtvdJl9EKxYN6JPjOmDZcqA13iyqWBQal2DA/GMZ1Xqo3vyJf6EoEaKaliymPQ==
"@tauri-apps/cli-linux-arm-gnueabihf@2.0.0-beta.1":
version "2.0.0-beta.1"
resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-arm-gnueabihf/-/cli-linux-arm-gnueabihf-2.0.0-beta.1.tgz#9713c073b473a9dee8c4b4951e5aa6e0e87febf5"
integrity sha512-FMnZpk4a5D9QgZKkT00P3f4CHEZFpn/b+pWfZJ7vxCdir+Cc1eKOHiqhvmMBEeLlYlQFBaYeAK0EaZWnN82ZJA==
"@tauri-apps/cli-linux-arm64-gnu@1.5.6":
version "1.5.6"
resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-arm64-gnu/-/cli-linux-arm64-gnu-1.5.6.tgz#bd3f8f61637a1073909cb2d663aa0c6e8e036337"
integrity sha512-QuQjMQmpsCbzBrmtQiG4uhnfAbdFx3nzm+9LtqjuZlurc12+Mj5MTgqQ3AOwQedH3f7C+KlvbqD2AdXpwTg7VA==
"@tauri-apps/cli-linux-arm64-gnu@2.0.0-beta.1":
version "2.0.0-beta.1"
resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-arm64-gnu/-/cli-linux-arm64-gnu-2.0.0-beta.1.tgz#81d83894c3d08c52698da700f127d9d35dc2128a"
integrity sha512-0kE65P+6ppeAOFsJV6av5VhkjDv1dcHkObErpjJHpwYowuC3aqaCCnH3biR9gNvcoVUXsCwmMA/BkxUpq9W9/g==
"@tauri-apps/cli-linux-arm64-musl@1.5.6":
version "1.5.6"
resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-arm64-musl/-/cli-linux-arm64-musl-1.5.6.tgz#77fb4a804b77447bffba725a4b8b62df45f9ff97"
integrity sha512-8j5dH3odweFeom7bRGlfzDApWVOT4jIq8/214Wl+JeiNVehouIBo9lZGeghZBH3XKFRwEvU23i7sRVjuh2s8mg==
"@tauri-apps/cli-linux-arm64-musl@2.0.0-beta.1":
version "2.0.0-beta.1"
resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.0.0-beta.1.tgz#5239d2dc67e1dafac6a9deb64054028e099957e7"
integrity sha512-Wsj1eSrrAVeuFQWJq1gVIA78I8JM50fEsxbrMAOf89ZXpCYxJTNCJkyRQyLB+yHhv9nmhA3a1Mmr5ubhRETy1Q==
"@tauri-apps/cli-linux-x64-gnu@1.5.6":
version "1.5.6"
resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-x64-gnu/-/cli-linux-x64-gnu-1.5.6.tgz#e70a6c9dd243c2a3fa1fec69de9ebc9abf4dc795"
integrity sha512-gbFHYHfdEGW0ffk8SigDsoXks6USpilF6wR0nqB/JbWzbzFR/sBuLVNQlJl1RKNakyJHu+lsFxGy0fcTdoX8xA==
"@tauri-apps/cli-linux-x64-gnu@2.0.0-beta.1":
version "2.0.0-beta.1"
resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-x64-gnu/-/cli-linux-x64-gnu-2.0.0-beta.1.tgz#639c801e431816f1548c5a6a0e63b8449cc80db4"
integrity sha512-LkzLJWg+ud2gWuq8yAWJ3Sahrp79Vbd2Cotbm/RbfMi7RbRV8TQYj4zfUhyFJVnk4nF89kTnwfNxLdTw67CAOw==
"@tauri-apps/cli-linux-x64-musl@1.5.6":
version "1.5.6"
resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-x64-musl/-/cli-linux-x64-musl-1.5.6.tgz#f25dad778b2da6ab7b2b81f81c0805026d742c33"
integrity sha512-9v688ogoLkeFYQNgqiSErfhTreLUd8B3prIBSYUt+x4+5Kcw91zWvIh+VSxL1n3KCGGsM7cuXhkGPaxwlEh1ug==
"@tauri-apps/cli-linux-x64-musl@2.0.0-beta.1":
version "2.0.0-beta.1"
resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-x64-musl/-/cli-linux-x64-musl-2.0.0-beta.1.tgz#d0e07f10ab9de95d117acce1d9787eb6a625013a"
integrity sha512-Ro3PuLSNEZAw9/Rc2CP3k9P7LaUQ2TOFXJeW6G4aCXrd0MlJwlGhhjdZuLbmgzD1rda4dSpZGJPhbYvu8YD7eQ==
"@tauri-apps/cli-win32-arm64-msvc@1.5.6":
version "1.5.6"
resolved "https://registry.yarnpkg.com/@tauri-apps/cli-win32-arm64-msvc/-/cli-win32-arm64-msvc-1.5.6.tgz#47d0f359e04d93c1fd0b527e18a56606f3df9bed"
integrity sha512-DRNDXFNZb6y5IZrw+lhTTA9l4wbzO4TNRBAlHAiXUrH+pRFZ/ZJtv5WEuAj9ocVSahVw2NaK5Yaold4NPAxHog==
"@tauri-apps/cli-win32-arm64-msvc@2.0.0-beta.1":
version "2.0.0-beta.1"
resolved "https://registry.yarnpkg.com/@tauri-apps/cli-win32-arm64-msvc/-/cli-win32-arm64-msvc-2.0.0-beta.1.tgz#9b7e964413031cab6bc938468983e4bb80b44d38"
integrity sha512-SWNF+5B+lBbW/Kq1wTMVG9x97PqJUOo8eWAr/nlMm3J0lYbTWAa8/ScibaPjq82HiPhv8WCJXlcO6FEqWCoJ2A==
"@tauri-apps/cli-win32-ia32-msvc@1.5.6":
version "1.5.6"
resolved "https://registry.yarnpkg.com/@tauri-apps/cli-win32-ia32-msvc/-/cli-win32-ia32-msvc-1.5.6.tgz#54c7ec152065e8167068411b82748a25a483d948"
integrity sha512-oUYKNR/IZjF4fsOzRpw0xesl2lOjhsQEyWlgbpT25T83EU113Xgck9UjtI7xemNI/OPCv1tPiaM1e7/ABdg5iA==
"@tauri-apps/cli-win32-ia32-msvc@2.0.0-beta.1":
version "2.0.0-beta.1"
resolved "https://registry.yarnpkg.com/@tauri-apps/cli-win32-ia32-msvc/-/cli-win32-ia32-msvc-2.0.0-beta.1.tgz#7c390f30135e9c26b6685296bb7890447a92a5f7"
integrity sha512-NvfP16fSlfq6GLHJH+gAxEsJn+Jvz3HoxMTLxAg7Ra0ycMODFu4xbNn6Hp7Djn297qTHHLYDva4Np6Whw5DUlQ==
"@tauri-apps/cli-win32-x64-msvc@1.5.6":
version "1.5.6"
resolved "https://registry.yarnpkg.com/@tauri-apps/cli-win32-x64-msvc/-/cli-win32-x64-msvc-1.5.6.tgz#963280a4f7001c27d4e4745f302728297c007deb"
integrity sha512-RmEf1os9C8//uq2hbjXi7Vgz9ne7798ZxqemAZdUwo1pv3oLVZSz1/IvZmUHPdy2e6zSeySqWu1D0Y3QRNN+dg==
"@tauri-apps/cli-win32-x64-msvc@2.0.0-beta.1":
version "2.0.0-beta.1"
resolved "https://registry.yarnpkg.com/@tauri-apps/cli-win32-x64-msvc/-/cli-win32-x64-msvc-2.0.0-beta.1.tgz#a82890bcd8b15feded016a2bfa51a1d199dc17f5"
integrity sha512-9TKbDQyVHW0p1a7aXQEKg+MhCyFMpzD26puLKOxbTPiTcRUR4lUFq5Bhf1VR5ihoqnZNhJEtuR1mA16ZrIkuKQ==
"@tauri-apps/cli@^1.5.6":
version "1.5.6"
resolved "https://registry.yarnpkg.com/@tauri-apps/cli/-/cli-1.5.6.tgz#5011c9dd3a36dc89073fed7d4cb429d38b37862b"
integrity sha512-k4Y19oVCnt7WZb2TnDzLqfs7o98Jq0tUoVMv+JQSzuRDJqaVu2xMBZ8dYplEn+EccdR5SOMyzaLBJWu38TVK1A==
"@tauri-apps/cli@^2.0.0-beta.1":
version "2.0.0-beta.1"
resolved "https://registry.yarnpkg.com/@tauri-apps/cli/-/cli-2.0.0-beta.1.tgz#d9e42dd2d2f9319dffcceacb82d18e19b4acf840"
integrity sha512-u3AcZPdHsg9qT3e9PSD0H2IVZetQvWuBOyF81CN7/sY+AJGOli7i2d38Bj4wJs50tuMotoseiMcxuyxTlAdBnw==
optionalDependencies:
"@tauri-apps/cli-darwin-arm64" "1.5.6"
"@tauri-apps/cli-darwin-x64" "1.5.6"
"@tauri-apps/cli-linux-arm-gnueabihf" "1.5.6"
"@tauri-apps/cli-linux-arm64-gnu" "1.5.6"
"@tauri-apps/cli-linux-arm64-musl" "1.5.6"
"@tauri-apps/cli-linux-x64-gnu" "1.5.6"
"@tauri-apps/cli-linux-x64-musl" "1.5.6"
"@tauri-apps/cli-win32-arm64-msvc" "1.5.6"
"@tauri-apps/cli-win32-ia32-msvc" "1.5.6"
"@tauri-apps/cli-win32-x64-msvc" "1.5.6"
"@tauri-apps/cli-darwin-arm64" "2.0.0-beta.1"
"@tauri-apps/cli-darwin-x64" "2.0.0-beta.1"
"@tauri-apps/cli-linux-arm-gnueabihf" "2.0.0-beta.1"
"@tauri-apps/cli-linux-arm64-gnu" "2.0.0-beta.1"
"@tauri-apps/cli-linux-arm64-musl" "2.0.0-beta.1"
"@tauri-apps/cli-linux-x64-gnu" "2.0.0-beta.1"
"@tauri-apps/cli-linux-x64-musl" "2.0.0-beta.1"
"@tauri-apps/cli-win32-arm64-msvc" "2.0.0-beta.1"
"@tauri-apps/cli-win32-ia32-msvc" "2.0.0-beta.1"
"@tauri-apps/cli-win32-x64-msvc" "2.0.0-beta.1"
"@tauri-apps/plugin-dialog@^2.0.0-beta.0":
version "2.0.0-beta.0"
resolved "https://registry.yarnpkg.com/@tauri-apps/plugin-dialog/-/plugin-dialog-2.0.0-beta.0.tgz#07ba51779342300228f1a5eb946306f5069a4f00"
integrity sha512-cNxiBwGB6Xgnwy5GyAabwPyvm1iaC7MmrgzcUwB1JaydLjp/Yu3Z0TmkmmEClFrrvIQA+sMcq0C8wwv6i4aedw==
dependencies:
"@tauri-apps/api" "2.0.0-beta.0"
"@tauri-apps/plugin-fs@^2.0.0-beta.0":
version "2.0.0-beta.0"
resolved "https://registry.yarnpkg.com/@tauri-apps/plugin-fs/-/plugin-fs-2.0.0-beta.0.tgz#bab917941a8197af3f25a18f38595c39e9cdfe85"
integrity sha512-oFAA8T5wyg5dmsF/WmjjtUMEnJtzu+p2ElsK2FdwLVSB2AdAdud5izZhd1o63HFjR6waiIYebSI+llzJG7b5MQ==
dependencies:
"@tauri-apps/api" "2.0.0-beta.0"
"@tauri-apps/plugin-os@^2.0.0-beta.0":
version "2.0.0-beta.0"
resolved "https://registry.yarnpkg.com/@tauri-apps/plugin-os/-/plugin-os-2.0.0-beta.0.tgz#1745e26b327420d08f21ecf0b1c300170b18965f"
integrity sha512-2a6yxfKS3RxPCAn6jIfbUJN0lVo8skth5kInnvmaE4IVmy7bNSRDtpYzKWMq4JzU48Ra3IEB4YJjYQx71+IIHA==
dependencies:
"@tauri-apps/api" "2.0.0-beta.0"
"@testing-library/dom@^9.0.0":
version "9.3.3"