From 0eee109bdd94a60b2a4c9b8d7bed32abcc3f9000 Mon Sep 17 00:00:00 2001 From: Brandon Thomas Date: Tue, 6 May 2025 17:43:32 -0400 Subject: [PATCH] This fixes it - it's the stupid library version --- frontend/libs/tauri-api/.babelrc | 12 +++++ frontend/libs/tauri-api/.eslintrc.json | 36 ++++++++++++++ frontend/libs/tauri-api/README.md | 7 +++ frontend/libs/tauri-api/package.json | 20 ++++++++ frontend/libs/tauri-api/src/index.ts | 2 + .../src/lib/settings/GetAppPreferences.ts | 36 ++++++++++++++ .../src/lib/settings/UpdateAppPreference.ts | 30 ++++++++++++ frontend/libs/tauri-api/src/server.ts | 1 + frontend/libs/tauri-api/src/test-setup.ts | 3 ++ frontend/libs/tauri-api/tsconfig.json | 13 +++++ frontend/libs/tauri-api/tsconfig.lib.json | 48 ++++++++++++++++++ frontend/libs/tauri-api/tsconfig.spec.json | 34 +++++++++++++ frontend/libs/tauri-api/vite.config.ts | 49 +++++++++++++++++++ .../src/lib/api/GetAppPreferences.ts | 2 + .../libs/tauri-utils/src/lib/api/index.ts | 2 + frontend/package-lock.json | 11 +++++ 16 files changed, 306 insertions(+) create mode 100644 frontend/libs/tauri-api/.babelrc create mode 100644 frontend/libs/tauri-api/.eslintrc.json create mode 100644 frontend/libs/tauri-api/README.md create mode 100644 frontend/libs/tauri-api/package.json create mode 100644 frontend/libs/tauri-api/src/index.ts create mode 100644 frontend/libs/tauri-api/src/lib/settings/GetAppPreferences.ts create mode 100644 frontend/libs/tauri-api/src/lib/settings/UpdateAppPreference.ts create mode 100644 frontend/libs/tauri-api/src/server.ts create mode 100644 frontend/libs/tauri-api/src/test-setup.ts create mode 100644 frontend/libs/tauri-api/tsconfig.json create mode 100644 frontend/libs/tauri-api/tsconfig.lib.json create mode 100644 frontend/libs/tauri-api/tsconfig.spec.json create mode 100644 frontend/libs/tauri-api/vite.config.ts create mode 100644 frontend/libs/tauri-utils/src/lib/api/GetAppPreferences.ts create mode 100644 frontend/libs/tauri-utils/src/lib/api/index.ts diff --git a/frontend/libs/tauri-api/.babelrc b/frontend/libs/tauri-api/.babelrc new file mode 100644 index 0000000000..1ea870ead4 --- /dev/null +++ b/frontend/libs/tauri-api/.babelrc @@ -0,0 +1,12 @@ +{ + "presets": [ + [ + "@nx/react/babel", + { + "runtime": "automatic", + "useBuiltIns": "usage" + } + ] + ], + "plugins": [] +} diff --git a/frontend/libs/tauri-api/.eslintrc.json b/frontend/libs/tauri-api/.eslintrc.json new file mode 100644 index 0000000000..def19dc990 --- /dev/null +++ b/frontend/libs/tauri-api/.eslintrc.json @@ -0,0 +1,36 @@ +{ + "extends": [ + "plugin:@nx/react", + "../../.eslintrc.json" + ], + "ignorePatterns": [ + "!**/*", + "**/vite.config.*.timestamp*", + "**/vitest.config.*.timestamp*" + ], + "overrides": [ + { + "files": [ + "*.ts", + "*.tsx", + "*.js", + "*.jsx" + ], + "rules": {} + }, + { + "files": [ + "*.ts", + "*.tsx" + ], + "rules": {} + }, + { + "files": [ + "*.js", + "*.jsx" + ], + "rules": {} + } + ] +} diff --git a/frontend/libs/tauri-api/README.md b/frontend/libs/tauri-api/README.md new file mode 100644 index 0000000000..eedd302338 --- /dev/null +++ b/frontend/libs/tauri-api/README.md @@ -0,0 +1,7 @@ +# @frontend/tauri-api + +This library was generated with [Nx](https://nx.dev). + +## Running unit tests + +Run `nx test @frontend/tauri-api` to execute the unit tests via [Vitest](https://vitest.dev/). diff --git a/frontend/libs/tauri-api/package.json b/frontend/libs/tauri-api/package.json new file mode 100644 index 0000000000..03ab315e9e --- /dev/null +++ b/frontend/libs/tauri-api/package.json @@ -0,0 +1,20 @@ +{ + "name": "@storyteller/tauri-api", + "version": "0.0.1", + "type": "module", + "main": "./dist/index.js", + "module": "./dist/index.js", + "types": "./dist/index.d.ts", + "exports": { + "./package.json": "./package.json", + ".": { + "development": "./src/index.ts", + "types": "./dist/index.d.ts", + "import": "./dist/index.js", + "default": "./dist/index.js" + } + }, + "dependencies": { + "@tauri-apps/api": "^2.4.0" + } +} diff --git a/frontend/libs/tauri-api/src/index.ts b/frontend/libs/tauri-api/src/index.ts new file mode 100644 index 0000000000..a858878488 --- /dev/null +++ b/frontend/libs/tauri-api/src/index.ts @@ -0,0 +1,2 @@ + +export * from './lib/settings/GetAppPreferences.js'; diff --git a/frontend/libs/tauri-api/src/lib/settings/GetAppPreferences.ts b/frontend/libs/tauri-api/src/lib/settings/GetAppPreferences.ts new file mode 100644 index 0000000000..6f0b7c29ed --- /dev/null +++ b/frontend/libs/tauri-api/src/lib/settings/GetAppPreferences.ts @@ -0,0 +1,36 @@ +import { invoke } from "@tauri-apps/api/core"; + +export interface GetAppPreferencesResult { + preferences: AppPreferencesPayload, +} + +export interface AppPreferencesPayload { + // Preferred download directory + preferred_download_directory: PreferredDownloadDirectory, + + // Play sounds on events. + play_sounds: boolean, + + // Sound names to play. + // These are keys, not filenames, and are defined by the frontend. + generation_success_sound?: string, + generation_failure_sound?: string, + generation_enqueue_sound?: string, +} + +export type PreferredDownloadDirectory = SystemDirectory | CustomDirectory; + +export interface SystemDirectory { + // If the directory is a system directory. + system: string, +} + +export interface CustomDirectory { + // If the directory is a custom user directory. + custom: string, +} + +export const GetAppPreferences = async () : Promise => { + let result = await invoke("get_app_preferences_command"); + return (result as GetAppPreferencesResult); +} diff --git a/frontend/libs/tauri-api/src/lib/settings/UpdateAppPreference.ts b/frontend/libs/tauri-api/src/lib/settings/UpdateAppPreference.ts new file mode 100644 index 0000000000..7187372bfc --- /dev/null +++ b/frontend/libs/tauri-api/src/lib/settings/UpdateAppPreference.ts @@ -0,0 +1,30 @@ + +import { invoke } from "@tauri-apps/api/core"; +import { PreferredDownloadDirectory } from "./GetAppPreferences"; + +export interface UpdateAppPreferencesRequest { + preference: PreferenceName, + value: undefined | string | boolean | PreferredDownloadDirectory, +} + +export enum PreferenceName { + PreferredDownloadDirectory = "preferred_download_directory", + PlaySounds = "play_sounds", + GenerationSuccessSound = "generation_success_sound", + GenerationFailureSound = "generation_failure_sound", + GenerationEnqueueSound = "generation_enqueue_sound", +} + +export interface UpdateAppPreferencesResult { + success: boolean +} + +export const UpdateAppPreferences = async (request: UpdateAppPreferencesRequest) : Promise => { + let result = await invoke("update_app_preferences_command", { + request: { + preference: request.preference, + value: request.value, + } + }); + return (result as UpdateAppPreferencesResult); +} diff --git a/frontend/libs/tauri-api/src/server.ts b/frontend/libs/tauri-api/src/server.ts new file mode 100644 index 0000000000..82a91ac5e2 --- /dev/null +++ b/frontend/libs/tauri-api/src/server.ts @@ -0,0 +1 @@ +// This file should be used to export ONLY server-code from the library. \ No newline at end of file diff --git a/frontend/libs/tauri-api/src/test-setup.ts b/frontend/libs/tauri-api/src/test-setup.ts new file mode 100644 index 0000000000..59f7836d9c --- /dev/null +++ b/frontend/libs/tauri-api/src/test-setup.ts @@ -0,0 +1,3 @@ +import { installGlobals } from '@remix-run/node'; +import "@testing-library/jest-dom/matchers"; +installGlobals(); \ No newline at end of file diff --git a/frontend/libs/tauri-api/tsconfig.json b/frontend/libs/tauri-api/tsconfig.json new file mode 100644 index 0000000000..8c5fc025ff --- /dev/null +++ b/frontend/libs/tauri-api/tsconfig.json @@ -0,0 +1,13 @@ +{ + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.lib.json" + }, + { + "path": "./tsconfig.spec.json" + } + ], + "extends": "../../tsconfig.base.json" +} diff --git a/frontend/libs/tauri-api/tsconfig.lib.json b/frontend/libs/tauri-api/tsconfig.lib.json new file mode 100644 index 0000000000..c43e2edbaa --- /dev/null +++ b/frontend/libs/tauri-api/tsconfig.lib.json @@ -0,0 +1,48 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "outDir": "dist", + "types": [ + "node", + "@nx/react/typings/cssmodule.d.ts", + "@nx/react/typings/image.d.ts", + "vite/client" + ], + "rootDir": "src", + "jsx": "react-jsx", + "tsBuildInfoFile": "dist/tsconfig.lib.tsbuildinfo" + }, + "exclude": [ + "out-tsc", + "dist", + "**/*.spec.ts", + "**/*.test.ts", + "**/*.spec.tsx", + "**/*.test.tsx", + "**/*.spec.js", + "**/*.test.js", + "**/*.spec.jsx", + "**/*.test.jsx", + "vite.config.ts", + "vite.config.mts", + "vitest.config.ts", + "vitest.config.mts", + "src/**/*.test.ts", + "src/**/*.spec.ts", + "src/**/*.test.tsx", + "src/**/*.spec.tsx", + "src/**/*.test.js", + "src/**/*.spec.js", + "src/**/*.test.jsx", + "src/**/*.spec.jsx", + "eslint.config.js", + "eslint.config.cjs", + "eslint.config.mjs" + ], + "include": [ + "src/**/*.js", + "src/**/*.jsx", + "src/**/*.ts", + "src/**/*.tsx" + ] +} diff --git a/frontend/libs/tauri-api/tsconfig.spec.json b/frontend/libs/tauri-api/tsconfig.spec.json new file mode 100644 index 0000000000..c1faced82c --- /dev/null +++ b/frontend/libs/tauri-api/tsconfig.spec.json @@ -0,0 +1,34 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "outDir": "./out-tsc/vitest", + "types": [ + "vitest/globals", + "vitest/importMeta", + "vite/client", + "node", + "vitest" + ], + "jsx": "react-jsx" + }, + "include": [ + "vite.config.ts", + "vite.config.mts", + "vitest.config.ts", + "vitest.config.mts", + "src/**/*.test.ts", + "src/**/*.spec.ts", + "src/**/*.test.tsx", + "src/**/*.spec.tsx", + "src/**/*.test.js", + "src/**/*.spec.js", + "src/**/*.test.jsx", + "src/**/*.spec.jsx", + "src/**/*.d.ts" + ], + "references": [ + { + "path": "./tsconfig.lib.json" + } + ] +} diff --git a/frontend/libs/tauri-api/vite.config.ts b/frontend/libs/tauri-api/vite.config.ts new file mode 100644 index 0000000000..b5478fa6ee --- /dev/null +++ b/frontend/libs/tauri-api/vite.config.ts @@ -0,0 +1,49 @@ +/// +import { defineConfig } from 'vite'; +import react from '@vitejs/plugin-react'; +import dts from 'vite-plugin-dts'; +import * as path from 'path'; + +export default defineConfig(() => ({ +root: __dirname, +cacheDir: '../../node_modules/.vite/libs/tauri-api', +plugins: [react(), dts({ entryRoot: 'src', tsconfigPath: path.join(__dirname, 'tsconfig.lib.json') })], +// Uncomment this if you are using workers. +// worker: { +// plugins: [ nxViteTsPaths() ], +// }, +// Configuration for building your library. +// See: https://vitejs.dev/guide/build.html#library-mode +build: { +outDir: './dist', +emptyOutDir: true, +reportCompressedSize: true, +commonjsOptions: { +transformMixedEsModules: true, +}, +lib: { +// Could also be a dictionary or array of multiple entry points. +entry: 'src/index.ts', +name: '@frontend/tauri-api', +fileName: 'index', +// Change this to the formats you want to support. +// Don't forget to update your package.json as well. +formats: ['es' as const] +}, +rollupOptions: { +// External packages that should not be bundled into your library. +external: ['react','react-dom','react/jsx-runtime'] +}, +}, +test: {setupFiles: ['./src/test-setup.ts'], +watch: false, +globals: true, +environment: 'jsdom', +include: ['{src,tests}/**/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx}'], +reporters: ['default'], +coverage: { +reportsDirectory: './test-output/vitest/coverage', +provider: 'v8' as const, +} +}, +})); \ No newline at end of file diff --git a/frontend/libs/tauri-utils/src/lib/api/GetAppPreferences.ts b/frontend/libs/tauri-utils/src/lib/api/GetAppPreferences.ts new file mode 100644 index 0000000000..a8f60aab24 --- /dev/null +++ b/frontend/libs/tauri-utils/src/lib/api/GetAppPreferences.ts @@ -0,0 +1,2 @@ + +export const TEST = 1; \ No newline at end of file diff --git a/frontend/libs/tauri-utils/src/lib/api/index.ts b/frontend/libs/tauri-utils/src/lib/api/index.ts new file mode 100644 index 0000000000..cd0c6fe954 --- /dev/null +++ b/frontend/libs/tauri-utils/src/lib/api/index.ts @@ -0,0 +1,2 @@ + +export * from './GetAppPreferences'; \ No newline at end of file diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 2e333a49b4..0ac7aec208 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -2253,6 +2253,13 @@ "@types/howler": "^2.2.12" } }, + "libs/tauri-api": { + "name": "@storyteller/tauri-api", + "version": "0.0.1", + "dependencies": { + "@tauri-apps/api": "^2.4.0" + } + }, "libs/tauri-utils": { "name": "@storyteller/tauri-utils", "version": "0.0.1" @@ -10267,6 +10274,10 @@ "resolved": "libs/soundboard", "link": true }, + "node_modules/@storyteller/tauri-api": { + "resolved": "libs/tauri-api", + "link": true + }, "node_modules/@storyteller/tauri-utils": { "resolved": "libs/tauri-utils", "link": true