From 4494a53c2c10ab3b4edd9efefc09b5844717d911 Mon Sep 17 00:00:00 2001 From: ImSavsis Date: Sun, 19 Jul 2026 06:11:24 +0500 Subject: [PATCH] fix: tsc -b project refs + move shared types, was clobbering preload d.ts --- .gitignore | 2 ++ src/preload/index.ts | 34 +++++++++++-------- .../src/components/AddToListButton.tsx | 2 +- src/renderer/src/components/AnimeCard.tsx | 2 +- src/renderer/src/components/Player.tsx | 2 +- src/renderer/src/components/Row.tsx | 2 +- .../src/components/WishlistButton.tsx | 2 +- src/renderer/src/lib/AuthContext.tsx | 2 +- src/renderer/src/lib/api.ts | 2 +- src/renderer/src/lib/wishlist.ts | 2 +- src/renderer/src/pages/Catalog.tsx | 2 +- src/renderer/src/pages/Genres.tsx | 2 +- src/renderer/src/pages/History.tsx | 2 +- src/renderer/src/pages/Home.tsx | 2 +- src/renderer/src/pages/MyLists.tsx | 2 +- src/renderer/src/pages/Schedule.tsx | 2 +- src/renderer/src/pages/TitleDetail.tsx | 2 +- src/renderer/src/pages/Wishlist.tsx | 2 +- src/{renderer/src/lib => shared}/types.ts | 0 tsconfig.node.json | 3 +- tsconfig.web.json | 4 ++- 21 files changed, 42 insertions(+), 33 deletions(-) rename src/{renderer/src/lib => shared}/types.ts (100%) diff --git a/.gitignore b/.gitignore index 328b3f1..17e4733 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,9 @@ node_modules/ out/ dist/ +.tsc-out/ _research/ .claude/ *.log .DS_Store +*.tsbuildinfo diff --git a/src/preload/index.ts b/src/preload/index.ts index a395bb7..9284f0a 100644 --- a/src/preload/index.ts +++ b/src/preload/index.ts @@ -1,30 +1,34 @@ import { contextBridge, ipcRenderer } from 'electron' +import type { CatalogResponse, CollectionType, HistoryItem, TimecodeItem, UserProfile } from '../shared/types' const api = { - openExternal: (url: string) => ipcRenderer.invoke('shell:openExternal', url), + openExternal: (url: string): Promise => ipcRenderer.invoke('shell:openExternal', url), - login: (login: string, password: string, remember: boolean) => + login: (login: string, password: string, remember: boolean): Promise => ipcRenderer.invoke('auth:login', login, password, remember), - loadSavedSession: () => ipcRenderer.invoke('auth:loadSaved'), - logout: () => ipcRenderer.invoke('auth:logout'), + loadSavedSession: (): Promise => ipcRenderer.invoke('auth:loadSaved'), + logout: (): Promise => ipcRenderer.invoke('auth:logout'), - favoritesList: (page: number, limit: number) => + favoritesList: (page: number, limit: number): Promise => ipcRenderer.invoke('account:favoritesList', page, limit), - favoriteAdd: (releaseId: number) => ipcRenderer.invoke('account:favoriteAdd', releaseId), - favoriteRemove: (releaseId: number) => ipcRenderer.invoke('account:favoriteRemove', releaseId), + favoriteAdd: (releaseId: number): Promise => ipcRenderer.invoke('account:favoriteAdd', releaseId), + favoriteRemove: (releaseId: number): Promise => + ipcRenderer.invoke('account:favoriteRemove', releaseId), - collectionList: (typeOfCollection: string, page: number, limit: number) => + collectionList: (typeOfCollection: string, page: number, limit: number): Promise => ipcRenderer.invoke('account:collectionList', typeOfCollection, page, limit), - collectionAdd: (releaseId: number, typeOfCollection: string) => + collectionAdd: (releaseId: number, typeOfCollection: string): Promise => ipcRenderer.invoke('account:collectionAdd', releaseId, typeOfCollection), - collectionRemove: (releaseId: number) => ipcRenderer.invoke('account:collectionRemove', releaseId), - collectionIds: () => ipcRenderer.invoke('account:collectionIds'), - favoriteIds: () => ipcRenderer.invoke('account:favoriteIds'), + collectionRemove: (releaseId: number): Promise => + ipcRenderer.invoke('account:collectionRemove', releaseId), + collectionIds: (): Promise> => + ipcRenderer.invoke('account:collectionIds'), + favoriteIds: (): Promise => ipcRenderer.invoke('account:favoriteIds'), - historyList: () => ipcRenderer.invoke('account:historyList'), + historyList: (): Promise<{ data: HistoryItem[] }> => ipcRenderer.invoke('account:historyList'), - timecodes: () => ipcRenderer.invoke('account:timecodes'), - timecodeSave: (releaseEpisodeId: string, time: number, isWatched: boolean) => + timecodes: (): Promise => ipcRenderer.invoke('account:timecodes'), + timecodeSave: (releaseEpisodeId: string, time: number, isWatched: boolean): Promise => ipcRenderer.invoke('account:timecodeSave', releaseEpisodeId, time, isWatched), } diff --git a/src/renderer/src/components/AddToListButton.tsx b/src/renderer/src/components/AddToListButton.tsx index cffb627..d149d3f 100644 --- a/src/renderer/src/components/AddToListButton.tsx +++ b/src/renderer/src/components/AddToListButton.tsx @@ -1,7 +1,7 @@ import { useEffect, useState } from 'react' import { motion, AnimatePresence } from 'framer-motion' import { useAuth } from '../lib/AuthContext' -import type { CollectionType } from '../lib/types' +import type { CollectionType } from '../../../shared/types' const LABELS: Record = { WATCHING: 'Смотрю', diff --git a/src/renderer/src/components/AnimeCard.tsx b/src/renderer/src/components/AnimeCard.tsx index a9f8059..ead6e07 100644 --- a/src/renderer/src/components/AnimeCard.tsx +++ b/src/renderer/src/components/AnimeCard.tsx @@ -1,6 +1,6 @@ import { Link } from 'react-router-dom' import { motion } from 'framer-motion' -import type { Release } from '../lib/types' +import type { Release } from '../../../shared/types' import { imageUrl } from '../lib/api' import WishlistButton from './WishlistButton' diff --git a/src/renderer/src/components/Player.tsx b/src/renderer/src/components/Player.tsx index 295c071..e056249 100644 --- a/src/renderer/src/components/Player.tsx +++ b/src/renderer/src/components/Player.tsx @@ -1,6 +1,6 @@ import { useEffect, useRef, useState, useCallback } from 'react' import Hls from 'hls.js' -import type { Episode } from '../lib/types' +import type { Episode } from '../../../shared/types' import { loadPlayerPrefs, savePlayerPrefs, PlayerPrefs } from '../lib/playerPrefs' const QUALITIES = [ diff --git a/src/renderer/src/components/Row.tsx b/src/renderer/src/components/Row.tsx index cec2ae3..708e5f8 100644 --- a/src/renderer/src/components/Row.tsx +++ b/src/renderer/src/components/Row.tsx @@ -1,5 +1,5 @@ import { motion } from 'framer-motion' -import type { Release } from '../lib/types' +import type { Release } from '../../../shared/types' import AnimeCard from './AnimeCard' const container = { diff --git a/src/renderer/src/components/WishlistButton.tsx b/src/renderer/src/components/WishlistButton.tsx index 857385d..2026256 100644 --- a/src/renderer/src/components/WishlistButton.tsx +++ b/src/renderer/src/components/WishlistButton.tsx @@ -1,7 +1,7 @@ import { useEffect, useState } from 'react' import { motion } from 'framer-motion' import { isInWishlist, toggleWishlist, onWishlistChange } from '../lib/wishlist' -import type { Release } from '../lib/types' +import type { Release } from '../../../shared/types' export default function WishlistButton({ release, diff --git a/src/renderer/src/lib/AuthContext.tsx b/src/renderer/src/lib/AuthContext.tsx index 28aae10..0b80708 100644 --- a/src/renderer/src/lib/AuthContext.tsx +++ b/src/renderer/src/lib/AuthContext.tsx @@ -1,5 +1,5 @@ import { createContext, useContext, useEffect, useState, ReactNode } from 'react' -import type { UserProfile } from './types' +import type { UserProfile } from '../../../shared/types' interface AuthState { user: UserProfile | null diff --git a/src/renderer/src/lib/api.ts b/src/renderer/src/lib/api.ts index 8a98d08..752c9c7 100644 --- a/src/renderer/src/lib/api.ts +++ b/src/renderer/src/lib/api.ts @@ -6,7 +6,7 @@ import type { ScheduleDay, ScheduleNow, ValueDescription, -} from './types' +} from '../../../shared/types' const GATEWAY = 'https://api.savsis.xyz/api/anilibria' const API_BASE = `${GATEWAY}/api/v1` diff --git a/src/renderer/src/lib/wishlist.ts b/src/renderer/src/lib/wishlist.ts index 9184615..cea2943 100644 --- a/src/renderer/src/lib/wishlist.ts +++ b/src/renderer/src/lib/wishlist.ts @@ -1,4 +1,4 @@ -import type { Release } from './types' +import type { Release } from '../../../shared/types' const KEY = 'anisav:wishlist' const EVENT = 'anisav:wishlist-changed' diff --git a/src/renderer/src/pages/Catalog.tsx b/src/renderer/src/pages/Catalog.tsx index 7803265..f32d027 100644 --- a/src/renderer/src/pages/Catalog.tsx +++ b/src/renderer/src/pages/Catalog.tsx @@ -2,7 +2,7 @@ import { useEffect, useMemo, useState } from 'react' import { useSearchParams } from 'react-router-dom' import { motion, AnimatePresence } from 'framer-motion' import { api } from '../lib/api' -import type { CatalogFilters, Genre, Release, ValueDescription } from '../lib/types' +import type { CatalogFilters, Genre, Release, ValueDescription } from '../../../shared/types' import AnimeCard from '../components/AnimeCard' import { GridSkeleton } from '../components/Skeleton' diff --git a/src/renderer/src/pages/Genres.tsx b/src/renderer/src/pages/Genres.tsx index 21f5641..efbbd44 100644 --- a/src/renderer/src/pages/Genres.tsx +++ b/src/renderer/src/pages/Genres.tsx @@ -2,7 +2,7 @@ import { useEffect, useState } from 'react' import { Link } from 'react-router-dom' import { motion } from 'framer-motion' import { api, imageUrl } from '../lib/api' -import type { Genre } from '../lib/types' +import type { Genre } from '../../../shared/types' import Loader from '../components/Loader' const container = { hidden: {}, show: { transition: { staggerChildren: 0.035 } } } diff --git a/src/renderer/src/pages/History.tsx b/src/renderer/src/pages/History.tsx index b890ba8..c0f5acb 100644 --- a/src/renderer/src/pages/History.tsx +++ b/src/renderer/src/pages/History.tsx @@ -1,7 +1,7 @@ import { useEffect, useState } from 'react' import { Link } from 'react-router-dom' import { useAuth } from '../lib/AuthContext' -import type { HistoryItem } from '../lib/types' +import type { HistoryItem } from '../../../shared/types' import { imageUrl } from '../lib/api' import Loader from '../components/Loader' diff --git a/src/renderer/src/pages/Home.tsx b/src/renderer/src/pages/Home.tsx index 739850b..c5690a0 100644 --- a/src/renderer/src/pages/Home.tsx +++ b/src/renderer/src/pages/Home.tsx @@ -1,7 +1,7 @@ import { useEffect, useState } from 'react' import { motion } from 'framer-motion' import { api, imageUrl } from '../lib/api' -import type { Release, ScheduleDay } from '../lib/types' +import type { Release, ScheduleDay } from '../../../shared/types' import Row from '../components/Row' import { GridSkeleton } from '../components/Skeleton' import { Link } from 'react-router-dom' diff --git a/src/renderer/src/pages/MyLists.tsx b/src/renderer/src/pages/MyLists.tsx index f6386d6..2d1de78 100644 --- a/src/renderer/src/pages/MyLists.tsx +++ b/src/renderer/src/pages/MyLists.tsx @@ -1,7 +1,7 @@ import { useEffect, useState } from 'react' import { motion, AnimatePresence } from 'framer-motion' import { useAuth } from '../lib/AuthContext' -import type { CollectionType, Release } from '../lib/types' +import type { CollectionType, Release } from '../../../shared/types' import AnimeCard from '../components/AnimeCard' import Loader from '../components/Loader' diff --git a/src/renderer/src/pages/Schedule.tsx b/src/renderer/src/pages/Schedule.tsx index 91e92ab..dd76db4 100644 --- a/src/renderer/src/pages/Schedule.tsx +++ b/src/renderer/src/pages/Schedule.tsx @@ -1,6 +1,6 @@ import { useEffect, useState } from 'react' import { api } from '../lib/api' -import type { ScheduleDay } from '../lib/types' +import type { ScheduleDay } from '../../../shared/types' import AnimeCard from '../components/AnimeCard' import Loader from '../components/Loader' diff --git a/src/renderer/src/pages/TitleDetail.tsx b/src/renderer/src/pages/TitleDetail.tsx index fb9a099..88ee31c 100644 --- a/src/renderer/src/pages/TitleDetail.tsx +++ b/src/renderer/src/pages/TitleDetail.tsx @@ -2,7 +2,7 @@ import { useCallback, useEffect, useMemo, useState } from 'react' import { useParams } from 'react-router-dom' import { motion } from 'framer-motion' import { api, imageUrl } from '../lib/api' -import type { Episode, Release, TimecodeItem } from '../lib/types' +import type { Episode, Release, TimecodeItem } from '../../../shared/types' import { useAuth } from '../lib/AuthContext' import { getAllLocalProgress, saveLocalProgress } from '../lib/localProgress' import Loader from '../components/Loader' diff --git a/src/renderer/src/pages/Wishlist.tsx b/src/renderer/src/pages/Wishlist.tsx index 8221146..6a1352a 100644 --- a/src/renderer/src/pages/Wishlist.tsx +++ b/src/renderer/src/pages/Wishlist.tsx @@ -1,7 +1,7 @@ import { useEffect, useState } from 'react' import { motion } from 'framer-motion' import { getWishlist, onWishlistChange } from '../lib/wishlist' -import type { Release } from '../lib/types' +import type { Release } from '../../../shared/types' import AnimeCard from '../components/AnimeCard' const container = { hidden: {}, show: { transition: { staggerChildren: 0.04 } } } diff --git a/src/renderer/src/lib/types.ts b/src/shared/types.ts similarity index 100% rename from src/renderer/src/lib/types.ts rename to src/shared/types.ts diff --git a/tsconfig.node.json b/tsconfig.node.json index 3c3e4c1..4e9ac30 100644 --- a/tsconfig.node.json +++ b/tsconfig.node.json @@ -1,7 +1,8 @@ { - "include": ["electron.vite.config.*", "src/main/**/*", "src/preload/**/*"], + "include": ["electron.vite.config.*", "src/main/**/*", "src/preload/**/*", "src/shared/**/*"], "compilerOptions": { "composite": true, + "outDir": "./.tsc-out/node", "target": "ES2022", "module": "ESNext", "moduleResolution": "Bundler", diff --git a/tsconfig.web.json b/tsconfig.web.json index dba3b36..34561a8 100644 --- a/tsconfig.web.json +++ b/tsconfig.web.json @@ -1,7 +1,9 @@ { - "include": ["src/renderer/src/**/*", "src/preload/*.d.ts"], + "include": ["src/renderer/src/**/*", "src/preload/*.d.ts", "src/shared/**/*"], + "references": [{ "path": "./tsconfig.node.json" }], "compilerOptions": { "composite": true, + "outDir": "./.tsc-out/web", "target": "ES2022", "lib": ["ES2022", "DOM", "DOM.Iterable"], "useDefineForClassFields": true,