@ 适应石/ 框架
基于公约的控制器和 Mongoose 模型,基于树的路由器,每个控制器生成路由/处理器 i18n)和缓存.
📖 完整文件 ∗∗ https://framework.adaptivestone.com/* (中文(简体) )* 联合国
🤖 LLM 已准备好的文件( 完整站点为一个文件) — https://framework.adaptivestone.com/llm-context.md* (中文(简体) )* 联合国
所需资源
- 节点 24 (仅ESM,运行)
.ts——或 1.4.0号机,参见 运行时间 - 蒙戈DB - 需要;没有启动便快速失效
MONGO_DSN AUTH_SALT需要; 生成一个node src/cli.ts generateRandomBytes
运行时间
节点是主运行时间. 1.4.0号机 作为一项补充支持:
同样的应用代码,同样的快递适配器,运行在 Bun 节点上
兼容层 — 没有 Bun 特定构建, 没有 Bun.serve 路径,以及
不需要依赖性指针或覆盖。 1.4.0是地板,因为它是第一个
输入框架解析的Mongoose/BSON图的平面布局.
每一次发布都经过认证, 无论是在地板上还是最新的稳定舱:
框架测试套件;和 安装已公布的柏油球的消费者
bun install,进口公共入境点,靴子a Server,服务于
请求,运行 Mongoose 创建/读取/更新/删除对 MongoDB 并关闭.
仅节点,截至1.4号机:
cluster.js编号 :runCluster——多工艺生产入站. 这个 在 Bun 下导入精细, 但仅测试节点路径; 运行单进程 由 Bun (或将进程管理器置于应用程序之外).- 节点测试跑者CLI. Bun 执行
node:testAPI 密码 但没有node --test,所以一个Bun项目运行它的套房与bun test编辑 框架预装,而不是节点文件显示的旗帜。 四个框架 测试文件需要mock.module()(节点)--experimental-test-module-mocks, (中文(简体) ), bun 不执行的烤箱-sh/bun#5090),并且是唯一一个 bun 运行中排除的东西 :cluster.test.ts, (中文(简体) ),models/UserOld.test.ts, (中文(简体) ),helpers/redis/redisConnection.failure.test.ts, (中文(简体) ),services/i18n/I18n.missing.test.ts所有其它东西都会在两跑时间上流传. assert.deepStrictEqual对抗蒙哥斯阵列. Bun 1.4报告任何ProxyMongoose阵列就是这样的 不平等 先散开 (单位:千美元)[...doc.tags]) (中文(简体) ). 这是一个测试的诡异; 价值本身是 没错.
快速启动
最快的启动方式是复制示例项目并将其用作
模板 - 它运送一个工作 Server、控制器、配置、测试和一个多克
dev 堆栈( 包括MongoDB + Redis) :
git clone https://github.com/adaptivestone/framework-example-project.git my-app
cd my-app
docker compose up
您的应用开始于 http://localhost:3300。提供 AUTH_SALT 开始之前
启动(见要求和 .env.example) (中文(简体) ). 编辑控制器
src/controllers/ 而 Dev 服务器会自动重新装入。 完全进入
页:1 获得开始的引导。 。 。 .
将框架添加到现有项目中:
npm install @adaptivestone/framework
升级说明(5.6.0)
见 5.6.0发布说明。升级时检查这些 :
- 注册自定义验证器驱动程序( D)
ValidateService.register在模块中 范围,在startServer()路线现在选择他们的司机 一次在靴子,所以 注册在bootHttp钩子已经没了,而且.. 没有驱动匹配失败startServer()而不是回答500个. - 静态路由只回答它定义的方法. 与
GET /events/new财务报告和审定财务报表DELETE /events/:slug, (中文(简体) ),DELETE /events/new现在到达 页:1:slug而不是回答405. - 每架车
RateLimiterconsumeKeyComponents.request列表替换 配置列表而不是添加到列表中 。 依靠两个清单的挂载 必须指定每个字段. - 运行的项目
npm run gen必须更新可选对等点 :npm i -D oxc-parser@^0.156.0。 。 。 .
升级说明(5.5.1)
见 5.5.1 释放说明。大多数不需要采取行动:
- 运行的项目
npm run gen必须更新可选对等点 :npm i -D oxc-parser@^0.153.0。 。 。 . - 当用户读完密码后,
user.generateToken()拒绝400BadRequestError(答案与错误密码相同) 而不是一只绵羊VersionError或者说DocumentNotFoundError一个抓住你 为周围的人添加generateToken可以离开. - 子类
Auth财务报告和审定财务报表Role可能从middleware()再来一次.
升级说明(5.5.0)
见 5.5.0发布说明 对一切新的。 检查这些何时 您升级 :
- 日志默认被编辑: 字段命名
authorization, (中文(简体) ),cookie, (中文(简体) ),password, (中文(简体) ),secret或者说token以[REDACTED]。自定义redact列表中config/log.ts替换默认值,所以将这些名称保留在 (a) 与《公约》有关的规定;redact: []关闭编辑. - 几处错误反应有变. 野外误差400多发
message财务报告和审定财务报表 每场阵列(安全网)errors.<field>以前是弦,每500个 有一个文本,默认的404文本是Not found,则Role财务报告和审定财务报表RateLimiter答复携带error密码 比较整个身体的测试 可能需要更新. - 中间软件所抛出的错误会通过处理错误的登记册: a
HttpError从一个中间的软件 回答自己的地位 而不是500. 内置Auth, (中文(简体) ),Role财务报告和审定财务报表RateLimiter现在扔而不是写 反应,所以直接调用他们的测试 一定预料到一个抛出的错误. - 内置健康终点在
/health/live财务报告和审定财务报表/health/ready。您的 拥有controllers/Health.ts替换它们;GET /health自己保持自由. - 请求按键费率限额的计数器(
consumeKeyComponents.request重设 部署时:其密钥现已正常化并散列. - 新建 :
npm run cli createEnv创建.env有新鲜的AUTH_SALT编号 新鲜克隆. - 已折旧,在v6中被删除:
usedAuthParameters(现在)authSchemes页:1 职位body论点HttpError, (中文(简体) ),RateLimiter.gerenateConsumeKey, (中文(简体) ), 财务报告和审定财务报表notVerified在未经验证的日志中.
升级说明(5.4.2)
见 5.4.2 释放说明 用于所有修复。 大多数人不需要行动:
- 运行的项目
npm run gen必须更新可选对等点 :npm i -D oxc-parser@^0.152.0。 。 。 . user.generateToken()现在用一只绵羊拒绝VersionError当 文档装入后存储的密码已更改; 内置登录 回答这个是密码错误 。 自定义登录流量应该同样进行.- HTTP 服务器仅在路由后打开端口,
bootHttp错误 操作器安装;startServer()它一听就决定了. createuser --token打印可用的会话符号;没有标记,则 命令不再创建会话.
认证和缓存升级说明(5.4.1)
见 5.4.1 释放说明 包括模型/验证 输入更正和可选的 i18 次声明更改.
内置登记和密码重置路线接受15-128的密码
Unicode代码点,包括空格. 登录时仍可使用现有密码.
要自定义长度限制,请在应用程序中扩展默认值
src/config/auth.ts数字 :
import auth from '@adaptivestone/framework/config/auth.js';
export default {
...auth,
passwordPolicy: { minLength: 15, maxLength: 128 },
};
该政策适用于内置的 HTTP 路由; 直接模式写作和自定义
密码更改终点必须执行自己的政策。 翻译
auth.passwordTooShort 财务报告和审定财务报表 auth.passwordTooLong 以自定义验证
电文 (min 财务报告和审定财务报表 max 可用作插值参数.
与 consumeKeyComponents.route 启用, 速率限制使用已注册的路由
还有方法 案例的变体、编码拼写、跟踪鞭打和不同
参数值共享相同的预算;隐含的HEAD股份获取预算.
路由前安装的限速器将每个方法共享一桶,而不拆分
根据请求的 URL 。 升级一次现有费率限制计数器; 滚动
所以年长的工人不能单独保留别名.
缓存密钥现在包含 a cache-v2 标记此字符串并签名 BigInts 来回
没有碰撞。 升级始于冷缓存; 旧密钥过期于
他们的原始TTL。 在混合版本部署期间,每个版本无效
只有它自己的钥匙空间,所以在依赖交叉工作前完成推出
缓存无效 。 快取被击中/ 丢失日志中不再包含密钥或值 .
生成类型
框架生成 genTypes.d.ts (类型) getConfig编号 :getModel和
每个控制器 *.routes.gen.ts 文件(类型处理器签名)。 重新生成
它们包括:
node src/cli.ts generatetypes
代码生成需要 可选同伴依赖 oxc-parser - 安装它
作为您项目的依赖性:
npm i -D oxc-parser
它解析了您的控制器源, 并且从未在运行时被装入, 所以它会停留
生产外安装(npm ci --omit=dev) (中文(简体) ).
它们被取出后再生(新鲜的取出是红色的)
编辑器直到第一次运行). 在CI中,防范被打成哑巴的类型
node src/cli.ts generatetypes --check,它不写,退出非零
如果什么是过时的。 模板将它接入 check:types 剧本.
从v5.2.0开始,一个完全由括号组成的控制器文件夹段是一个
组织路线组: src/controllers/(group)/Reports.ts 留着
默认 /reports URL, 而其生成的文件仍然位于控制器旁边 .
普通文件夹仍然贡献其小写 URL 部分 .
打开API
从相同的控制器路径生成 OpenAPI 3.1 文档并请求 运行时使用的策略 :
node src/cli.ts openapi --output openapi.json
Zod request schemas描述它们的输入形状. 不支持的个人 schema 生成一个背景警告和安全回落而不清除健康 来自文档的路径。 见全 OpenAPI 指南。 。 。 .
公共 API 稳定性
只有下面列出的子路径 exports 内 package.json 可导入为
@adaptivestone/framework/<path>;内部模块故意不
导出。 导出路径依次分两个层次:
- 第一级——稳定:
server.js, (中文(简体) ),Cli.js, (中文(简体) ),cluster.js, (中文(简体) ),types.js, (中文(简体) ),folderConfig.js, (中文(简体) ),modules/*, (中文(简体) ),models/*, (中文(简体) ),controllers/*, (中文(简体) ),tests/*, (中文(简体) ),migrations/*。 。 。 . - 第二级——扩展表面:
config/*, (中文(简体) ),helpers/*,以及services/*可能 未成年人的改变(有堕落周期); 进口时给未成年人钉上钉子 直接说.config/*是您导入用于扩展框架默认值的内容 配置( 如 .import http from '@adaptivestone/framework/config/http.js',则 再导出您自己编辑的副本src/config/http.ts) (中文(简体) ).
许可证
麻省理工学院