refactor(cache): 提升 upstash-modules 类型声明至 shared/lib

This commit is contained in:
SpecialX
2026-07-05 17:33:31 +08:00
parent 16ffd44161
commit bc03275262
2 changed files with 77 additions and 66 deletions

View File

@@ -1,69 +1,8 @@
/* eslint-disable @typescript-eslint/no-explicit-any */
/**
* Upstash SDK 可选依赖类型声明audit-P1-6
* 向后兼容 shim实际声明已提升至 shared/lib/upstash-modules.d.ts
* rate-limit 与 cache 模块共用同一份类型声明。
*
* 这两个包通过动态 import 在运行时加载,仅在 `RATE_LIMIT_DRIVER=redis`
* 时才需要安装。默认内存模式下无需安装
*
* 安装命令:
* npm install @upstash/ratelimit @upstash/redis
*
* 安装后这两个包自带的类型声明将覆盖此处的 any 声明,
* 提供完整的类型检查。
* 保留此文件避免破坏现有 import 路径。
* 新代码请直接从 @/shared/lib/upstash-modules.d.ts 引用
*/
declare module "@upstash/ratelimit" {
export class Ratelimit {
constructor(config: {
redis: any
limiter: any
analytics?: boolean
prefix?: string
})
limit(
identifier: string,
): Promise<{
success: boolean
limit: number
remaining: number
reset: number
pending: Promise<unknown>
}>
reset(identifier: string): Promise<void>
static slidingWindow(
max: number,
window: string,
): { type: "sliding-window"; max: number; window: string }
static fixedWindow(
max: number,
window: string,
): { type: "fixed-window"; max: number; window: string }
static tokenBucket(
max: number,
window: string,
refillRate: number,
): { type: "token-bucket"; max: number; window: string; refillRate: number }
}
}
declare module "@upstash/redis" {
export class Redis {
constructor(config: {
url: string
token: string
automaticDeserialization?: boolean
responseEncoding?: "base64" | "none"
retry?: {
retries: number
backoff: (retryCount: number) => number
}
})
get(key: string): Promise<string | null>
set(key: string, value: string): Promise<"OK">
del(...keys: string[]): Promise<number>
incr(key: string): Promise<number>
expire(key: string, seconds: number): Promise<number>
pexpire(key: string, milliseconds: number): Promise<number>
[key: string]: any
}
}
export {}

72
src/shared/lib/upstash-modules.d.ts vendored Normal file
View File

@@ -0,0 +1,72 @@
/* eslint-disable @typescript-eslint/no-explicit-any */
/**
* Upstash SDK 可选依赖类型声明cache + rate-limit 共用)
*
* 这两个包通过动态 import 在运行时加载,仅在 `RATE_LIMIT_DRIVER=redis`
* 或 `CACHE_DRIVER=redis` 时才需要安装。默认内存模式下无需安装。
*
* 安装命令:
* npm install @upstash/ratelimit @upstash/redis
*
* 安装后这两个包自带的类型声明将覆盖此处的 any 声明,
* 提供完整的类型检查。
*
* 注意rate-limit 与 cache 模块共用同一份类型声明,
* 避免在多处重复维护。
*/
declare module "@upstash/ratelimit" {
export class Ratelimit {
constructor(config: {
redis: any
limiter: any
analytics?: boolean
prefix?: string
})
limit(
identifier: string,
): Promise<{
success: boolean
limit: number
remaining: number
reset: number
pending: Promise<unknown>
}>
reset(identifier: string): Promise<void>
static slidingWindow(
max: number,
window: string,
): { type: "sliding-window"; max: number; window: string }
static fixedWindow(
max: number,
window: string,
): { type: "fixed-window"; max: number; window: string }
static tokenBucket(
max: number,
window: string,
refillRate: number,
): { type: "token-bucket"; max: number; window: string; refillRate: number }
}
}
declare module "@upstash/redis" {
export class Redis {
constructor(config: {
url: string
token: string
automaticDeserialization?: boolean
responseEncoding?: "base64" | "none"
retry?: {
retries: number
backoff: (retryCount: number) => number
}
})
get(key: string): Promise<string | null>
set(key: string, value: string): Promise<"OK">
del(...keys: string[]): Promise<number>
incr(key: string): Promise<number>
expire(key: string, seconds: number): Promise<number>
pexpire(key: string, milliseconds: number): Promise<number>
[key: string]: any
}
}