Initial commit

This commit is contained in:
2026-03-08 01:34:54 +08:00
commit 1f104f73c8
441 changed files with 64911 additions and 0 deletions

View File

@@ -0,0 +1,15 @@
import { defineApiModule } from '../types.js'
export const AI_MODULE = defineApiModule({
id: 'ai',
name: 'AI',
basePath: '/ai',
order: 70,
version: '1.0.0',
frontend: {
enabled: false,
},
backend: {
enabled: true,
},
})

View File

@@ -0,0 +1,15 @@
import { defineApiModule } from '../types.js'
export const DOCUMENT_PARSER_MODULE = defineApiModule({
id: 'document-parser',
name: 'Document Parser',
basePath: '/document-parser',
order: 60,
version: '1.0.0',
frontend: {
enabled: false,
},
backend: {
enabled: true,
},
})

View File

@@ -0,0 +1,12 @@
import { defineModule } from '../types.js'
export const HOME_MODULE = defineModule({
id: 'home',
name: '首页',
basePath: '/home',
order: 0,
version: '1.0.0',
backend: {
enabled: false,
},
})

1
shared/modules/index.ts Normal file
View File

@@ -0,0 +1 @@
export * from './types.js'

View File

@@ -0,0 +1,10 @@
import { defineEndpoints } from '../types.js'
export const PYDEMOS_ENDPOINTS = defineEndpoints({
list: { path: '/', method: 'GET' },
create: { path: '/create', method: 'POST' },
delete: { path: '/delete', method: 'DELETE' },
rename: { path: '/rename', method: 'POST' },
})
export type PyDemosEndpoints = typeof PYDEMOS_ENDPOINTS

View File

@@ -0,0 +1,15 @@
import { defineApiModule } from '../types.js'
import { PYDEMOS_ENDPOINTS } from './api.js'
export * from './api.js'
export const PYDEMOS_MODULE = defineApiModule({
id: 'pydemos',
name: 'Python Demos',
basePath: '/pydemos',
order: 50,
version: '1.0.0',
endpoints: PYDEMOS_ENDPOINTS,
})
export type { PyDemosEndpoints } from './api.js'

View File

@@ -0,0 +1,10 @@
import { defineEndpoints } from '../types.js'
export const RECYCLE_BIN_ENDPOINTS = defineEndpoints({
list: { path: '/', method: 'GET' },
restore: { path: '/restore', method: 'POST' },
permanent: { path: '/permanent', method: 'DELETE' },
empty: { path: '/empty', method: 'DELETE' },
})
export type RecycleBinEndpoints = typeof RECYCLE_BIN_ENDPOINTS

View File

@@ -0,0 +1,15 @@
import { defineApiModule } from '../types.js'
import { RECYCLE_BIN_ENDPOINTS } from './api.js'
export * from './api.js'
export const RECYCLE_BIN_MODULE = defineApiModule({
id: 'recycle-bin',
name: '回收站',
basePath: '/recycle-bin',
order: 40,
version: '1.0.0',
endpoints: RECYCLE_BIN_ENDPOINTS,
})
export type { RecycleBinEndpoints } from './api.js'

View File

@@ -0,0 +1,12 @@
import { defineEndpoints } from '../types.js'
export const REMOTE_ENDPOINTS = defineEndpoints({
getConfig: { path: '/config', method: 'GET' },
saveConfig: { path: '/config', method: 'POST' },
getScreenshot: { path: '/screenshot', method: 'GET' },
saveScreenshot: { path: '/screenshot', method: 'POST' },
getData: { path: '/data', method: 'GET' },
saveData: { path: '/data', method: 'POST' },
})
export type RemoteEndpoints = typeof REMOTE_ENDPOINTS

View File

@@ -0,0 +1,16 @@
import { defineApiModule } from '../types.js'
import { REMOTE_ENDPOINTS } from './api.js'
export * from './types.js'
export * from './api.js'
export const REMOTE_MODULE = defineApiModule({
id: 'remote',
name: '远程',
basePath: '/remote',
order: 25,
version: '1.0.0',
endpoints: REMOTE_ENDPOINTS,
})
export type { RemoteEndpoints } from './api.js'

View File

@@ -0,0 +1,11 @@
export interface RemoteDevice {
id: string
deviceName: string
serverHost: string
desktopPort: number
gitPort: number
}
export interface RemoteConfig {
devices: RemoteDevice[]
}

View File

@@ -0,0 +1,12 @@
import { defineModule } from '../types.js'
export const SEARCH_MODULE = defineModule({
id: 'search',
name: '搜索',
basePath: '/search',
order: 10,
version: '1.0.0',
backend: {
enabled: false,
},
})

View File

@@ -0,0 +1,12 @@
import { defineModule } from '../types.js'
export const SETTINGS_MODULE = defineModule({
id: 'settings',
name: '设置',
basePath: '/settings',
order: 100,
version: '1.0.0',
backend: {
enabled: false,
},
})

