ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Dagger TypeScript SDK 中 FunctionCallArgValueID 类型别名:从 GraphQL 标量到模块调用参数追踪

Dagger TypeScript SDK 中 FunctionCallArgValueID 类型别名:从 GraphQL 标量到模块调用参数追踪 Dagger TypeScript SDK 中 FunctionCallArgValueID 类型别名从 GraphQL 标量到模块调用参数追踪【免费下载链接】daggerAutomation engine to build, test and ship any codebase. Runs locally, in CI, or directly in the cloud项目地址: https://gitcode.com/GitHub_Trending/da/dagger本文基于 Dagger 仓库中dagger.io/daggerTypeScript SDK 的自动生成 API 参考文档version-0.20围绕类型别名FunctionCallArgValueID展开它是什么、从哪来、在模块Module调用链路中承担什么角色。读完本文你将掌握该 ID 标量的定义来源、在生成的 TypeScript 客户端中的形态以及如何借助它配合FunctionCall/FunctionCallArgValue对象在 SDK 代码生成与模块运行时追踪「函数以什么参数被调用」。一、文档定位client.gen 类型别名参考页该类型别名的原始参考文档位于 FunctionCallArgValueID.md属于 api/client.gen 模块下的 type-aliases类型别名分区其所属的顶层文档入口是 Dagger TypeScript SDK 参考。这套参考文档由 TypeScript SDK 的包结构自动生成client.gen目录本身就是 SDK 的生成代码文件名中的.gen即 generated 之意对应仓库中 client.gen 目录索引 所列的类、枚举与类型别名清单。因此本页描述的对象并非手写 API而是由 GraphQL schema 代码生成流水线见 codegen 文档 所述机制自动产出的类型定义。文档中继承的核心定义如下类型声明FunctionCallArgValueID string object语义说明TheFunctionCallArgValueIDscalar type represents an identifier for an object of type FunctionCallArgValue.FunctionCallArgValueID标量类型表示FunctionCallArgValue类型对象的标识符内部占位声明__FunctionCallArgValueID: never二、string objectDagger 生成客户端的 ID 品牌化Branded ID模式string object这种「字符串与对象交叉」的声明是 TypeScript 类型体操中典型的品牌化字符串写法。从 type-aliases 目录 中大量同构的*ID页面如ContainerID、DirectoryID、FunctionCallID、FunctionID等的命名与形态看这是代码生成器为每个 GraphQL 对象类型统一生成的 ID 类型运行时本质是stringGraphQL 响应中返回的id字段就是普通字符串可以直接做比较、存库、传参类型层面是独立类型交叉进object后FunctionCallArgValueID不能直接赋给ContainerID或原生string使用从而在编译期杜绝「拿 A 对象的 ID 去加载 B 对象」这类张冠李戴的错误。文档中的__FunctionCallArgValueID: never小节则是 TypeDoc 文档生成器对内部internal声明的固定渲染__前缀的标识符不属于公开 API 表面never表示该位置不存在可用的公共值。可以推断这一条目是生成工具对内部类型声明的自动映射产物使用者无需关心它它不构成可导入的成员。三、溯源FunctionCallArgValue 在 GraphQL schema 中的定义要理解这个 ID 标量指向的对象必须回到 Dagger 核心引擎的 GraphQL schema。在 base_schema.graphqls 中可以找到完整的对象与标量定义A value passed as a named argument to a function call. type FunctionCallArgValue implements Node { A unique identifier for this FunctionCallArgValue. id: ID! The name of the argument. name: String! The value of the argument represented as a JSON serialized string. value: JSON! } A unique identifier for an object. scalar FunctionCallArgValueID由此可以确认三件事FunctionCallArgValue实现了Node接口即它是可持久化、可按 ID 加载的对象它只有两个业务字段name参数名和valueJSON 序列化后的参数值FunctionCallArgValueID作为独立标量存在正是本文档所描述的FunctionCallArgValueID类型别名在 schema 层的对应物。该对象在 core/schema/module.go 中被安装进 dagql 引擎dagql.Fields[*core.FunctionCallArgValue]{}.Install(dag)说明它是模块Module相关 schema 的一部分服务于模块函数调用的运行期表达。此外schema 还为按 ID 恢复对象提供了 Query 字段见 base_schema.graphqlsLoad a FunctionCallArgValue from its ID. loadFunctionCallArgValueFromID(id: FunctionCallArgValueID!): FunctionCallArgValue!这正是FunctionCallArgValueID的典型用途在引擎持久化之后例如跨会话、跨进程恢复调用状态凭该 ID 把某个「函数调用参数值」对象完整加载回来。四、FunctionCallArgValueID 的实际角色模块函数调用的参数追踪FunctionCallArgValueID并不是孤立存在的它是FunctionCall对象的一部分。同一 schema 中base_schema.graphqlstype FunctionCall implements Node { A unique identifier for this FunctionCall. id: ID! The argument values the function is being invoked with. inputArgs: [FunctionCallArgValue!]! The name of the function being called. name: String! # ... parent / parentName / returnError / returnValue ... }FunctionCall是 Dagger 模块机制中对一次函数调用的建模name是被调函数名parent/parentName是所属对象inputArgs则是该次调用传入的全部参数值列表——每个参数值就是一个FunctionCallArgValue也就各自持有一个FunctionCallArgValueID。这一模型在仓库内有多处真实消费示例。例如内置代码生成器generator的 Go 运行时骨架 toolchain/dagger.gen.go 展示了「拿到当前调用 → 遍历输入参数 → 逐个取 Name/Value」的标准流程fnArgs, err : fnCall.InputArgs(ctx) if err ! nil { return fmt.Errorf(get fn args: %w, err) } inputArgs : map[string][]byte{} for _, fnArg : range fnArgs { argName, err : fnArg.Name(ctx) // ... argValue, err : fnArg.Value(ctx) // ... inputArgs[argName] []byte(argValue) }同样的模式在 core/integration/testdata/modules/go/defaults/foobar/internal/dagger/dagger.gen.go 等生成的模块代码中反复出现印证了「FunctionCall→inputArgs→FunctionCallArgValuenamevalue」是模块运行时读取调用上下文的通用路径。五、多语言 SDK 中的同构实现FunctionCallArgValueID这一概念在各语言 SDK 的生成客户端中都有对应物可互为佐证Go SDKTypeScript SDK 运行时内置在 sdk/typescript/runtime/internal/dagger/dagger.gen.go 中声明type FunctionCallArgValueID string并提供LoadFunctionCallArgValueFromID方法同文件// Load a FunctionCallArgValue from its ID. func (r *Query) LoadFunctionCallArgValueFromID(id FunctionCallArgValueID) *FunctionCallArgValue { q : r.query.Select(loadFunctionCallArgValueFromID) // ... }Go 模块 SDK测试夹具中生成如 core/integration/testdata/modules/go/defaults/foobar/internal/dagger/dagger.gen.go 中type FunctionCallArgValueID ID即类型别名到统一的ID类型。可以看出GraphQL 层的标量 → 各语言 SDK 的 ID 类型 → 生成客户端的Load*FromID查询方法构成一条贯穿引擎与 SDK 的按 ID 加载链路。TypeScript 客户端中的FunctionCallArgValueID string object即这条链路在 TS 类型系统中的呈现。六、适用前提与使用建议适用版本本文对应的参考文档来自 version-0.20 参考目录描述的是该版本dagger.io/dagger包中api/client.gen的生成类型其他版本的同路径文档可能存在字段增删请以对应版本的文档为准。何时会直接使用它绝大多数业务代码不会显式书写这个类型——它是编译器在FunctionCall.inputArgs等 API 签名中自动引入的。真正需要接触它的场景包括编写模块代码生成器或中间件时解析调用上下文、按持久化 ID 恢复FunctionCallArgValue对象对应 classes/FunctionCallArgValue.md 与 classes/FunctionCall.md 描述的客户端类、以及排查模块函数「以什么参数、在什么父对象下被调用」的运行期问题。注意value字段是 JSON 序列化后的字符串schema 中value: JSON!跨语言消费时需要按 JSON 反序列化还原原始参数类型。小结FunctionCallArgValueID是 Dagger 模块调用链路上「一个被调用参数」的稳定标识它在 schema 层对应 FunctionCallArgValue 对象在引擎中通过 dagql 字段注册module.go在各语言生成的客户端中落地为品牌化 ID 类型并支撑loadFunctionCallArgValueFromID的按 ID 恢复查询。理解它是理解 Dagger「模块函数调用如何被引擎观测、追踪与持久化」的一块基础拼图。【免费下载链接】daggerAutomation engine to build, test and ship any codebase. Runs locally, in CI, or directly in the cloud项目地址: https://gitcode.com/GitHub_Trending/da/dagger创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表