Fix vite build (tauri build still broken)
This commit is contained in:
@ -16,7 +16,10 @@
|
|||||||
"@react-hook/resize-observer": "^1.2.6",
|
"@react-hook/resize-observer": "^1.2.6",
|
||||||
"@replit/codemirror-interact": "^6.3.0",
|
"@replit/codemirror-interact": "^6.3.0",
|
||||||
"@sentry/react": "^7.77.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/jest-dom": "^5.14.1",
|
||||||
"@testing-library/react": "^14.0.0",
|
"@testing-library/react": "^14.0.0",
|
||||||
"@testing-library/user-event": "^14.5.1",
|
"@testing-library/user-event": "^14.5.1",
|
||||||
@ -106,7 +109,7 @@
|
|||||||
"@babel/plugin-proposal-private-property-in-object": "^7.21.11",
|
"@babel/plugin-proposal-private-property-in-object": "^7.21.11",
|
||||||
"@babel/preset-env": "^7.23.3",
|
"@babel/preset-env": "^7.23.3",
|
||||||
"@playwright/test": "^1.39.0",
|
"@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/crypto-js": "^4.1.1",
|
||||||
"@types/debounce-promise": "^3.1.8",
|
"@types/debounce-promise": "^3.1.8",
|
||||||
"@types/isomorphic-fetch": "^0.0.36",
|
"@types/isomorphic-fetch": "^0.0.36",
|
||||||
|
@ -12,7 +12,7 @@ rust-version = "1.60"
|
|||||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
[build-dependencies]
|
[build-dependencies]
|
||||||
tauri-build = { version = "1.5.0", features = [] }
|
tauri-build = { version = "2.0.0-beta", features = [] }
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
anyhow = "1"
|
anyhow = "1"
|
||||||
@ -20,8 +20,8 @@ kittycad = "0.2.42"
|
|||||||
oauth2 = "4.4.2"
|
oauth2 = "4.4.2"
|
||||||
serde = { version = "1.0", features = ["derive"] }
|
serde = { version = "1.0", features = ["derive"] }
|
||||||
serde_json = "1.0"
|
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 = { version = "2.0.0-beta", features = [ "devtools"] }
|
||||||
tauri-plugin-fs-extra = { git = "https://github.com/tauri-apps/plugins-workspace", branch = "v1" }
|
tauri-plugin-fs = "2"
|
||||||
tokio = { version = "1.34.0", features = ["time"] }
|
tokio = { version = "1.34.0", features = ["time"] }
|
||||||
toml = "0.8.2"
|
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.
|
# 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!!
|
# DO NOT REMOVE!!
|
||||||
custom-protocol = ["tauri/custom-protocol"]
|
custom-protocol = ["tauri/custom-protocol"]
|
||||||
|
|
||||||
|
[lib]
|
||||||
|
crate-type = ["staticlib", "cdylib", "rlib"]
|
||||||
|
62
src-tauri/capabilities/migrated.json
Normal file
62
src-tauri/capabilities/migrated.json
Normal 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"
|
||||||
|
]
|
||||||
|
}
|
@ -1,84 +1,9 @@
|
|||||||
{
|
{
|
||||||
"$schema": "../node_modules/@tauri-apps/cli/schema.json",
|
"$schema": "../node_modules/@tauri-apps/cli/schema.json",
|
||||||
"build": {
|
"app": {
|
||||||
"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"
|
|
||||||
},
|
|
||||||
"security": {
|
"security": {
|
||||||
"csp": null
|
"csp": null
|
||||||
},
|
},
|
||||||
"updater": {
|
|
||||||
"active": false
|
|
||||||
},
|
|
||||||
"windows": [
|
"windows": [
|
||||||
{
|
{
|
||||||
"fullscreen": false,
|
"fullscreen": false,
|
||||||
@ -88,5 +13,48 @@
|
|||||||
"width": 1800
|
"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"
|
||||||
}
|
}
|
@ -22,7 +22,7 @@ import SignIn from './routes/SignIn'
|
|||||||
import { Auth } from './Auth'
|
import { Auth } from './Auth'
|
||||||
import { isTauri } from './lib/isTauri'
|
import { isTauri } from './lib/isTauri'
|
||||||
import Home from './routes/Home'
|
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 makeUrlPathRelative from './lib/makeUrlPathRelative'
|
||||||
import {
|
import {
|
||||||
initializeProjectDirectory,
|
initializeProjectDirectory,
|
||||||
@ -192,20 +192,20 @@ const router = createBrowserRouter(
|
|||||||
const projectAndFile = decodedId.replace(defaultDir + sep, '')
|
const projectAndFile = decodedId.replace(defaultDir + sep, '')
|
||||||
const firstSlashIndex = projectAndFile.indexOf(sep)
|
const firstSlashIndex = projectAndFile.indexOf(sep)
|
||||||
const projectName = projectAndFile.slice(0, firstSlashIndex)
|
const projectName = projectAndFile.slice(0, firstSlashIndex)
|
||||||
const projectPath = defaultDir + sep + projectName
|
const projectPath = defaultDir + sep() + projectName
|
||||||
const currentFileName = projectAndFile.slice(firstSlashIndex + 1)
|
const currentFileName = projectAndFile.slice(firstSlashIndex + 1)
|
||||||
|
|
||||||
if (firstSlashIndex === -1 || !currentFileName)
|
if (firstSlashIndex === -1 || !currentFileName)
|
||||||
return redirect(
|
return redirect(
|
||||||
`${paths.FILE}/${encodeURIComponent(
|
`${paths.FILE}/${encodeURIComponent(
|
||||||
`${params.id}${sep}${PROJECT_ENTRYPOINT}`
|
`${params.id}${sep()}${PROJECT_ENTRYPOINT}`
|
||||||
)}`
|
)}`
|
||||||
)
|
)
|
||||||
|
|
||||||
// Note that PROJECT_ENTRYPOINT is hardcoded until we support multiple files
|
// Note that PROJECT_ENTRYPOINT is hardcoded until we support multiple files
|
||||||
const code = await readTextFile(decodedId)
|
const code = await readTextFile(decodedId)
|
||||||
const entrypointMetadata = await metadata(
|
const entrypointMetadata = await metadata(
|
||||||
projectPath + sep + PROJECT_ENTRYPOINT
|
projectPath + sep() + PROJECT_ENTRYPOINT
|
||||||
)
|
)
|
||||||
const children = await readDir(projectPath, { recursive: true })
|
const children = await readDir(projectPath, { recursive: true })
|
||||||
kclManager.setCodeAndExecute(code, false)
|
kclManager.setCodeAndExecute(code, false)
|
||||||
@ -277,7 +277,7 @@ const router = createBrowserRouter(
|
|||||||
const projects = await Promise.all(
|
const projects = await Promise.all(
|
||||||
projectsNoMeta.map(async (p: FileEntry) => ({
|
projectsNoMeta.map(async (p: FileEntry) => ({
|
||||||
entrypointMetadata: await metadata(
|
entrypointMetadata: await metadata(
|
||||||
p.path + sep + PROJECT_ENTRYPOINT
|
p.path + sep() + PROJECT_ENTRYPOINT
|
||||||
),
|
),
|
||||||
...p,
|
...p,
|
||||||
}))
|
}))
|
||||||
|
@ -14,12 +14,11 @@ import {
|
|||||||
import { useCommandsContext } from 'hooks/useCommandsContext'
|
import { useCommandsContext } from 'hooks/useCommandsContext'
|
||||||
import { DEFAULT_FILE_NAME, fileMachine } from 'machines/fileMachine'
|
import { DEFAULT_FILE_NAME, fileMachine } from 'machines/fileMachine'
|
||||||
import {
|
import {
|
||||||
createDir,
|
mkdir,
|
||||||
removeDir,
|
remove,
|
||||||
removeFile,
|
rename,
|
||||||
renameFile,
|
|
||||||
writeFile,
|
writeFile,
|
||||||
} from '@tauri-apps/api/fs'
|
} from '@tauri-apps/plugin-fs'
|
||||||
import { FILE_EXT, readProject } from 'lib/tauriFS'
|
import { FILE_EXT, readProject } from 'lib/tauriFS'
|
||||||
import { isTauri } from 'lib/isTauri'
|
import { isTauri } from 'lib/isTauri'
|
||||||
import { sep } from '@tauri-apps/api/path'
|
import { sep } from '@tauri-apps/api/path'
|
||||||
@ -57,7 +56,7 @@ export const FileMachineProvider = ({
|
|||||||
commandBarSend({ type: 'Close' })
|
commandBarSend({ type: 'Close' })
|
||||||
navigate(
|
navigate(
|
||||||
`${paths.FILE}/${encodeURIComponent(
|
`${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
|
let name = event.data.name.trim() || DEFAULT_FILE_NAME
|
||||||
|
|
||||||
if (event.data.makeDir) {
|
if (event.data.makeDir) {
|
||||||
await createDir(context.selectedDirectory.path + sep + name)
|
await mkdir(context.selectedDirectory.path + sep() + name)
|
||||||
} else {
|
} else {
|
||||||
await writeFile(
|
await writeFile(
|
||||||
context.selectedDirectory.path +
|
context.selectedDirectory.path +
|
||||||
sep +
|
sep() +
|
||||||
name +
|
name +
|
||||||
(name.endsWith(FILE_EXT) ? '' : FILE_EXT),
|
(name.endsWith(FILE_EXT) ? '' : FILE_EXT),
|
||||||
''
|
''
|
||||||
@ -103,13 +102,13 @@ export const FileMachineProvider = ({
|
|||||||
const { oldName, newName, isDir } = event.data
|
const { oldName, newName, isDir } = event.data
|
||||||
let name = newName ? newName : DEFAULT_FILE_NAME
|
let name = newName ? newName : DEFAULT_FILE_NAME
|
||||||
|
|
||||||
await renameFile(
|
await rename(
|
||||||
context.selectedDirectory.path + sep + oldName,
|
context.selectedDirectory.path + sep() + oldName,
|
||||||
context.selectedDirectory.path +
|
context.selectedDirectory.path +
|
||||||
sep +
|
sep() +
|
||||||
name +
|
name +
|
||||||
(name.endsWith(FILE_EXT) || isDir ? '' : FILE_EXT)
|
(name.endsWith(FILE_EXT) || isDir ? '' : FILE_EXT)
|
||||||
)
|
, {})
|
||||||
return (
|
return (
|
||||||
oldName !== name && `Successfully renamed "${oldName}" to "${name}"`
|
oldName !== name && `Successfully renamed "${oldName}" to "${name}"`
|
||||||
)
|
)
|
||||||
@ -121,11 +120,11 @@ export const FileMachineProvider = ({
|
|||||||
const isDir = !!event.data.children
|
const isDir = !!event.data.children
|
||||||
|
|
||||||
if (isDir) {
|
if (isDir) {
|
||||||
await removeDir(event.data.path, {
|
await remove(event.data.path, {
|
||||||
recursive: true,
|
recursive: true,
|
||||||
}).catch((e) => console.error('Error deleting directory', e))
|
}).catch((e) => console.error('Error deleting directory', e))
|
||||||
} else {
|
} else {
|
||||||
await removeFile(event.data.path).catch((e) =>
|
await remove(event.data.path).catch((e) =>
|
||||||
console.error('Error deleting file', e)
|
console.error('Error deleting file', e)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import { IndexLoaderData, paths } from 'Router'
|
import { IndexLoaderData, paths } from 'Router'
|
||||||
import { ActionButton } from './ActionButton'
|
import { ActionButton } from './ActionButton'
|
||||||
import Tooltip from './Tooltip'
|
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 { Dispatch, useRef, useState } from 'react'
|
||||||
import { useNavigate } from 'react-router-dom'
|
import { useNavigate } from 'react-router-dom'
|
||||||
import { Dialog, Disclosure } from '@headlessui/react'
|
import { Dialog, Disclosure } from '@headlessui/react'
|
||||||
|
@ -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 { isTauri } from 'lib/isTauri'
|
||||||
import { useEffect, useState } from 'react'
|
import { useEffect, useState } from 'react'
|
||||||
|
|
||||||
|
@ -20,7 +20,7 @@ import { getNodeFromPath } from './queryAst'
|
|||||||
import { IndexLoaderData } from 'Router'
|
import { IndexLoaderData } from 'Router'
|
||||||
import { Params, useLoaderData } from 'react-router-dom'
|
import { Params, useLoaderData } from 'react-router-dom'
|
||||||
import { isTauri } from 'lib/isTauri'
|
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 { toast } from 'react-hot-toast'
|
||||||
import { useParams } from 'react-router-dom'
|
import { useParams } from 'react-router-dom'
|
||||||
|
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
import { isTauri } from './isTauri'
|
import { isTauri } from './isTauri'
|
||||||
import { deserialize_files } from '../wasm-lib/pkg/wasm_lib'
|
import { deserialize_files } from '../wasm-lib/pkg/wasm_lib'
|
||||||
import { browserSaveFile } from './browserSaveFile'
|
import { browserSaveFile } from './browserSaveFile'
|
||||||
import { save } from '@tauri-apps/api/dialog'
|
import { save } from '@tauri-apps/plugin-dialog'
|
||||||
import { writeBinaryFile } from '@tauri-apps/api/fs'
|
import { writeFile } from '@tauri-apps/plugin-fs'
|
||||||
|
|
||||||
// Saves files locally from an export call.
|
// Saves files locally from an export call.
|
||||||
export async function exportSave(data: ArrayBuffer) {
|
export async function exportSave(data: ArrayBuffer) {
|
||||||
@ -25,7 +25,7 @@ export async function exportSave(data: ArrayBuffer) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Write the file.
|
// Write the file.
|
||||||
await writeBinaryFile(filePath, file.contents)
|
await writeFile(filePath, file.contents)
|
||||||
} else {
|
} else {
|
||||||
// Download the file to the user's computer.
|
// Download the file to the user's computer.
|
||||||
// Now we need to download the files to the user's downloads folder.
|
// Now we need to download the files to the user's downloads folder.
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { FileEntry } from '@tauri-apps/api/fs'
|
import { FileEntry } from '@tauri-apps/plugin-fs'
|
||||||
import {
|
import {
|
||||||
MAX_PADDING,
|
MAX_PADDING,
|
||||||
deepFileFilter,
|
deepFileFilter,
|
||||||
|
@ -1,10 +1,9 @@
|
|||||||
import {
|
import {
|
||||||
FileEntry,
|
mkdir,
|
||||||
createDir,
|
|
||||||
exists,
|
exists,
|
||||||
readDir,
|
readDir,
|
||||||
writeTextFile,
|
writeTextFile,
|
||||||
} from '@tauri-apps/api/fs'
|
} from '@tauri-apps/plugin-fs'
|
||||||
import { documentDir, homeDir, sep } from '@tauri-apps/api/path'
|
import { documentDir, homeDir, sep } from '@tauri-apps/api/path'
|
||||||
import { isTauri } from './isTauri'
|
import { isTauri } from './isTauri'
|
||||||
import { ProjectWithEntryPointMetadata } from '../Router'
|
import { ProjectWithEntryPointMetadata } from '../Router'
|
||||||
@ -28,7 +27,7 @@ export async function initializeProjectDirectory(directory: string) {
|
|||||||
if (directory) {
|
if (directory) {
|
||||||
const dirExists = await exists(directory)
|
const dirExists = await exists(directory)
|
||||||
if (!dirExists) {
|
if (!dirExists) {
|
||||||
await createDir(directory, { recursive: true })
|
await mkdir(directory, { recursive: true })
|
||||||
}
|
}
|
||||||
return directory
|
return directory
|
||||||
}
|
}
|
||||||
@ -46,13 +45,13 @@ export async function initializeProjectDirectory(directory: string) {
|
|||||||
const defaultDirExists = await exists(INITIAL_DEFAULT_DIR)
|
const defaultDirExists = await exists(INITIAL_DEFAULT_DIR)
|
||||||
|
|
||||||
if (!defaultDirExists) {
|
if (!defaultDirExists) {
|
||||||
await createDir(INITIAL_DEFAULT_DIR, { recursive: true })
|
await mkdir(INITIAL_DEFAULT_DIR, { recursive: true })
|
||||||
}
|
}
|
||||||
|
|
||||||
return INITIAL_DEFAULT_DIR
|
return INITIAL_DEFAULT_DIR
|
||||||
}
|
}
|
||||||
|
|
||||||
export function isProjectDirectory(fileOrDir: Partial<FileEntry>) {
|
export function isProjectDirectory(fileOrDir: Partial<any>) {
|
||||||
return (
|
return (
|
||||||
fileOrDir.children?.length &&
|
fileOrDir.children?.length &&
|
||||||
fileOrDir.children.some((child) => child.name === PROJECT_ENTRYPOINT)
|
fileOrDir.children.some((child) => child.name === PROJECT_ENTRYPOINT)
|
||||||
@ -70,7 +69,7 @@ export async function getProjectsInDir(projectDir: string) {
|
|||||||
|
|
||||||
const projectsWithMetadata = await Promise.all(
|
const projectsWithMetadata = await Promise.all(
|
||||||
readProjects.map(async (p) => ({
|
readProjects.map(async (p) => ({
|
||||||
entrypointMetadata: await metadata(p.path + sep + PROJECT_ENTRYPOINT),
|
entrypointMetadata: await metadata(p.path + sep() + PROJECT_ENTRYPOINT),
|
||||||
...p,
|
...p,
|
||||||
}))
|
}))
|
||||||
)
|
)
|
||||||
@ -78,17 +77,17 @@ export async function getProjectsInDir(projectDir: string) {
|
|||||||
return projectsWithMetadata
|
return projectsWithMetadata
|
||||||
}
|
}
|
||||||
|
|
||||||
export const isHidden = (fileOrDir: FileEntry) =>
|
export const isHidden = (fileOrDir: any) =>
|
||||||
!!fileOrDir.name?.startsWith('.')
|
!!fileOrDir.name?.startsWith('.')
|
||||||
|
|
||||||
export const isDir = (fileOrDir: FileEntry) =>
|
export const isDir = (fileOrDir: any) =>
|
||||||
'children' in fileOrDir && fileOrDir.children !== undefined
|
'children' in fileOrDir && fileOrDir.children !== undefined
|
||||||
|
|
||||||
export function deepFileFilter(
|
export function deepFileFilter(
|
||||||
entries: FileEntry[],
|
entries: any[],
|
||||||
filterFn: (f: FileEntry) => boolean
|
filterFn: (f: any) => boolean
|
||||||
): FileEntry[] {
|
): any[] {
|
||||||
const filteredEntries: FileEntry[] = []
|
const filteredEntries: any[] = []
|
||||||
for (const fileOrDir of entries) {
|
for (const fileOrDir of entries) {
|
||||||
if ('children' in fileOrDir && fileOrDir.children !== undefined) {
|
if ('children' in fileOrDir && fileOrDir.children !== undefined) {
|
||||||
const filteredChildren = deepFileFilter(fileOrDir.children, filterFn)
|
const filteredChildren = deepFileFilter(fileOrDir.children, filterFn)
|
||||||
@ -106,10 +105,10 @@ export function deepFileFilter(
|
|||||||
}
|
}
|
||||||
|
|
||||||
export function deepFileFilterFlat(
|
export function deepFileFilterFlat(
|
||||||
entries: FileEntry[],
|
entries: any[],
|
||||||
filterFn: (f: FileEntry) => boolean
|
filterFn: (f: any) => boolean
|
||||||
): FileEntry[] {
|
): any[] {
|
||||||
const filteredEntries: FileEntry[] = []
|
const filteredEntries: any[] = []
|
||||||
for (const fileOrDir of entries) {
|
for (const fileOrDir of entries) {
|
||||||
if ('children' in fileOrDir && fileOrDir.children !== undefined) {
|
if ('children' in fileOrDir && fileOrDir.children !== undefined) {
|
||||||
const filteredChildren = deepFileFilterFlat(fileOrDir.children, filterFn)
|
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,
|
// Given a read project, return the number of .kcl files,
|
||||||
// both in the root directory and in sub-directories,
|
// both in the root directory and in sub-directories,
|
||||||
// and folders that contain at least one .kcl file
|
// 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 flatProject = deepFileFilterFlat(project, isRelevantFileOrDir)
|
||||||
|
|
||||||
const kclFileCount = flatProject.filter((f) =>
|
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
|
// 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 contains at least one relevant file (even if it's nested)
|
||||||
// or is a completely empty directory
|
// or is a completely empty directory
|
||||||
export function isRelevantFileOrDir(fileOrDir: FileEntry) {
|
export function isRelevantFileOrDir(fileOrDir: any) {
|
||||||
let isRelevantDir = false
|
let isRelevantDir = false
|
||||||
if ('children' in fileOrDir && fileOrDir.children !== undefined) {
|
if ('children' in fileOrDir && fileOrDir.children !== undefined) {
|
||||||
isRelevantDir =
|
isRelevantDir =
|
||||||
@ -178,7 +177,7 @@ export function isRelevantFileOrDir(fileOrDir: FileEntry) {
|
|||||||
// Deeply sort the files and directories in a project like VS Code does:
|
// Deeply sort the files and directories in a project like VS Code does:
|
||||||
// The main.kcl file is always first, then files, then directories
|
// The main.kcl file is always first, then files, then directories
|
||||||
// Files and directories are sorted alphabetically
|
// Files and directories are sorted alphabetically
|
||||||
export function sortProject(project: FileEntry[]): FileEntry[] {
|
export function sortProject(project: any[]): any[] {
|
||||||
const sortedProject = project.sort((a, b) => {
|
const sortedProject = project.sort((a, b) => {
|
||||||
if (a.name === PROJECT_ENTRYPOINT) {
|
if (a.name === PROJECT_ENTRYPOINT) {
|
||||||
return -1
|
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) {
|
if ('children' in fileOrDir && fileOrDir.children !== undefined) {
|
||||||
return {
|
return {
|
||||||
...fileOrDir,
|
...fileOrDir,
|
||||||
@ -219,13 +218,13 @@ export async function createNewProject(
|
|||||||
|
|
||||||
const dirExists = await exists(path)
|
const dirExists = await exists(path)
|
||||||
if (!dirExists) {
|
if (!dirExists) {
|
||||||
await createDir(path, { recursive: true }).catch((err) => {
|
await mkdir(path, { recursive: true }).catch((err) => {
|
||||||
console.error('Error creating new directory:', err)
|
console.error('Error creating new directory:', err)
|
||||||
throw err
|
throw err
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
await writeTextFile(path + sep + PROJECT_ENTRYPOINT, initCode).catch(
|
await writeTextFile(path + sep() + PROJECT_ENTRYPOINT, initCode).catch(
|
||||||
(err) => {
|
(err) => {
|
||||||
console.error('Error creating new file:', err)
|
console.error('Error creating new file:', err)
|
||||||
throw err
|
throw err
|
||||||
@ -235,13 +234,13 @@ export async function createNewProject(
|
|||||||
const m = await metadata(path)
|
const m = await metadata(path)
|
||||||
|
|
||||||
return {
|
return {
|
||||||
name: path.slice(path.lastIndexOf(sep) + 1),
|
name: path.slice(path.lastIndexOf(sep()) + 1),
|
||||||
path: path,
|
path: path,
|
||||||
entrypointMetadata: m,
|
entrypointMetadata: m,
|
||||||
children: [
|
children: [
|
||||||
{
|
{
|
||||||
name: PROJECT_ENTRYPOINT,
|
name: PROJECT_ENTRYPOINT,
|
||||||
path: path + sep + PROJECT_ENTRYPOINT,
|
path: path + sep() + PROJECT_ENTRYPOINT,
|
||||||
children: [],
|
children: [],
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
@ -258,7 +257,7 @@ function interpolateProjectName(projectName: string) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Returns the next available index for a project name
|
// 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 regex = interpolateProjectName(projectName)
|
||||||
const matches = files.map((file) => file.name?.match(regex))
|
const matches = files.map((file) => file.name?.match(regex))
|
||||||
const indices = matches
|
const indices = matches
|
||||||
|
@ -2,7 +2,7 @@ import { createMachine, assign } from 'xstate'
|
|||||||
import { Models } from '@kittycad/lib'
|
import { Models } from '@kittycad/lib'
|
||||||
import withBaseURL from '../lib/withBaseURL'
|
import withBaseURL from '../lib/withBaseURL'
|
||||||
import { isTauri } from 'lib/isTauri'
|
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'
|
import { VITE_KC_API_BASE_URL } from 'env'
|
||||||
|
|
||||||
const SKIP_AUTH =
|
const SKIP_AUTH =
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import { assign, createMachine } from 'xstate'
|
import { assign, createMachine } from 'xstate'
|
||||||
import { ProjectWithEntryPointMetadata } from 'Router'
|
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 FILE_PERSIST_KEY = 'Last opened KCL files'
|
||||||
export const DEFAULT_FILE_NAME = 'Untitled'
|
export const DEFAULT_FILE_NAME = 'Untitled'
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { FormEvent, useEffect } from 'react'
|
import { FormEvent, useEffect } from 'react'
|
||||||
import { removeDir, renameFile } from '@tauri-apps/api/fs'
|
import { remove, rename } from '@tauri-apps/plugin-fs'
|
||||||
import {
|
import {
|
||||||
createNewProject,
|
createNewProject,
|
||||||
getNextProjectIndex,
|
getNextProjectIndex,
|
||||||
@ -67,7 +67,7 @@ const Home = () => {
|
|||||||
commandBarSend({ type: 'Close' })
|
commandBarSend({ type: 'Close' })
|
||||||
navigate(
|
navigate(
|
||||||
`${paths.FILE}/${encodeURIComponent(
|
`${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)
|
name = interpolateProjectNameWithIndex(name, nextIndex)
|
||||||
}
|
}
|
||||||
|
|
||||||
await createNewProject(context.defaultDirectory + sep + name)
|
await createNewProject(context.defaultDirectory + sep() + name)
|
||||||
|
|
||||||
if (shouldUpdateDefaultProjectName) {
|
if (shouldUpdateDefaultProjectName) {
|
||||||
sendToSettings({
|
sendToSettings({
|
||||||
@ -122,9 +122,10 @@ const Home = () => {
|
|||||||
name = interpolateProjectNameWithIndex(name, nextIndex)
|
name = interpolateProjectNameWithIndex(name, nextIndex)
|
||||||
}
|
}
|
||||||
|
|
||||||
await renameFile(
|
await rename(
|
||||||
context.defaultDirectory + sep + oldName,
|
context.defaultDirectory + sep() + oldName,
|
||||||
context.defaultDirectory + sep + name
|
context.defaultDirectory + sep() + name,
|
||||||
|
{}
|
||||||
)
|
)
|
||||||
return `Successfully renamed "${oldName}" to "${name}"`
|
return `Successfully renamed "${oldName}" to "${name}"`
|
||||||
},
|
},
|
||||||
@ -132,7 +133,7 @@ const Home = () => {
|
|||||||
context: ContextFrom<typeof homeMachine>,
|
context: ContextFrom<typeof homeMachine>,
|
||||||
event: EventFrom<typeof homeMachine, 'Delete project'>
|
event: EventFrom<typeof homeMachine, 'Delete project'>
|
||||||
) => {
|
) => {
|
||||||
await removeDir(context.defaultDirectory + sep + event.data.name, {
|
await remove(context.defaultDirectory + sep() + event.data.name, {
|
||||||
recursive: true,
|
recursive: true,
|
||||||
})
|
})
|
||||||
return `Successfully deleted "${event.data.name}"`
|
return `Successfully deleted "${event.data.name}"`
|
||||||
|
@ -44,12 +44,12 @@ function OnboardingWithNewFile() {
|
|||||||
nextIndex
|
nextIndex
|
||||||
)
|
)
|
||||||
const newFile = await createNewProject(
|
const newFile = await createNewProject(
|
||||||
defaultDirectory + sep + name,
|
defaultDirectory + sep() + name,
|
||||||
bracket
|
bracket
|
||||||
)
|
)
|
||||||
navigate(
|
navigate(
|
||||||
`${paths.FILE}/${encodeURIComponent(
|
`${paths.FILE}/${encodeURIComponent(
|
||||||
newFile.path + sep + PROJECT_ENTRYPOINT
|
newFile.path + sep() + PROJECT_ENTRYPOINT
|
||||||
)}${paths.ONBOARDING.INDEX}`
|
)}${paths.ONBOARDING.INDEX}`
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import { faArrowRotateBack, faXmark } from '@fortawesome/free-solid-svg-icons'
|
import { faArrowRotateBack, faXmark } from '@fortawesome/free-solid-svg-icons'
|
||||||
import { ActionButton } from '../components/ActionButton'
|
import { ActionButton } from '../components/ActionButton'
|
||||||
import { AppHeader } from '../components/AppHeader'
|
import { AppHeader } from '../components/AppHeader'
|
||||||
import { open } from '@tauri-apps/api/dialog'
|
import { open } from '@tauri-apps/plugin-dialog'
|
||||||
import {
|
import {
|
||||||
BaseUnit,
|
BaseUnit,
|
||||||
DEFAULT_PROJECT_NAME,
|
DEFAULT_PROJECT_NAME,
|
||||||
@ -94,7 +94,7 @@ export const Settings = () => {
|
|||||||
nextIndex
|
nextIndex
|
||||||
)
|
)
|
||||||
const newFile = await createNewProject(
|
const newFile = await createNewProject(
|
||||||
defaultDirectory + sep + name,
|
defaultDirectory + sep() + name,
|
||||||
bracket
|
bracket
|
||||||
)
|
)
|
||||||
navigate(`${paths.FILE}/${encodeURIComponent(newFile.path)}`)
|
navigate(`${paths.FILE}/${encodeURIComponent(newFile.path)}`)
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import { ActionButton } from '../components/ActionButton'
|
import { ActionButton } from '../components/ActionButton'
|
||||||
import { isTauri } from '../lib/isTauri'
|
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 { VITE_KC_SITE_BASE_URL, VITE_KC_API_BASE_URL } from '../env'
|
||||||
import { Themes, getSystemTheme } from '../lib/theme'
|
import { Themes, getSystemTheme } from '../lib/theme'
|
||||||
import { paths } from '../Router'
|
import { paths } from '../Router'
|
||||||
|
137
yarn.lock
137
yarn.lock
@ -1951,76 +1951,97 @@
|
|||||||
resolved "https://registry.yarnpkg.com/@tauri-apps/api/-/api-1.4.0.tgz#b4013ca3d17b853f7df29fe14079ebb4d52dbffa"
|
resolved "https://registry.yarnpkg.com/@tauri-apps/api/-/api-1.4.0.tgz#b4013ca3d17b853f7df29fe14079ebb4d52dbffa"
|
||||||
integrity sha512-Jd6HPoTM1PZSFIzq7FB8VmMu3qSSyo/3lSwLpoapW+lQ41CL5Dow2KryLg+gyazA/58DRWI9vu/XpEeHK4uMdw==
|
integrity sha512-Jd6HPoTM1PZSFIzq7FB8VmMu3qSSyo/3lSwLpoapW+lQ41CL5Dow2KryLg+gyazA/58DRWI9vu/XpEeHK4uMdw==
|
||||||
|
|
||||||
"@tauri-apps/api@^1.5.1":
|
"@tauri-apps/api@2.0.0-beta.0", "@tauri-apps/api@^2.0.0-beta.0":
|
||||||
version "1.5.1"
|
version "2.0.0-beta.0"
|
||||||
resolved "https://registry.yarnpkg.com/@tauri-apps/api/-/api-1.5.1.tgz#9074476c4323f71351db624e9711c99277cdfb99"
|
resolved "https://registry.yarnpkg.com/@tauri-apps/api/-/api-2.0.0-beta.0.tgz#36b10e6f459fd125530ac083262a355b84ce9b95"
|
||||||
integrity sha512-6unsZDOdlXTmauU3NhWhn+Cx0rODV+rvNvTdvolE5Kls5ybA6cqndQENDt1+FS0tF7ozCP66jwWoH6a5h90BrA==
|
integrity sha512-WLoh/Vk8cgY7XrJV7Vpb6PssReBZWQCATfYBb1aCRDk+sp0NyPwumx6fZ2ECAKzAcs3OeanluwZcajruIW4CPQ==
|
||||||
|
|
||||||
"@tauri-apps/cli-darwin-arm64@1.5.6":
|
"@tauri-apps/cli-darwin-arm64@2.0.0-beta.1":
|
||||||
version "1.5.6"
|
version "2.0.0-beta.1"
|
||||||
resolved "https://registry.yarnpkg.com/@tauri-apps/cli-darwin-arm64/-/cli-darwin-arm64-1.5.6.tgz#0d68eaf6fa1b35197a9d4991ac5377e6085a569a"
|
resolved "https://registry.yarnpkg.com/@tauri-apps/cli-darwin-arm64/-/cli-darwin-arm64-2.0.0-beta.1.tgz#ad90a2b82dc0b3f2e08b4bcff2d95797120fc9ea"
|
||||||
integrity sha512-NNvG3XLtciCMsBahbDNUEvq184VZmOveTGOuy0So2R33b/6FDkuWaSgWZsR1mISpOuP034htQYW0VITCLelfqg==
|
integrity sha512-d71utEr9H3fXAI6nKPaPuINpnvMQn+UIscOTzTMcrmIDqptOO0ix8z6C3HSvNxV0OjtlxzNJGWwOb24U0OYrgw==
|
||||||
|
|
||||||
"@tauri-apps/cli-darwin-x64@1.5.6":
|
"@tauri-apps/cli-darwin-x64@2.0.0-beta.1":
|
||||||
version "1.5.6"
|
version "2.0.0-beta.1"
|
||||||
resolved "https://registry.yarnpkg.com/@tauri-apps/cli-darwin-x64/-/cli-darwin-x64-1.5.6.tgz#a48e1f66b12c33cf6c9c216865f2e9a3ff18a923"
|
resolved "https://registry.yarnpkg.com/@tauri-apps/cli-darwin-x64/-/cli-darwin-x64-2.0.0-beta.1.tgz#8212d9d2c0d4492f23e4562588c2b1113cb6cd50"
|
||||||
integrity sha512-nkiqmtUQw3N1j4WoVjv81q6zWuZFhBLya/RNGUL94oafORloOZoSY0uTZJAoeieb3Y1YK0rCHSDl02MyV2Fi4A==
|
integrity sha512-bzsWZjQt5NG1uhbDTGw8Hmvm+J1d+9J7HXMMMwQc4E3kBns95sr4bIoXvgIq3cZYS4uyZOvdhEdjkSGg1c65Lg==
|
||||||
|
|
||||||
"@tauri-apps/cli-linux-arm-gnueabihf@1.5.6":
|
"@tauri-apps/cli-linux-arm-gnueabihf@2.0.0-beta.1":
|
||||||
version "1.5.6"
|
version "2.0.0-beta.1"
|
||||||
resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-arm-gnueabihf/-/cli-linux-arm-gnueabihf-1.5.6.tgz#385cd8054be7722cc07acc2d6d86f8e20c6265ef"
|
resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-arm-gnueabihf/-/cli-linux-arm-gnueabihf-2.0.0-beta.1.tgz#9713c073b473a9dee8c4b4951e5aa6e0e87febf5"
|
||||||
integrity sha512-z6SPx+axZexmWXTIVPNs4Tg7FtvdJl9EKxYN6JPjOmDZcqA13iyqWBQal2DA/GMZ1Xqo3vyJf6EoEaKaliymPQ==
|
integrity sha512-FMnZpk4a5D9QgZKkT00P3f4CHEZFpn/b+pWfZJ7vxCdir+Cc1eKOHiqhvmMBEeLlYlQFBaYeAK0EaZWnN82ZJA==
|
||||||
|
|
||||||
"@tauri-apps/cli-linux-arm64-gnu@1.5.6":
|
"@tauri-apps/cli-linux-arm64-gnu@2.0.0-beta.1":
|
||||||
version "1.5.6"
|
version "2.0.0-beta.1"
|
||||||
resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-arm64-gnu/-/cli-linux-arm64-gnu-1.5.6.tgz#bd3f8f61637a1073909cb2d663aa0c6e8e036337"
|
resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-arm64-gnu/-/cli-linux-arm64-gnu-2.0.0-beta.1.tgz#81d83894c3d08c52698da700f127d9d35dc2128a"
|
||||||
integrity sha512-QuQjMQmpsCbzBrmtQiG4uhnfAbdFx3nzm+9LtqjuZlurc12+Mj5MTgqQ3AOwQedH3f7C+KlvbqD2AdXpwTg7VA==
|
integrity sha512-0kE65P+6ppeAOFsJV6av5VhkjDv1dcHkObErpjJHpwYowuC3aqaCCnH3biR9gNvcoVUXsCwmMA/BkxUpq9W9/g==
|
||||||
|
|
||||||
"@tauri-apps/cli-linux-arm64-musl@1.5.6":
|
"@tauri-apps/cli-linux-arm64-musl@2.0.0-beta.1":
|
||||||
version "1.5.6"
|
version "2.0.0-beta.1"
|
||||||
resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-arm64-musl/-/cli-linux-arm64-musl-1.5.6.tgz#77fb4a804b77447bffba725a4b8b62df45f9ff97"
|
resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.0.0-beta.1.tgz#5239d2dc67e1dafac6a9deb64054028e099957e7"
|
||||||
integrity sha512-8j5dH3odweFeom7bRGlfzDApWVOT4jIq8/214Wl+JeiNVehouIBo9lZGeghZBH3XKFRwEvU23i7sRVjuh2s8mg==
|
integrity sha512-Wsj1eSrrAVeuFQWJq1gVIA78I8JM50fEsxbrMAOf89ZXpCYxJTNCJkyRQyLB+yHhv9nmhA3a1Mmr5ubhRETy1Q==
|
||||||
|
|
||||||
"@tauri-apps/cli-linux-x64-gnu@1.5.6":
|
"@tauri-apps/cli-linux-x64-gnu@2.0.0-beta.1":
|
||||||
version "1.5.6"
|
version "2.0.0-beta.1"
|
||||||
resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-x64-gnu/-/cli-linux-x64-gnu-1.5.6.tgz#e70a6c9dd243c2a3fa1fec69de9ebc9abf4dc795"
|
resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-x64-gnu/-/cli-linux-x64-gnu-2.0.0-beta.1.tgz#639c801e431816f1548c5a6a0e63b8449cc80db4"
|
||||||
integrity sha512-gbFHYHfdEGW0ffk8SigDsoXks6USpilF6wR0nqB/JbWzbzFR/sBuLVNQlJl1RKNakyJHu+lsFxGy0fcTdoX8xA==
|
integrity sha512-LkzLJWg+ud2gWuq8yAWJ3Sahrp79Vbd2Cotbm/RbfMi7RbRV8TQYj4zfUhyFJVnk4nF89kTnwfNxLdTw67CAOw==
|
||||||
|
|
||||||
"@tauri-apps/cli-linux-x64-musl@1.5.6":
|
"@tauri-apps/cli-linux-x64-musl@2.0.0-beta.1":
|
||||||
version "1.5.6"
|
version "2.0.0-beta.1"
|
||||||
resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-x64-musl/-/cli-linux-x64-musl-1.5.6.tgz#f25dad778b2da6ab7b2b81f81c0805026d742c33"
|
resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-x64-musl/-/cli-linux-x64-musl-2.0.0-beta.1.tgz#d0e07f10ab9de95d117acce1d9787eb6a625013a"
|
||||||
integrity sha512-9v688ogoLkeFYQNgqiSErfhTreLUd8B3prIBSYUt+x4+5Kcw91zWvIh+VSxL1n3KCGGsM7cuXhkGPaxwlEh1ug==
|
integrity sha512-Ro3PuLSNEZAw9/Rc2CP3k9P7LaUQ2TOFXJeW6G4aCXrd0MlJwlGhhjdZuLbmgzD1rda4dSpZGJPhbYvu8YD7eQ==
|
||||||
|
|
||||||
"@tauri-apps/cli-win32-arm64-msvc@1.5.6":
|
"@tauri-apps/cli-win32-arm64-msvc@2.0.0-beta.1":
|
||||||
version "1.5.6"
|
version "2.0.0-beta.1"
|
||||||
resolved "https://registry.yarnpkg.com/@tauri-apps/cli-win32-arm64-msvc/-/cli-win32-arm64-msvc-1.5.6.tgz#47d0f359e04d93c1fd0b527e18a56606f3df9bed"
|
resolved "https://registry.yarnpkg.com/@tauri-apps/cli-win32-arm64-msvc/-/cli-win32-arm64-msvc-2.0.0-beta.1.tgz#9b7e964413031cab6bc938468983e4bb80b44d38"
|
||||||
integrity sha512-DRNDXFNZb6y5IZrw+lhTTA9l4wbzO4TNRBAlHAiXUrH+pRFZ/ZJtv5WEuAj9ocVSahVw2NaK5Yaold4NPAxHog==
|
integrity sha512-SWNF+5B+lBbW/Kq1wTMVG9x97PqJUOo8eWAr/nlMm3J0lYbTWAa8/ScibaPjq82HiPhv8WCJXlcO6FEqWCoJ2A==
|
||||||
|
|
||||||
"@tauri-apps/cli-win32-ia32-msvc@1.5.6":
|
"@tauri-apps/cli-win32-ia32-msvc@2.0.0-beta.1":
|
||||||
version "1.5.6"
|
version "2.0.0-beta.1"
|
||||||
resolved "https://registry.yarnpkg.com/@tauri-apps/cli-win32-ia32-msvc/-/cli-win32-ia32-msvc-1.5.6.tgz#54c7ec152065e8167068411b82748a25a483d948"
|
resolved "https://registry.yarnpkg.com/@tauri-apps/cli-win32-ia32-msvc/-/cli-win32-ia32-msvc-2.0.0-beta.1.tgz#7c390f30135e9c26b6685296bb7890447a92a5f7"
|
||||||
integrity sha512-oUYKNR/IZjF4fsOzRpw0xesl2lOjhsQEyWlgbpT25T83EU113Xgck9UjtI7xemNI/OPCv1tPiaM1e7/ABdg5iA==
|
integrity sha512-NvfP16fSlfq6GLHJH+gAxEsJn+Jvz3HoxMTLxAg7Ra0ycMODFu4xbNn6Hp7Djn297qTHHLYDva4Np6Whw5DUlQ==
|
||||||
|
|
||||||
"@tauri-apps/cli-win32-x64-msvc@1.5.6":
|
"@tauri-apps/cli-win32-x64-msvc@2.0.0-beta.1":
|
||||||
version "1.5.6"
|
version "2.0.0-beta.1"
|
||||||
resolved "https://registry.yarnpkg.com/@tauri-apps/cli-win32-x64-msvc/-/cli-win32-x64-msvc-1.5.6.tgz#963280a4f7001c27d4e4745f302728297c007deb"
|
resolved "https://registry.yarnpkg.com/@tauri-apps/cli-win32-x64-msvc/-/cli-win32-x64-msvc-2.0.0-beta.1.tgz#a82890bcd8b15feded016a2bfa51a1d199dc17f5"
|
||||||
integrity sha512-RmEf1os9C8//uq2hbjXi7Vgz9ne7798ZxqemAZdUwo1pv3oLVZSz1/IvZmUHPdy2e6zSeySqWu1D0Y3QRNN+dg==
|
integrity sha512-9TKbDQyVHW0p1a7aXQEKg+MhCyFMpzD26puLKOxbTPiTcRUR4lUFq5Bhf1VR5ihoqnZNhJEtuR1mA16ZrIkuKQ==
|
||||||
|
|
||||||
"@tauri-apps/cli@^1.5.6":
|
"@tauri-apps/cli@^2.0.0-beta.1":
|
||||||
version "1.5.6"
|
version "2.0.0-beta.1"
|
||||||
resolved "https://registry.yarnpkg.com/@tauri-apps/cli/-/cli-1.5.6.tgz#5011c9dd3a36dc89073fed7d4cb429d38b37862b"
|
resolved "https://registry.yarnpkg.com/@tauri-apps/cli/-/cli-2.0.0-beta.1.tgz#d9e42dd2d2f9319dffcceacb82d18e19b4acf840"
|
||||||
integrity sha512-k4Y19oVCnt7WZb2TnDzLqfs7o98Jq0tUoVMv+JQSzuRDJqaVu2xMBZ8dYplEn+EccdR5SOMyzaLBJWu38TVK1A==
|
integrity sha512-u3AcZPdHsg9qT3e9PSD0H2IVZetQvWuBOyF81CN7/sY+AJGOli7i2d38Bj4wJs50tuMotoseiMcxuyxTlAdBnw==
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
"@tauri-apps/cli-darwin-arm64" "1.5.6"
|
"@tauri-apps/cli-darwin-arm64" "2.0.0-beta.1"
|
||||||
"@tauri-apps/cli-darwin-x64" "1.5.6"
|
"@tauri-apps/cli-darwin-x64" "2.0.0-beta.1"
|
||||||
"@tauri-apps/cli-linux-arm-gnueabihf" "1.5.6"
|
"@tauri-apps/cli-linux-arm-gnueabihf" "2.0.0-beta.1"
|
||||||
"@tauri-apps/cli-linux-arm64-gnu" "1.5.6"
|
"@tauri-apps/cli-linux-arm64-gnu" "2.0.0-beta.1"
|
||||||
"@tauri-apps/cli-linux-arm64-musl" "1.5.6"
|
"@tauri-apps/cli-linux-arm64-musl" "2.0.0-beta.1"
|
||||||
"@tauri-apps/cli-linux-x64-gnu" "1.5.6"
|
"@tauri-apps/cli-linux-x64-gnu" "2.0.0-beta.1"
|
||||||
"@tauri-apps/cli-linux-x64-musl" "1.5.6"
|
"@tauri-apps/cli-linux-x64-musl" "2.0.0-beta.1"
|
||||||
"@tauri-apps/cli-win32-arm64-msvc" "1.5.6"
|
"@tauri-apps/cli-win32-arm64-msvc" "2.0.0-beta.1"
|
||||||
"@tauri-apps/cli-win32-ia32-msvc" "1.5.6"
|
"@tauri-apps/cli-win32-ia32-msvc" "2.0.0-beta.1"
|
||||||
"@tauri-apps/cli-win32-x64-msvc" "1.5.6"
|
"@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":
|
"@testing-library/dom@^9.0.0":
|
||||||
version "9.3.3"
|
version "9.3.3"
|
||||||
|
Reference in New Issue
Block a user