fix: tsc -b project refs + move shared types, was clobbering preload d.ts

This commit is contained in:
ImSavsis 2026-07-19 06:11:24 +05:00
parent a75157a45c
commit 4494a53c2c
21 changed files with 42 additions and 33 deletions

2
.gitignore vendored
View file

@ -1,7 +1,9 @@
node_modules/
out/
dist/
.tsc-out/
_research/
.claude/
*.log
.DS_Store
*.tsbuildinfo

View file

@ -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<void> => ipcRenderer.invoke('shell:openExternal', url),
login: (login: string, password: string, remember: boolean) =>
login: (login: string, password: string, remember: boolean): Promise<UserProfile> =>
ipcRenderer.invoke('auth:login', login, password, remember),
loadSavedSession: () => ipcRenderer.invoke('auth:loadSaved'),
logout: () => ipcRenderer.invoke('auth:logout'),
loadSavedSession: (): Promise<UserProfile | null> => ipcRenderer.invoke('auth:loadSaved'),
logout: (): Promise<void> => ipcRenderer.invoke('auth:logout'),
favoritesList: (page: number, limit: number) =>
favoritesList: (page: number, limit: number): Promise<CatalogResponse> =>
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<void> => ipcRenderer.invoke('account:favoriteAdd', releaseId),
favoriteRemove: (releaseId: number): Promise<void> =>
ipcRenderer.invoke('account:favoriteRemove', releaseId),
collectionList: (typeOfCollection: string, page: number, limit: number) =>
collectionList: (typeOfCollection: string, page: number, limit: number): Promise<CatalogResponse> =>
ipcRenderer.invoke('account:collectionList', typeOfCollection, page, limit),
collectionAdd: (releaseId: number, typeOfCollection: string) =>
collectionAdd: (releaseId: number, typeOfCollection: string): Promise<void> =>
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<void> =>
ipcRenderer.invoke('account:collectionRemove', releaseId),
collectionIds: (): Promise<Array<{ release_id: number; type_of_collection: CollectionType }>> =>
ipcRenderer.invoke('account:collectionIds'),
favoriteIds: (): Promise<unknown> => 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<TimecodeItem[]> => ipcRenderer.invoke('account:timecodes'),
timecodeSave: (releaseEpisodeId: string, time: number, isWatched: boolean): Promise<void> =>
ipcRenderer.invoke('account:timecodeSave', releaseEpisodeId, time, isWatched),
}

View file

@ -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<CollectionType, string> = {
WATCHING: 'Смотрю',

View file

@ -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'

View file

@ -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 = [

View file

@ -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 = {

View file

@ -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,

View file

@ -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

View file

@ -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`

View file

@ -1,4 +1,4 @@
import type { Release } from './types'
import type { Release } from '../../../shared/types'
const KEY = 'anisav:wishlist'
const EVENT = 'anisav:wishlist-changed'

View file

@ -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'

View file

@ -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 } } }

View file

@ -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'

View file

@ -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'

View file

@ -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'

View file

@ -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'

View file

@ -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'

View file

@ -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 } } }

View file

@ -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",

View file

@ -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,