@di-framework/ cloudflare (日语)
云花板工人连接器 @di-framework它将工人绑定物分类,阅读wrangler声明,并通过DI容器注入.
工人的捆绑物按要求运抵 env 对象。 启动时登记工厂,然后公布 env 在解析服务前从处理器中获取.
特征
- 运行时间检测数字 :
CloudflareDetector匹配工人用户代理和CF_PAGES=1。 。 。 . - 具有约束力的分类 kV, D1, R2, 持久对象命名空间, 队列, 服务绑定, 工人AI, Hyperdrive, Vectorize, Analytics engine, Images, Workflows, 速率限制, 浏览器, 管道, 以及平面 vars.
- 怀格勒宣言 对于主机对象看起来相似的种类:资产、电子邮件、发送命名空间、秘密存储和mTLS证书。 还有
vars。 。 。 . - DI 整合数字 :
@CloudflareBinding('BINDING_NAME')参数和财产注入@EnableCloudflareBindings()用于整个集装箱的懒惰工厂setCloudflareBindings(env)从工人处理器
- 本地倒计时数字 :
CLOUDFLARE_BINDINGSJSON, 或一个物体通过为localFallback,当没有发布工人信息. - 自定义分类器 结束
BindingClassifierRegistry。 。 。 .
安装
bun add @di-framework/cloudflare
快开始
import { Container } from '@di-framework/core/decorators';
import {
CloudflareBinding,
type D1BindingInfo,
EnableCloudflareBindings,
type KvBindingInfo,
setCloudflareBindings,
} from '@di-framework/cloudflare';
@EnableCloudflareBindings()
@Container()
export class OrderService {
@CloudflareBinding('ORDERS')
db!: D1BindingInfo;
@CloudflareBinding('SESSIONS')
sessions!: KvBindingInfo;
async cart(id: string) {
return this.sessions.binding?.get(id);
}
}
export default {
async fetch(request: Request, env: Record<string, unknown>) {
setCloudflareBindings(env);
const orders = new OrderService();
const cart = await orders.cart(new URL(request.url).pathname);
return new Response(cart == null ? 'empty' : String(cart));
},
};
打电话 setCloudflareBindings(env) 在第一次读取注入属性之前。 财产获得者保留他们解决的第一个值.
程序发现
import { CloudflareEnvironment } from '@di-framework/cloudflare';
const cf = new CloudflareEnvironment({ bindings: env });
const db = cf.getD1Binding('ORDERS');
const sessions = cf.getKvBinding('SESSIONS');
const bucket = cf.getR2Binding();
getKvBinding() 没有名称返回第一个 KV 按名称顺序绑定 。 D1, R2, 持久对象, 队列, 服务绑定, AI, Hyperdrive, Vectorize, 以及 Analytics engine也存在相同的模式 .
使用方式 @di-framework/ai
WorkersAiChatModel 财务报告和审定财务报表 WorkersAiEmbeddingModel 带工人AI捆绑. VectorizeVectorStore 以矢量约束。 一个函数读取 env 所发表的内存 setCloudflareBindings。 。 。 .
import { configureAi, VectorizeVectorStore, WorkersAiChatModel, WorkersAiEmbeddingModel } from '@di-framework/ai';
import { getCloudflareBindings, setCloudflareBindings } from '@di-framework/cloudflare';
configureAi({
chatModel: new WorkersAiChatModel({
binding: () => getCloudflareBindings()?.AI,
model: '@cf/meta/llama-3.1-8b-instruct',
}),
});
export default {
fetch(request: Request, env: Record<string, unknown>) {
setCloudflareBindings(env);
const embeddings = WorkersAiEmbeddingModel.of(() => env.AI);
const store = new VectorizeVectorStore({
index: () => env.VECTORS,
embeddingModel: embeddings,
});
return new Response(String(store.name));
},
};
@CloudflareBinding('AI') 注射数 { binding },这两个模型直接接受.
弦束为 var. 列于 secretNames 这是秘密. kindHints 当活的物体模糊时,强迫一种物体:
new CloudflareEnvironment({
bindings: env,
secretNames: ['API_TOKEN'],
kindHints: { ASSETS: 'assets', SECRETS: 'secrets-store' },
});
一种解析的wrangler配置(JSON,不是JSONC)也提供这些种类. parseWranglerBindings(config) 读取 kv_namespaces, (中文(简体) ), d1_databases, (中文(简体) ), r2_buckets, (中文(简体) ), durable_objects,队列制作人, services, (中文(简体) ), ai, (中文(简体) ), hyperdrive, (中文(简体) ), vectorize, (中文(简体) ), analytics_engine_datasets, (中文(简体) ), ratelimits, (中文(简体) ), workflows, (中文(简体) ), send_email, (中文(简体) ), pipelines, (中文(简体) ), dispatch_namespaces, (中文(简体) ), secrets_store_secrets, (中文(简体) ), mtls_certificates, (中文(简体) ), browser, (中文(简体) ), images, (中文(简体) ), assets,以及 vars。 。 。 .
外部工人,一个 JSON 对象在 CLOUDFLARE_BINDINGS 填入同一张地图。 设定 localFallback: false 要求已公布的“工人环境”.
自定义分类器
import {
type CloudflareBindingClassifier,
getDefaultRegistry,
type CloudflareBindingInfo,
} from '@di-framework/cloudflare';
class FlagClassifier implements CloudflareBindingClassifier {
readonly kind = 'unknown' as const;
accept(_name: string, value: unknown): boolean {
return typeof value === 'object' && value !== null && 'flag' in value;
}
create(name: string, value: unknown): CloudflareBindingInfo {
return { name, kind: 'unknown', binding: value };
}
}
getDefaultRegistry().register(new FlagClassifier());
默认优先级是 high,所以分类器运行在内置之前. { priority: 'low' } 跟着他们.