From a6d9ebe042f61459c590294bb3ccf105d4f5d2c2 Mon Sep 17 00:00:00 2001 From: Tomas Dvorak Date: Thu, 26 Sep 2024 23:22:12 +0200 Subject: [PATCH] feat(agent): improve parser typings --- src/agents/parsers/field.ts | 21 +++++++++------------ src/agents/parsers/linePrefix.ts | 13 ++++++++++++- 2 files changed, 21 insertions(+), 13 deletions(-) diff --git a/src/agents/parsers/field.ts b/src/agents/parsers/field.ts index 3ec9082b..79583f4f 100644 --- a/src/agents/parsers/field.ts +++ b/src/agents/parsers/field.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { z, ZodSchema } from "zod"; +import { ZodSchema } from "zod"; import { setProp } from "@/internals/helpers/object.js"; import { ValueError } from "@/errors.js"; import { Serializable } from "@/internals/serializable.js"; @@ -44,20 +44,20 @@ export abstract class ParserField extends Serializable { } } -export class ZodParserField extends ParserField, string> { +export class ZodParserField extends ParserField { static { this.register(); } - constructor(protected readonly schema: T) { + constructor(protected readonly schema: ZodSchema) { super(); } - get() { + get(): T { return this.schema.parse(this.raw); } - getPartial() { + getPartial(): string { return this.raw; } @@ -66,15 +66,12 @@ export class ZodParserField extends ParserField } } -export class JSONParserField extends ParserField< - z.output, - Partial> -> { +export class JSONParserField extends ParserField> { protected stream!: ReturnType; protected jsonParser!: JSONParser; - protected ref!: { value: z.output }; + protected ref!: { value: Partial }; - constructor(protected readonly input: { schema: T; base: Partial> }) { + constructor(protected readonly input: { schema: ZodSchema; base: Partial }) { super(); if (input.base === undefined) { throw new ValueError(`Base must be defined!`); @@ -145,6 +142,6 @@ export class JSONParserField extends ParserField< // eslint-disable-next-line @typescript-eslint/no-namespace export namespace ParserField { - export type inferValue = T extends ParserField ? L : never; + export type inferValue = T extends ParserField ? L : never; export type inferPartialValue = T extends ParserField ? L : never; } diff --git a/src/agents/parsers/linePrefix.ts b/src/agents/parsers/linePrefix.ts index 2456c73e..86d51c8f 100644 --- a/src/agents/parsers/linePrefix.ts +++ b/src/agents/parsers/linePrefix.ts @@ -313,9 +313,20 @@ export namespace LinePrefixParser { export type infer< T extends Record, ParserField>>, > = { - [K in StringKey]: T[K]["field"] extends ParserField ? L : never; + [K in keyof T]: ParserField.inferValue; + }; + export type inferPartial< + T extends Record, ParserField>>, + > = { + [K in StringKey]: ParserField.inferPartialValue; }; + export type inferCallback = + T extends LinePrefixParser ? (T["emitter"] extends Emitter ? L : never) : never; + export type inferOutput = T extends LinePrefixParser ? LinePrefixParser.infer

: never; + + export type inferPartialOutput = + T extends LinePrefixParser ? LinePrefixParser.inferPartial

: never; }