核心
此软件包包含所有 Gadget 客户端执行必须遵循的核心类型和接口 . @gadgetinc/core 定义所有生成的 Gadget 客户端共享的API 客户端、连接、模型管理器、记录和操作的合同.
注意开发人员不需要直接使用此软件包,而是应该使用其生成的客户端加特定框架绑定软件包,如 @gadgetinc/react。 。 。 .
概览
@gadgetinc/core 提供 类型系统基础 为 Gadget 框架。 它导出 TypeScript 类型和接口:
- 定义 Gadget API 客户端的长相(
AnyClient(中文(简体) ) - 指定与 Gadget 后端的连接如何工作( U)
AnyConnection(中文(简体) ) - 描述模式管理者及其业务
AnyModelManager, (中文(简体) ),AnyInternalModelManager(中文(简体) ) - 定义记录形状和行为( E)
GadgetRecord, (中文(简体) ),GadgetRecordList(中文(简体) ) - 为查询数据提供过滤、排序和选择类型
- 宣布动作和函数元数据结构
密钥导出
客户端连接类型( C)
AnyClient- Gadget app的 API 客户端实例的接口 。 定义方法如query(), (中文(简体) ),mutate(), (中文(简体) ),transaction()属性connection财务报告和审定财务报表internal。 。 。 .AnyConnection- 管理Gadget后端连接的接口,包括认证、GraphQL客户端访问和交易支持.AnyCoreImplementation- 核心公用功能的接口,例如GadgetRecord构造,可变分解,以及错误处理.
模式记录类型( R)
AnyModelManager- 代表一个模型的API的通用接口(例如,api.widget) (中文(简体) ). 提供方法像findOne(), (中文(简体) ),findMany(), (中文(简体) ),findFirst()。 。 。 .AnyInternalModelManager- Gadget后端代码内部使用的API模型管理器的接口.GadgetRecord- 是GadgetAPI电话回的一张唱片 包括改变跟踪、外地访问和序列化的帮助方法.GadgetRecordList- 一组GadgetRecord有内建页化支持的例( e)hasNextPage, (中文(简体) ),nextPage()(见a/c.5/49/70,附件).
动作和函数类型
ActionFunction- 模型动作的元数据和类型(创建、更新、删除、自定义动作).BulkActionFunction- 多个记录的散装作业元数据.GlobalActionFunction- 全球行动元数据与具体模式无关.ViewFunction- 后端视图查询元数据.
查询过滤类型( F)
包输出用于查询 Gadget 数据的综合性类型定义 :
- 过滤类型数字 :
IDFilter, (中文(简体) ),StringFilter, (中文(简体) ),IntFilter, (中文(简体) ),FloatFilter, (中文(简体) ),DateTimeFilter, (中文(简体) ),JSONFilter, (中文(简体) ),BooleanFilter, (中文(简体) ),StateFilter等 (中文(简体) ). AnyFilter- 所有过滤器类型的联盟类型,支持AND, (中文(简体) ),OR,以及NOT组合器 .AnySort- 排序命令的类型,包括基于字段的排序和矢量相似排序.FieldSelection- 从 GraphQL 回复中选择特定字段的类型.- 选项类型数字 :
FindManyOptions, (中文(简体) ),BaseFindOptions, (中文(简体) ),InternalFindOptions等 (中文(简体) ).
工具类型
Select<Schema, Selection>- 用于根据选定方法提取一个子集的用途.DefaultSelection<Available, Options, Defaults>- 在不提供选择时用于默认选择的功能.AvailableSelection<Schema>- 将计划类型转换为有效的选择选项.- 斯卡尔类型数字 :
GadgetID, (中文(简体) ),DateTime, (中文(简体) ),EmailAddress, (中文(简体) ),URLString, (中文(简体) ),JSONBlob, (中文(简体) ),CurrencyAmount等 (中文(简体) ).
建筑
这个 @gadgetinc/core 软件包使用TypeScript的结构打字来定义合同而无需强制实施细节. 生成了Gadget客户端执行这些接口,确保所有应用程序的API一致.
内部状态符号
用于给客户对象附加内部状态的包导符号 :
export const $modelRelationships = Symbol.for("gadget/modelRelationships");
export const $coreImplementation = Symbol.for("gadget/coreImplementation");
这些符号允许生成的客户端存储元数据和执行细节而不会污染公共API表面.
变化跟踪
GadgetRecord 包括用于检测修改的内置变化跟踪:
record.changed(); // Returns true if any field has changed
record.changes(); // Returns { field: { current, previous } } for changed fields
record.flushChanges(); // Marks current state as "saved"
record.revertChanges(); // Reverts to last saved state
这使得乐观的UI更新和高效的数据同步成为可能.
倾斜
GadgetRecordList 扩展 Array<GadgetRecord> 使用页形辅助工具:
list.hasNextPage; // boolean
list.endCursor; // string cursor for next page
await list.nextPage(); // Fetches next page of results
此执行中继光标风格的光标在全部 Gadget API 上进行 pagination .
对于 Gadget 开发者
这个包是 单一真相来源 用于整个Gadget生态系统的类型定义。 添加新功能时 :
- 在此先定义类型
@gadgetinc/core - 已生成客户端执行新类型
- 更新框架软件包
@gadgetinc/react(d) 利用新类型 - 确保向后兼容或协调断开更改
这个 testing/ 子目录出口测试公用事业,如 mockUrqlClient 用于其他包件的测试套件.
出版
发布新版本后 @gadgetinc/core,确保:
- 生成的客户端被重新生成以使用新版本
- 框架软件包
@gadgetinc/react财务报告和审定财务报表@gadgetinc/client-hooks正在更新 - 这个
PlatformDependencyVersions更新 Gadget 主线中的变量