From 24746bb33d89039011598f4d579fb7360e685044 Mon Sep 17 00:00:00 2001 From: Your Name Date: Thu, 19 Feb 2026 01:23:27 +0200 Subject: [PATCH] feat: scaffold Tauri v2 + Vite + TypeScript project --- package.json | 19 ++++++++++++++ src-tauri/Cargo.toml | 29 +++++++++++++++++++++ src-tauri/build.rs | 3 +++ src-tauri/capabilities/default.json | 10 ++++++++ src-tauri/src/lib.rs | 7 +++++ src-tauri/src/main.rs | 5 ++++ src-tauri/tauri.conf.json | 40 +++++++++++++++++++++++++++++ src/index.html | 14 ++++++++++ src/main.ts | 1 + src/vite-env.d.ts | 1 + tsconfig.json | 18 +++++++++++++ vite.config.ts | 17 ++++++++++++ 12 files changed, 164 insertions(+) create mode 100644 package.json create mode 100644 src-tauri/Cargo.toml create mode 100644 src-tauri/build.rs create mode 100644 src-tauri/capabilities/default.json create mode 100644 src-tauri/src/lib.rs create mode 100644 src-tauri/src/main.rs create mode 100644 src-tauri/tauri.conf.json create mode 100644 src/index.html create mode 100644 src/main.ts create mode 100644 src/vite-env.d.ts create mode 100644 tsconfig.json create mode 100644 vite.config.ts diff --git a/package.json b/package.json new file mode 100644 index 0000000..9f5e94a --- /dev/null +++ b/package.json @@ -0,0 +1,19 @@ +{ + "name": "tutorialdock", + "private": true, + "version": "0.1.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "tsc && vite build", + "tauri": "tauri" + }, + "dependencies": { + "@tauri-apps/api": "^2.0.0" + }, + "devDependencies": { + "@tauri-apps/cli": "^2.0.0", + "typescript": "^5.3.0", + "vite": "^5.0.0" + } +} diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml new file mode 100644 index 0000000..f1724ad --- /dev/null +++ b/src-tauri/Cargo.toml @@ -0,0 +1,29 @@ +[package] +name = "tutorialdock" +version = "0.1.0" +description = "TutorialDock - Video Tutorial Library Manager" +authors = [] +edition = "2021" + +[lib] +name = "tutorialdock_lib" +crate-type = ["lib", "cdylib", "staticlib"] + +[build-dependencies] +tauri-build = { version = "2", features = [] } + +[dependencies] +tauri = { version = "2", features = ["protocol-asset"] } +tauri-plugin-dialog = "2" +serde = { version = "1", features = ["derive"] } +serde_json = "1" +sha2 = "0.10" +tokio = { version = "1", features = ["full"] } +reqwest = { version = "0.12", features = ["stream"] } +zip = "2" +which = "7" +regex = "1" +once_cell = "1" + +[dev-dependencies] +tempfile = "3" diff --git a/src-tauri/build.rs b/src-tauri/build.rs new file mode 100644 index 0000000..d860e1e --- /dev/null +++ b/src-tauri/build.rs @@ -0,0 +1,3 @@ +fn main() { + tauri_build::build() +} diff --git a/src-tauri/capabilities/default.json b/src-tauri/capabilities/default.json new file mode 100644 index 0000000..fae53c1 --- /dev/null +++ b/src-tauri/capabilities/default.json @@ -0,0 +1,10 @@ +{ + "$schema": "../gen/schemas/desktop-schema.json", + "identifier": "default", + "description": "Default capabilities for TutorialDock", + "windows": ["main"], + "permissions": [ + "core:default", + "dialog:default" + ] +} diff --git a/src-tauri/src/lib.rs b/src-tauri/src/lib.rs new file mode 100644 index 0000000..f41a5ed --- /dev/null +++ b/src-tauri/src/lib.rs @@ -0,0 +1,7 @@ +#[cfg_attr(mobile, tauri::mobile_entry_point)] +pub fn run() { + tauri::Builder::default() + .plugin(tauri_plugin_dialog::init()) + .run(tauri::generate_context!()) + .expect("error while running tauri application"); +} diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs new file mode 100644 index 0000000..9b48f6b --- /dev/null +++ b/src-tauri/src/main.rs @@ -0,0 +1,5 @@ +#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] + +fn main() { + tutorialdock_lib::run(); +} diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json new file mode 100644 index 0000000..d87ba98 --- /dev/null +++ b/src-tauri/tauri.conf.json @@ -0,0 +1,40 @@ +{ + "$schema": "https://raw.githubusercontent.com/tauri-apps/tauri/dev/crates/tauri-utils/schema.json", + "productName": "TutorialDock", + "version": "0.1.0", + "identifier": "com.tutorialdock.app", + "build": { + "devUrl": "http://localhost:1420", + "frontendDist": "../dist", + "beforeDevCommand": "npm run dev", + "beforeBuildCommand": "npm run build" + }, + "app": { + "windows": [ + { + "title": "TutorialDock", + "width": 1320, + "height": 860, + "minWidth": 640, + "minHeight": 480 + } + ], + "security": { + "csp": "default-src 'self'; media-src 'self' tutdock: asset: https://asset.localhost; font-src 'self' tutdock: asset: https://asset.localhost data:; style-src 'self' tutdock: asset: https://asset.localhost 'unsafe-inline'; img-src 'self' tutdock: asset: https://asset.localhost data:; script-src 'self'" + } + }, + "bundle": { + "active": false, + "targets": "all", + "icon": [ + "icons/32x32.png", + "icons/128x128.png", + "icons/128x128@2x.png", + "icons/icon.icns", + "icons/icon.ico" + ] + }, + "plugins": { + "dialog": {} + } +} diff --git a/src/index.html b/src/index.html new file mode 100644 index 0000000..7784b83 --- /dev/null +++ b/src/index.html @@ -0,0 +1,14 @@ + + + + + + TutorialDock + + +
+
+
+ + + diff --git a/src/main.ts b/src/main.ts new file mode 100644 index 0000000..8e94a08 --- /dev/null +++ b/src/main.ts @@ -0,0 +1 @@ +console.log("TutorialDock frontend loaded"); diff --git a/src/vite-env.d.ts b/src/vite-env.d.ts new file mode 100644 index 0000000..11f02fe --- /dev/null +++ b/src/vite-env.d.ts @@ -0,0 +1 @@ +/// diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..9793ee2 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,18 @@ +{ + "compilerOptions": { + "target": "ES2021", + "useDefineForClassFields": true, + "module": "ESNext", + "lib": ["ES2021", "DOM", "DOM.Iterable"], + "skipLibCheck": true, + "strict": true, + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true + }, + "include": ["src"] +} diff --git a/vite.config.ts b/vite.config.ts new file mode 100644 index 0000000..05605b3 --- /dev/null +++ b/vite.config.ts @@ -0,0 +1,17 @@ +import { defineConfig } from "vite"; + +export default defineConfig({ + root: "src", + clearScreen: false, + server: { + port: 1420, + strictPort: true, + watch: { + ignored: ["**/src-tauri/**"], + }, + }, + build: { + outDir: "../dist", + emptyOutDir: true, + }, +});