refactor(cache): 提升 upstash-modules 类型声明至 shared/lib
This commit is contained in:
71
src/shared/lib/rate-limit/upstash-modules.d.ts
vendored
71
src/shared/lib/rate-limit/upstash-modules.d.ts
vendored
@@ -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`
|
* 保留此文件避免破坏现有 import 路径。
|
||||||
* 时才需要安装。默认内存模式下无需安装。
|
* 新代码请直接从 @/shared/lib/upstash-modules.d.ts 引用。
|
||||||
*
|
|
||||||
* 安装命令:
|
|
||||||
* npm install @upstash/ratelimit @upstash/redis
|
|
||||||
*
|
|
||||||
* 安装后这两个包自带的类型声明将覆盖此处的 any 声明,
|
|
||||||
* 提供完整的类型检查。
|
|
||||||
*/
|
*/
|
||||||
|
export {}
|
||||||
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
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
72
src/shared/lib/upstash-modules.d.ts
vendored
Normal file
72
src/shared/lib/upstash-modules.d.ts
vendored
Normal 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
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user