Files
shrimp-server/src/core.ts
T
wc24 36b71bd38e feat: passwordHasher 可注入 — bcrypt 不再是 Shrimp 核心硬依赖
新增 IPasswordHasher 抽象 + bcryptHasher(默认,lazy import)+ plainHasher
(测试用)。Password 字段 reqFilter 和 UserModule.verifyPassword 都走
`Shrimp.passwordHasher`,消费方在启动期换实现就能彻底跳过 bcrypt。

  import { Shrimp, plainHasher } from "shrimp-server"
  Shrimp.passwordHasher = plainHasher

测试覆盖默认值、plain 端到端登录、自定义 hasher 被调用。
2026-05-23 16:57:27 +08:00

83 lines
1.9 KiB
TypeScript

/**
* Shrimp 核心入口 — 0 重依赖
*
* 只暴露 Shrimp 框架本体 + 内存数据源 + 类型定义,不引入
* express / mongoose / jsonwebtoken。bcrypt 是 lazy import,
* 不走 Password 字段就不会触发。
*
* 适用场景:
* - 只想用 Shrimp 的 RPC dispatch + 模块/字段声明 + 内存 CRUD
* - 自己接 HTTP / 自己写存储层
* - 跑测试 / 跑无 DB 的 demo
*
* 需要完整后台(Express + Mongoose + JWT)请从 'shrimp-server/server' 导入。
*/
// ===== 类型 / 接口 / 枚举 =====
export {
ShrimpCode,
ShrimpError,
ShrimpFieldTypes,
ShrimpConfig,
isShrimpCondition,
} from "./IShrimpType"
export type {
ILabel,
IShrimpResponse,
IModuleInfo,
ILoginResult,
IMeResult,
IMenuItem,
ITableProto,
ITableCrudProto,
IUser,
IRole,
IOperationLog,
WithId,
IShrimpOperator,
IShrimpPowerData,
ShrimpRequestFn,
IShrimpClient,
ShrimpFieldType,
FieldEditable,
IFieldTypeHandler,
IFieldConfig,
IFieldRule,
IPageQuery,
IPageResult,
IShrimpCondition,
IShrimpPopulate,
IShrimpQuery,
IPowerItem,
IUserProto,
IRoleProto,
} from "./IShrimpType"
// ===== 框架核心 =====
export {
Shrimp,
ShrimpModule,
ShrimpTableModule,
ShrimpPower,
RootShrimpPower,
UserModule,
RoleModule,
defaultTypeHandlers,
} from "./Shrimp"
export type {
IShrimpModuleOptions,
ShrimpCrud,
} from "./Shrimp"
// ===== 密码哈希(可注入,默认 bcrypt lazy import) =====
export { bcryptHasher, plainHasher } from "./PasswordHasher"
export type { IPasswordHasher } from "./PasswordHasher"
// ===== 数据源(纯内存,无外部依赖) =====
export { MemoryShrimpCrud } from "./MemoryShrimpCrud"
// ===== 可选模块(纯框架代码,无外部依赖) =====
export { OperationLogModule } from "./OperationLogModule"