@gadgetinc/core

中文文档
0.15.1发布于 2025/12/17MITTypeScriptESM + CJS零依赖近 30 天下载 4万

此软件包包含所有 Gadget 客户端执行必须遵循的核心类型和接口 . @gadgetinc/core 定义所有生成的API客户端、连接、模型管理器、记录和业务共享的合同

中文使用文档
文档目录13 节
  1. 概览
  2. 密钥导出
  3. 客户端连接类型( C)
  4. 模式记录类型( R)
  5. 动作和函数类型
  6. 查询过滤类型( F)
  7. 工具类型
  8. 建筑
  9. 内部状态符号
  10. 变化跟踪
  11. 倾斜
  12. 对于 Gadget 开发者
  13. 出版

核心

此软件包包含所有 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生态系统的类型定义。 添加新功能时 :

  1. 在此先定义类型 @gadgetinc/core
  2. 已生成客户端执行新类型
  3. 更新框架软件包@gadgetinc/react(d) 利用新类型
  4. 确保向后兼容或协调断开更改

这个 testing/ 子目录出口测试公用事业,如 mockUrqlClient 用于其他包件的测试套件.

出版

发布新版本后 @gadgetinc/core,确保:

  1. 生成的客户端被重新生成以使用新版本
  2. 框架软件包 @gadgetinc/react 财务报告和审定财务报表 @gadgetinc/client-hooks 正在更新
  3. 这个 PlatformDependencyVersions 更新 Gadget 主线中的变量

版本与发布记录

@gadgetinc/core 共发布 16 个版本,首次发布于 2025/10/08;过去 12 个月发布了 2 个版本。

版本发布日期距今
0.15.1latest2025/12/1710 个月前
0.15.02025/12/1211 个月前
0.14.02025/11/131 年前
0.13.02025/10/301 年前
0.12.02025/10/291 年前
0.11.02025/10/281 年前

关于 @gadgetinc/core 的常见问题

@gadgetinc/core 是什么?

此软件包包含所有 Gadget 客户端执行必须遵循的核心类型和接口 . @gadgetinc/core 定义所有生成的API客户端、连接、模型管理器、记录和业务共享的合同

如何安装 @gadgetinc/core?

在项目目录运行 npm install @gadgetinc/core,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:@urql/core(>=4.0.0)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@gadgetinc/core 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@gadgetinc/core 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@gadgetinc/core 可以商用吗?

@gadgetinc/core 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@gadgetinc/core 的下载量有多少?

根据 npm 官方下载统计,@gadgetinc/core 在 2026/10/16 – 2026/11/14 这 30 天内被下载 39,531 次,日均约 1,318 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@gadgetinc/core 还在维护吗?

最新版本 0.15.1 发布于 2025/12/17(10 个月前);至今共发布 16 个版本,其中过去 12 个月发布了 2 个;首次发布于 2025/10/08。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。