View File

@@ -0,0 +1,13 @@
import { defineEndpoints } from '../types.js'
export const TIME_TRACKING_ENDPOINTS = defineEndpoints({
current: { path: '/current', method: 'GET' },
event: { path: '/event', method: 'POST' },
day: { path: '/day/:date', method: 'GET' },
week: { path: '/week/:startDate', method: 'GET' },
month: { path: '/month/:yearMonth', method: 'GET' },
year: { path: '/year/:year', method: 'GET' },
stats: { path: '/stats', method: 'GET' },
})
export type TimeTrackingEndpoints = typeof TIME_TRACKING_ENDPOINTS

View File

@@ -0,0 +1,15 @@
import { defineApiModule } from '../types.js'
import { TIME_TRACKING_ENDPOINTS } from './api.js'
export * from './api.js'
export const TIME_TRACKING_MODULE = defineApiModule({
id: 'time-tracking',
name: '时间统计',
basePath: '/time',
order: 20,
version: '1.0.0',
endpoints: TIME_TRACKING_ENDPOINTS,
})
export type { TimeTrackingEndpoints } from './api.js'

View File

@@ -0,0 +1,12 @@
import { defineEndpoints } from '../types.js'
export const TODO_ENDPOINTS = defineEndpoints({
list: { path: '/', method: 'GET' },
save: { path: '/save', method: 'POST' },
add: { path: '/add', method: 'POST' },
toggle: { path: '/toggle', method: 'POST' },
update: { path: '/update', method: 'POST' },
delete: { path: '/delete', method: 'DELETE' },
})
export type TodoEndpoints = typeof TODO_ENDPOINTS

View File

@@ -0,0 +1,16 @@
import { defineApiModule } from '../types.js'
import { TODO_ENDPOINTS } from './api.js'
export * from './types.js'
export * from './api.js'
export const TODO_MODULE = defineApiModule({
id: 'todo',
name: 'TODO',
basePath: '/todo',
order: 30,
version: '1.0.0',
endpoints: TODO_ENDPOINTS,
})
export type { TodoEndpoints } from './api.js'

View File

@@ -0,0 +1,22 @@
import type { DayTodo } from '../../types/todo.js'
export interface TodoFilePath {
relPath: string
fullPath: string
}
export interface ParsedTodoFile {
fullPath: string
dayTodos: DayTodo[]
}
export interface GetTodoResult {
dayTodos: DayTodo[]
year: number
month: number
}
export interface MigrationContext {
todayStr: string
yesterdayStr: string
}

83
shared/modules/types.ts Normal file
View File

@@ -0,0 +1,83 @@
export type HttpMethod = 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH'
export interface EndpointDefinition {
path: string
method: HttpMethod
description?: string
}
export interface ModuleEndpoints {
[key: string]: EndpointDefinition
}
export interface ModuleFrontendConfig {
enabled?: boolean
icon?: string
component?: string
}
export interface ModuleBackendConfig {
enabled?: boolean
createModule?: string
}
export interface ModuleDefinition<
TId extends string = string,
TEndpoints extends ModuleEndpoints = ModuleEndpoints
> {
id: TId
name: string
basePath: string
order: number
version?: string
endpoints?: TEndpoints
dependencies?: string[]
icon?: string
frontend?: ModuleFrontendConfig
backend?: ModuleBackendConfig
}
export interface ApiModuleConfig<
TId extends string = string,
TEndpoints extends ModuleEndpoints = ModuleEndpoints
> extends ModuleDefinition<TId, TEndpoints> {
version: string
}
export function defineModule<
TId extends string,
TEndpoints extends ModuleEndpoints
>(
config: ModuleDefinition<TId, TEndpoints>
): ModuleDefinition<TId, TEndpoints> {
return config
}
export function defineApiModule<
TId extends string,
TEndpoints extends ModuleEndpoints
>(
config: ApiModuleConfig<TId, TEndpoints>
): ApiModuleConfig<TId, TEndpoints> {
return config
}
export function defineEndpoints<TEndpoints extends ModuleEndpoints>(
endpoints: TEndpoints
): TEndpoints {
return endpoints
}
export type ExtractEndpointPaths<TEndpoints extends ModuleEndpoints> = {
[K in keyof TEndpoints]: TEndpoints[K]['path']
}
export type ExtractEndpointMethods<TEndpoints extends ModuleEndpoints> = {
[K in keyof TEndpoints]: TEndpoints[K]['method']
}
export type EndpointConfig = EndpointDefinition
export interface ModuleApiConfig {
endpoints: ModuleEndpoints
}

View File

@@ -0,0 +1,12 @@
import { defineModule } from '../types.js'
export const WEREAD_MODULE = defineModule({
id: 'weread',
name: '微信读书',
basePath: '/weread',
order: 20,
version: '1.0.0',
backend: {
enabled: false,
},
})