@effect-gql/core 1.4.11 → 1.4.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/schema-mapping.ts","../../src/builder/type-registry.ts","../../src/builder/field-builders.ts","../../src/builder/schema-builder.ts","../../src/builder/pipe-api.ts","../../src/extensions.ts","../../src/builder/execute.ts"],"names":["AST","GraphQLString","GraphQLFloat","GraphQLBoolean","GraphQLInt","S","GraphQLList","field","GraphQLNonNull","GraphQLObjectType","GraphQLInputObjectType","AST2","enumType","handleTupleTypeAST","getOptionInnerType","S2","unionType","Effect","S3","middleware","effect","Runtime","Queue","Stream","Option","Fiber","Pipeable","GraphQLDirective","GraphQLEnumType","inputType","interfaceType","GraphQLInterfaceType","GraphQLUnionType","GraphQLSchema","Context","Ref","parse","extensionData","GraphQLError","validate","graphqlExecute"],"mappings":"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","file":"index.cjs","sourcesContent":["import { Effect } from \"effect\"\nimport * as S from \"effect/Schema\"\nimport * as AST from \"effect/SchemaAST\"\nimport {\n GraphQLObjectType,\n GraphQLString,\n GraphQLInt,\n GraphQLFloat,\n GraphQLBoolean,\n GraphQLNonNull,\n GraphQLList,\n GraphQLOutputType,\n GraphQLInputObjectType,\n GraphQLInputType,\n GraphQLFieldConfigMap,\n GraphQLFieldConfigArgumentMap,\n} from \"graphql\"\n\n/**\n * Check if a number AST node represents an integer\n */\nconst isIntegerType = (ast: AST.AST): boolean => {\n // Check for Refinement with integer filter\n if (ast._tag === \"Refinement\") {\n const refinement = ast as any\n\n // Check the annotations for the integer identifier or JSONSchema type\n const annotations = refinement.annotations\n if (annotations) {\n // Check for identifier annotation (Int, NonNegativeInt, PositiveInt, etc.)\n const identifier = AST.getIdentifierAnnotation(refinement)\n if (identifier._tag === \"Some\") {\n const id = identifier.value\n // Check for any integer-related identifier\n if (id === \"Int\" || id.includes(\"Int\")) {\n return true\n }\n }\n\n // Check for JSONSchema annotation with type \"integer\"\n const JSONSchemaSymbol = Symbol.for(\"effect/annotation/JSONSchema\")\n const jsonSchema = annotations[JSONSchemaSymbol]\n if (jsonSchema && jsonSchema.type === \"integer\") {\n return true\n }\n }\n\n // Recursively check the base type\n return isIntegerType(refinement.from)\n }\n return false\n}\n\n/**\n * Handle primitive AST nodes (StringKeyword, NumberKeyword, BooleanKeyword)\n */\nfunction handlePrimitiveAST(ast: AST.AST): GraphQLOutputType | GraphQLInputType | undefined {\n if (ast._tag === \"StringKeyword\") return GraphQLString\n if (ast._tag === \"NumberKeyword\") return GraphQLFloat\n if (ast._tag === \"BooleanKeyword\") return GraphQLBoolean\n return undefined\n}\n\n/**\n * Handle refinement AST nodes (e.g., S.Int)\n */\nfunction handleRefinementAST(\n ast: AST.AST,\n convertFn: (schema: S.Schema<any, any, any>) => GraphQLOutputType | GraphQLInputType\n): GraphQLOutputType | GraphQLInputType {\n if (isIntegerType(ast)) {\n return GraphQLInt\n }\n // For other refinements, use the base type\n return convertFn(S.make((ast as any).from))\n}\n\n/**\n * Handle literal AST nodes\n */\nfunction handleLiteralAST(ast: AST.AST): GraphQLOutputType | GraphQLInputType | undefined {\n if (ast._tag !== \"Literal\") return undefined\n\n if (typeof ast.literal === \"string\") return GraphQLString\n if (typeof ast.literal === \"number\") {\n // Check if it's an integer literal\n return Number.isInteger(ast.literal) ? GraphQLInt : GraphQLFloat\n }\n if (typeof ast.literal === \"boolean\") return GraphQLBoolean\n return undefined\n}\n\n/**\n * Handle tuple type AST nodes (arrays)\n */\nfunction handleTupleTypeAST(\n ast: AST.AST,\n convertFn: (schema: S.Schema<any, any, any>) => GraphQLOutputType | GraphQLInputType\n): GraphQLList<any> | undefined {\n if (ast._tag !== \"TupleType\") return undefined\n\n const elements = ast.elements\n if (elements.length > 0) {\n const elementSchema = S.make(elements[0].type)\n return new GraphQLList(convertFn(elementSchema))\n }\n return undefined\n}\n\n/**\n * Build fields from TypeLiteral property signatures\n */\nfunction buildFieldsFromPropertySignatures(\n propertySignatures: readonly any[],\n convertFn: (schema: S.Schema<any, any, any>) => GraphQLOutputType | GraphQLInputType,\n): Record<string, { type: any }> {\n const fields: Record<string, { type: any }> = {}\n\n for (const field of propertySignatures) {\n const fieldName = String(field.name)\n\n // Skip _tag field from TaggedStruct/TaggedClass - it's an internal discriminator\n if (fieldName === \"_tag\") continue\n\n const fieldSchema = S.make(field.type)\n let fieldType = convertFn(fieldSchema) as any\n\n // Make non-optional fields non-null, unless they're Option transformations\n // Option transformations (like S.OptionFromNullOr) should always be nullable\n const isOptionField = isOptionTransformation(field.type) || isOptionDeclaration(field.type)\n if (!field.isOptional && !isOptionField) {\n fieldType = new GraphQLNonNull(fieldType)\n }\n\n fields[fieldName] = { type: fieldType }\n }\n\n return fields\n}\n\n/**\n * Check if a Declaration AST node represents an Option type.\n * Option declarations have a TypeConstructor annotation of 'effect/Option'.\n */\nexport const isOptionDeclaration = (ast: AST.AST): boolean => {\n if (ast._tag === \"Declaration\") {\n const annotations = (ast as any).annotations\n if (annotations) {\n const TypeConstructorSymbol = Symbol.for(\"effect/annotation/TypeConstructor\")\n const typeConstructor = annotations[TypeConstructorSymbol]\n if (typeConstructor && typeConstructor._tag === \"effect/Option\") {\n return true\n }\n }\n }\n return false\n}\n\n/**\n * Check if a Transformation represents an Option schema (e.g., S.OptionFromNullOr).\n * These have a Declaration with \"Option\" identifier on the \"to\" side.\n */\nexport const isOptionTransformation = (ast: AST.AST): boolean => {\n if (ast._tag === \"Transformation\") {\n return isOptionDeclaration((ast as any).to)\n }\n return false\n}\n\n/**\n * Get the inner type from an Option Declaration.\n * Option<A> has A as the first type parameter.\n */\nconst getOptionInnerType = (ast: AST.AST): AST.AST | undefined => {\n if (ast._tag === \"Declaration\") {\n const typeParams = (ast as any).typeParameters\n if (typeParams && typeParams.length > 0) {\n return typeParams[0]\n }\n }\n return undefined\n}\n\n/**\n * Convert an Effect Schema to a GraphQL output type\n */\nexport const toGraphQLType = (schema: S.Schema<any, any, any>): GraphQLOutputType => {\n const ast = schema.ast\n\n // Handle primitives\n const primitiveResult = handlePrimitiveAST(ast)\n if (primitiveResult) return primitiveResult as GraphQLOutputType\n\n // Handle refinements (e.g., S.Int)\n if (ast._tag === \"Refinement\") {\n return handleRefinementAST(ast, toGraphQLType) as GraphQLOutputType\n }\n\n // Handle literals\n const literalResult = handleLiteralAST(ast)\n if (literalResult) return literalResult as GraphQLOutputType\n\n // Handle arrays - check for TupleType\n const tupleResult = handleTupleTypeAST(ast, toGraphQLType)\n if (tupleResult) return tupleResult\n\n // Handle structs/objects\n if (ast._tag === \"TypeLiteral\") {\n const fields = buildFieldsFromPropertySignatures(ast.propertySignatures, toGraphQLType)\n\n // Generate a name from the schema or use a default\n const typeName =\n (schema as any).annotations?.identifier || `Object_${Math.random().toString(36).slice(2, 11)}`\n\n return new GraphQLObjectType({\n name: typeName,\n fields,\n })\n }\n\n // Handle transformations - use the \"to\" side\n if (ast._tag === \"Transformation\") {\n // Special handling for Option transformations (e.g., S.OptionFromNullOr)\n // These should map to the nullable inner type\n if (isOptionTransformation(ast)) {\n const innerType = getOptionInnerType(ast.to)\n if (innerType) {\n // Return the inner type as nullable (not wrapped in NonNull)\n return toGraphQLType(S.make(innerType))\n }\n }\n return toGraphQLType(S.make(ast.to))\n }\n\n // Handle Declaration (e.g., Option from S.Option)\n if (ast._tag === \"Declaration\") {\n // Option declarations map to nullable inner type\n if (isOptionDeclaration(ast)) {\n const innerType = getOptionInnerType(ast)\n if (innerType) {\n return toGraphQLType(S.make(innerType))\n }\n }\n // For other declarations (like Schema.Class), extract TypeLiteral from typeParameters\n const typeParams = (ast as any).typeParameters\n if (typeParams && typeParams.length > 0) {\n return toGraphQLType(S.make(typeParams[0]))\n }\n }\n\n // Handle unions (use first type as fallback)\n if (ast._tag === \"Union\") {\n const types = ast.types\n if (types.length > 0) {\n return toGraphQLType(S.make(types[0]))\n }\n }\n\n // Handle Suspend (recursive/self-referential schemas)\n if (ast._tag === \"Suspend\") {\n const innerAst = (ast as any).f()\n return toGraphQLType(S.make(innerAst))\n }\n\n // Default fallback\n return GraphQLString\n}\n\n/**\n * Convert an Effect Schema to a GraphQL input type\n */\nexport const toGraphQLInputType = (schema: S.Schema<any, any, any>): GraphQLInputType => {\n const ast = schema.ast\n\n // Handle primitives\n const primitiveResult = handlePrimitiveAST(ast)\n if (primitiveResult) return primitiveResult as GraphQLInputType\n\n // Handle refinements (e.g., S.Int)\n if (ast._tag === \"Refinement\") {\n return handleRefinementAST(ast, toGraphQLInputType) as GraphQLInputType\n }\n\n // Handle literals\n const literalResult = handleLiteralAST(ast)\n if (literalResult) return literalResult as GraphQLInputType\n\n // Handle arrays\n const tupleResult = handleTupleTypeAST(ast, toGraphQLInputType)\n if (tupleResult) return tupleResult\n\n // Handle structs/objects as input types\n if (ast._tag === \"TypeLiteral\") {\n const fields = buildFieldsFromPropertySignatures(\n ast.propertySignatures,\n toGraphQLInputType,\n )\n\n const typeName =\n (schema as any).annotations?.identifier || `Input_${Math.random().toString(36).slice(2, 11)}`\n\n return new GraphQLInputObjectType({\n name: typeName,\n fields,\n })\n }\n\n // Handle transformations - use the \"from\" side for input\n if (ast._tag === \"Transformation\") {\n // For Option transformations, the \"from\" side is Union(T, null/undefined)\n // which the Union handler below will process correctly\n return toGraphQLInputType(S.make(ast.from))\n }\n\n // Handle Declaration (for completeness, though inputs typically use \"from\" side)\n if (ast._tag === \"Declaration\") {\n // Option declarations - use the inner type\n if (isOptionDeclaration(ast)) {\n const innerType = getOptionInnerType(ast)\n if (innerType) {\n return toGraphQLInputType(S.make(innerType))\n }\n }\n // For other declarations, extract from typeParameters\n const typeParams = (ast as any).typeParameters\n if (typeParams && typeParams.length > 0) {\n return toGraphQLInputType(S.make(typeParams[0]))\n }\n }\n\n // Handle unions (use first non-null/undefined type)\n if (ast._tag === \"Union\") {\n const types = ast.types\n // Filter out null and undefined for nullable unions\n const nonNullTypes = types\n .filter((t: AST.AST) => t._tag !== \"Literal\" || (t as any).literal !== null)\n .filter((t: AST.AST) => t._tag !== \"UndefinedKeyword\")\n if (nonNullTypes.length > 0) {\n return toGraphQLInputType(S.make(nonNullTypes[0]))\n }\n if (types.length > 0) {\n return toGraphQLInputType(S.make(types[0]))\n }\n }\n\n // Handle Suspend (recursive/self-referential schemas)\n if (ast._tag === \"Suspend\") {\n const innerAst = (ast as any).f()\n return toGraphQLInputType(S.make(innerAst))\n }\n\n // Default fallback\n return GraphQLString\n}\n\n/**\n * Additional field configuration for computed/relational fields\n */\nexport interface AdditionalField<Parent, Args, R, E, A> {\n type: GraphQLOutputType\n args?: GraphQLFieldConfigArgumentMap\n description?: string\n resolve: (parent: Parent, args: Args) => Effect.Effect<A, E, R>\n}\n\n/**\n * Create a GraphQL Object Type from an Effect Schema with a name\n * Optionally add computed/relational fields with resolvers\n */\nexport const toGraphQLObjectType = <T>(\n name: string,\n schema: S.Schema<any, any, any>,\n additionalFields?: Record<string, AdditionalField<T, any, any, any, any>>\n): GraphQLObjectType => {\n let ast = schema.ast\n\n // Handle Transformation wrappers (e.g., from optionalWith, Schema.Class)\n // Recurse through transformations to find the TypeLiteral\n while (ast._tag === \"Transformation\") {\n ast = (ast as any).to\n }\n\n // Handle Declaration (e.g., Schema.Class)\n if (ast._tag === \"Declaration\") {\n const typeParams = (ast as any).typeParameters\n if (typeParams && typeParams.length > 0) {\n ast = typeParams[0]\n // May need to recurse through more transformations\n while (ast._tag === \"Transformation\") {\n ast = (ast as any).to\n }\n }\n }\n\n if (ast._tag === \"TypeLiteral\") {\n // Add fields from schema\n const baseFields = buildFieldsFromPropertySignatures(ast.propertySignatures, toGraphQLType)\n const fields: GraphQLFieldConfigMap<any, any> = { ...baseFields }\n\n // Add additional computed/relational fields\n if (additionalFields) {\n for (const [fieldName, fieldConfig] of Object.entries(additionalFields)) {\n fields[fieldName] = {\n type: fieldConfig.type,\n args: fieldConfig.args,\n description: fieldConfig.description,\n // Note: resolve will be set later when runtime is available\n resolve: fieldConfig.resolve as any,\n }\n }\n }\n\n return new GraphQLObjectType({\n name,\n fields,\n })\n }\n\n throw new Error(`Schema must be an object type to convert to GraphQLObjectType`)\n}\n\n/**\n * Convert an Effect Schema to GraphQL arguments\n */\nexport const toGraphQLArgs = (schema: S.Schema<any, any, any>): GraphQLFieldConfigArgumentMap => {\n const ast = schema.ast\n\n if (ast._tag === \"TypeLiteral\") {\n const args = buildFieldsFromPropertySignatures(ast.propertySignatures, toGraphQLInputType)\n return args as GraphQLFieldConfigArgumentMap\n }\n\n throw new Error(`Schema must be an object type to convert to GraphQL arguments`)\n}\n","import * as S from \"effect/Schema\"\nimport * as AST from \"effect/SchemaAST\"\nimport {\n GraphQLObjectType,\n GraphQLInterfaceType,\n GraphQLEnumType,\n GraphQLUnionType,\n GraphQLInputObjectType,\n GraphQLList,\n GraphQLNonNull,\n GraphQLFieldConfigMap,\n GraphQLInputFieldConfigMap,\n} from \"graphql\"\nimport {\n toGraphQLType,\n toGraphQLArgs,\n toGraphQLInputType,\n isOptionTransformation,\n isOptionDeclaration,\n} from \"../schema-mapping\"\nimport type {\n TypeRegistration,\n InterfaceRegistration,\n EnumRegistration,\n UnionRegistration,\n InputTypeRegistration,\n} from \"./types\"\n\n/**\n * Extract type name from a schema if it has one.\n * Supports:\n * - S.TaggedStruct(\"Name\", {...}) - extracts from _tag literal\n * - S.TaggedClass()(\"Name\", {...}) - extracts from identifier annotation\n * - S.Class<T>(\"Name\")({...}) - extracts from identifier annotation\n */\nexport function getSchemaName(schema: S.Schema<any, any, any>): string | undefined {\n const ast = schema.ast\n\n // Handle Transformation (Schema.Class, TaggedClass)\n if (ast._tag === \"Transformation\") {\n const identifier = AST.getIdentifierAnnotation((ast as any).to)\n if (identifier._tag === \"Some\") {\n return identifier.value\n }\n }\n\n // Handle TypeLiteral (TaggedStruct)\n if (ast._tag === \"TypeLiteral\") {\n const tagProp = (ast as any).propertySignatures.find((p: any) => String(p.name) === \"_tag\")\n if (tagProp && tagProp.type._tag === \"Literal\" && typeof tagProp.type.literal === \"string\") {\n return tagProp.type.literal\n }\n }\n\n return undefined\n}\n\n/**\n * Context needed for type conversion operations\n */\nexport interface TypeConversionContext {\n types: Map<string, TypeRegistration>\n interfaces: Map<string, InterfaceRegistration>\n enums: Map<string, EnumRegistration>\n unions: Map<string, UnionRegistration>\n inputs: Map<string, InputTypeRegistration>\n typeRegistry: Map<string, GraphQLObjectType>\n interfaceRegistry: Map<string, GraphQLInterfaceType>\n enumRegistry: Map<string, GraphQLEnumType>\n unionRegistry: Map<string, GraphQLUnionType>\n inputRegistry: Map<string, GraphQLInputObjectType>\n // Reverse lookup caches for O(1) type resolution\n schemaToTypeName?: Map<S.Schema<any, any, any>, string>\n astToTypeName?: Map<AST.AST, string>\n schemaToInterfaceName?: Map<S.Schema<any, any, any>, string>\n astToInterfaceName?: Map<AST.AST, string>\n schemaToInputName?: Map<S.Schema<any, any, any>, string>\n astToInputName?: Map<AST.AST, string>\n // Cached sorted values for enum/union matching\n enumSortedValues?: Map<string, readonly string[]>\n unionSortedTypes?: Map<string, readonly string[]>\n // Reverse lookup: literal value -> enum name (for single literal O(1) lookup)\n literalToEnumName?: Map<string, string>\n}\n\n/**\n * Build reverse lookup maps from registration maps for O(1) type resolution\n */\nexport function buildReverseLookups(ctx: TypeConversionContext): void {\n // Build schema/AST -> type name lookups\n if (!ctx.schemaToTypeName) {\n ctx.schemaToTypeName = new Map()\n ctx.astToTypeName = new Map()\n for (const [typeName, typeReg] of ctx.types) {\n ctx.schemaToTypeName.set(typeReg.schema, typeName)\n ctx.astToTypeName.set(typeReg.schema.ast, typeName)\n\n // Also add unwrapped AST forms for transformation schemas\n let ast = typeReg.schema.ast as any\n while (ast._tag === \"Transformation\") {\n ast = ast.to\n ctx.astToTypeName.set(ast, typeName)\n }\n // If we hit a Declaration, also add its typeParameters[0]\n if (ast._tag === \"Declaration\" && ast.typeParameters?.[0]) {\n ctx.astToTypeName.set(ast.typeParameters[0], typeName)\n }\n }\n }\n\n // Build schema/AST -> interface name lookups\n if (!ctx.schemaToInterfaceName) {\n ctx.schemaToInterfaceName = new Map()\n ctx.astToInterfaceName = new Map()\n for (const [interfaceName, interfaceReg] of ctx.interfaces) {\n ctx.schemaToInterfaceName.set(interfaceReg.schema, interfaceName)\n ctx.astToInterfaceName.set(interfaceReg.schema.ast, interfaceName)\n\n // Also add unwrapped AST forms for transformation schemas\n let ast = interfaceReg.schema.ast as any\n while (ast._tag === \"Transformation\") {\n ast = ast.to\n ctx.astToInterfaceName.set(ast, interfaceName)\n }\n // If we hit a Declaration, also add its typeParameters[0]\n if (ast._tag === \"Declaration\" && ast.typeParameters?.[0]) {\n ctx.astToInterfaceName.set(ast.typeParameters[0], interfaceName)\n }\n }\n }\n\n // Build schema/AST -> input name lookups\n if (!ctx.schemaToInputName) {\n ctx.schemaToInputName = new Map()\n ctx.astToInputName = new Map()\n for (const [inputName, inputReg] of ctx.inputs) {\n ctx.schemaToInputName.set(inputReg.schema, inputName)\n ctx.astToInputName.set(inputReg.schema.ast, inputName)\n\n // Also add unwrapped AST forms for transformation schemas\n let ast = inputReg.schema.ast as any\n while (ast._tag === \"Transformation\") {\n ast = ast.to\n ctx.astToInputName.set(ast, inputName)\n }\n // If we hit a Declaration, also add its typeParameters[0]\n if (ast._tag === \"Declaration\" && ast.typeParameters?.[0]) {\n ctx.astToInputName.set(ast.typeParameters[0], inputName)\n }\n }\n }\n\n // Build cached sorted enum values and literal -> enum lookup\n if (!ctx.enumSortedValues) {\n ctx.enumSortedValues = new Map()\n ctx.literalToEnumName = new Map()\n for (const [enumName, enumReg] of ctx.enums) {\n ctx.enumSortedValues.set(enumName, [...enumReg.values].sort())\n // Build literal -> enum reverse lookup for O(1) single literal lookups\n for (const value of enumReg.values) {\n ctx.literalToEnumName.set(value, enumName)\n }\n }\n }\n\n // Build cached sorted union types\n if (!ctx.unionSortedTypes) {\n ctx.unionSortedTypes = new Map()\n for (const [unionName, unionReg] of ctx.unions) {\n ctx.unionSortedTypes.set(unionName, [...unionReg.types].sort())\n }\n }\n}\n\n// GraphQLNonNull wrapper cache for memoization\nconst nonNullCache = new WeakMap<any, GraphQLNonNull<any>>()\n\n/**\n * Get or create a GraphQLNonNull wrapper (memoized)\n */\nexport function getNonNull<T extends import(\"graphql\").GraphQLNullableType>(\n type: T\n): GraphQLNonNull<T> {\n let cached = nonNullCache.get(type)\n if (!cached) {\n cached = new GraphQLNonNull(type)\n nonNullCache.set(type, cached)\n }\n return cached\n}\n\n/**\n * Convert schema to GraphQL type, checking registry first for registered types\n */\nexport function toGraphQLTypeWithRegistry(\n schema: S.Schema<any, any, any>,\n ctx: TypeConversionContext\n): any {\n // Ensure reverse lookup maps are built\n buildReverseLookups(ctx)\n\n const ast = schema.ast\n\n // Check registered object types first\n const registeredType = findRegisteredType(schema, ast, ctx)\n if (registeredType) return registeredType\n\n // Check registered interfaces\n const registeredInterface = findRegisteredInterface(schema, ast, ctx)\n if (registeredInterface) return registeredInterface\n\n // Handle transformations (like S.Array, S.optional, etc)\n if (ast._tag === \"Transformation\") {\n return handleTransformationAST(ast, ctx)\n }\n\n // Handle unions (enum literals or object type unions)\n if (ast._tag === \"Union\") {\n return handleUnionAST(ast, ctx)\n }\n\n // Check single literal for enum match\n if (ast._tag === \"Literal\") {\n const enumType = findEnumForLiteral(ast, ctx)\n if (enumType) return enumType\n }\n\n // Handle tuple types (readonly arrays)\n if (ast._tag === \"TupleType\") {\n return handleTupleTypeAST(ast, ctx)\n }\n\n // Handle Declaration (e.g., Option, Schema.Class)\n if (ast._tag === \"Declaration\") {\n // Option declarations map to nullable inner type\n if (isOptionDeclaration(ast)) {\n const innerType = getOptionInnerType(ast)\n if (innerType) {\n return toGraphQLTypeWithRegistry(S.make(innerType), ctx)\n }\n }\n // For other declarations (like Schema.Class), extract TypeLiteral from typeParameters\n const typeParams = (ast as any).typeParameters\n if (typeParams && typeParams.length > 0) {\n return toGraphQLTypeWithRegistry(S.make(typeParams[0]), ctx)\n }\n }\n\n // Handle Suspend (recursive/self-referential schemas)\n if (ast._tag === \"Suspend\") {\n const innerAst = (ast as any).f()\n return toGraphQLTypeWithRegistry(S.make(innerAst), ctx)\n }\n\n // Fall back to default conversion\n return toGraphQLType(schema)\n}\n\n/**\n * Find a registered object type matching this schema (O(1) with reverse lookup)\n */\nfunction findRegisteredType(\n schema: S.Schema<any, any, any>,\n ast: AST.AST,\n ctx: TypeConversionContext\n): GraphQLObjectType | undefined {\n // Use reverse lookup maps for O(1) lookup\n const typeName = ctx.schemaToTypeName?.get(schema) ?? ctx.astToTypeName?.get(ast)\n if (typeName) {\n return ctx.typeRegistry.get(typeName)\n }\n return undefined\n}\n\n/**\n * Find a registered interface matching this schema (O(1) with reverse lookup)\n */\nfunction findRegisteredInterface(\n schema: S.Schema<any, any, any>,\n ast: AST.AST,\n ctx: TypeConversionContext\n): GraphQLInterfaceType | undefined {\n // Use reverse lookup maps for O(1) lookup\n const interfaceName = ctx.schemaToInterfaceName?.get(schema) ?? ctx.astToInterfaceName?.get(ast)\n if (interfaceName) {\n return ctx.interfaceRegistry.get(interfaceName)\n }\n return undefined\n}\n\n/**\n * Get the inner type from an Option Declaration.\n */\nfunction getOptionInnerType(ast: AST.AST): AST.AST | undefined {\n if (ast._tag === \"Declaration\") {\n const typeParams = (ast as any).typeParameters\n if (typeParams && typeParams.length > 0) {\n return typeParams[0]\n }\n }\n return undefined\n}\n\n/**\n * Find a registered type for an AST node, checking cache and fallback scans\n */\nfunction findRegisteredTypeForAST(\n memberAst: any,\n ctx: TypeConversionContext\n): GraphQLObjectType | undefined {\n // Check cache first for O(1) lookup\n const typeName = ctx.astToTypeName?.get(memberAst)\n if (typeName) {\n const result = ctx.typeRegistry.get(typeName)\n if (result) return result\n }\n\n // Fallback: Linear scan to check if memberAst matches any registered type\n for (const [regTypeName, typeReg] of ctx.types) {\n if (typeReg.schema.ast === memberAst) {\n const result = ctx.typeRegistry.get(regTypeName)\n if (result) return result\n }\n }\n\n return undefined\n}\n\n/**\n * Find a registered type for a transformation's inner AST\n */\nfunction findRegisteredTypeForTransformation(\n memberAst: any,\n ctx: TypeConversionContext\n): GraphQLObjectType | undefined {\n if (memberAst._tag !== \"Transformation\") return undefined\n\n const innerToAst = memberAst.to\n const transformedTypeName = ctx.astToTypeName?.get(innerToAst)\n if (transformedTypeName) {\n const result = ctx.typeRegistry.get(transformedTypeName)\n if (result) return result\n }\n\n // Fallback: Linear scan for transformation's inner AST\n for (const [regTypeName, typeReg] of ctx.types) {\n if (typeReg.schema.ast === innerToAst) {\n const result = ctx.typeRegistry.get(regTypeName)\n if (result) return result\n }\n }\n\n return undefined\n}\n\n/**\n * Find a registered type for an Option.Some pattern (TypeLiteral with 'value' field)\n */\nfunction findRegisteredTypeForOptionSome(\n memberAst: any,\n ctx: TypeConversionContext\n): GraphQLObjectType | undefined {\n if (memberAst._tag !== \"TypeLiteral\") return undefined\n\n const valueField = memberAst.propertySignatures?.find(\n (p: any) => String(p.name) === \"value\"\n )\n if (!valueField) return undefined\n\n const valueType = valueField.type\n\n // Check cache first\n const valueTypeName = ctx.astToTypeName?.get(valueType)\n if (valueTypeName) {\n const result = ctx.typeRegistry.get(valueTypeName)\n if (result) return result\n }\n\n // Fallback: Linear scan for value type\n for (const [regTypeName, typeReg] of ctx.types) {\n if (typeReg.schema.ast === valueType) {\n const result = ctx.typeRegistry.get(regTypeName)\n if (result) return result\n }\n // Also check unwrapped forms\n let regAst = typeReg.schema.ast as any\n while (regAst._tag === \"Transformation\") {\n regAst = regAst.to\n if (regAst === valueType) {\n const result = ctx.typeRegistry.get(regTypeName)\n if (result) return result\n }\n }\n }\n\n // Recursively resolve the value type\n const innerResult = toGraphQLTypeWithRegistry(S.make(valueType), ctx)\n return innerResult\n}\n\n/**\n * Handle Option transformation AST nodes (e.g., S.OptionFromNullOr)\n */\nfunction handleOptionTransformation(\n ast: any,\n fromAst: any,\n toAst: any,\n ctx: TypeConversionContext\n): any {\n // For S.OptionFromNullOr, the wrapped type is in the 'from' Union, not in typeParameters\n // Structure: Transformation { from: Union[X.ast, Literal], to: Declaration(Option) }\n if (fromAst && fromAst._tag === \"Union\") {\n // Check if any union member is a registered type\n for (const memberAst of fromAst.types) {\n // Skip null/undefined literals\n if (memberAst._tag === \"Literal\") continue\n if (memberAst._tag === \"UndefinedKeyword\") continue\n\n // Try various strategies to find registered type\n const registeredType =\n findRegisteredTypeForAST(memberAst, ctx) ||\n findRegisteredTypeForTransformation(memberAst, ctx) ||\n findRegisteredTypeForOptionSome(memberAst, ctx)\n\n if (registeredType) return registeredType\n }\n }\n\n // Fallback to typeParameters for S.Option(X)\n const innerType = getOptionInnerType(toAst)\n if (innerType) {\n // Return the inner type as nullable (not wrapped in NonNull)\n return toGraphQLTypeWithRegistry(S.make(innerType), ctx)\n }\n\n return undefined\n}\n\n/**\n * Handle array transformation AST nodes (readonly array on the to side)\n */\nfunction handleArrayTransformation(\n toAst: any,\n ctx: TypeConversionContext\n): GraphQLList<any> | undefined {\n if (toAst._tag !== \"TupleType\") return undefined\n\n let elementType: any\n if (toAst.rest && toAst.rest.length > 0) {\n const elementSchema = S.make(toAst.rest[0].type)\n elementType = toGraphQLTypeWithRegistry(elementSchema, ctx)\n } else if (toAst.elements.length > 0) {\n const elementSchema = S.make(toAst.elements[0].type)\n elementType = toGraphQLTypeWithRegistry(elementSchema, ctx)\n } else {\n return undefined\n }\n\n return new GraphQLList(elementType)\n}\n\n/**\n * Handle Transformation AST nodes (arrays, optional, Schema.Class, Option, etc.)\n */\nfunction handleTransformationAST(ast: any, ctx: TypeConversionContext): any {\n const toAst = ast.to\n const fromAst = ast.from\n\n // Check if it's an Option transformation (e.g., S.OptionFromNullOr)\n // These should map to the nullable inner type\n if (isOptionDeclaration(toAst)) {\n const optionResult = handleOptionTransformation(ast, fromAst, toAst, ctx)\n if (optionResult) return optionResult\n }\n\n // Check if it's an array (readonly array on the to side)\n const arrayResult = handleArrayTransformation(toAst, ctx)\n if (arrayResult) return arrayResult\n\n // Other transformations - recurse on the \"to\" side\n return toGraphQLTypeWithRegistry(S.make(ast.to), ctx)\n}\n\n/**\n * Find a registered type in union members (handles S.Option(RegisteredType))\n */\nfunction findRegisteredTypeInUnionMembers(\n types: any[],\n ctx: TypeConversionContext\n): GraphQLObjectType | undefined {\n // Check if any union member is a registered type\n // S.Option/S.OptionFromNullOr wraps the type inside a Union in the 'from' position\n for (const memberAst of types) {\n // Try various strategies to find registered type\n const registeredType =\n findRegisteredTypeForAST(memberAst, ctx) ||\n findRegisteredTypeForTransformation(memberAst, ctx) ||\n findRegisteredTypeForOptionSome(memberAst, ctx)\n\n if (registeredType) return registeredType\n }\n\n return undefined\n}\n\n/**\n * Handle Union AST nodes (literal enums or object type unions)\n */\nfunction handleUnionAST(ast: any, ctx: TypeConversionContext): any {\n const allLiterals = ast.types.every((t: any) => t._tag === \"Literal\")\n\n if (allLiterals) {\n // This might be an enum\n const enumType = findEnumForLiteralUnion(ast.types, ctx)\n if (enumType) return enumType\n } else {\n // This is a Union of object types - check if it matches a registered union\n const unionType = findRegisteredUnion(ast.types, ctx)\n if (unionType) return unionType\n }\n\n // Check if any union member is a registered type\n const registeredType = findRegisteredTypeInUnionMembers(ast.types, ctx)\n if (registeredType) return registeredType\n\n // Fallback: use first type\n if (ast.types.length > 0) {\n return toGraphQLTypeWithRegistry(S.make(ast.types[0]), ctx)\n }\n\n return toGraphQLType(S.make(ast))\n}\n\n/**\n * Find a registered enum matching a union of literals (uses cached sorted values)\n */\nfunction findEnumForLiteralUnion(\n types: any[],\n ctx: TypeConversionContext\n): GraphQLEnumType | undefined {\n const literalValues = types.map((t: any) => String(t.literal)).sort()\n\n for (const [enumName] of ctx.enums) {\n // Use cached sorted values instead of sorting on every comparison\n const enumValues = ctx.enumSortedValues?.get(enumName)\n if (\n enumValues &&\n literalValues.length === enumValues.length &&\n literalValues.every((v: string, i: number) => v === enumValues[i])\n ) {\n return ctx.enumRegistry.get(enumName)\n }\n }\n return undefined\n}\n\n/**\n * Find a registered union matching an object type union (uses cached sorted types)\n */\nfunction findRegisteredUnion(\n types: any[],\n ctx: TypeConversionContext\n): GraphQLUnionType | undefined {\n // Collect _tag values from each union member\n const memberTags: string[] = []\n for (const memberAst of types) {\n if (memberAst._tag === \"TypeLiteral\") {\n const tagProp = memberAst.propertySignatures.find((p: any) => String(p.name) === \"_tag\")\n if (tagProp && tagProp.type._tag === \"Literal\") {\n memberTags.push(String(tagProp.type.literal))\n }\n }\n }\n\n // Check if any registered union has matching types\n if (memberTags.length === types.length) {\n const sortedTags = memberTags.sort()\n for (const [unionName] of ctx.unions) {\n // Use cached sorted types instead of sorting on every comparison\n const unionTypes = ctx.unionSortedTypes?.get(unionName)\n if (\n unionTypes &&\n sortedTags.length === unionTypes.length &&\n sortedTags.every((tag, i) => tag === unionTypes[i])\n ) {\n return ctx.unionRegistry.get(unionName)\n }\n }\n }\n return undefined\n}\n\n/**\n * Find a registered enum containing a single literal value (O(1) with reverse lookup)\n */\nfunction findEnumForLiteral(ast: any, ctx: TypeConversionContext): GraphQLEnumType | undefined {\n const literalValue = String(ast.literal)\n // Use reverse lookup map for O(1) lookup instead of O(N×M) iteration\n const enumName = ctx.literalToEnumName?.get(literalValue)\n if (enumName) {\n return ctx.enumRegistry.get(enumName)\n }\n return undefined\n}\n\n/**\n * Handle TupleType AST nodes (arrays)\n */\nfunction handleTupleTypeAST(ast: any, ctx: TypeConversionContext): any {\n if (ast.rest && ast.rest.length > 0) {\n const elementSchema = S.make(ast.rest[0].type)\n const elementType = toGraphQLTypeWithRegistry(elementSchema, ctx)\n return new GraphQLList(elementType)\n } else if (ast.elements && ast.elements.length > 0) {\n const elementSchema = S.make(ast.elements[0].type)\n const elementType = toGraphQLTypeWithRegistry(elementSchema, ctx)\n return new GraphQLList(elementType)\n }\n return toGraphQLType(S.make(ast))\n}\n\n/**\n * Convert a schema to GraphQL fields\n */\nexport function schemaToFields(\n schema: S.Schema<any, any, any>,\n ctx: TypeConversionContext\n): GraphQLFieldConfigMap<any, any> {\n let ast = schema.ast\n\n // Handle Transformation (Schema.Class, TaggedClass)\n if (ast._tag === \"Transformation\") {\n ast = (ast as any).to\n }\n\n // Handle Declaration (Schema.Class wraps TypeLiteral in Declaration)\n if (ast._tag === \"Declaration\") {\n const typeParams = (ast as any).typeParameters\n if (typeParams && typeParams.length > 0) {\n let innerAst = typeParams[0]\n // Unwrap transformation to get to TypeLiteral (e.g., when fields have DateFromSelf)\n while (innerAst._tag === \"Transformation\") {\n innerAst = innerAst.to\n }\n if (innerAst._tag === \"TypeLiteral\") {\n ast = innerAst\n }\n }\n }\n\n if (ast._tag === \"TypeLiteral\") {\n const fields: GraphQLFieldConfigMap<any, any> = {}\n\n for (const field of (ast as any).propertySignatures) {\n const fieldName = String(field.name)\n\n // Skip _tag field from TaggedStruct/TaggedClass - it's an internal discriminator\n if (fieldName === \"_tag\") continue\n\n const fieldSchema = S.make(field.type)\n let fieldType = toGraphQLTypeWithRegistry(fieldSchema, ctx)\n\n // Make non-optional fields non-null, unless they're Option transformations\n // Option transformations (like S.OptionFromNullOr) should always be nullable\n const isOptionField = isOptionTransformation(field.type) || isOptionDeclaration(field.type)\n if (!field.isOptional && !isOptionField) {\n fieldType = getNonNull(fieldType)\n }\n\n fields[fieldName] = { type: fieldType }\n }\n\n return fields\n }\n\n return {}\n}\n\n/**\n * Convert a schema to GraphQL input fields\n */\nexport function schemaToInputFields(\n schema: S.Schema<any, any, any>,\n enumRegistry: Map<string, GraphQLEnumType>,\n inputRegistry: Map<string, GraphQLInputObjectType>,\n inputs: Map<string, InputTypeRegistration>,\n enums: Map<string, EnumRegistration>,\n cache?: InputTypeLookupCache\n): GraphQLInputFieldConfigMap {\n let ast = schema.ast\n\n // Unwrap transformations to get to the underlying type\n while (ast._tag === \"Transformation\") {\n ast = (ast as any).to\n }\n\n if (ast._tag === \"TypeLiteral\") {\n const fields: GraphQLInputFieldConfigMap = {}\n\n for (const field of ast.propertySignatures) {\n const fieldName = String(field.name)\n\n // Skip _tag field from TaggedStruct/TaggedClass - it's an internal discriminator\n if (fieldName === \"_tag\") continue\n\n const fieldSchema = S.make(field.type)\n let fieldType = toGraphQLInputTypeWithRegistry(\n fieldSchema,\n enumRegistry,\n inputRegistry,\n inputs,\n enums,\n cache\n )\n\n // Make non-optional fields non-null, unless they're Option transformations\n // Option transformations (like S.OptionFromNullOr) should always be nullable\n const isOptionField = isOptionTransformation(field.type) || isOptionDeclaration(field.type)\n if (!field.isOptional && !isOptionField) {\n fieldType = getNonNull(fieldType)\n }\n\n fields[fieldName] = { type: fieldType }\n }\n\n return fields\n }\n\n return {}\n}\n\n/**\n * Optional cache for input type lookups to enable O(1) resolution\n */\nexport interface InputTypeLookupCache {\n schemaToInputName?: Map<S.Schema<any, any, any>, string>\n astToInputName?: Map<AST.AST, string>\n literalToEnumName?: Map<string, string>\n enumSortedValues?: Map<string, readonly string[]>\n}\n\n/**\n * Build lookup caches for input type resolution\n */\nexport function buildInputTypeLookupCache(\n inputs: Map<string, InputTypeRegistration>,\n enums: Map<string, EnumRegistration>\n): InputTypeLookupCache {\n const cache: InputTypeLookupCache = {\n schemaToInputName: new Map(),\n astToInputName: new Map(),\n literalToEnumName: new Map(),\n enumSortedValues: new Map(),\n }\n\n // Build input type reverse lookups\n for (const [inputName, inputReg] of inputs) {\n cache.schemaToInputName!.set(inputReg.schema, inputName)\n cache.astToInputName!.set(inputReg.schema.ast, inputName)\n\n // Also add unwrapped AST forms for transformation schemas\n // This ensures lookups work when encountering unwrapped AST levels\n let ast = inputReg.schema.ast as any\n while (ast._tag === \"Transformation\") {\n ast = ast.to\n cache.astToInputName!.set(ast, inputName)\n }\n // If we hit a Declaration, also add its typeParameters[0]\n if (ast._tag === \"Declaration\" && ast.typeParameters?.[0]) {\n cache.astToInputName!.set(ast.typeParameters[0], inputName)\n }\n }\n\n // Build enum lookups\n for (const [enumName, enumReg] of enums) {\n cache.enumSortedValues!.set(enumName, [...enumReg.values].sort())\n for (const value of enumReg.values) {\n cache.literalToEnumName!.set(value, enumName)\n }\n }\n\n return cache\n}\n\n/**\n * Find a registered input type for a schema/AST\n */\nfunction findRegisteredInputType(\n schema: S.Schema<any, any, any>,\n ast: AST.AST,\n inputs: Map<string, InputTypeRegistration>,\n inputRegistry: Map<string, GraphQLInputObjectType>,\n cache?: InputTypeLookupCache\n): GraphQLInputObjectType | undefined {\n // Check cache first for O(1) lookup\n if (cache?.schemaToInputName || cache?.astToInputName) {\n const inputName = cache.schemaToInputName?.get(schema) ?? cache.astToInputName?.get(ast)\n if (inputName) {\n return inputRegistry.get(inputName)\n }\n } else {\n // Fallback to linear scan if no cache\n for (const [inputName, inputReg] of inputs) {\n if (inputReg.schema.ast === ast || inputReg.schema === schema) {\n return inputRegistry.get(inputName)\n }\n }\n }\n return undefined\n}\n\n/**\n * Find a registered input type for an AST node, checking cache and fallback scans\n */\nfunction findRegisteredInputForAST(\n memberAst: any,\n inputs: Map<string, InputTypeRegistration>,\n inputRegistry: Map<string, GraphQLInputObjectType>,\n enumRegistry: Map<string, GraphQLEnumType>,\n enums: Map<string, EnumRegistration>,\n cache?: InputTypeLookupCache\n): any {\n // Check cache first for O(1) lookup\n const inputName = cache?.astToInputName?.get(memberAst)\n if (inputName) {\n const inputReg = inputs.get(inputName)\n if (inputReg) {\n return toGraphQLInputTypeWithRegistry(\n inputReg.schema,\n enumRegistry,\n inputRegistry,\n inputs,\n enums,\n cache\n )\n }\n }\n\n // Fallback: Linear scan to check if memberAst matches any registered input\n for (const [, inputReg] of inputs) {\n if (inputReg.schema.ast === memberAst) {\n return toGraphQLInputTypeWithRegistry(\n inputReg.schema,\n enumRegistry,\n inputRegistry,\n inputs,\n enums,\n cache\n )\n }\n }\n\n return undefined\n}\n\n/**\n * Find a registered input type for a transformation's inner AST\n */\nfunction findRegisteredInputForTransformation(\n memberAst: any,\n inputs: Map<string, InputTypeRegistration>,\n inputRegistry: Map<string, GraphQLInputObjectType>,\n enumRegistry: Map<string, GraphQLEnumType>,\n enums: Map<string, EnumRegistration>,\n cache?: InputTypeLookupCache\n): any {\n if (memberAst._tag !== \"Transformation\") return undefined\n\n const innerToAst = memberAst.to\n const transformedInputName = cache?.astToInputName?.get(innerToAst)\n if (transformedInputName) {\n const inputReg = inputs.get(transformedInputName)\n if (inputReg) {\n return toGraphQLInputTypeWithRegistry(\n inputReg.schema,\n enumRegistry,\n inputRegistry,\n inputs,\n enums,\n cache\n )\n }\n }\n\n // Fallback: Linear scan for transformation's inner AST\n for (const [, inputReg] of inputs) {\n if (inputReg.schema.ast === innerToAst) {\n return toGraphQLInputTypeWithRegistry(\n inputReg.schema,\n enumRegistry,\n inputRegistry,\n inputs,\n enums,\n cache\n )\n }\n }\n\n return undefined\n}\n\n/**\n * Find a registered input type for an Option.Some pattern (TypeLiteral with 'value' field)\n */\nfunction findRegisteredInputForOptionSome(\n memberAst: any,\n inputs: Map<string, InputTypeRegistration>,\n inputRegistry: Map<string, GraphQLInputObjectType>,\n enumRegistry: Map<string, GraphQLEnumType>,\n enums: Map<string, EnumRegistration>,\n cache?: InputTypeLookupCache\n): any {\n if (memberAst._tag !== \"TypeLiteral\") return undefined\n\n const valueField = (memberAst as any).propertySignatures?.find(\n (p: any) => String(p.name) === \"value\"\n )\n if (!valueField) return undefined\n\n const valueType = valueField.type\n\n // Check cache first for the value type\n const valueInputName = cache?.astToInputName?.get(valueType)\n if (valueInputName) {\n const inputReg = inputs.get(valueInputName)\n if (inputReg) {\n return toGraphQLInputTypeWithRegistry(\n inputReg.schema,\n enumRegistry,\n inputRegistry,\n inputs,\n enums,\n cache\n )\n }\n }\n\n // Fallback: Linear scan to check if valueType matches any registered input\n for (const [, inputReg] of inputs) {\n if (inputReg.schema.ast === valueType) {\n return toGraphQLInputTypeWithRegistry(\n inputReg.schema,\n enumRegistry,\n inputRegistry,\n inputs,\n enums,\n cache\n )\n }\n // Also check unwrapped forms of registered schema\n let regAst = inputReg.schema.ast as any\n while (regAst._tag === \"Transformation\") {\n regAst = regAst.to\n if (regAst === valueType) {\n return toGraphQLInputTypeWithRegistry(\n inputReg.schema,\n enumRegistry,\n inputRegistry,\n inputs,\n enums,\n cache\n )\n }\n }\n if (regAst._tag === \"Declaration\" && regAst.typeParameters?.[0] === valueType) {\n return toGraphQLInputTypeWithRegistry(\n inputReg.schema,\n enumRegistry,\n inputRegistry,\n inputs,\n enums,\n cache\n )\n }\n }\n\n // Recursively resolve the value type if no direct match found\n const innerResult = toGraphQLInputTypeWithRegistry(\n S.make(valueType),\n enumRegistry,\n inputRegistry,\n inputs,\n enums,\n cache\n )\n return innerResult || undefined\n}\n\n/**\n * Handle Option transformation for input types\n */\nfunction handleOptionTransformationForInput(\n fromAst: any,\n toAst: any,\n inputs: Map<string, InputTypeRegistration>,\n inputRegistry: Map<string, GraphQLInputObjectType>,\n enumRegistry: Map<string, GraphQLEnumType>,\n enums: Map<string, EnumRegistration>,\n cache?: InputTypeLookupCache\n): any {\n // For S.OptionFromNullOr and S.Option, check the 'from' Union for registered input types\n if (!fromAst || fromAst._tag !== \"Union\") return undefined\n\n for (const memberAst of fromAst.types) {\n // Skip null/undefined literals\n if (memberAst._tag === \"Literal\") continue\n if (memberAst._tag === \"UndefinedKeyword\") continue\n\n // Try various strategies to find registered input\n const registeredInput =\n findRegisteredInputForAST(memberAst, inputs, inputRegistry, enumRegistry, enums, cache) ||\n findRegisteredInputForTransformation(memberAst, inputs, inputRegistry, enumRegistry, enums, cache) ||\n findRegisteredInputForOptionSome(memberAst, inputs, inputRegistry, enumRegistry, enums, cache)\n\n if (registeredInput) return registeredInput\n }\n\n return undefined\n}\n\n/**\n * Handle transformation AST for input types\n */\nfunction handleTransformationForInput(\n ast: any,\n inputs: Map<string, InputTypeRegistration>,\n inputRegistry: Map<string, GraphQLInputObjectType>,\n enumRegistry: Map<string, GraphQLEnumType>,\n enums: Map<string, EnumRegistration>,\n cache?: InputTypeLookupCache\n): any {\n const toAst = (ast as any).to\n const fromAst = (ast as any).from\n\n // For S.OptionFromNullOr and S.Option, check the 'from' Union for registered input types\n if (isOptionDeclaration(toAst)) {\n const optionResult = handleOptionTransformationForInput(\n fromAst,\n toAst,\n inputs,\n inputRegistry,\n enumRegistry,\n enums,\n cache\n )\n if (optionResult) return optionResult\n }\n\n return toGraphQLInputTypeWithRegistry(\n S.make(toAst),\n enumRegistry,\n inputRegistry,\n inputs,\n enums,\n cache\n )\n}\n\n/**\n * Find a registered input type in union members\n */\nfunction findRegisteredInputInUnionMembers(\n types: any[],\n inputs: Map<string, InputTypeRegistration>,\n inputRegistry: Map<string, GraphQLInputObjectType>,\n enumRegistry: Map<string, GraphQLEnumType>,\n enums: Map<string, EnumRegistration>,\n cache?: InputTypeLookupCache\n): any {\n for (const memberAst of types) {\n // Try various strategies to find registered input\n const registeredInput =\n findRegisteredInputForAST(memberAst, inputs, inputRegistry, enumRegistry, enums, cache) ||\n findRegisteredInputForTransformation(memberAst, inputs, inputRegistry, enumRegistry, enums, cache) ||\n findRegisteredInputForOptionSome(memberAst, inputs, inputRegistry, enumRegistry, enums, cache)\n\n if (registeredInput) return registeredInput\n }\n\n return undefined\n}\n\n/**\n * Handle union AST for input types\n */\nfunction handleUnionForInput(\n ast: any,\n inputs: Map<string, InputTypeRegistration>,\n inputRegistry: Map<string, GraphQLInputObjectType>,\n enumRegistry: Map<string, GraphQLEnumType>,\n enums: Map<string, EnumRegistration>,\n cache?: InputTypeLookupCache\n): any {\n const unionAst = ast as any\n\n // Handle S.optional which creates Union(LiteralUnion, UndefinedKeyword)\n const nonUndefinedTypes = unionAst.types.filter((t: any) => t._tag !== \"UndefinedKeyword\")\n if (nonUndefinedTypes.length === 1) {\n if (nonUndefinedTypes[0]._tag === \"Union\" || nonUndefinedTypes[0]._tag === \"TypeLiteral\") {\n return toGraphQLInputTypeWithRegistry(\n S.make(nonUndefinedTypes[0]),\n enumRegistry,\n inputRegistry,\n inputs,\n enums,\n cache\n )\n }\n }\n\n // Check if any union member is a registered input type\n const registeredInput = findRegisteredInputInUnionMembers(\n unionAst.types,\n inputs,\n inputRegistry,\n enumRegistry,\n enums,\n cache\n )\n if (registeredInput) return registeredInput\n\n // Check for enum match (all literals)\n const allLiterals = unionAst.types.every((t: any) => t._tag === \"Literal\")\n if (allLiterals) {\n const literalValues = unionAst.types.map((t: any) => String(t.literal)).sort()\n\n // Use cached sorted values if available\n for (const [enumName] of enums) {\n const enumValues =\n cache?.enumSortedValues?.get(enumName) ?? [...enums.get(enumName)!.values].sort()\n if (\n literalValues.length === enumValues.length &&\n literalValues.every((v: string, i: number) => v === enumValues[i])\n ) {\n const result = enumRegistry.get(enumName)\n if (result) return result\n }\n }\n }\n\n return undefined\n}\n\n/**\n * Handle literal AST for input types\n */\nfunction handleLiteralForInput(\n ast: any,\n enumRegistry: Map<string, GraphQLEnumType>,\n enums: Map<string, EnumRegistration>,\n cache?: InputTypeLookupCache\n): GraphQLEnumType | undefined {\n const literalValue = String(ast.literal)\n if (cache?.literalToEnumName) {\n const enumName = cache.literalToEnumName.get(literalValue)\n if (enumName) {\n return enumRegistry.get(enumName)\n }\n } else {\n // Fallback to linear scan if no cache\n for (const [enumName, enumReg] of enums) {\n if (enumReg.values.includes(literalValue)) {\n return enumRegistry.get(enumName)\n }\n }\n }\n return undefined\n}\n\n/**\n * Handle suspend AST for input types\n */\nfunction handleSuspendForInput(\n ast: any,\n inputs: Map<string, InputTypeRegistration>,\n inputRegistry: Map<string, GraphQLInputObjectType>,\n enumRegistry: Map<string, GraphQLEnumType>,\n enums: Map<string, EnumRegistration>,\n cache?: InputTypeLookupCache\n): any {\n const innerAst = (ast as any).f()\n return toGraphQLInputTypeWithRegistry(\n S.make(innerAst),\n enumRegistry,\n inputRegistry,\n inputs,\n enums,\n cache\n )\n}\n\n/**\n * Convert a schema to GraphQL input type, checking enum and input registries.\n * Uses O(1) reverse lookups when cache is provided.\n */\nexport function toGraphQLInputTypeWithRegistry(\n schema: S.Schema<any, any, any>,\n enumRegistry: Map<string, GraphQLEnumType>,\n inputRegistry: Map<string, GraphQLInputObjectType>,\n inputs: Map<string, InputTypeRegistration>,\n enums: Map<string, EnumRegistration>,\n cache?: InputTypeLookupCache\n): any {\n const ast = schema.ast\n\n // Check if this schema matches a registered input type FIRST (O(1) with cache)\n // This must happen before transformation handling to find registered types\n const registeredInput = findRegisteredInputType(schema, ast, inputs, inputRegistry, cache)\n if (registeredInput) return registeredInput\n\n // Handle transformations (like S.optional wrapping) AFTER registry lookup\n if (ast._tag === \"Transformation\") {\n return handleTransformationForInput(ast, inputs, inputRegistry, enumRegistry, enums, cache)\n }\n\n // Check if this schema matches a registered enum\n if (ast._tag === \"Union\") {\n const unionResult = handleUnionForInput(ast, inputs, inputRegistry, enumRegistry, enums, cache)\n if (unionResult) return unionResult\n }\n\n // Check single literal (O(1) with cache)\n if (ast._tag === \"Literal\") {\n const literalResult = handleLiteralForInput(ast, enumRegistry, enums, cache)\n if (literalResult) return literalResult\n }\n\n // Handle Suspend (recursive/self-referential schemas)\n if (ast._tag === \"Suspend\") {\n return handleSuspendForInput(ast, inputs, inputRegistry, enumRegistry, enums, cache)\n }\n\n // Fall back to default toGraphQLInputType\n return toGraphQLInputType(schema)\n}\n\n/**\n * Convert a schema to GraphQL arguments with registry support.\n * Uses O(1) reverse lookups when cache is provided.\n */\nexport function toGraphQLArgsWithRegistry(\n schema: S.Schema<any, any, any>,\n enumRegistry: Map<string, GraphQLEnumType>,\n inputRegistry: Map<string, GraphQLInputObjectType>,\n inputs: Map<string, InputTypeRegistration>,\n enums: Map<string, EnumRegistration>,\n cache?: InputTypeLookupCache\n): any {\n const ast = schema.ast\n\n if (ast._tag === \"TypeLiteral\") {\n const args: Record<string, { type: any }> = {}\n\n for (const field of (ast as any).propertySignatures) {\n const fieldName = String(field.name)\n\n // Skip _tag field from TaggedStruct/TaggedClass - it's an internal discriminator\n if (fieldName === \"_tag\") continue\n\n const fieldSchema = S.make(field.type)\n let fieldType = toGraphQLInputTypeWithRegistry(\n fieldSchema,\n enumRegistry,\n inputRegistry,\n inputs,\n enums,\n cache\n )\n\n // Make non-optional fields non-null (memoized)\n if (!field.isOptional) {\n fieldType = getNonNull(fieldType)\n }\n\n args[fieldName] = { type: fieldType }\n }\n\n return args\n }\n\n // Fall back to default toGraphQLArgs\n return toGraphQLArgs(schema)\n}\n","import { Effect, Runtime, Stream, Queue, Fiber, Option } from \"effect\"\nimport * as S from \"effect/Schema\"\nimport { GraphQLFieldConfig, GraphQLResolveInfo } from \"graphql\"\nimport type {\n FieldRegistration,\n SubscriptionFieldRegistration,\n ObjectFieldRegistration,\n DirectiveRegistration,\n MiddlewareRegistration,\n MiddlewareContext,\n GraphQLEffectContext,\n} from \"./types\"\nimport {\n toGraphQLTypeWithRegistry,\n toGraphQLArgsWithRegistry,\n type TypeConversionContext,\n type InputTypeLookupCache,\n} from \"./type-registry\"\n\n/**\n * Check if a schema represents an Option type (e.g., S.OptionFromNullOr).\n * These schemas have a Transformation with a Declaration on the \"to\" side\n * that has a TypeConstructor annotation of 'effect/Option'.\n */\nfunction isOptionSchema(schema: S.Schema<any, any, any>): boolean {\n const ast = schema.ast\n if (ast._tag === \"Transformation\") {\n const toAst = (ast as any).to\n if (toAst._tag === \"Declaration\") {\n // Check for the TypeConstructor annotation which identifies Option types\n const annotations = toAst.annotations\n if (annotations) {\n const TypeConstructorSymbol = Symbol.for(\"effect/annotation/TypeConstructor\")\n const typeConstructor = annotations[TypeConstructorSymbol]\n if (typeConstructor && typeConstructor._tag === \"effect/Option\") {\n return true\n }\n }\n }\n }\n return false\n}\n\n/**\n * Encode a resolver's output value using the schema.\n * This is primarily needed for Option types where Option.none() needs to become null\n * and Option.some(x) needs to become x.\n *\n * For non-Option schemas, this is a no-op pass-through.\n */\nfunction encodeResolverOutput<A, I, R>(\n schema: S.Schema<A, I, R>,\n value: A\n): Effect.Effect<I, never, R> {\n // Only encode Option schemas - other schemas pass through unchanged\n // This optimization avoids the overhead of encoding for simple types\n if (isOptionSchema(schema)) {\n // Use Schema.encode to convert Option<A> back to I (null | A)\n return Effect.orDie(S.encode(schema)(value))\n }\n // For non-Option types, pass through unchanged\n return Effect.succeed(value as unknown as I)\n}\n\n/**\n * Context needed for building fields\n */\nexport interface FieldBuilderContext extends TypeConversionContext {\n directiveRegistrations: Map<string, DirectiveRegistration>\n middlewares: readonly MiddlewareRegistration[]\n inputTypeLookupCache?: InputTypeLookupCache\n}\n\n/**\n * Apply directives to an Effect by wrapping it with directive transformers\n */\nfunction applyDirectives<A, E, R>(\n effect: Effect.Effect<A, E, R>,\n directives: readonly { name: string; args?: Record<string, unknown> }[] | undefined,\n directiveRegistrations: Map<string, DirectiveRegistration>\n): Effect.Effect<A, E, any> {\n if (!directives) return effect\n\n let wrapped = effect\n for (const directiveApp of directives) {\n const directiveReg = directiveRegistrations.get(directiveApp.name)\n if (directiveReg?.apply) {\n wrapped = directiveReg.apply(directiveApp.args ?? {})(wrapped)\n }\n }\n return wrapped\n}\n\n/**\n * Apply middleware to an Effect by wrapping it with middleware transformers.\n *\n * Middleware executes in \"onion\" order - first registered middleware is the\n * outermost layer, meaning it runs first before and last after the resolver.\n *\n * Each middleware can optionally specify a `match` predicate to filter which\n * fields it applies to.\n */\nfunction applyMiddleware<A, E, R>(\n effect: Effect.Effect<A, E, R>,\n context: MiddlewareContext,\n middlewares: readonly MiddlewareRegistration[]\n): Effect.Effect<A, E, any> {\n if (middlewares.length === 0) return effect\n\n let wrapped = effect\n\n // Apply in reverse order so first registered is outermost\n // (executes first before, last after)\n for (let i = middlewares.length - 1; i >= 0; i--) {\n const middleware = middlewares[i]\n\n // Check if middleware should apply to this field\n if (middleware.match && !middleware.match(context.info)) {\n continue\n }\n\n wrapped = middleware.apply(wrapped, context)\n }\n\n return wrapped\n}\n\n/**\n * Build a GraphQL field config from a field registration (for queries/mutations)\n */\nexport function buildField(\n config: FieldRegistration,\n ctx: FieldBuilderContext\n): GraphQLFieldConfig<any, any> {\n const fieldConfig: GraphQLFieldConfig<any, any> = {\n type: toGraphQLTypeWithRegistry(config.type, ctx),\n resolve: async (\n _parent,\n args,\n context: GraphQLEffectContext<any>,\n info: GraphQLResolveInfo\n ) => {\n // Apply directives first (per-field, explicit)\n let effect = applyDirectives(\n config.resolve(args),\n config.directives,\n ctx.directiveRegistrations\n )\n\n // Apply middleware (global/pattern-matched)\n const middlewareContext: MiddlewareContext = { parent: _parent, args, info }\n effect = applyMiddleware(effect, middlewareContext, ctx.middlewares)\n\n // Execute the resolver\n const result = await Runtime.runPromise(context.runtime)(effect)\n\n // Encode the result (converts Option.none() to null, Option.some(x) to x)\n return await Runtime.runPromise(context.runtime)(encodeResolverOutput(config.type, result))\n },\n }\n\n if (config.args) {\n fieldConfig.args = toGraphQLArgsWithRegistry(\n config.args,\n ctx.enumRegistry,\n ctx.inputRegistry,\n ctx.inputs,\n ctx.enums,\n ctx.inputTypeLookupCache\n )\n }\n if (config.description) {\n fieldConfig.description = config.description\n }\n\n return fieldConfig\n}\n\n/**\n * Build a GraphQL field config for an object field (has parent param)\n */\nexport function buildObjectField(\n config: ObjectFieldRegistration,\n ctx: FieldBuilderContext\n): GraphQLFieldConfig<any, any> {\n const fieldConfig: GraphQLFieldConfig<any, any> = {\n type: toGraphQLTypeWithRegistry(config.type, ctx),\n resolve: async (parent, args, context: GraphQLEffectContext<any>, info: GraphQLResolveInfo) => {\n // Apply directives first (per-field, explicit)\n let effect = applyDirectives(\n config.resolve(parent, args),\n config.directives,\n ctx.directiveRegistrations\n )\n\n // Apply middleware (global/pattern-matched)\n const middlewareContext: MiddlewareContext = { parent, args, info }\n effect = applyMiddleware(effect, middlewareContext, ctx.middlewares)\n\n // Execute the resolver\n const result = await Runtime.runPromise(context.runtime)(effect)\n\n // Encode the result (converts Option.none() to null, Option.some(x) to x)\n return await Runtime.runPromise(context.runtime)(encodeResolverOutput(config.type, result))\n },\n }\n\n if (config.args) {\n fieldConfig.args = toGraphQLArgsWithRegistry(\n config.args,\n ctx.enumRegistry,\n ctx.inputRegistry,\n ctx.inputs,\n ctx.enums,\n ctx.inputTypeLookupCache\n )\n }\n if (config.description) {\n fieldConfig.description = config.description\n }\n\n return fieldConfig\n}\n\n/**\n * Build a GraphQL subscription field config.\n *\n * Subscriptions in GraphQL have a special structure:\n * - `subscribe` returns an AsyncIterator that yields the \"root value\" for each event\n * - `resolve` transforms each yielded value into the final result\n *\n * We convert Effect's Stream to an AsyncIterator using a Queue-based approach.\n */\nexport function buildSubscriptionField(\n config: SubscriptionFieldRegistration,\n ctx: FieldBuilderContext\n): GraphQLFieldConfig<any, any> {\n const fieldConfig: GraphQLFieldConfig<any, any> = {\n type: toGraphQLTypeWithRegistry(config.type, ctx),\n\n // The subscribe function returns an AsyncIterator\n subscribe: async (\n _parent,\n args,\n context: GraphQLEffectContext<any>,\n info: GraphQLResolveInfo\n ) => {\n // Get the Stream from the subscribe Effect\n let subscribeEffect = config.subscribe(args)\n\n // Apply directives to the subscribe effect\n subscribeEffect = applyDirectives(\n subscribeEffect,\n config.directives,\n ctx.directiveRegistrations\n ) as any\n\n // Apply middleware to the subscribe effect\n const middlewareContext: MiddlewareContext = { parent: _parent, args, info }\n subscribeEffect = applyMiddleware(subscribeEffect, middlewareContext, ctx.middlewares) as any\n\n const stream = await Runtime.runPromise(context.runtime)(subscribeEffect)\n\n // Convert Stream to AsyncIterator using queue-based approach\n return streamToAsyncIterator(stream, context.runtime)\n },\n\n // The resolve function transforms each yielded value\n // If no custom resolve is provided, encode and return the payload directly\n resolve: config.resolve\n ? async (value, args, context: GraphQLEffectContext<any>, info: GraphQLResolveInfo) => {\n let effect = config.resolve!(value, args)\n\n // Apply middleware to the resolve effect\n const middlewareContext: MiddlewareContext = { parent: value, args, info }\n effect = applyMiddleware(effect, middlewareContext, ctx.middlewares)\n\n // Execute the resolver\n const result = await Runtime.runPromise(context.runtime)(effect)\n\n // Encode the result (converts Option.none() to null, Option.some(x) to x)\n return await Runtime.runPromise(context.runtime)(\n encodeResolverOutput(config.type, result)\n )\n }\n : async (value, _args, context: GraphQLEffectContext<any>) => {\n // Even without custom resolve, encode Option values\n return await Runtime.runPromise(context.runtime)(encodeResolverOutput(config.type, value))\n },\n }\n\n if (config.args) {\n fieldConfig.args = toGraphQLArgsWithRegistry(\n config.args,\n ctx.enumRegistry,\n ctx.inputRegistry,\n ctx.inputs,\n ctx.enums,\n ctx.inputTypeLookupCache\n )\n }\n if (config.description) {\n fieldConfig.description = config.description\n }\n\n return fieldConfig\n}\n\n/**\n * Convert an Effect Stream to an AsyncIterator using a Queue-based approach.\n *\n * This is needed because Stream.toAsyncIterable() requires R = never,\n * but our streams may have service requirements that need to be provided\n * by the runtime context.\n */\nfunction streamToAsyncIterator<A, E, R>(\n stream: Stream.Stream<A, E, R>,\n runtime: Runtime.Runtime<R>\n): AsyncIterator<A> {\n // Create the queue synchronously via runSync since unbounded queue creation is synchronous\n let queue: Queue.Queue<Option.Option<A>>\n let fiber: Fiber.RuntimeFiber<void, E>\n let initialized = false\n let done = false\n\n const initialize = async () => {\n if (initialized) return\n initialized = true\n\n queue = await Runtime.runPromise(runtime)(Queue.unbounded<Option.Option<A>>())\n\n // Fork a fiber to run the stream and push values to the queue\n fiber = Runtime.runFork(runtime)(\n Effect.ensuring(\n Stream.runForEach(stream, (value) => Queue.offer(queue, Option.some(value))),\n // Signal completion by pushing None\n Queue.offer(queue, Option.none())\n )\n )\n }\n\n return {\n [Symbol.asyncIterator]() {\n return this\n },\n\n async next(): Promise<IteratorResult<A>> {\n await initialize()\n\n if (done) {\n return { done: true, value: undefined }\n }\n\n try {\n const optionValue = await Runtime.runPromise(runtime)(Queue.take(queue))\n\n if (Option.isNone(optionValue)) {\n done = true\n return { done: true, value: undefined }\n }\n\n return { done: false, value: optionValue.value }\n } catch (error) {\n done = true\n throw error\n }\n },\n\n async return(): Promise<IteratorResult<A>> {\n // Cleanup - interrupt the fiber and shutdown the queue\n done = true\n if (initialized) {\n try {\n await Runtime.runPromise(runtime)(\n Fiber.interrupt(fiber as unknown as Fiber.Fiber<any, any>)\n )\n await Runtime.runPromise(runtime)(Queue.shutdown(queue))\n } catch {\n // Ignore cleanup errors\n }\n }\n return { done: true, value: undefined }\n },\n } as AsyncIterator<A>\n}\n","import { Effect, Pipeable } from \"effect\"\nimport * as S from \"effect/Schema\"\nimport {\n GraphQLSchema,\n GraphQLObjectType,\n GraphQLInterfaceType,\n GraphQLEnumType,\n GraphQLUnionType,\n GraphQLInputObjectType,\n GraphQLFieldConfigMap,\n GraphQLDirective,\n DirectiveLocation,\n} from \"graphql\"\nimport type {\n FieldRegistration,\n TypeRegistration,\n InterfaceRegistration,\n EnumRegistration,\n UnionRegistration,\n InputTypeRegistration,\n DirectiveRegistration,\n DirectiveApplication,\n SubscriptionFieldRegistration,\n ObjectFieldRegistration,\n MiddlewareRegistration,\n MiddlewareContext,\n CacheHint,\n} from \"./types\"\nimport type { GraphQLExtension, ExecutionArgs } from \"../extensions\"\nimport type {\n GraphQLResolveInfo,\n DocumentNode,\n ExecutionResult,\n GraphQLError as GQLError,\n} from \"graphql\"\nimport type { FieldComplexity, FieldComplexityMap } from \"../server/complexity\"\nimport type { CacheHintMap } from \"../server/cache-control\"\nimport {\n getSchemaName,\n schemaToFields,\n schemaToInputFields,\n toGraphQLArgsWithRegistry,\n buildReverseLookups,\n buildInputTypeLookupCache,\n type TypeConversionContext,\n} from \"./type-registry\"\nimport {\n buildField,\n buildObjectField,\n buildSubscriptionField,\n FieldBuilderContext,\n} from \"./field-builders\"\n\n/**\n * Internal state for the builder\n */\ninterface BuilderState {\n types: Map<string, TypeRegistration>\n interfaces: Map<string, InterfaceRegistration>\n enums: Map<string, EnumRegistration>\n unions: Map<string, UnionRegistration>\n inputs: Map<string, InputTypeRegistration>\n directives: Map<string, DirectiveRegistration>\n middlewares: readonly MiddlewareRegistration[] // Array to preserve registration order\n extensions: readonly GraphQLExtension<any>[] // Array to preserve registration order\n queries: Map<string, FieldRegistration>\n mutations: Map<string, FieldRegistration>\n subscriptions: Map<string, SubscriptionFieldRegistration>\n objectFields: Map<string, Map<string, ObjectFieldRegistration>>\n}\n\n/**\n * Create a new state with one map updated\n */\nfunction updateState<K extends keyof BuilderState>(\n state: BuilderState,\n key: K,\n value: BuilderState[K]\n): BuilderState {\n return { ...state, [key]: value }\n}\n\n/**\n * GraphQL Schema Builder with type-safe service requirements (Layer-per-Request Pattern)\n *\n * The type parameter R accumulates all service requirements from resolvers.\n * Unlike the runtime-in-context approach, this pattern builds the schema without\n * executing any Effects. At request time, you provide a Layer with all required services.\n */\nexport class GraphQLSchemaBuilder<R = never> implements Pipeable.Pipeable {\n private constructor(private readonly state: BuilderState) {}\n\n /**\n * Pipeable interface implementation - enables fluent .pipe() syntax\n */\n pipe<A>(this: A): A\n pipe<A, B>(this: A, ab: (a: A) => B): B\n pipe<A, B, C>(this: A, ab: (a: A) => B, bc: (b: B) => C): C\n pipe<A, B, C, D>(this: A, ab: (a: A) => B, bc: (b: B) => C, cd: (c: C) => D): D\n pipe<A, B, C, D, E>(\n this: A,\n ab: (a: A) => B,\n bc: (b: B) => C,\n cd: (c: C) => D,\n de: (d: D) => E\n ): E\n pipe<A, B, C, D, E, F>(\n this: A,\n ab: (a: A) => B,\n bc: (b: B) => C,\n cd: (c: C) => D,\n de: (d: D) => E,\n ef: (e: E) => F\n ): F\n pipe<A, B, C, D, E, F, G>(\n this: A,\n ab: (a: A) => B,\n bc: (b: B) => C,\n cd: (c: C) => D,\n de: (d: D) => E,\n ef: (e: E) => F,\n fg: (f: F) => G\n ): G\n pipe<A, B, C, D, E, F, G, H>(\n this: A,\n ab: (a: A) => B,\n bc: (b: B) => C,\n cd: (c: C) => D,\n de: (d: D) => E,\n ef: (e: E) => F,\n fg: (f: F) => G,\n gh: (g: G) => H\n ): H\n pipe<A, B, C, D, E, F, G, H, I>(\n this: A,\n ab: (a: A) => B,\n bc: (b: B) => C,\n cd: (c: C) => D,\n de: (d: D) => E,\n ef: (e: E) => F,\n fg: (f: F) => G,\n gh: (g: G) => H,\n hi: (h: H) => I\n ): I\n pipe() {\n return Pipeable.pipeArguments(this, arguments)\n }\n\n /**\n * Create an empty schema builder\n */\n static readonly empty = new GraphQLSchemaBuilder<never>({\n types: new Map(),\n interfaces: new Map(),\n enums: new Map(),\n unions: new Map(),\n inputs: new Map(),\n directives: new Map(),\n middlewares: [],\n extensions: [],\n queries: new Map(),\n mutations: new Map(),\n subscriptions: new Map(),\n objectFields: new Map(),\n })\n\n /**\n * Create a new builder with updated state\n */\n private with(newState: BuilderState): GraphQLSchemaBuilder<any> {\n return new GraphQLSchemaBuilder(newState)\n }\n\n // ============================================================================\n // Registration Methods\n // ============================================================================\n\n /**\n * Add a query field\n */\n query<A, E, R2, Args = void>(\n name: string,\n config: {\n type: S.Schema<A, any, any>\n args?: S.Schema<Args, any, any>\n description?: string\n directives?: readonly DirectiveApplication[]\n /**\n * Complexity cost of this field for query complexity limiting.\n * Can be a static number or a function that receives the resolved arguments.\n */\n complexity?: FieldComplexity\n /**\n * Cache control hint for this field.\n * Used to compute HTTP Cache-Control headers for the response.\n */\n cacheControl?: CacheHint\n resolve: (args: Args) => Effect.Effect<A, E, R2>\n }\n ): GraphQLSchemaBuilder<R | R2> {\n const newQueries = new Map(this.state.queries)\n newQueries.set(name, config)\n return this.with(updateState(this.state, \"queries\", newQueries))\n }\n\n /**\n * Add a mutation field\n */\n mutation<A, E, R2, Args = void>(\n name: string,\n config: {\n type: S.Schema<A, any, any>\n args?: S.Schema<Args, any, any>\n description?: string\n directives?: readonly DirectiveApplication[]\n /**\n * Complexity cost of this field for query complexity limiting.\n * Can be a static number or a function that receives the resolved arguments.\n */\n complexity?: FieldComplexity\n resolve: (args: Args) => Effect.Effect<A, E, R2>\n }\n ): GraphQLSchemaBuilder<R | R2> {\n const newMutations = new Map(this.state.mutations)\n newMutations.set(name, config)\n return this.with(updateState(this.state, \"mutations\", newMutations))\n }\n\n /**\n * Add a subscription field\n *\n * Subscriptions return a Stream that yields values over time.\n * The subscribe function returns an Effect that produces a Stream.\n *\n * @example\n * ```typescript\n * builder.subscription(\"userCreated\", {\n * type: User,\n * subscribe: Effect.gen(function*() {\n * const pubsub = yield* PubSubService\n * return pubsub.subscribe(\"USER_CREATED\")\n * }),\n * })\n * ```\n */\n subscription<A, E, R2, Args = void>(\n name: string,\n config: {\n type: S.Schema<A, any, any>\n args?: S.Schema<Args, any, any>\n description?: string\n directives?: readonly DirectiveApplication[]\n /**\n * Complexity cost of this subscription for query complexity limiting.\n * Can be a static number or a function that receives the resolved arguments.\n */\n complexity?: FieldComplexity\n /**\n * Cache control hint for this subscription.\n * Note: Subscriptions are typically not cached, but this can be used for initial response hints.\n */\n cacheControl?: CacheHint\n subscribe: (args: Args) => Effect.Effect<import(\"effect\").Stream.Stream<A, E, R2>, E, R2>\n resolve?: (value: A, args: Args) => Effect.Effect<A, E, R2>\n }\n ): GraphQLSchemaBuilder<R | R2> {\n const newSubscriptions = new Map(this.state.subscriptions)\n newSubscriptions.set(name, config)\n return this.with(updateState(this.state, \"subscriptions\", newSubscriptions))\n }\n\n /**\n * Register an object type from a schema\n */\n objectType<A, R2 = never>(config: {\n name?: string\n schema: S.Schema<A, any, any>\n description?: string\n implements?: readonly string[]\n directives?: readonly DirectiveApplication[]\n /**\n * Default cache control hint for all fields returning this type.\n * Can be overridden by field-level cacheControl.\n */\n cacheControl?: CacheHint\n fields?: Record<\n string,\n {\n type: S.Schema<any, any, any>\n args?: S.Schema<any, any, any>\n description?: string\n directives?: readonly DirectiveApplication[]\n /**\n * Complexity cost of this field for query complexity limiting.\n */\n complexity?: FieldComplexity\n /**\n * Cache control hint for this field.\n */\n cacheControl?: CacheHint\n resolve: (parent: A, args: any) => Effect.Effect<any, any, any>\n }\n >\n }): GraphQLSchemaBuilder<R | R2> {\n const {\n schema,\n description,\n implements: implementsInterfaces,\n directives,\n cacheControl,\n fields,\n } = config\n const name = config.name ?? getSchemaName(schema)\n if (!name) {\n throw new Error(\n \"objectType requires a name. Either provide one explicitly or use a TaggedStruct/TaggedClass/Schema.Class\"\n )\n }\n\n const newTypes = new Map(this.state.types)\n newTypes.set(name, {\n name,\n schema,\n description,\n implements: implementsInterfaces,\n directives,\n cacheControl,\n })\n\n let newObjectFields = this.state.objectFields\n if (fields) {\n newObjectFields = new Map(this.state.objectFields)\n const typeFields = new Map<string, ObjectFieldRegistration>()\n for (const [fieldName, fieldConfig] of Object.entries(fields)) {\n typeFields.set(fieldName, fieldConfig as ObjectFieldRegistration)\n }\n newObjectFields.set(name, typeFields)\n }\n\n return this.with({\n ...this.state,\n types: newTypes,\n objectFields: newObjectFields,\n })\n }\n\n /**\n * Register an interface type from a schema\n */\n interfaceType(config: {\n name?: string\n schema: S.Schema<any, any, any>\n resolveType?: (value: any) => string\n directives?: readonly DirectiveApplication[]\n }): GraphQLSchemaBuilder<R> {\n const { schema, resolveType, directives } = config\n const name = config.name ?? getSchemaName(schema)\n if (!name) {\n throw new Error(\n \"interfaceType requires a name. Either provide one explicitly or use a TaggedStruct/TaggedClass/Schema.Class\"\n )\n }\n\n const newInterfaces = new Map(this.state.interfaces)\n newInterfaces.set(name, {\n name,\n schema,\n resolveType: resolveType ?? ((value: any) => value._tag),\n directives,\n })\n\n return this.with(updateState(this.state, \"interfaces\", newInterfaces))\n }\n\n /**\n * Register an enum type\n */\n enumType(config: {\n name: string\n values: readonly string[]\n description?: string\n directives?: readonly DirectiveApplication[]\n }): GraphQLSchemaBuilder<R> {\n const { name, values, description, directives } = config\n const newEnums = new Map(this.state.enums)\n newEnums.set(name, { name, values, description, directives })\n return this.with(updateState(this.state, \"enums\", newEnums))\n }\n\n /**\n * Register a union type\n */\n unionType(config: {\n name: string\n types: readonly string[]\n resolveType?: (value: any) => string\n directives?: readonly DirectiveApplication[]\n }): GraphQLSchemaBuilder<R> {\n const { name, types, resolveType, directives } = config\n const newUnions = new Map(this.state.unions)\n newUnions.set(name, {\n name,\n types,\n resolveType: resolveType ?? ((value: any) => value._tag),\n directives,\n })\n return this.with(updateState(this.state, \"unions\", newUnions))\n }\n\n /**\n * Register an input type\n */\n inputType(config: {\n name?: string\n schema: S.Schema<any, any, any>\n description?: string\n directives?: readonly DirectiveApplication[]\n }): GraphQLSchemaBuilder<R> {\n const { schema, description, directives } = config\n const name = config.name ?? getSchemaName(schema)\n if (!name) {\n throw new Error(\n \"inputType requires a name. Either provide one explicitly or use a TaggedStruct/TaggedClass/Schema.Class\"\n )\n }\n\n const newInputs = new Map(this.state.inputs)\n newInputs.set(name, { name, schema, description, directives })\n return this.with(updateState(this.state, \"inputs\", newInputs))\n }\n\n /**\n * Register a directive\n */\n directive<Args = void, R2 = never>(config: {\n name: string\n description?: string\n locations: readonly DirectiveLocation[]\n args?: S.Schema<Args, any, any>\n apply?: (\n args: Args\n ) => <A, E, R3>(effect: Effect.Effect<A, E, R3>) => Effect.Effect<A, E, R2 | R3>\n }): GraphQLSchemaBuilder<R | R2> {\n const newDirectives = new Map(this.state.directives)\n newDirectives.set(config.name, config as DirectiveRegistration)\n return this.with(updateState(this.state, \"directives\", newDirectives))\n }\n\n /**\n * Register a middleware\n *\n * Middleware wraps all resolvers (or those matching a pattern) and executes\n * in an \"onion\" model - first registered middleware is the outermost layer.\n *\n * @param config.name - Middleware name (for debugging/logging)\n * @param config.description - Optional description\n * @param config.match - Optional predicate to filter which fields this applies to\n * @param config.apply - Function that transforms the resolver Effect\n *\n * @example\n * ```typescript\n * builder.middleware({\n * name: \"logging\",\n * apply: (effect, ctx) => Effect.gen(function*() {\n * yield* Effect.logInfo(`Resolving ${ctx.info.fieldName}`)\n * const start = Date.now()\n * const result = yield* effect\n * yield* Effect.logInfo(`Resolved in ${Date.now() - start}ms`)\n * return result\n * })\n * })\n * ```\n */\n middleware<R2 = never>(config: {\n name: string\n description?: string\n match?: (info: GraphQLResolveInfo) => boolean\n apply: <A, E, R3>(\n effect: Effect.Effect<A, E, R3>,\n context: MiddlewareContext\n ) => Effect.Effect<A, E, R2 | R3>\n }): GraphQLSchemaBuilder<R | R2> {\n const newMiddlewares = [...this.state.middlewares, config as MiddlewareRegistration]\n return this.with({ ...this.state, middlewares: newMiddlewares })\n }\n\n /**\n * Register an extension\n *\n * Extensions provide lifecycle hooks that run at each phase of request processing\n * (parse, validate, execute) and can contribute data to the response's extensions field.\n *\n * @param config.name - Extension name (for debugging/logging)\n * @param config.description - Optional description\n * @param config.onParse - Called after query parsing\n * @param config.onValidate - Called after validation\n * @param config.onExecuteStart - Called before execution begins\n * @param config.onExecuteEnd - Called after execution completes\n *\n * @example\n * ```typescript\n * builder.extension({\n * name: \"tracing\",\n * onExecuteStart: () => Effect.gen(function*() {\n * const ext = yield* ExtensionsService\n * yield* ext.set(\"tracing\", { startTime: Date.now() })\n * }),\n * onExecuteEnd: () => Effect.gen(function*() {\n * const ext = yield* ExtensionsService\n * yield* ext.merge(\"tracing\", { endTime: Date.now() })\n * }),\n * })\n * ```\n */\n extension<R2 = never>(config: {\n name: string\n description?: string\n onParse?: (source: string, document: DocumentNode) => Effect.Effect<void, never, R2>\n onValidate?: (\n document: DocumentNode,\n errors: readonly GQLError[]\n ) => Effect.Effect<void, never, R2>\n onExecuteStart?: (args: ExecutionArgs) => Effect.Effect<void, never, R2>\n onExecuteEnd?: (result: ExecutionResult) => Effect.Effect<void, never, R2>\n }): GraphQLSchemaBuilder<R | R2> {\n const newExtensions = [...this.state.extensions, config as GraphQLExtension<R2>]\n return this.with({ ...this.state, extensions: newExtensions })\n }\n\n /**\n * Get the registered extensions for use by the execution layer\n */\n getExtensions(): readonly GraphQLExtension<any>[] {\n return this.state.extensions\n }\n\n /**\n * Add a computed/relational field to an object type\n */\n field<Parent, A, E, R2, Args = void>(\n typeName: string,\n fieldName: string,\n config: {\n type: S.Schema<A, any, any>\n args?: S.Schema<Args, any, any>\n description?: string\n directives?: readonly DirectiveApplication[]\n /**\n * Complexity cost of this field for query complexity limiting.\n * Can be a static number or a function that receives the resolved arguments.\n */\n complexity?: FieldComplexity\n /**\n * Cache control hint for this field.\n * Used to compute HTTP Cache-Control headers for the response.\n */\n cacheControl?: CacheHint\n resolve: (parent: Parent, args: Args) => Effect.Effect<A, E, R2>\n }\n ): GraphQLSchemaBuilder<R | R2> {\n const newObjectFields = new Map(this.state.objectFields)\n const typeFields = newObjectFields.get(typeName) || new Map()\n typeFields.set(fieldName, config)\n newObjectFields.set(typeName, typeFields)\n return this.with(updateState(this.state, \"objectFields\", newObjectFields))\n }\n\n // ============================================================================\n // Schema Building\n // ============================================================================\n\n /**\n * Get the field complexity map for use in complexity validation.\n * Maps \"TypeName.fieldName\" to the complexity value or function.\n */\n getFieldComplexities(): FieldComplexityMap {\n const complexities: FieldComplexityMap = new Map()\n\n // Query fields\n for (const [name, config] of this.state.queries) {\n if (config.complexity !== undefined) {\n complexities.set(`Query.${name}`, config.complexity)\n }\n }\n\n // Mutation fields\n for (const [name, config] of this.state.mutations) {\n if (config.complexity !== undefined) {\n complexities.set(`Mutation.${name}`, config.complexity)\n }\n }\n\n // Subscription fields\n for (const [name, config] of this.state.subscriptions) {\n if (config.complexity !== undefined) {\n complexities.set(`Subscription.${name}`, config.complexity)\n }\n }\n\n // Object type fields\n for (const [typeName, fields] of this.state.objectFields) {\n for (const [fieldName, config] of fields) {\n if (config.complexity !== undefined) {\n complexities.set(`${typeName}.${fieldName}`, config.complexity)\n }\n }\n }\n\n return complexities\n }\n\n /**\n * Get the cache hint map for use in cache control calculation.\n * Maps \"TypeName.fieldName\" to the cache hint for field-level hints,\n * or \"TypeName\" to the cache hint for type-level hints.\n */\n getCacheHints(): CacheHintMap {\n const hints: CacheHintMap = new Map()\n\n // Type-level hints\n for (const [typeName, typeReg] of this.state.types) {\n if (typeReg.cacheControl !== undefined) {\n hints.set(typeName, typeReg.cacheControl)\n }\n }\n\n // Query fields\n for (const [name, config] of this.state.queries) {\n if (config.cacheControl !== undefined) {\n hints.set(`Query.${name}`, config.cacheControl)\n }\n }\n\n // Subscription fields\n for (const [name, config] of this.state.subscriptions) {\n if (config.cacheControl !== undefined) {\n hints.set(`Subscription.${name}`, config.cacheControl)\n }\n }\n\n // Object type fields\n for (const [typeName, fields] of this.state.objectFields) {\n for (const [fieldName, config] of fields) {\n if (config.cacheControl !== undefined) {\n hints.set(`${typeName}.${fieldName}`, config.cacheControl)\n }\n }\n }\n\n return hints\n }\n\n /**\n * Build the GraphQL schema (no services required)\n *\n * Uses a two-phase approach:\n * 1. Phase 1: Build enum and input registries first (these may be referenced by other types)\n * 2. Phase 2: Build interface, object, and union types (which may reference inputs in args)\n *\n * This ensures that when object type fields with args are processed,\n * all registered input types are already available in the inputRegistry.\n */\n buildSchema(): GraphQLSchema {\n // Phase 1: Build foundational registries first\n const enumRegistry = this.buildEnumRegistry()\n const inputRegistry = this.buildInputRegistry(enumRegistry)\n\n // Build cache once for all operations that need input type lookups\n const inputTypeLookupCache = buildInputTypeLookupCache(this.state.inputs, this.state.enums)\n\n // Phase 2: Build types that may reference inputs\n const directiveRegistry = this.buildDirectiveRegistry(enumRegistry, inputRegistry, inputTypeLookupCache)\n const interfaceRegistry = this.buildInterfaceRegistry(enumRegistry, inputRegistry, inputTypeLookupCache)\n const { typeRegistry, unionRegistry } = this.buildTypeAndUnionRegistries(\n enumRegistry,\n interfaceRegistry,\n inputRegistry,\n inputTypeLookupCache\n )\n\n // Build field builder context for root operations\n const fieldCtx = this.createFieldBuilderContext(\n typeRegistry,\n interfaceRegistry,\n enumRegistry,\n unionRegistry,\n inputRegistry\n )\n\n // Build root type fields\n const queryFields = this.buildQueryFields(fieldCtx)\n const mutationFields = this.buildMutationFields(fieldCtx)\n const subscriptionFields = this.buildSubscriptionFields(fieldCtx)\n\n // Assemble schema\n return this.assembleSchema({\n directiveRegistry,\n enumRegistry,\n inputRegistry,\n interfaceRegistry,\n typeRegistry,\n unionRegistry,\n queryFields,\n mutationFields,\n subscriptionFields,\n })\n }\n\n private buildDirectiveRegistry(\n enumRegistry: Map<string, GraphQLEnumType>,\n inputRegistry: Map<string, GraphQLInputObjectType>,\n cache: ReturnType<typeof buildInputTypeLookupCache>\n ): Map<string, GraphQLDirective> {\n const registry = new Map<string, GraphQLDirective>()\n\n for (const [name, reg] of this.state.directives) {\n const graphqlDirective = new GraphQLDirective({\n name,\n description: reg.description,\n locations: [...reg.locations],\n args: reg.args\n ? toGraphQLArgsWithRegistry(\n reg.args,\n enumRegistry,\n inputRegistry,\n this.state.inputs,\n this.state.enums,\n cache\n )\n : undefined,\n })\n registry.set(name, graphqlDirective)\n }\n\n return registry\n }\n\n private buildEnumRegistry(): Map<string, GraphQLEnumType> {\n const registry = new Map<string, GraphQLEnumType>()\n\n for (const [name, reg] of this.state.enums) {\n const enumValues: Record<string, { value: string }> = {}\n for (const value of reg.values) {\n enumValues[value] = { value }\n }\n registry.set(\n name,\n new GraphQLEnumType({\n name,\n values: enumValues,\n description: reg.description,\n extensions: reg.directives ? { directives: reg.directives } : undefined,\n })\n )\n }\n\n return registry\n }\n\n private buildInputRegistry(\n enumRegistry: Map<string, GraphQLEnumType>\n ): Map<string, GraphQLInputObjectType> {\n const registry = new Map<string, GraphQLInputObjectType>()\n\n // Build cache once for O(1) lookups across all input types\n const cache = buildInputTypeLookupCache(this.state.inputs, this.state.enums)\n\n for (const [name, reg] of this.state.inputs) {\n const inputType = new GraphQLInputObjectType({\n name,\n description: reg.description,\n fields: () =>\n schemaToInputFields(\n reg.schema,\n enumRegistry,\n registry,\n this.state.inputs,\n this.state.enums,\n cache\n ),\n extensions: reg.directives ? { directives: reg.directives } : undefined,\n })\n registry.set(name, inputType)\n }\n\n return registry\n }\n\n private buildInterfaceRegistry(\n enumRegistry: Map<string, GraphQLEnumType>,\n inputRegistry: Map<string, GraphQLInputObjectType>,\n _cache: ReturnType<typeof buildInputTypeLookupCache>\n ): Map<string, GraphQLInterfaceType> {\n const registry = new Map<string, GraphQLInterfaceType>()\n // We need type and union registries for interface fields, but they're built later\n // Use empty maps for now - interfaces shouldn't reference object types directly\n const typeRegistry = new Map<string, GraphQLObjectType>()\n const unionRegistry = new Map<string, GraphQLUnionType>()\n\n // Create shared TypeConversionContext once for all interface field builders\n const sharedCtx: TypeConversionContext = {\n types: this.state.types,\n interfaces: this.state.interfaces,\n enums: this.state.enums,\n unions: this.state.unions,\n inputs: this.state.inputs,\n typeRegistry,\n interfaceRegistry: registry,\n enumRegistry,\n unionRegistry,\n inputRegistry,\n }\n // Pre-build reverse lookup maps once\n buildReverseLookups(sharedCtx)\n\n for (const [name, reg] of this.state.interfaces) {\n const interfaceType = new GraphQLInterfaceType({\n name,\n fields: () => schemaToFields(reg.schema, sharedCtx),\n resolveType: reg.resolveType,\n extensions: reg.directives ? { directives: reg.directives } : undefined,\n })\n registry.set(name, interfaceType)\n }\n\n return registry\n }\n\n private buildTypeAndUnionRegistries(\n enumRegistry: Map<string, GraphQLEnumType>,\n interfaceRegistry: Map<string, GraphQLInterfaceType>,\n inputRegistry: Map<string, GraphQLInputObjectType>,\n inputTypeLookupCache: ReturnType<typeof buildInputTypeLookupCache>\n ): {\n typeRegistry: Map<string, GraphQLObjectType>\n unionRegistry: Map<string, GraphQLUnionType>\n } {\n const typeRegistry = new Map<string, GraphQLObjectType>()\n const unionRegistry = new Map<string, GraphQLUnionType>()\n\n // Create shared TypeConversionContext once and reuse for all lazy field builders\n const sharedCtx: TypeConversionContext = {\n types: this.state.types,\n interfaces: this.state.interfaces,\n enums: this.state.enums,\n unions: this.state.unions,\n inputs: this.state.inputs,\n typeRegistry,\n interfaceRegistry,\n enumRegistry,\n unionRegistry,\n inputRegistry,\n }\n // Pre-build reverse lookup maps once\n buildReverseLookups(sharedCtx)\n\n // Create shared FieldBuilderContext for additional fields\n // IMPORTANT: Use the real inputRegistry so that args with registered input types\n // (like S.Option(CursorFromHex)) can find the registered types\n const sharedFieldCtx: FieldBuilderContext = {\n ...sharedCtx,\n directiveRegistrations: this.state.directives,\n middlewares: this.state.middlewares,\n inputTypeLookupCache,\n }\n\n // Build object types with lazy field builders (allows circular references)\n for (const [typeName, typeReg] of this.state.types) {\n const implementedInterfaces =\n typeReg.implements?.map((name) => interfaceRegistry.get(name)!).filter(Boolean) ?? []\n\n const graphqlType = new GraphQLObjectType({\n name: typeName,\n description: typeReg.description,\n fields: () => {\n const baseFields = schemaToFields(typeReg.schema, sharedCtx)\n const additionalFields = this.state.objectFields.get(typeName)\n\n if (additionalFields) {\n for (const [fieldName, fieldConfig] of additionalFields) {\n baseFields[fieldName] = buildObjectField(fieldConfig, sharedFieldCtx)\n }\n }\n\n return baseFields\n },\n interfaces: implementedInterfaces.length > 0 ? implementedInterfaces : undefined,\n extensions: typeReg.directives ? { directives: typeReg.directives } : undefined,\n })\n typeRegistry.set(typeName, graphqlType)\n }\n\n // Build union types (reference object types)\n for (const [name, reg] of this.state.unions) {\n const unionType = new GraphQLUnionType({\n name,\n types: () => reg.types.map((typeName) => typeRegistry.get(typeName)!).filter(Boolean),\n resolveType: reg.resolveType,\n extensions: reg.directives ? { directives: reg.directives } : undefined,\n })\n unionRegistry.set(name, unionType)\n }\n\n return { typeRegistry, unionRegistry }\n }\n\n private createFieldBuilderContext(\n typeRegistry: Map<string, GraphQLObjectType>,\n interfaceRegistry: Map<string, GraphQLInterfaceType>,\n enumRegistry: Map<string, GraphQLEnumType>,\n unionRegistry: Map<string, GraphQLUnionType>,\n inputRegistry: Map<string, GraphQLInputObjectType>\n ): FieldBuilderContext {\n // Build cache once for O(1) input type lookups across all fields\n const inputTypeLookupCache = buildInputTypeLookupCache(this.state.inputs, this.state.enums)\n\n return {\n types: this.state.types,\n interfaces: this.state.interfaces,\n enums: this.state.enums,\n unions: this.state.unions,\n inputs: this.state.inputs,\n typeRegistry,\n interfaceRegistry,\n enumRegistry,\n unionRegistry,\n inputRegistry,\n directiveRegistrations: this.state.directives,\n middlewares: this.state.middlewares,\n inputTypeLookupCache,\n }\n }\n\n private buildQueryFields(ctx: FieldBuilderContext): GraphQLFieldConfigMap<any, any> {\n const fields: GraphQLFieldConfigMap<any, any> = {}\n for (const [name, config] of this.state.queries) {\n fields[name] = buildField(config, ctx)\n }\n return fields\n }\n\n private buildMutationFields(ctx: FieldBuilderContext): GraphQLFieldConfigMap<any, any> {\n const fields: GraphQLFieldConfigMap<any, any> = {}\n for (const [name, config] of this.state.mutations) {\n fields[name] = buildField(config, ctx)\n }\n return fields\n }\n\n private buildSubscriptionFields(ctx: FieldBuilderContext): GraphQLFieldConfigMap<any, any> {\n const fields: GraphQLFieldConfigMap<any, any> = {}\n for (const [name, config] of this.state.subscriptions) {\n fields[name] = buildSubscriptionField(config, ctx)\n }\n return fields\n }\n\n private assembleSchema(registries: {\n directiveRegistry: Map<string, GraphQLDirective>\n enumRegistry: Map<string, GraphQLEnumType>\n inputRegistry: Map<string, GraphQLInputObjectType>\n interfaceRegistry: Map<string, GraphQLInterfaceType>\n typeRegistry: Map<string, GraphQLObjectType>\n unionRegistry: Map<string, GraphQLUnionType>\n queryFields: GraphQLFieldConfigMap<any, any>\n mutationFields: GraphQLFieldConfigMap<any, any>\n subscriptionFields: GraphQLFieldConfigMap<any, any>\n }): GraphQLSchema {\n const schemaConfig: any = {\n types: [\n ...Array.from(registries.enumRegistry.values()),\n ...Array.from(registries.inputRegistry.values()),\n ...Array.from(registries.interfaceRegistry.values()),\n ...Array.from(registries.typeRegistry.values()),\n ...Array.from(registries.unionRegistry.values()),\n ],\n directives:\n registries.directiveRegistry.size > 0\n ? [...Array.from(registries.directiveRegistry.values())]\n : undefined,\n }\n\n if (Object.keys(registries.queryFields).length > 0) {\n schemaConfig.query = new GraphQLObjectType({\n name: \"Query\",\n fields: registries.queryFields,\n })\n }\n\n if (Object.keys(registries.mutationFields).length > 0) {\n schemaConfig.mutation = new GraphQLObjectType({\n name: \"Mutation\",\n fields: registries.mutationFields,\n })\n }\n\n if (Object.keys(registries.subscriptionFields).length > 0) {\n schemaConfig.subscription = new GraphQLObjectType({\n name: \"Subscription\",\n fields: registries.subscriptionFields,\n })\n }\n\n return new GraphQLSchema(schemaConfig)\n }\n}\n","import { Effect, Stream } from \"effect\"\nimport * as S from \"effect/Schema\"\nimport {\n DirectiveLocation,\n GraphQLResolveInfo,\n DocumentNode,\n ExecutionResult,\n GraphQLError,\n} from \"graphql\"\nimport type { DirectiveApplication, MiddlewareContext, CacheHint } from \"./types\"\nimport type { ExecutionArgs } from \"../extensions\"\nimport { GraphQLSchemaBuilder } from \"./schema-builder\"\nimport type { FieldComplexity } from \"../server/complexity\"\n\n/**\n * Add an object type to the schema builder (pipe-able)\n * Name is optional if schema is TaggedStruct, TaggedClass, or Schema.Class\n */\nexport const objectType =\n <A, R2 = never>(config: {\n name?: string\n schema: S.Schema<A, any, any>\n description?: string\n implements?: readonly string[]\n directives?: readonly DirectiveApplication[]\n /**\n * Default cache control hint for all fields returning this type.\n * Can be overridden by field-level cacheControl.\n */\n cacheControl?: CacheHint\n fields?: Record<\n string,\n {\n type: S.Schema<any, any, any>\n args?: S.Schema<any, any, any>\n description?: string\n directives?: readonly DirectiveApplication[]\n complexity?: FieldComplexity\n cacheControl?: CacheHint\n resolve: (parent: A, args: any) => Effect.Effect<any, any, any>\n }\n >\n }) =>\n <R>(builder: GraphQLSchemaBuilder<R>): GraphQLSchemaBuilder<R | R2> =>\n builder.objectType(config)\n\n/**\n * Add an interface type to the schema builder (pipe-able)\n * Name is optional if schema is TaggedStruct, TaggedClass, or Schema.Class\n */\nexport const interfaceType =\n (config: {\n name?: string\n schema: S.Schema<any, any, any>\n resolveType?: (value: any) => string\n directives?: readonly DirectiveApplication[]\n }) =>\n <R>(builder: GraphQLSchemaBuilder<R>): GraphQLSchemaBuilder<R> =>\n builder.interfaceType(config)\n\n/**\n * Add an enum type to the schema builder (pipe-able)\n */\nexport const enumType =\n (config: {\n name: string\n values: readonly string[]\n description?: string\n directives?: readonly DirectiveApplication[]\n }) =>\n <R>(builder: GraphQLSchemaBuilder<R>): GraphQLSchemaBuilder<R> =>\n builder.enumType(config)\n\n/**\n * Add a union type to the schema builder (pipe-able)\n */\nexport const unionType =\n (config: {\n name: string\n types: readonly string[]\n resolveType?: (value: any) => string\n directives?: readonly DirectiveApplication[]\n }) =>\n <R>(builder: GraphQLSchemaBuilder<R>): GraphQLSchemaBuilder<R> =>\n builder.unionType(config)\n\n/**\n * Add an input type to the schema builder (pipe-able)\n * Name is optional if schema is TaggedStruct, TaggedClass, or Schema.Class\n */\nexport const inputType =\n (config: {\n name?: string\n schema: S.Schema<any, any, any>\n description?: string\n directives?: readonly DirectiveApplication[]\n }) =>\n <R>(builder: GraphQLSchemaBuilder<R>): GraphQLSchemaBuilder<R> =>\n builder.inputType(config)\n\n/**\n * Register a directive (pipe-able)\n *\n * @param config - Directive configuration\n * @param config.name - The directive name (without @)\n * @param config.description - Optional description\n * @param config.locations - Array of DirectiveLocation values where this directive can be applied\n * @param config.args - Optional Effect Schema for directive arguments\n * @param config.apply - Optional function to transform resolver Effects (for executable directives)\n */\nexport const directive =\n <Args = void, R2 = never>(config: {\n name: string\n description?: string\n locations: readonly DirectiveLocation[]\n args?: S.Schema<Args, any, any>\n apply?: (\n args: Args\n ) => <A, E, R3>(effect: Effect.Effect<A, E, R3>) => Effect.Effect<A, E, R2 | R3>\n }) =>\n <R>(builder: GraphQLSchemaBuilder<R>): GraphQLSchemaBuilder<R | R2> =>\n builder.directive(config)\n\n/**\n * Register a middleware (pipe-able)\n *\n * Middleware wraps all resolvers (or those matching a pattern) and executes\n * in an \"onion\" model - first registered middleware is the outermost layer.\n *\n * @param config.name - Middleware name (for debugging/logging)\n * @param config.description - Optional description\n * @param config.match - Optional predicate to filter which fields this applies to\n * @param config.apply - Function that transforms the resolver Effect\n *\n * @example\n * ```typescript\n * GraphQLSchemaBuilder.empty.pipe(\n * middleware({\n * name: \"logging\",\n * apply: (effect, ctx) => Effect.gen(function*() {\n * yield* Effect.logInfo(`Resolving ${ctx.info.fieldName}`)\n * return yield* effect\n * })\n * }),\n * middleware({\n * name: \"adminOnly\",\n * match: (info) => info.fieldName.startsWith(\"admin\"),\n * apply: (effect) => Effect.gen(function*() {\n * const auth = yield* AuthService\n * yield* auth.requireAdmin()\n * return yield* effect\n * })\n * })\n * )\n * ```\n */\nexport const middleware =\n <R2 = never>(config: {\n name: string\n description?: string\n match?: (info: GraphQLResolveInfo) => boolean\n apply: <A, E, R3>(\n effect: Effect.Effect<A, E, R3>,\n context: MiddlewareContext\n ) => Effect.Effect<A, E, R2 | R3>\n }) =>\n <R>(builder: GraphQLSchemaBuilder<R>): GraphQLSchemaBuilder<R | R2> =>\n builder.middleware(config)\n\n/**\n * Register an extension (pipe-able)\n *\n * Extensions provide lifecycle hooks that run at each phase of request processing\n * (parse, validate, execute) and can contribute data to the response's extensions field.\n *\n * @param config.name - Extension name (for debugging/logging)\n * @param config.description - Optional description\n * @param config.onParse - Called after query parsing\n * @param config.onValidate - Called after validation\n * @param config.onExecuteStart - Called before execution begins\n * @param config.onExecuteEnd - Called after execution completes\n *\n * @example\n * ```typescript\n * GraphQLSchemaBuilder.empty.pipe(\n * extension({\n * name: \"tracing\",\n * onExecuteStart: () => Effect.gen(function*() {\n * const ext = yield* ExtensionsService\n * yield* ext.set(\"tracing\", { startTime: Date.now() })\n * }),\n * onExecuteEnd: () => Effect.gen(function*() {\n * const ext = yield* ExtensionsService\n * yield* ext.merge(\"tracing\", { endTime: Date.now() })\n * }),\n * })\n * )\n * ```\n */\nexport const extension =\n <R2 = never>(config: {\n name: string\n description?: string\n onParse?: (source: string, document: DocumentNode) => Effect.Effect<void, never, R2>\n onValidate?: (\n document: DocumentNode,\n errors: readonly GraphQLError[]\n ) => Effect.Effect<void, never, R2>\n onExecuteStart?: (args: ExecutionArgs) => Effect.Effect<void, never, R2>\n onExecuteEnd?: (result: ExecutionResult) => Effect.Effect<void, never, R2>\n }) =>\n <R>(builder: GraphQLSchemaBuilder<R>): GraphQLSchemaBuilder<R | R2> =>\n builder.extension(config)\n\n/**\n * Add a query field to the schema builder (pipe-able)\n */\nexport const query =\n <A, E, R2, Args = void>(\n name: string,\n config: {\n type: S.Schema<A, any, any>\n args?: S.Schema<Args, any, any>\n description?: string\n directives?: readonly DirectiveApplication[]\n complexity?: FieldComplexity\n cacheControl?: CacheHint\n resolve: (args: Args) => Effect.Effect<A, E, R2>\n }\n ) =>\n <R>(builder: GraphQLSchemaBuilder<R>): GraphQLSchemaBuilder<R | R2> =>\n builder.query(name, config)\n\n/**\n * Add a mutation field to the schema builder (pipe-able)\n */\nexport const mutation =\n <A, E, R2, Args = void>(\n name: string,\n config: {\n type: S.Schema<A, any, any>\n args?: S.Schema<Args, any, any>\n description?: string\n directives?: readonly DirectiveApplication[]\n complexity?: FieldComplexity\n resolve: (args: Args) => Effect.Effect<A, E, R2>\n }\n ) =>\n <R>(builder: GraphQLSchemaBuilder<R>): GraphQLSchemaBuilder<R | R2> =>\n builder.mutation(name, config)\n\n/**\n * Add a subscription field to the schema builder (pipe-able)\n *\n * Subscriptions return a Stream that yields values over time.\n *\n * @example\n * ```typescript\n * GraphQLSchemaBuilder.empty.pipe(\n * subscription(\"userCreated\", {\n * type: User,\n * subscribe: Effect.gen(function*() {\n * const pubsub = yield* PubSubService\n * return pubsub.subscribe(\"USER_CREATED\")\n * }),\n * })\n * )\n * ```\n */\nexport const subscription =\n <A, E, R2, Args = void>(\n name: string,\n config: {\n type: S.Schema<A, any, any>\n args?: S.Schema<Args, any, any>\n description?: string\n directives?: readonly DirectiveApplication[]\n complexity?: FieldComplexity\n cacheControl?: CacheHint\n subscribe: (args: Args) => Effect.Effect<Stream.Stream<A, E, R2>, E, R2>\n resolve?: (value: A, args: Args) => Effect.Effect<A, E, R2>\n }\n ) =>\n <R>(builder: GraphQLSchemaBuilder<R>): GraphQLSchemaBuilder<R | R2> =>\n builder.subscription(name, config)\n\n/**\n * Add a field to an existing object type (pipe-able)\n */\nexport const field =\n <Parent, A, E, R2, Args = void>(\n typeName: string,\n fieldName: string,\n config: {\n type: S.Schema<A, any, any>\n args?: S.Schema<Args, any, any>\n description?: string\n directives?: readonly DirectiveApplication[]\n complexity?: FieldComplexity\n cacheControl?: CacheHint\n resolve: (parent: Parent, args: Args) => Effect.Effect<A, E, R2>\n }\n ) =>\n <R>(builder: GraphQLSchemaBuilder<R>): GraphQLSchemaBuilder<R | R2> =>\n builder.field(typeName, fieldName, config)\n\n/**\n * Compose multiple schema operations (helper for arrays)\n */\nexport const compose =\n <R>(...operations: Array<(builder: GraphQLSchemaBuilder<any>) => GraphQLSchemaBuilder<any>>) =>\n (builder: GraphQLSchemaBuilder<R>): GraphQLSchemaBuilder<any> =>\n operations.reduce((b, op) => op(b), builder)\n","import { Context, Effect, Ref } from \"effect\"\nimport type { DocumentNode, ExecutionResult, GraphQLError, GraphQLSchema } from \"graphql\"\nimport type { FieldComplexityMap } from \"./server/complexity\"\n\n/**\n * Execution arguments passed to onExecuteStart hook\n */\nexport interface ExecutionArgs {\n readonly source: string\n readonly document: DocumentNode\n readonly variableValues?: Record<string, unknown>\n readonly operationName?: string\n /** The GraphQL schema being executed against */\n readonly schema: GraphQLSchema\n /** Field complexity definitions from the schema builder */\n readonly fieldComplexities: FieldComplexityMap\n}\n\n/**\n * Configuration for a GraphQL extension\n *\n * Extensions provide lifecycle hooks that run at each phase of request processing,\n * and can contribute data to the response's `extensions` field.\n *\n * @example\n * ```typescript\n * // Tracing extension\n * extension({\n * name: \"tracing\",\n * onExecuteStart: () => Effect.gen(function*() {\n * const ext = yield* ExtensionsService\n * yield* ext.set(\"tracing\", { startTime: Date.now() })\n * }),\n * onExecuteEnd: () => Effect.gen(function*() {\n * const ext = yield* ExtensionsService\n * yield* ext.merge(\"tracing\", { endTime: Date.now() })\n * }),\n * })\n * ```\n */\nexport interface GraphQLExtension<R = never> {\n readonly name: string\n readonly description?: string\n\n /**\n * Called after the query source is parsed into a DocumentNode.\n * Useful for query analysis, caching parsed documents, etc.\n */\n readonly onParse?: (source: string, document: DocumentNode) => Effect.Effect<void, never, R>\n\n /**\n * Called after validation completes.\n * Receives the document and any validation errors.\n * Useful for complexity analysis, query whitelisting, etc.\n */\n readonly onValidate?: (\n document: DocumentNode,\n errors: readonly GraphQLError[]\n ) => Effect.Effect<void, never, R>\n\n /**\n * Called before execution begins.\n * Receives the full execution arguments.\n * Useful for setting up tracing, logging, etc.\n */\n readonly onExecuteStart?: (args: ExecutionArgs) => Effect.Effect<void, never, R>\n\n /**\n * Called after execution completes.\n * Receives the execution result (including data and errors).\n * Useful for recording metrics, finalizing traces, etc.\n */\n readonly onExecuteEnd?: (result: ExecutionResult) => Effect.Effect<void, never, R>\n}\n\n/**\n * Service for accumulating extension data during request processing.\n *\n * This service is automatically provided for each request and allows\n * extensions, middleware, and resolvers to contribute to the response\n * extensions field.\n *\n * @example\n * ```typescript\n * Effect.gen(function*() {\n * const ext = yield* ExtensionsService\n *\n * // Set a value (overwrites existing)\n * yield* ext.set(\"complexity\", { score: 42 })\n *\n * // Merge into existing value\n * yield* ext.merge(\"tracing\", { endTime: Date.now() })\n *\n * // Get all accumulated extensions\n * const all = yield* ext.get()\n * })\n * ```\n */\nexport interface ExtensionsService {\n /**\n * Set a key-value pair in the extensions.\n * Overwrites any existing value for this key.\n */\n readonly set: (key: string, value: unknown) => Effect.Effect<void>\n\n /**\n * Deep merge an object into an existing key's value.\n * If the key doesn't exist, sets the value.\n * If the existing value is not an object, overwrites it.\n */\n readonly merge: (key: string, value: Record<string, unknown>) => Effect.Effect<void>\n\n /**\n * Get all accumulated extensions as a record.\n */\n readonly get: () => Effect.Effect<Record<string, unknown>>\n}\n\n/**\n * Tag for the ExtensionsService\n */\nexport const ExtensionsService = Context.GenericTag<ExtensionsService>(\n \"@effect-gql/ExtensionsService\"\n)\n\n/**\n * Deep merge two objects\n */\nfunction deepMerge(\n target: Record<string, unknown>,\n source: Record<string, unknown>\n): Record<string, unknown> {\n const result = { ...target }\n for (const key of Object.keys(source)) {\n const sourceValue = source[key]\n const targetValue = result[key]\n\n if (\n typeof sourceValue === \"object\" &&\n sourceValue !== null &&\n !Array.isArray(sourceValue) &&\n typeof targetValue === \"object\" &&\n targetValue !== null &&\n !Array.isArray(targetValue)\n ) {\n result[key] = deepMerge(\n targetValue as Record<string, unknown>,\n sourceValue as Record<string, unknown>\n )\n } else {\n result[key] = sourceValue\n }\n }\n return result\n}\n\n/**\n * Create a new ExtensionsService backed by a Ref\n */\nexport const makeExtensionsService = (): Effect.Effect<ExtensionsService, never, never> =>\n Effect.gen(function* () {\n const ref = yield* Ref.make<Record<string, unknown>>({})\n\n return ExtensionsService.of({\n set: (key, value) => Ref.update(ref, (current) => ({ ...current, [key]: value })),\n\n merge: (key, value) =>\n Ref.update(ref, (current) => {\n const existing = current[key]\n if (typeof existing === \"object\" && existing !== null && !Array.isArray(existing)) {\n return {\n ...current,\n [key]: deepMerge(existing as Record<string, unknown>, value),\n }\n }\n return { ...current, [key]: value }\n }),\n\n get: () => Ref.get(ref),\n })\n })\n\n/**\n * Generic helper to run extension hooks with error handling.\n * Filters extensions that have the specified hook, runs them,\n * and logs warnings if any hook fails.\n */\nconst runExtensionHooks = <R, K extends keyof GraphQLExtension<R>>(\n extensions: readonly GraphQLExtension<R>[],\n hookName: K,\n getHookEffect: (ext: GraphQLExtension<R>) => Effect.Effect<void, never, R>\n): Effect.Effect<void, never, R> =>\n Effect.forEach(\n extensions.filter((ext) => ext[hookName] !== undefined),\n (ext) =>\n getHookEffect(ext).pipe(\n Effect.catchAllCause((cause) =>\n Effect.logWarning(`Extension \"${ext.name}\" ${String(hookName)} hook failed`, cause)\n )\n ),\n { discard: true }\n ) as Effect.Effect<void, never, R>\n\n/**\n * Run all onParse hooks for registered extensions\n */\nexport const runParseHooks = <R>(\n extensions: readonly GraphQLExtension<R>[],\n source: string,\n document: DocumentNode\n): Effect.Effect<void, never, R> =>\n runExtensionHooks(extensions, \"onParse\", (ext) => ext.onParse!(source, document))\n\n/**\n * Run all onValidate hooks for registered extensions\n */\nexport const runValidateHooks = <R>(\n extensions: readonly GraphQLExtension<R>[],\n document: DocumentNode,\n errors: readonly GraphQLError[]\n): Effect.Effect<void, never, R> =>\n runExtensionHooks(extensions, \"onValidate\", (ext) => ext.onValidate!(document, errors))\n\n/**\n * Run all onExecuteStart hooks for registered extensions\n */\nexport const runExecuteStartHooks = <R>(\n extensions: readonly GraphQLExtension<R>[],\n args: ExecutionArgs\n): Effect.Effect<void, never, R> =>\n runExtensionHooks(extensions, \"onExecuteStart\", (ext) => ext.onExecuteStart!(args))\n\n/**\n * Run all onExecuteEnd hooks for registered extensions\n */\nexport const runExecuteEndHooks = <R>(\n extensions: readonly GraphQLExtension<R>[],\n result: ExecutionResult\n): Effect.Effect<void, never, R> =>\n runExtensionHooks(extensions, \"onExecuteEnd\", (ext) => ext.onExecuteEnd!(result))\n","import { Effect, Layer } from \"effect\"\nimport {\n GraphQLSchema,\n GraphQLError,\n parse,\n validate,\n execute as graphqlExecute,\n type ExecutionResult,\n type DocumentNode,\n} from \"graphql\"\nimport type { GraphQLEffectContext } from \"./types\"\nimport {\n type GraphQLExtension,\n ExtensionsService,\n makeExtensionsService,\n runParseHooks,\n runValidateHooks,\n runExecuteStartHooks,\n runExecuteEndHooks,\n} from \"../extensions\"\nimport type { FieldComplexityMap } from \"../server/complexity\"\n\n/**\n * Execute a GraphQL query with a service layer\n *\n * This is the layer-per-request execution model. Build the schema once,\n * then execute each request with its own layer (including request-scoped services).\n *\n * The execution follows these phases:\n * 1. Parse - Convert source string to DocumentNode\n * 2. Validate - Check document against schema\n * 3. Execute - Run resolvers and return result\n *\n * Extensions can hook into each phase via onParse, onValidate, onExecuteStart, onExecuteEnd.\n * Extension data is automatically merged into the response's extensions field.\n */\nexport const execute =\n <R>(\n schema: GraphQLSchema,\n layer: Layer.Layer<R>,\n extensions: readonly GraphQLExtension<any>[] = [],\n fieldComplexities: FieldComplexityMap = new Map()\n ) =>\n (\n source: string,\n variableValues?: Record<string, unknown>,\n operationName?: string\n ): Effect.Effect<ExecutionResult, Error> =>\n Effect.gen(function* () {\n // Create the ExtensionsService for this request\n const extensionsService = yield* makeExtensionsService()\n\n // Create runtime from the provided layer\n const runtime = yield* Effect.runtime<R>()\n\n // Phase 1: Parse\n let document: DocumentNode\n try {\n document = parse(source)\n } catch (parseError) {\n // Parse errors are returned as GraphQL errors, not thrown\n const extensionData = yield* extensionsService.get()\n return {\n errors: [\n parseError instanceof GraphQLError ? parseError : new GraphQLError(String(parseError)),\n ],\n extensions: Object.keys(extensionData).length > 0 ? extensionData : undefined,\n } as ExecutionResult\n }\n\n // Run onParse hooks\n yield* runParseHooks(extensions, source, document).pipe(\n Effect.provideService(ExtensionsService, extensionsService)\n )\n\n // Phase 2: Validate\n const validationErrors = validate(schema, document)\n\n // Run onValidate hooks\n yield* runValidateHooks(extensions, document, validationErrors).pipe(\n Effect.provideService(ExtensionsService, extensionsService)\n )\n\n // If validation failed, return errors without executing\n if (validationErrors.length > 0) {\n const extensionData = yield* extensionsService.get()\n return {\n errors: validationErrors,\n extensions: Object.keys(extensionData).length > 0 ? extensionData : undefined,\n } as ExecutionResult\n }\n\n // Phase 3: Execute\n const executionArgs = {\n source,\n document,\n variableValues,\n operationName,\n schema,\n fieldComplexities,\n }\n\n // Run onExecuteStart hooks\n yield* runExecuteStartHooks(extensions, executionArgs).pipe(\n Effect.provideService(ExtensionsService, extensionsService)\n )\n\n // Execute the GraphQL query\n const executeResult = yield* Effect.try({\n try: () =>\n graphqlExecute({\n schema,\n document,\n variableValues,\n operationName,\n contextValue: { runtime } satisfies GraphQLEffectContext<R>,\n }),\n catch: (error) => new Error(String(error)),\n })\n\n // Await result if it's a promise (for subscriptions, it might be)\n const resolvedResult: Awaited<typeof executeResult> =\n executeResult && typeof executeResult === \"object\" && \"then\" in executeResult\n ? yield* Effect.promise(() => executeResult)\n : executeResult\n\n // Run onExecuteEnd hooks\n yield* runExecuteEndHooks(extensions, resolvedResult).pipe(\n Effect.provideService(ExtensionsService, extensionsService)\n )\n\n // Merge extension data into result\n const extensionData = yield* extensionsService.get()\n if (Object.keys(extensionData).length > 0) {\n return {\n ...resolvedResult,\n extensions: {\n ...resolvedResult.extensions,\n ...extensionData,\n },\n }\n }\n\n return resolvedResult\n }).pipe(Effect.provide(layer)) as Effect.Effect<ExecutionResult, Error>\n\n/**\n * Execute a GraphQL query with a service layer (simple version without extensions)\n *\n * @deprecated Use execute() instead, which now supports extensions as an optional parameter\n */\nexport const executeSimple = <R>(schema: GraphQLSchema, layer: Layer.Layer<R>) =>\n execute(schema, layer, [])\n"]}
1
+ {"version":3,"sources":["../../src/schema-mapping.ts","../../src/builder/type-registry.ts","../../src/builder/field-builders.ts","../../src/builder/schema-builder.ts","../../src/builder/pipe-api.ts","../../src/extensions.ts","../../src/builder/execute.ts"],"names":["AST","GraphQLString","GraphQLFloat","GraphQLBoolean","GraphQLInt","S","GraphQLList","field","GraphQLNonNull","GraphQLObjectType","GraphQLInputObjectType","AST2","enumType","handleTupleTypeAST","getOptionInnerType","S2","unionType","Effect","S3","middleware","effect","Runtime","Queue","Stream","Option","Fiber","Pipeable","GraphQLDirective","GraphQLEnumType","inputType","interfaceType","GraphQLInterfaceType","GraphQLUnionType","GraphQLSchema","Context","Ref","parse","extensionData","GraphQLError","validate","graphqlExecute"],"mappings":"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","file":"index.cjs","sourcesContent":["import { Effect } from \"effect\"\nimport * as S from \"effect/Schema\"\nimport * as AST from \"effect/SchemaAST\"\nimport {\n GraphQLObjectType,\n GraphQLString,\n GraphQLInt,\n GraphQLFloat,\n GraphQLBoolean,\n GraphQLNonNull,\n GraphQLList,\n GraphQLOutputType,\n GraphQLInputObjectType,\n GraphQLInputType,\n GraphQLFieldConfigMap,\n GraphQLFieldConfigArgumentMap,\n} from \"graphql\"\n\n/**\n * Check if a number AST node represents an integer\n */\nconst isIntegerType = (ast: AST.AST): boolean => {\n // Check for Refinement with integer filter\n if (ast._tag === \"Refinement\") {\n const refinement = ast as any\n\n // Check the annotations for the integer identifier or JSONSchema type\n const annotations = refinement.annotations\n if (annotations) {\n // Check for identifier annotation (Int, NonNegativeInt, PositiveInt, etc.)\n const identifier = AST.getIdentifierAnnotation(refinement)\n if (identifier._tag === \"Some\") {\n const id = identifier.value\n // Check for any integer-related identifier\n if (id === \"Int\" || id.includes(\"Int\")) {\n return true\n }\n }\n\n // Check for JSONSchema annotation with type \"integer\"\n const JSONSchemaSymbol = Symbol.for(\"effect/annotation/JSONSchema\")\n const jsonSchema = annotations[JSONSchemaSymbol]\n if (jsonSchema && jsonSchema.type === \"integer\") {\n return true\n }\n }\n\n // Recursively check the base type\n return isIntegerType(refinement.from)\n }\n return false\n}\n\n/**\n * Handle primitive AST nodes (StringKeyword, NumberKeyword, BooleanKeyword)\n */\nfunction handlePrimitiveAST(ast: AST.AST): GraphQLOutputType | GraphQLInputType | undefined {\n if (ast._tag === \"StringKeyword\") return GraphQLString\n if (ast._tag === \"NumberKeyword\") return GraphQLFloat\n if (ast._tag === \"BooleanKeyword\") return GraphQLBoolean\n return undefined\n}\n\n/**\n * Handle refinement AST nodes (e.g., S.Int)\n */\nfunction handleRefinementAST(\n ast: AST.AST,\n convertFn: (schema: S.Schema<any, any, any>) => GraphQLOutputType | GraphQLInputType\n): GraphQLOutputType | GraphQLInputType {\n if (isIntegerType(ast)) {\n return GraphQLInt\n }\n // For other refinements, use the base type\n return convertFn(S.make((ast as any).from))\n}\n\n/**\n * Handle literal AST nodes\n */\nfunction handleLiteralAST(ast: AST.AST): GraphQLOutputType | GraphQLInputType | undefined {\n if (ast._tag !== \"Literal\") return undefined\n\n if (typeof ast.literal === \"string\") return GraphQLString\n if (typeof ast.literal === \"number\") {\n // Check if it's an integer literal\n return Number.isInteger(ast.literal) ? GraphQLInt : GraphQLFloat\n }\n if (typeof ast.literal === \"boolean\") return GraphQLBoolean\n return undefined\n}\n\n/**\n * Handle tuple type AST nodes (arrays)\n */\nfunction handleTupleTypeAST(\n ast: AST.AST,\n convertFn: (schema: S.Schema<any, any, any>) => GraphQLOutputType | GraphQLInputType\n): GraphQLList<any> | undefined {\n if (ast._tag !== \"TupleType\") return undefined\n\n const elements = ast.elements\n if (elements.length > 0) {\n const elementSchema = S.make(elements[0].type)\n return new GraphQLList(convertFn(elementSchema))\n }\n return undefined\n}\n\n/**\n * Build fields from TypeLiteral property signatures\n */\nfunction buildFieldsFromPropertySignatures(\n propertySignatures: readonly any[],\n convertFn: (schema: S.Schema<any, any, any>) => GraphQLOutputType | GraphQLInputType\n): Record<string, { type: any }> {\n const fields: Record<string, { type: any }> = {}\n\n for (const field of propertySignatures) {\n const fieldName = String(field.name)\n\n // Skip _tag field from TaggedStruct/TaggedClass - it's an internal discriminator\n if (fieldName === \"_tag\") continue\n\n const fieldSchema = S.make(field.type)\n let fieldType = convertFn(fieldSchema) as any\n\n // Make non-optional fields non-null, unless they're Option transformations\n // Option transformations (like S.OptionFromNullOr) should always be nullable\n const isOptionField = isOptionTransformation(field.type) || isOptionDeclaration(field.type)\n if (!field.isOptional && !isOptionField) {\n fieldType = new GraphQLNonNull(fieldType)\n }\n\n fields[fieldName] = { type: fieldType }\n }\n\n return fields\n}\n\n/**\n * Check if a Declaration AST node represents an Option type.\n * Option declarations have a TypeConstructor annotation of 'effect/Option'.\n */\nexport const isOptionDeclaration = (ast: AST.AST): boolean => {\n if (ast._tag === \"Declaration\") {\n const annotations = (ast as any).annotations\n if (annotations) {\n const TypeConstructorSymbol = Symbol.for(\"effect/annotation/TypeConstructor\")\n const typeConstructor = annotations[TypeConstructorSymbol]\n if (typeConstructor && typeConstructor._tag === \"effect/Option\") {\n return true\n }\n }\n }\n return false\n}\n\n/**\n * Check if a Transformation represents an Option schema (e.g., S.OptionFromNullOr).\n * These have a Declaration with \"Option\" identifier on the \"to\" side.\n */\nexport const isOptionTransformation = (ast: AST.AST): boolean => {\n if (ast._tag === \"Transformation\") {\n return isOptionDeclaration((ast as any).to)\n }\n return false\n}\n\n/**\n * Get the inner type from an Option Declaration.\n * Option<A> has A as the first type parameter.\n */\nconst getOptionInnerType = (ast: AST.AST): AST.AST | undefined => {\n if (ast._tag === \"Declaration\") {\n const typeParams = (ast as any).typeParameters\n if (typeParams && typeParams.length > 0) {\n return typeParams[0]\n }\n }\n return undefined\n}\n\n/**\n * Convert an Effect Schema to a GraphQL output type\n */\nexport const toGraphQLType = (schema: S.Schema<any, any, any>): GraphQLOutputType => {\n const ast = schema.ast\n\n // Handle primitives\n const primitiveResult = handlePrimitiveAST(ast)\n if (primitiveResult) return primitiveResult as GraphQLOutputType\n\n // Handle refinements (e.g., S.Int)\n if (ast._tag === \"Refinement\") {\n return handleRefinementAST(ast, toGraphQLType) as GraphQLOutputType\n }\n\n // Handle literals\n const literalResult = handleLiteralAST(ast)\n if (literalResult) return literalResult as GraphQLOutputType\n\n // Handle arrays - check for TupleType\n const tupleResult = handleTupleTypeAST(ast, toGraphQLType)\n if (tupleResult) return tupleResult\n\n // Handle structs/objects\n if (ast._tag === \"TypeLiteral\") {\n const fields = buildFieldsFromPropertySignatures(ast.propertySignatures, toGraphQLType)\n\n // Generate a name from the schema or use a default\n const typeName =\n (schema as any).annotations?.identifier || `Object_${Math.random().toString(36).slice(2, 11)}`\n\n return new GraphQLObjectType({\n name: typeName,\n fields,\n })\n }\n\n // Handle transformations - use the \"to\" side\n if (ast._tag === \"Transformation\") {\n // Special handling for Option transformations (e.g., S.OptionFromNullOr)\n // These should map to the nullable inner type\n if (isOptionTransformation(ast)) {\n const innerType = getOptionInnerType(ast.to)\n if (innerType) {\n // Return the inner type as nullable (not wrapped in NonNull)\n return toGraphQLType(S.make(innerType))\n }\n }\n return toGraphQLType(S.make(ast.to))\n }\n\n // Handle Declaration (e.g., Option from S.Option)\n if (ast._tag === \"Declaration\") {\n // Option declarations map to nullable inner type\n if (isOptionDeclaration(ast)) {\n const innerType = getOptionInnerType(ast)\n if (innerType) {\n return toGraphQLType(S.make(innerType))\n }\n }\n // For other declarations (like Schema.Class), extract TypeLiteral from typeParameters\n const typeParams = (ast as any).typeParameters\n if (typeParams && typeParams.length > 0) {\n return toGraphQLType(S.make(typeParams[0]))\n }\n }\n\n // Handle unions (use first type as fallback)\n if (ast._tag === \"Union\") {\n const types = ast.types\n if (types.length > 0) {\n return toGraphQLType(S.make(types[0]))\n }\n }\n\n // Handle Suspend (recursive/self-referential schemas)\n if (ast._tag === \"Suspend\") {\n const innerAst = (ast as any).f()\n return toGraphQLType(S.make(innerAst))\n }\n\n // Default fallback\n return GraphQLString\n}\n\n/**\n * Convert an Effect Schema to a GraphQL input type\n */\nexport const toGraphQLInputType = (schema: S.Schema<any, any, any>): GraphQLInputType => {\n const ast = schema.ast\n\n // Handle primitives\n const primitiveResult = handlePrimitiveAST(ast)\n if (primitiveResult) return primitiveResult as GraphQLInputType\n\n // Handle refinements (e.g., S.Int)\n if (ast._tag === \"Refinement\") {\n return handleRefinementAST(ast, toGraphQLInputType) as GraphQLInputType\n }\n\n // Handle literals\n const literalResult = handleLiteralAST(ast)\n if (literalResult) return literalResult as GraphQLInputType\n\n // Handle arrays\n const tupleResult = handleTupleTypeAST(ast, toGraphQLInputType)\n if (tupleResult) return tupleResult\n\n // Handle structs/objects as input types\n if (ast._tag === \"TypeLiteral\") {\n const fields = buildFieldsFromPropertySignatures(ast.propertySignatures, toGraphQLInputType)\n\n const typeName =\n (schema as any).annotations?.identifier || `Input_${Math.random().toString(36).slice(2, 11)}`\n\n return new GraphQLInputObjectType({\n name: typeName,\n fields,\n })\n }\n\n // Handle transformations - use the \"from\" side for input\n if (ast._tag === \"Transformation\") {\n // For Option transformations, the \"from\" side is Union(T, null/undefined)\n // which the Union handler below will process correctly\n return toGraphQLInputType(S.make(ast.from))\n }\n\n // Handle Declaration (for completeness, though inputs typically use \"from\" side)\n if (ast._tag === \"Declaration\") {\n // Option declarations - use the inner type\n if (isOptionDeclaration(ast)) {\n const innerType = getOptionInnerType(ast)\n if (innerType) {\n return toGraphQLInputType(S.make(innerType))\n }\n }\n // For other declarations, extract from typeParameters\n const typeParams = (ast as any).typeParameters\n if (typeParams && typeParams.length > 0) {\n return toGraphQLInputType(S.make(typeParams[0]))\n }\n }\n\n // Handle unions (use first non-null/undefined type)\n if (ast._tag === \"Union\") {\n const types = ast.types\n // Filter out null and undefined for nullable unions\n const nonNullTypes = types\n .filter((t: AST.AST) => t._tag !== \"Literal\" || (t as any).literal !== null)\n .filter((t: AST.AST) => t._tag !== \"UndefinedKeyword\")\n if (nonNullTypes.length > 0) {\n return toGraphQLInputType(S.make(nonNullTypes[0]))\n }\n if (types.length > 0) {\n return toGraphQLInputType(S.make(types[0]))\n }\n }\n\n // Handle Suspend (recursive/self-referential schemas)\n if (ast._tag === \"Suspend\") {\n const innerAst = (ast as any).f()\n return toGraphQLInputType(S.make(innerAst))\n }\n\n // Default fallback\n return GraphQLString\n}\n\n/**\n * Additional field configuration for computed/relational fields\n */\nexport interface AdditionalField<Parent, Args, R, E, A> {\n type: GraphQLOutputType\n args?: GraphQLFieldConfigArgumentMap\n description?: string\n resolve: (parent: Parent, args: Args) => Effect.Effect<A, E, R>\n}\n\n/**\n * Create a GraphQL Object Type from an Effect Schema with a name\n * Optionally add computed/relational fields with resolvers\n */\nexport const toGraphQLObjectType = <T>(\n name: string,\n schema: S.Schema<any, any, any>,\n additionalFields?: Record<string, AdditionalField<T, any, any, any, any>>\n): GraphQLObjectType => {\n let ast = schema.ast\n\n // Handle Transformation wrappers (e.g., from optionalWith, Schema.Class)\n // Recurse through transformations to find the TypeLiteral\n while (ast._tag === \"Transformation\") {\n ast = (ast as any).to\n }\n\n // Handle Declaration (e.g., Schema.Class)\n if (ast._tag === \"Declaration\") {\n const typeParams = (ast as any).typeParameters\n if (typeParams && typeParams.length > 0) {\n ast = typeParams[0]\n // May need to recurse through more transformations\n while (ast._tag === \"Transformation\") {\n ast = (ast as any).to\n }\n }\n }\n\n if (ast._tag === \"TypeLiteral\") {\n // Add fields from schema\n const baseFields = buildFieldsFromPropertySignatures(ast.propertySignatures, toGraphQLType)\n const fields: GraphQLFieldConfigMap<any, any> = { ...baseFields }\n\n // Add additional computed/relational fields\n if (additionalFields) {\n for (const [fieldName, fieldConfig] of Object.entries(additionalFields)) {\n fields[fieldName] = {\n type: fieldConfig.type,\n args: fieldConfig.args,\n description: fieldConfig.description,\n // Note: resolve will be set later when runtime is available\n resolve: fieldConfig.resolve as any,\n }\n }\n }\n\n return new GraphQLObjectType({\n name,\n fields,\n })\n }\n\n throw new Error(`Schema must be an object type to convert to GraphQLObjectType`)\n}\n\n/**\n * Convert an Effect Schema to GraphQL arguments\n */\nexport const toGraphQLArgs = (schema: S.Schema<any, any, any>): GraphQLFieldConfigArgumentMap => {\n const ast = schema.ast\n\n if (ast._tag === \"TypeLiteral\") {\n const args = buildFieldsFromPropertySignatures(ast.propertySignatures, toGraphQLInputType)\n return args as GraphQLFieldConfigArgumentMap\n }\n\n throw new Error(`Schema must be an object type to convert to GraphQL arguments`)\n}\n","import * as S from \"effect/Schema\"\nimport * as AST from \"effect/SchemaAST\"\nimport {\n GraphQLObjectType,\n GraphQLInterfaceType,\n GraphQLEnumType,\n GraphQLUnionType,\n GraphQLInputObjectType,\n GraphQLList,\n GraphQLNonNull,\n GraphQLFieldConfigMap,\n GraphQLInputFieldConfigMap,\n} from \"graphql\"\nimport {\n toGraphQLType,\n toGraphQLArgs,\n toGraphQLInputType,\n isOptionTransformation,\n isOptionDeclaration,\n} from \"../schema-mapping\"\nimport type {\n TypeRegistration,\n InterfaceRegistration,\n EnumRegistration,\n UnionRegistration,\n InputTypeRegistration,\n} from \"./types\"\n\n/**\n * Extract type name from a schema if it has one.\n * Supports:\n * - S.TaggedStruct(\"Name\", {...}) - extracts from _tag literal\n * - S.TaggedClass()(\"Name\", {...}) - extracts from identifier annotation\n * - S.Class<T>(\"Name\")({...}) - extracts from identifier annotation\n */\nexport function getSchemaName(schema: S.Schema<any, any, any>): string | undefined {\n const ast = schema.ast\n\n // Handle Transformation (Schema.Class, TaggedClass)\n if (ast._tag === \"Transformation\") {\n const identifier = AST.getIdentifierAnnotation((ast as any).to)\n if (identifier._tag === \"Some\") {\n return identifier.value\n }\n }\n\n // Handle TypeLiteral (TaggedStruct)\n if (ast._tag === \"TypeLiteral\") {\n const tagProp = (ast as any).propertySignatures.find((p: any) => String(p.name) === \"_tag\")\n if (tagProp && tagProp.type._tag === \"Literal\" && typeof tagProp.type.literal === \"string\") {\n return tagProp.type.literal\n }\n }\n\n return undefined\n}\n\n/**\n * Context needed for type conversion operations\n */\nexport interface TypeConversionContext {\n types: Map<string, TypeRegistration>\n interfaces: Map<string, InterfaceRegistration>\n enums: Map<string, EnumRegistration>\n unions: Map<string, UnionRegistration>\n inputs: Map<string, InputTypeRegistration>\n typeRegistry: Map<string, GraphQLObjectType>\n interfaceRegistry: Map<string, GraphQLInterfaceType>\n enumRegistry: Map<string, GraphQLEnumType>\n unionRegistry: Map<string, GraphQLUnionType>\n inputRegistry: Map<string, GraphQLInputObjectType>\n // Reverse lookup caches for O(1) type resolution\n schemaToTypeName?: Map<S.Schema<any, any, any>, string>\n astToTypeName?: Map<AST.AST, string>\n schemaToInterfaceName?: Map<S.Schema<any, any, any>, string>\n astToInterfaceName?: Map<AST.AST, string>\n schemaToInputName?: Map<S.Schema<any, any, any>, string>\n astToInputName?: Map<AST.AST, string>\n // Cached sorted values for enum/union matching\n enumSortedValues?: Map<string, readonly string[]>\n unionSortedTypes?: Map<string, readonly string[]>\n // Reverse lookup: literal value -> enum name (for single literal O(1) lookup)\n literalToEnumName?: Map<string, string>\n}\n\n/**\n * Build reverse lookup maps from registration maps for O(1) type resolution\n */\nexport function buildReverseLookups(ctx: TypeConversionContext): void {\n // Build schema/AST -> type name lookups\n if (!ctx.schemaToTypeName) {\n ctx.schemaToTypeName = new Map()\n ctx.astToTypeName = new Map()\n for (const [typeName, typeReg] of ctx.types) {\n ctx.schemaToTypeName.set(typeReg.schema, typeName)\n ctx.astToTypeName.set(typeReg.schema.ast, typeName)\n\n // Also add unwrapped AST forms for transformation schemas\n let ast = typeReg.schema.ast as any\n while (ast._tag === \"Transformation\") {\n ast = ast.to\n ctx.astToTypeName.set(ast, typeName)\n }\n // If we hit a Declaration, also add its typeParameters[0]\n if (ast._tag === \"Declaration\" && ast.typeParameters?.[0]) {\n ctx.astToTypeName.set(ast.typeParameters[0], typeName)\n }\n }\n }\n\n // Build schema/AST -> interface name lookups\n if (!ctx.schemaToInterfaceName) {\n ctx.schemaToInterfaceName = new Map()\n ctx.astToInterfaceName = new Map()\n for (const [interfaceName, interfaceReg] of ctx.interfaces) {\n ctx.schemaToInterfaceName.set(interfaceReg.schema, interfaceName)\n ctx.astToInterfaceName.set(interfaceReg.schema.ast, interfaceName)\n\n // Also add unwrapped AST forms for transformation schemas\n let ast = interfaceReg.schema.ast as any\n while (ast._tag === \"Transformation\") {\n ast = ast.to\n ctx.astToInterfaceName.set(ast, interfaceName)\n }\n // If we hit a Declaration, also add its typeParameters[0]\n if (ast._tag === \"Declaration\" && ast.typeParameters?.[0]) {\n ctx.astToInterfaceName.set(ast.typeParameters[0], interfaceName)\n }\n }\n }\n\n // Build schema/AST -> input name lookups\n if (!ctx.schemaToInputName) {\n ctx.schemaToInputName = new Map()\n ctx.astToInputName = new Map()\n for (const [inputName, inputReg] of ctx.inputs) {\n ctx.schemaToInputName.set(inputReg.schema, inputName)\n ctx.astToInputName.set(inputReg.schema.ast, inputName)\n\n // Also add unwrapped AST forms for transformation schemas\n let ast = inputReg.schema.ast as any\n while (ast._tag === \"Transformation\") {\n ast = ast.to\n ctx.astToInputName.set(ast, inputName)\n }\n // If we hit a Declaration, also add its typeParameters[0]\n if (ast._tag === \"Declaration\" && ast.typeParameters?.[0]) {\n ctx.astToInputName.set(ast.typeParameters[0], inputName)\n }\n }\n }\n\n // Build cached sorted enum values and literal -> enum lookup\n if (!ctx.enumSortedValues) {\n ctx.enumSortedValues = new Map()\n ctx.literalToEnumName = new Map()\n for (const [enumName, enumReg] of ctx.enums) {\n ctx.enumSortedValues.set(enumName, [...enumReg.values].sort())\n // Build literal -> enum reverse lookup for O(1) single literal lookups\n for (const value of enumReg.values) {\n ctx.literalToEnumName.set(value, enumName)\n }\n }\n }\n\n // Build cached sorted union types\n if (!ctx.unionSortedTypes) {\n ctx.unionSortedTypes = new Map()\n for (const [unionName, unionReg] of ctx.unions) {\n ctx.unionSortedTypes.set(unionName, [...unionReg.types].sort())\n }\n }\n}\n\n// GraphQLNonNull wrapper cache for memoization\nconst nonNullCache = new WeakMap<any, GraphQLNonNull<any>>()\n\n/**\n * Get or create a GraphQLNonNull wrapper (memoized)\n */\nexport function getNonNull<T extends import(\"graphql\").GraphQLNullableType>(\n type: T\n): GraphQLNonNull<T> {\n let cached = nonNullCache.get(type)\n if (!cached) {\n cached = new GraphQLNonNull(type)\n nonNullCache.set(type, cached)\n }\n return cached\n}\n\n/**\n * Convert schema to GraphQL type, checking registry first for registered types\n */\nexport function toGraphQLTypeWithRegistry(\n schema: S.Schema<any, any, any>,\n ctx: TypeConversionContext\n): any {\n // Ensure reverse lookup maps are built\n buildReverseLookups(ctx)\n\n const ast = schema.ast\n\n // Check registered object types first\n const registeredType = findRegisteredType(schema, ast, ctx)\n if (registeredType) return registeredType\n\n // Check registered interfaces\n const registeredInterface = findRegisteredInterface(schema, ast, ctx)\n if (registeredInterface) return registeredInterface\n\n // Handle transformations (like S.Array, S.optional, etc)\n if (ast._tag === \"Transformation\") {\n return handleTransformationAST(ast, ctx)\n }\n\n // Handle unions (enum literals or object type unions)\n if (ast._tag === \"Union\") {\n return handleUnionAST(ast, ctx)\n }\n\n // Check single literal for enum match\n if (ast._tag === \"Literal\") {\n const enumType = findEnumForLiteral(ast, ctx)\n if (enumType) return enumType\n }\n\n // Handle tuple types (readonly arrays)\n if (ast._tag === \"TupleType\") {\n return handleTupleTypeAST(ast, ctx)\n }\n\n // Handle Declaration (e.g., Option, Schema.Class)\n if (ast._tag === \"Declaration\") {\n // Option declarations map to nullable inner type\n if (isOptionDeclaration(ast)) {\n const innerType = getOptionInnerType(ast)\n if (innerType) {\n return toGraphQLTypeWithRegistry(S.make(innerType), ctx)\n }\n }\n // For other declarations (like Schema.Class), extract TypeLiteral from typeParameters\n const typeParams = (ast as any).typeParameters\n if (typeParams && typeParams.length > 0) {\n return toGraphQLTypeWithRegistry(S.make(typeParams[0]), ctx)\n }\n }\n\n // Handle Suspend (recursive/self-referential schemas)\n if (ast._tag === \"Suspend\") {\n const innerAst = (ast as any).f()\n return toGraphQLTypeWithRegistry(S.make(innerAst), ctx)\n }\n\n // Fall back to default conversion\n return toGraphQLType(schema)\n}\n\n/**\n * Find a registered object type matching this schema (O(1) with reverse lookup)\n */\nfunction findRegisteredType(\n schema: S.Schema<any, any, any>,\n ast: AST.AST,\n ctx: TypeConversionContext\n): GraphQLObjectType | undefined {\n // Use reverse lookup maps for O(1) lookup\n const typeName = ctx.schemaToTypeName?.get(schema) ?? ctx.astToTypeName?.get(ast)\n if (typeName) {\n return ctx.typeRegistry.get(typeName)\n }\n return undefined\n}\n\n/**\n * Find a registered interface matching this schema (O(1) with reverse lookup)\n */\nfunction findRegisteredInterface(\n schema: S.Schema<any, any, any>,\n ast: AST.AST,\n ctx: TypeConversionContext\n): GraphQLInterfaceType | undefined {\n // Use reverse lookup maps for O(1) lookup\n const interfaceName = ctx.schemaToInterfaceName?.get(schema) ?? ctx.astToInterfaceName?.get(ast)\n if (interfaceName) {\n return ctx.interfaceRegistry.get(interfaceName)\n }\n return undefined\n}\n\n/**\n * Get the inner type from an Option Declaration.\n */\nfunction getOptionInnerType(ast: AST.AST): AST.AST | undefined {\n if (ast._tag === \"Declaration\") {\n const typeParams = (ast as any).typeParameters\n if (typeParams && typeParams.length > 0) {\n return typeParams[0]\n }\n }\n return undefined\n}\n\n/**\n * Find a registered type for an AST node, checking cache and fallback scans\n */\nfunction findRegisteredTypeForAST(\n memberAst: any,\n ctx: TypeConversionContext\n): GraphQLObjectType | undefined {\n // Check cache first for O(1) lookup\n const typeName = ctx.astToTypeName?.get(memberAst)\n if (typeName) {\n const result = ctx.typeRegistry.get(typeName)\n if (result) return result\n }\n\n // Fallback: Linear scan to check if memberAst matches any registered type\n for (const [regTypeName, typeReg] of ctx.types) {\n if (typeReg.schema.ast === memberAst) {\n const result = ctx.typeRegistry.get(regTypeName)\n if (result) return result\n }\n }\n\n return undefined\n}\n\n/**\n * Find a registered type for a transformation's inner AST\n */\nfunction findRegisteredTypeForTransformation(\n memberAst: any,\n ctx: TypeConversionContext\n): GraphQLObjectType | undefined {\n if (memberAst._tag !== \"Transformation\") return undefined\n\n const innerToAst = memberAst.to\n const transformedTypeName = ctx.astToTypeName?.get(innerToAst)\n if (transformedTypeName) {\n const result = ctx.typeRegistry.get(transformedTypeName)\n if (result) return result\n }\n\n // Fallback: Linear scan for transformation's inner AST\n for (const [regTypeName, typeReg] of ctx.types) {\n if (typeReg.schema.ast === innerToAst) {\n const result = ctx.typeRegistry.get(regTypeName)\n if (result) return result\n }\n }\n\n return undefined\n}\n\n/**\n * Find a registered type for an Option.Some pattern (TypeLiteral with 'value' field)\n */\nfunction findRegisteredTypeForOptionSome(\n memberAst: any,\n ctx: TypeConversionContext\n): GraphQLObjectType | undefined {\n if (memberAst._tag !== \"TypeLiteral\") return undefined\n\n const valueField = memberAst.propertySignatures?.find((p: any) => String(p.name) === \"value\")\n if (!valueField) return undefined\n\n const valueType = valueField.type\n\n // Check cache first\n const valueTypeName = ctx.astToTypeName?.get(valueType)\n if (valueTypeName) {\n const result = ctx.typeRegistry.get(valueTypeName)\n if (result) return result\n }\n\n // Fallback: Linear scan for value type\n for (const [regTypeName, typeReg] of ctx.types) {\n if (typeReg.schema.ast === valueType) {\n const result = ctx.typeRegistry.get(regTypeName)\n if (result) return result\n }\n // Also check unwrapped forms\n let regAst = typeReg.schema.ast as any\n while (regAst._tag === \"Transformation\") {\n regAst = regAst.to\n if (regAst === valueType) {\n const result = ctx.typeRegistry.get(regTypeName)\n if (result) return result\n }\n }\n }\n\n // Recursively resolve the value type\n const innerResult = toGraphQLTypeWithRegistry(S.make(valueType), ctx)\n return innerResult\n}\n\n/**\n * Handle Option transformation AST nodes (e.g., S.OptionFromNullOr)\n */\nfunction handleOptionTransformation(\n ast: any,\n fromAst: any,\n toAst: any,\n ctx: TypeConversionContext\n): any {\n // For S.OptionFromNullOr, the wrapped type is in the 'from' Union, not in typeParameters\n // Structure: Transformation { from: Union[X.ast, Literal], to: Declaration(Option) }\n if (fromAst && fromAst._tag === \"Union\") {\n // Check if any union member is a registered type\n for (const memberAst of fromAst.types) {\n // Skip null/undefined literals\n if (memberAst._tag === \"Literal\") continue\n if (memberAst._tag === \"UndefinedKeyword\") continue\n\n // Try various strategies to find registered type\n const registeredType =\n findRegisteredTypeForAST(memberAst, ctx) ||\n findRegisteredTypeForTransformation(memberAst, ctx) ||\n findRegisteredTypeForOptionSome(memberAst, ctx)\n\n if (registeredType) return registeredType\n }\n }\n\n // Fallback to typeParameters for S.Option(X)\n const innerType = getOptionInnerType(toAst)\n if (innerType) {\n // Return the inner type as nullable (not wrapped in NonNull)\n return toGraphQLTypeWithRegistry(S.make(innerType), ctx)\n }\n\n return undefined\n}\n\n/**\n * Handle array transformation AST nodes (readonly array on the to side)\n */\nfunction handleArrayTransformation(\n toAst: any,\n ctx: TypeConversionContext\n): GraphQLList<any> | undefined {\n if (toAst._tag !== \"TupleType\") return undefined\n\n let elementType: any\n if (toAst.rest && toAst.rest.length > 0) {\n const elementSchema = S.make(toAst.rest[0].type)\n elementType = toGraphQLTypeWithRegistry(elementSchema, ctx)\n } else if (toAst.elements.length > 0) {\n const elementSchema = S.make(toAst.elements[0].type)\n elementType = toGraphQLTypeWithRegistry(elementSchema, ctx)\n } else {\n return undefined\n }\n\n return new GraphQLList(elementType)\n}\n\n/**\n * Handle Transformation AST nodes (arrays, optional, Schema.Class, Option, etc.)\n */\nfunction handleTransformationAST(ast: any, ctx: TypeConversionContext): any {\n const toAst = ast.to\n const fromAst = ast.from\n\n // Check if it's an Option transformation (e.g., S.OptionFromNullOr)\n // These should map to the nullable inner type\n if (isOptionDeclaration(toAst)) {\n const optionResult = handleOptionTransformation(ast, fromAst, toAst, ctx)\n if (optionResult) return optionResult\n }\n\n // Check if it's an array (readonly array on the to side)\n const arrayResult = handleArrayTransformation(toAst, ctx)\n if (arrayResult) return arrayResult\n\n // Other transformations - recurse on the \"to\" side\n return toGraphQLTypeWithRegistry(S.make(ast.to), ctx)\n}\n\n/**\n * Find a registered type in union members (handles S.Option(RegisteredType))\n */\nfunction findRegisteredTypeInUnionMembers(\n types: any[],\n ctx: TypeConversionContext\n): GraphQLObjectType | undefined {\n // Check if any union member is a registered type\n // S.Option/S.OptionFromNullOr wraps the type inside a Union in the 'from' position\n for (const memberAst of types) {\n // Try various strategies to find registered type\n const registeredType =\n findRegisteredTypeForAST(memberAst, ctx) ||\n findRegisteredTypeForTransformation(memberAst, ctx) ||\n findRegisteredTypeForOptionSome(memberAst, ctx)\n\n if (registeredType) return registeredType\n }\n\n return undefined\n}\n\n/**\n * Handle Union AST nodes (literal enums or object type unions)\n */\nfunction handleUnionAST(ast: any, ctx: TypeConversionContext): any {\n const allLiterals = ast.types.every((t: any) => t._tag === \"Literal\")\n\n if (allLiterals) {\n // This might be an enum\n const enumType = findEnumForLiteralUnion(ast.types, ctx)\n if (enumType) return enumType\n } else {\n // This is a Union of object types - check if it matches a registered union\n const unionType = findRegisteredUnion(ast.types, ctx)\n if (unionType) return unionType\n }\n\n // Check if any union member is a registered type\n const registeredType = findRegisteredTypeInUnionMembers(ast.types, ctx)\n if (registeredType) return registeredType\n\n // Fallback: use first type\n if (ast.types.length > 0) {\n return toGraphQLTypeWithRegistry(S.make(ast.types[0]), ctx)\n }\n\n return toGraphQLType(S.make(ast))\n}\n\n/**\n * Find a registered enum matching a union of literals (uses cached sorted values)\n */\nfunction findEnumForLiteralUnion(\n types: any[],\n ctx: TypeConversionContext\n): GraphQLEnumType | undefined {\n const literalValues = types.map((t: any) => String(t.literal)).sort()\n\n for (const [enumName] of ctx.enums) {\n // Use cached sorted values instead of sorting on every comparison\n const enumValues = ctx.enumSortedValues?.get(enumName)\n if (\n enumValues &&\n literalValues.length === enumValues.length &&\n literalValues.every((v: string, i: number) => v === enumValues[i])\n ) {\n return ctx.enumRegistry.get(enumName)\n }\n }\n return undefined\n}\n\n/**\n * Find a registered union matching an object type union (uses cached sorted types)\n */\nfunction findRegisteredUnion(\n types: any[],\n ctx: TypeConversionContext\n): GraphQLUnionType | undefined {\n // Collect _tag values from each union member\n const memberTags: string[] = []\n for (const memberAst of types) {\n if (memberAst._tag === \"TypeLiteral\") {\n const tagProp = memberAst.propertySignatures.find((p: any) => String(p.name) === \"_tag\")\n if (tagProp && tagProp.type._tag === \"Literal\") {\n memberTags.push(String(tagProp.type.literal))\n }\n }\n }\n\n // Check if any registered union has matching types\n if (memberTags.length === types.length) {\n const sortedTags = memberTags.sort()\n for (const [unionName] of ctx.unions) {\n // Use cached sorted types instead of sorting on every comparison\n const unionTypes = ctx.unionSortedTypes?.get(unionName)\n if (\n unionTypes &&\n sortedTags.length === unionTypes.length &&\n sortedTags.every((tag, i) => tag === unionTypes[i])\n ) {\n return ctx.unionRegistry.get(unionName)\n }\n }\n }\n return undefined\n}\n\n/**\n * Find a registered enum containing a single literal value (O(1) with reverse lookup)\n */\nfunction findEnumForLiteral(ast: any, ctx: TypeConversionContext): GraphQLEnumType | undefined {\n const literalValue = String(ast.literal)\n // Use reverse lookup map for O(1) lookup instead of O(N×M) iteration\n const enumName = ctx.literalToEnumName?.get(literalValue)\n if (enumName) {\n return ctx.enumRegistry.get(enumName)\n }\n return undefined\n}\n\n/**\n * Handle TupleType AST nodes (arrays)\n */\nfunction handleTupleTypeAST(ast: any, ctx: TypeConversionContext): any {\n if (ast.rest && ast.rest.length > 0) {\n const elementSchema = S.make(ast.rest[0].type)\n const elementType = toGraphQLTypeWithRegistry(elementSchema, ctx)\n return new GraphQLList(elementType)\n } else if (ast.elements && ast.elements.length > 0) {\n const elementSchema = S.make(ast.elements[0].type)\n const elementType = toGraphQLTypeWithRegistry(elementSchema, ctx)\n return new GraphQLList(elementType)\n }\n return toGraphQLType(S.make(ast))\n}\n\n/**\n * Convert a schema to GraphQL fields\n */\nexport function schemaToFields(\n schema: S.Schema<any, any, any>,\n ctx: TypeConversionContext\n): GraphQLFieldConfigMap<any, any> {\n let ast = schema.ast\n\n // Handle Transformation (Schema.Class, TaggedClass)\n if (ast._tag === \"Transformation\") {\n ast = (ast as any).to\n }\n\n // Handle Declaration (Schema.Class wraps TypeLiteral in Declaration)\n if (ast._tag === \"Declaration\") {\n const typeParams = (ast as any).typeParameters\n if (typeParams && typeParams.length > 0) {\n let innerAst = typeParams[0]\n // Unwrap transformation to get to TypeLiteral (e.g., when fields have DateFromSelf)\n while (innerAst._tag === \"Transformation\") {\n innerAst = innerAst.to\n }\n if (innerAst._tag === \"TypeLiteral\") {\n ast = innerAst\n }\n }\n }\n\n if (ast._tag === \"TypeLiteral\") {\n const fields: GraphQLFieldConfigMap<any, any> = {}\n\n for (const field of (ast as any).propertySignatures) {\n const fieldName = String(field.name)\n\n // Skip _tag field from TaggedStruct/TaggedClass - it's an internal discriminator\n if (fieldName === \"_tag\") continue\n\n const fieldSchema = S.make(field.type)\n let fieldType = toGraphQLTypeWithRegistry(fieldSchema, ctx)\n\n // Make non-optional fields non-null, unless they're Option transformations\n // Option transformations (like S.OptionFromNullOr) should always be nullable\n const isOptionField = isOptionTransformation(field.type) || isOptionDeclaration(field.type)\n if (!field.isOptional && !isOptionField) {\n fieldType = getNonNull(fieldType)\n }\n\n fields[fieldName] = { type: fieldType }\n }\n\n return fields\n }\n\n return {}\n}\n\n/**\n * Convert a schema to GraphQL input fields\n */\nexport function schemaToInputFields(\n schema: S.Schema<any, any, any>,\n enumRegistry: Map<string, GraphQLEnumType>,\n inputRegistry: Map<string, GraphQLInputObjectType>,\n inputs: Map<string, InputTypeRegistration>,\n enums: Map<string, EnumRegistration>,\n cache?: InputTypeLookupCache\n): GraphQLInputFieldConfigMap {\n let ast = schema.ast\n\n // Unwrap transformations to get to the underlying type\n while (ast._tag === \"Transformation\") {\n ast = (ast as any).to\n }\n\n if (ast._tag === \"TypeLiteral\") {\n const fields: GraphQLInputFieldConfigMap = {}\n\n for (const field of ast.propertySignatures) {\n const fieldName = String(field.name)\n\n // Skip _tag field from TaggedStruct/TaggedClass - it's an internal discriminator\n if (fieldName === \"_tag\") continue\n\n const fieldSchema = S.make(field.type)\n let fieldType = toGraphQLInputTypeWithRegistry(\n fieldSchema,\n enumRegistry,\n inputRegistry,\n inputs,\n enums,\n cache\n )\n\n // Make non-optional fields non-null, unless they're Option transformations\n // Option transformations (like S.OptionFromNullOr) should always be nullable\n const isOptionField = isOptionTransformation(field.type) || isOptionDeclaration(field.type)\n if (!field.isOptional && !isOptionField) {\n fieldType = getNonNull(fieldType)\n }\n\n fields[fieldName] = { type: fieldType }\n }\n\n return fields\n }\n\n return {}\n}\n\n/**\n * Optional cache for input type lookups to enable O(1) resolution\n */\nexport interface InputTypeLookupCache {\n schemaToInputName?: Map<S.Schema<any, any, any>, string>\n astToInputName?: Map<AST.AST, string>\n literalToEnumName?: Map<string, string>\n enumSortedValues?: Map<string, readonly string[]>\n}\n\n/**\n * Build lookup caches for input type resolution\n */\nexport function buildInputTypeLookupCache(\n inputs: Map<string, InputTypeRegistration>,\n enums: Map<string, EnumRegistration>\n): InputTypeLookupCache {\n const cache: InputTypeLookupCache = {\n schemaToInputName: new Map(),\n astToInputName: new Map(),\n literalToEnumName: new Map(),\n enumSortedValues: new Map(),\n }\n\n // Build input type reverse lookups\n for (const [inputName, inputReg] of inputs) {\n cache.schemaToInputName!.set(inputReg.schema, inputName)\n cache.astToInputName!.set(inputReg.schema.ast, inputName)\n\n // Also add unwrapped AST forms for transformation schemas\n // This ensures lookups work when encountering unwrapped AST levels\n let ast = inputReg.schema.ast as any\n while (ast._tag === \"Transformation\") {\n ast = ast.to\n cache.astToInputName!.set(ast, inputName)\n }\n // If we hit a Declaration, also add its typeParameters[0]\n if (ast._tag === \"Declaration\" && ast.typeParameters?.[0]) {\n cache.astToInputName!.set(ast.typeParameters[0], inputName)\n }\n }\n\n // Build enum lookups\n for (const [enumName, enumReg] of enums) {\n cache.enumSortedValues!.set(enumName, [...enumReg.values].sort())\n for (const value of enumReg.values) {\n cache.literalToEnumName!.set(value, enumName)\n }\n }\n\n return cache\n}\n\n/**\n * Find a registered input type for a schema/AST\n */\nfunction findRegisteredInputType(\n schema: S.Schema<any, any, any>,\n ast: AST.AST,\n inputs: Map<string, InputTypeRegistration>,\n inputRegistry: Map<string, GraphQLInputObjectType>,\n cache?: InputTypeLookupCache\n): GraphQLInputObjectType | undefined {\n // Check cache first for O(1) lookup\n if (cache?.schemaToInputName || cache?.astToInputName) {\n const inputName = cache.schemaToInputName?.get(schema) ?? cache.astToInputName?.get(ast)\n if (inputName) {\n return inputRegistry.get(inputName)\n }\n } else {\n // Fallback to linear scan if no cache\n for (const [inputName, inputReg] of inputs) {\n if (inputReg.schema.ast === ast || inputReg.schema === schema) {\n return inputRegistry.get(inputName)\n }\n }\n }\n return undefined\n}\n\n/**\n * Find a registered input type for an AST node, checking cache and fallback scans\n */\nfunction findRegisteredInputForAST(\n memberAst: any,\n inputs: Map<string, InputTypeRegistration>,\n inputRegistry: Map<string, GraphQLInputObjectType>,\n enumRegistry: Map<string, GraphQLEnumType>,\n enums: Map<string, EnumRegistration>,\n cache?: InputTypeLookupCache\n): any {\n // Check cache first for O(1) lookup\n const inputName = cache?.astToInputName?.get(memberAst)\n if (inputName) {\n const inputReg = inputs.get(inputName)\n if (inputReg) {\n return toGraphQLInputTypeWithRegistry(\n inputReg.schema,\n enumRegistry,\n inputRegistry,\n inputs,\n enums,\n cache\n )\n }\n }\n\n // Fallback: Linear scan to check if memberAst matches any registered input\n for (const [, inputReg] of inputs) {\n if (inputReg.schema.ast === memberAst) {\n return toGraphQLInputTypeWithRegistry(\n inputReg.schema,\n enumRegistry,\n inputRegistry,\n inputs,\n enums,\n cache\n )\n }\n }\n\n return undefined\n}\n\n/**\n * Find a registered input type for a transformation's inner AST\n */\nfunction findRegisteredInputForTransformation(\n memberAst: any,\n inputs: Map<string, InputTypeRegistration>,\n inputRegistry: Map<string, GraphQLInputObjectType>,\n enumRegistry: Map<string, GraphQLEnumType>,\n enums: Map<string, EnumRegistration>,\n cache?: InputTypeLookupCache\n): any {\n if (memberAst._tag !== \"Transformation\") return undefined\n\n const innerToAst = memberAst.to\n const transformedInputName = cache?.astToInputName?.get(innerToAst)\n if (transformedInputName) {\n const inputReg = inputs.get(transformedInputName)\n if (inputReg) {\n return toGraphQLInputTypeWithRegistry(\n inputReg.schema,\n enumRegistry,\n inputRegistry,\n inputs,\n enums,\n cache\n )\n }\n }\n\n // Fallback: Linear scan for transformation's inner AST\n for (const [, inputReg] of inputs) {\n if (inputReg.schema.ast === innerToAst) {\n return toGraphQLInputTypeWithRegistry(\n inputReg.schema,\n enumRegistry,\n inputRegistry,\n inputs,\n enums,\n cache\n )\n }\n }\n\n return undefined\n}\n\n/**\n * Find a registered input type for an Option.Some pattern (TypeLiteral with 'value' field)\n */\nfunction findRegisteredInputForOptionSome(\n memberAst: any,\n inputs: Map<string, InputTypeRegistration>,\n inputRegistry: Map<string, GraphQLInputObjectType>,\n enumRegistry: Map<string, GraphQLEnumType>,\n enums: Map<string, EnumRegistration>,\n cache?: InputTypeLookupCache\n): any {\n if (memberAst._tag !== \"TypeLiteral\") return undefined\n\n const valueField = (memberAst as any).propertySignatures?.find(\n (p: any) => String(p.name) === \"value\"\n )\n if (!valueField) return undefined\n\n const valueType = valueField.type\n\n // Check cache first for the value type\n const valueInputName = cache?.astToInputName?.get(valueType)\n if (valueInputName) {\n const inputReg = inputs.get(valueInputName)\n if (inputReg) {\n return toGraphQLInputTypeWithRegistry(\n inputReg.schema,\n enumRegistry,\n inputRegistry,\n inputs,\n enums,\n cache\n )\n }\n }\n\n // Fallback: Linear scan to check if valueType matches any registered input\n for (const [, inputReg] of inputs) {\n if (inputReg.schema.ast === valueType) {\n return toGraphQLInputTypeWithRegistry(\n inputReg.schema,\n enumRegistry,\n inputRegistry,\n inputs,\n enums,\n cache\n )\n }\n // Also check unwrapped forms of registered schema\n let regAst = inputReg.schema.ast as any\n while (regAst._tag === \"Transformation\") {\n regAst = regAst.to\n if (regAst === valueType) {\n return toGraphQLInputTypeWithRegistry(\n inputReg.schema,\n enumRegistry,\n inputRegistry,\n inputs,\n enums,\n cache\n )\n }\n }\n if (regAst._tag === \"Declaration\" && regAst.typeParameters?.[0] === valueType) {\n return toGraphQLInputTypeWithRegistry(\n inputReg.schema,\n enumRegistry,\n inputRegistry,\n inputs,\n enums,\n cache\n )\n }\n }\n\n // Recursively resolve the value type if no direct match found\n const innerResult = toGraphQLInputTypeWithRegistry(\n S.make(valueType),\n enumRegistry,\n inputRegistry,\n inputs,\n enums,\n cache\n )\n return innerResult || undefined\n}\n\n/**\n * Handle Option transformation for input types\n */\nfunction handleOptionTransformationForInput(\n fromAst: any,\n toAst: any,\n inputs: Map<string, InputTypeRegistration>,\n inputRegistry: Map<string, GraphQLInputObjectType>,\n enumRegistry: Map<string, GraphQLEnumType>,\n enums: Map<string, EnumRegistration>,\n cache?: InputTypeLookupCache\n): any {\n // For S.OptionFromNullOr and S.Option, check the 'from' Union for registered input types\n if (!fromAst || fromAst._tag !== \"Union\") return undefined\n\n for (const memberAst of fromAst.types) {\n // Skip null/undefined literals\n if (memberAst._tag === \"Literal\") continue\n if (memberAst._tag === \"UndefinedKeyword\") continue\n\n // Try various strategies to find registered input\n const registeredInput =\n findRegisteredInputForAST(memberAst, inputs, inputRegistry, enumRegistry, enums, cache) ||\n findRegisteredInputForTransformation(\n memberAst,\n inputs,\n inputRegistry,\n enumRegistry,\n enums,\n cache\n ) ||\n findRegisteredInputForOptionSome(memberAst, inputs, inputRegistry, enumRegistry, enums, cache)\n\n if (registeredInput) return registeredInput\n }\n\n return undefined\n}\n\n/**\n * Handle transformation AST for input types\n */\nfunction handleTransformationForInput(\n ast: any,\n inputs: Map<string, InputTypeRegistration>,\n inputRegistry: Map<string, GraphQLInputObjectType>,\n enumRegistry: Map<string, GraphQLEnumType>,\n enums: Map<string, EnumRegistration>,\n cache?: InputTypeLookupCache\n): any {\n const toAst = (ast as any).to\n const fromAst = (ast as any).from\n\n // For S.OptionFromNullOr and S.Option, check the 'from' Union for registered input types\n if (isOptionDeclaration(toAst)) {\n const optionResult = handleOptionTransformationForInput(\n fromAst,\n toAst,\n inputs,\n inputRegistry,\n enumRegistry,\n enums,\n cache\n )\n if (optionResult) return optionResult\n }\n\n return toGraphQLInputTypeWithRegistry(\n S.make(toAst),\n enumRegistry,\n inputRegistry,\n inputs,\n enums,\n cache\n )\n}\n\n/**\n * Find a registered input type in union members\n */\nfunction findRegisteredInputInUnionMembers(\n types: any[],\n inputs: Map<string, InputTypeRegistration>,\n inputRegistry: Map<string, GraphQLInputObjectType>,\n enumRegistry: Map<string, GraphQLEnumType>,\n enums: Map<string, EnumRegistration>,\n cache?: InputTypeLookupCache\n): any {\n for (const memberAst of types) {\n // Try various strategies to find registered input\n const registeredInput =\n findRegisteredInputForAST(memberAst, inputs, inputRegistry, enumRegistry, enums, cache) ||\n findRegisteredInputForTransformation(\n memberAst,\n inputs,\n inputRegistry,\n enumRegistry,\n enums,\n cache\n ) ||\n findRegisteredInputForOptionSome(memberAst, inputs, inputRegistry, enumRegistry, enums, cache)\n\n if (registeredInput) return registeredInput\n }\n\n return undefined\n}\n\n/**\n * Handle union AST for input types\n */\nfunction handleUnionForInput(\n ast: any,\n inputs: Map<string, InputTypeRegistration>,\n inputRegistry: Map<string, GraphQLInputObjectType>,\n enumRegistry: Map<string, GraphQLEnumType>,\n enums: Map<string, EnumRegistration>,\n cache?: InputTypeLookupCache\n): any {\n const unionAst = ast as any\n\n // Handle S.optional which creates Union(LiteralUnion, UndefinedKeyword)\n const nonUndefinedTypes = unionAst.types.filter((t: any) => t._tag !== \"UndefinedKeyword\")\n if (nonUndefinedTypes.length === 1) {\n if (nonUndefinedTypes[0]._tag === \"Union\" || nonUndefinedTypes[0]._tag === \"TypeLiteral\") {\n return toGraphQLInputTypeWithRegistry(\n S.make(nonUndefinedTypes[0]),\n enumRegistry,\n inputRegistry,\n inputs,\n enums,\n cache\n )\n }\n }\n\n // Check if any union member is a registered input type\n const registeredInput = findRegisteredInputInUnionMembers(\n unionAst.types,\n inputs,\n inputRegistry,\n enumRegistry,\n enums,\n cache\n )\n if (registeredInput) return registeredInput\n\n // Check for enum match (all literals)\n const allLiterals = unionAst.types.every((t: any) => t._tag === \"Literal\")\n if (allLiterals) {\n const literalValues = unionAst.types.map((t: any) => String(t.literal)).sort()\n\n // Use cached sorted values if available\n for (const [enumName] of enums) {\n const enumValues =\n cache?.enumSortedValues?.get(enumName) ?? [...enums.get(enumName)!.values].sort()\n if (\n literalValues.length === enumValues.length &&\n literalValues.every((v: string, i: number) => v === enumValues[i])\n ) {\n const result = enumRegistry.get(enumName)\n if (result) return result\n }\n }\n }\n\n return undefined\n}\n\n/**\n * Handle literal AST for input types\n */\nfunction handleLiteralForInput(\n ast: any,\n enumRegistry: Map<string, GraphQLEnumType>,\n enums: Map<string, EnumRegistration>,\n cache?: InputTypeLookupCache\n): GraphQLEnumType | undefined {\n const literalValue = String(ast.literal)\n if (cache?.literalToEnumName) {\n const enumName = cache.literalToEnumName.get(literalValue)\n if (enumName) {\n return enumRegistry.get(enumName)\n }\n } else {\n // Fallback to linear scan if no cache\n for (const [enumName, enumReg] of enums) {\n if (enumReg.values.includes(literalValue)) {\n return enumRegistry.get(enumName)\n }\n }\n }\n return undefined\n}\n\n/**\n * Handle suspend AST for input types\n */\nfunction handleSuspendForInput(\n ast: any,\n inputs: Map<string, InputTypeRegistration>,\n inputRegistry: Map<string, GraphQLInputObjectType>,\n enumRegistry: Map<string, GraphQLEnumType>,\n enums: Map<string, EnumRegistration>,\n cache?: InputTypeLookupCache\n): any {\n const innerAst = (ast as any).f()\n return toGraphQLInputTypeWithRegistry(\n S.make(innerAst),\n enumRegistry,\n inputRegistry,\n inputs,\n enums,\n cache\n )\n}\n\n/**\n * Convert a schema to GraphQL input type, checking enum and input registries.\n * Uses O(1) reverse lookups when cache is provided.\n */\nexport function toGraphQLInputTypeWithRegistry(\n schema: S.Schema<any, any, any>,\n enumRegistry: Map<string, GraphQLEnumType>,\n inputRegistry: Map<string, GraphQLInputObjectType>,\n inputs: Map<string, InputTypeRegistration>,\n enums: Map<string, EnumRegistration>,\n cache?: InputTypeLookupCache\n): any {\n const ast = schema.ast\n\n // Check if this schema matches a registered input type FIRST (O(1) with cache)\n // This must happen before transformation handling to find registered types\n const registeredInput = findRegisteredInputType(schema, ast, inputs, inputRegistry, cache)\n if (registeredInput) return registeredInput\n\n // Handle transformations (like S.optional wrapping) AFTER registry lookup\n if (ast._tag === \"Transformation\") {\n return handleTransformationForInput(ast, inputs, inputRegistry, enumRegistry, enums, cache)\n }\n\n // Check if this schema matches a registered enum\n if (ast._tag === \"Union\") {\n const unionResult = handleUnionForInput(ast, inputs, inputRegistry, enumRegistry, enums, cache)\n if (unionResult) return unionResult\n }\n\n // Check single literal (O(1) with cache)\n if (ast._tag === \"Literal\") {\n const literalResult = handleLiteralForInput(ast, enumRegistry, enums, cache)\n if (literalResult) return literalResult\n }\n\n // Handle Suspend (recursive/self-referential schemas)\n if (ast._tag === \"Suspend\") {\n return handleSuspendForInput(ast, inputs, inputRegistry, enumRegistry, enums, cache)\n }\n\n // Fall back to default toGraphQLInputType\n return toGraphQLInputType(schema)\n}\n\n/**\n * Convert a schema to GraphQL arguments with registry support.\n * Uses O(1) reverse lookups when cache is provided.\n */\nexport function toGraphQLArgsWithRegistry(\n schema: S.Schema<any, any, any>,\n enumRegistry: Map<string, GraphQLEnumType>,\n inputRegistry: Map<string, GraphQLInputObjectType>,\n inputs: Map<string, InputTypeRegistration>,\n enums: Map<string, EnumRegistration>,\n cache?: InputTypeLookupCache\n): any {\n const ast = schema.ast\n\n if (ast._tag === \"TypeLiteral\") {\n const args: Record<string, { type: any }> = {}\n\n for (const field of (ast as any).propertySignatures) {\n const fieldName = String(field.name)\n\n // Skip _tag field from TaggedStruct/TaggedClass - it's an internal discriminator\n if (fieldName === \"_tag\") continue\n\n const fieldSchema = S.make(field.type)\n let fieldType = toGraphQLInputTypeWithRegistry(\n fieldSchema,\n enumRegistry,\n inputRegistry,\n inputs,\n enums,\n cache\n )\n\n // Make non-optional fields non-null, unless they're Option transformations\n // Option transformations (like S.OptionFromNullOr) should always be nullable\n const isOptionField = isOptionTransformation(field.type) || isOptionDeclaration(field.type)\n if (!field.isOptional && !isOptionField) {\n fieldType = getNonNull(fieldType)\n }\n\n args[fieldName] = { type: fieldType }\n }\n\n return args\n }\n\n // Fall back to default toGraphQLArgs\n return toGraphQLArgs(schema)\n}\n","import { Effect, Runtime, Stream, Queue, Fiber, Option } from \"effect\"\nimport * as S from \"effect/Schema\"\nimport { GraphQLFieldConfig, GraphQLResolveInfo } from \"graphql\"\nimport type {\n FieldRegistration,\n SubscriptionFieldRegistration,\n ObjectFieldRegistration,\n DirectiveRegistration,\n MiddlewareRegistration,\n MiddlewareContext,\n GraphQLEffectContext,\n} from \"./types\"\nimport {\n toGraphQLTypeWithRegistry,\n toGraphQLArgsWithRegistry,\n type TypeConversionContext,\n type InputTypeLookupCache,\n} from \"./type-registry\"\n\n/**\n * Check if a schema represents an Option type (e.g., S.OptionFromNullOr).\n * These schemas have a Transformation with a Declaration on the \"to\" side\n * that has a TypeConstructor annotation of 'effect/Option'.\n */\nfunction isOptionSchema(schema: S.Schema<any, any, any>): boolean {\n const ast = schema.ast\n if (ast._tag === \"Transformation\") {\n const toAst = (ast as any).to\n if (toAst._tag === \"Declaration\") {\n // Check for the TypeConstructor annotation which identifies Option types\n const annotations = toAst.annotations\n if (annotations) {\n const TypeConstructorSymbol = Symbol.for(\"effect/annotation/TypeConstructor\")\n const typeConstructor = annotations[TypeConstructorSymbol]\n if (typeConstructor && typeConstructor._tag === \"effect/Option\") {\n return true\n }\n }\n }\n }\n return false\n}\n\n/**\n * Encode a resolver's output value using the schema.\n * This is primarily needed for Option types where Option.none() needs to become null\n * and Option.some(x) needs to become x.\n *\n * For non-Option schemas, this is a no-op pass-through.\n */\nfunction encodeResolverOutput<A, I, R>(\n schema: S.Schema<A, I, R>,\n value: A\n): Effect.Effect<I, never, R> {\n // Only encode Option schemas - other schemas pass through unchanged\n // This optimization avoids the overhead of encoding for simple types\n if (isOptionSchema(schema)) {\n // Use Schema.encode to convert Option<A> back to I (null | A)\n return Effect.orDie(S.encode(schema)(value))\n }\n // For non-Option types, pass through unchanged\n return Effect.succeed(value as unknown as I)\n}\n\n/**\n * Context needed for building fields\n */\nexport interface FieldBuilderContext extends TypeConversionContext {\n directiveRegistrations: Map<string, DirectiveRegistration>\n middlewares: readonly MiddlewareRegistration[]\n inputTypeLookupCache?: InputTypeLookupCache\n}\n\n/**\n * Apply directives to an Effect by wrapping it with directive transformers\n */\nfunction applyDirectives<A, E, R>(\n effect: Effect.Effect<A, E, R>,\n directives: readonly { name: string; args?: Record<string, unknown> }[] | undefined,\n directiveRegistrations: Map<string, DirectiveRegistration>\n): Effect.Effect<A, E, any> {\n if (!directives) return effect\n\n let wrapped = effect\n for (const directiveApp of directives) {\n const directiveReg = directiveRegistrations.get(directiveApp.name)\n if (directiveReg?.apply) {\n wrapped = directiveReg.apply(directiveApp.args ?? {})(wrapped)\n }\n }\n return wrapped\n}\n\n/**\n * Apply middleware to an Effect by wrapping it with middleware transformers.\n *\n * Middleware executes in \"onion\" order - first registered middleware is the\n * outermost layer, meaning it runs first before and last after the resolver.\n *\n * Each middleware can optionally specify a `match` predicate to filter which\n * fields it applies to.\n */\nfunction applyMiddleware<A, E, R>(\n effect: Effect.Effect<A, E, R>,\n context: MiddlewareContext,\n middlewares: readonly MiddlewareRegistration[]\n): Effect.Effect<A, E, any> {\n if (middlewares.length === 0) return effect\n\n let wrapped = effect\n\n // Apply in reverse order so first registered is outermost\n // (executes first before, last after)\n for (let i = middlewares.length - 1; i >= 0; i--) {\n const middleware = middlewares[i]\n\n // Check if middleware should apply to this field\n if (middleware.match && !middleware.match(context.info)) {\n continue\n }\n\n wrapped = middleware.apply(wrapped, context)\n }\n\n return wrapped\n}\n\n/**\n * Build a GraphQL field config from a field registration (for queries/mutations)\n */\nexport function buildField(\n config: FieldRegistration,\n ctx: FieldBuilderContext\n): GraphQLFieldConfig<any, any> {\n const fieldConfig: GraphQLFieldConfig<any, any> = {\n type: toGraphQLTypeWithRegistry(config.type, ctx),\n resolve: async (\n _parent,\n args,\n context: GraphQLEffectContext<any>,\n info: GraphQLResolveInfo\n ) => {\n // Apply directives first (per-field, explicit)\n let effect = applyDirectives(\n config.resolve(args),\n config.directives,\n ctx.directiveRegistrations\n )\n\n // Apply middleware (global/pattern-matched)\n const middlewareContext: MiddlewareContext = { parent: _parent, args, info }\n effect = applyMiddleware(effect, middlewareContext, ctx.middlewares)\n\n // Execute the resolver\n const result = await Runtime.runPromise(context.runtime)(effect)\n\n // Encode the result (converts Option.none() to null, Option.some(x) to x)\n return await Runtime.runPromise(context.runtime)(encodeResolverOutput(config.type, result))\n },\n }\n\n if (config.args) {\n fieldConfig.args = toGraphQLArgsWithRegistry(\n config.args,\n ctx.enumRegistry,\n ctx.inputRegistry,\n ctx.inputs,\n ctx.enums,\n ctx.inputTypeLookupCache\n )\n }\n if (config.description) {\n fieldConfig.description = config.description\n }\n\n return fieldConfig\n}\n\n/**\n * Build a GraphQL field config for an object field (has parent param)\n */\nexport function buildObjectField(\n config: ObjectFieldRegistration,\n ctx: FieldBuilderContext\n): GraphQLFieldConfig<any, any> {\n const fieldConfig: GraphQLFieldConfig<any, any> = {\n type: toGraphQLTypeWithRegistry(config.type, ctx),\n resolve: async (parent, args, context: GraphQLEffectContext<any>, info: GraphQLResolveInfo) => {\n // Apply directives first (per-field, explicit)\n let effect = applyDirectives(\n config.resolve(parent, args),\n config.directives,\n ctx.directiveRegistrations\n )\n\n // Apply middleware (global/pattern-matched)\n const middlewareContext: MiddlewareContext = { parent, args, info }\n effect = applyMiddleware(effect, middlewareContext, ctx.middlewares)\n\n // Execute the resolver\n const result = await Runtime.runPromise(context.runtime)(effect)\n\n // Encode the result (converts Option.none() to null, Option.some(x) to x)\n return await Runtime.runPromise(context.runtime)(encodeResolverOutput(config.type, result))\n },\n }\n\n if (config.args) {\n fieldConfig.args = toGraphQLArgsWithRegistry(\n config.args,\n ctx.enumRegistry,\n ctx.inputRegistry,\n ctx.inputs,\n ctx.enums,\n ctx.inputTypeLookupCache\n )\n }\n if (config.description) {\n fieldConfig.description = config.description\n }\n\n return fieldConfig\n}\n\n/**\n * Build a GraphQL subscription field config.\n *\n * Subscriptions in GraphQL have a special structure:\n * - `subscribe` returns an AsyncIterator that yields the \"root value\" for each event\n * - `resolve` transforms each yielded value into the final result\n *\n * We convert Effect's Stream to an AsyncIterator using a Queue-based approach.\n */\nexport function buildSubscriptionField(\n config: SubscriptionFieldRegistration,\n ctx: FieldBuilderContext\n): GraphQLFieldConfig<any, any> {\n const fieldConfig: GraphQLFieldConfig<any, any> = {\n type: toGraphQLTypeWithRegistry(config.type, ctx),\n\n // The subscribe function returns an AsyncIterator\n subscribe: async (\n _parent,\n args,\n context: GraphQLEffectContext<any>,\n info: GraphQLResolveInfo\n ) => {\n // Get the Stream from the subscribe Effect\n let subscribeEffect = config.subscribe(args)\n\n // Apply directives to the subscribe effect\n subscribeEffect = applyDirectives(\n subscribeEffect,\n config.directives,\n ctx.directiveRegistrations\n ) as any\n\n // Apply middleware to the subscribe effect\n const middlewareContext: MiddlewareContext = { parent: _parent, args, info }\n subscribeEffect = applyMiddleware(subscribeEffect, middlewareContext, ctx.middlewares) as any\n\n const stream = await Runtime.runPromise(context.runtime)(subscribeEffect)\n\n // Convert Stream to AsyncIterator using queue-based approach\n return streamToAsyncIterator(stream, context.runtime)\n },\n\n // The resolve function transforms each yielded value\n // If no custom resolve is provided, encode and return the payload directly\n resolve: config.resolve\n ? async (value, args, context: GraphQLEffectContext<any>, info: GraphQLResolveInfo) => {\n let effect = config.resolve!(value, args)\n\n // Apply middleware to the resolve effect\n const middlewareContext: MiddlewareContext = { parent: value, args, info }\n effect = applyMiddleware(effect, middlewareContext, ctx.middlewares)\n\n // Execute the resolver\n const result = await Runtime.runPromise(context.runtime)(effect)\n\n // Encode the result (converts Option.none() to null, Option.some(x) to x)\n return await Runtime.runPromise(context.runtime)(\n encodeResolverOutput(config.type, result)\n )\n }\n : async (value, _args, context: GraphQLEffectContext<any>) => {\n // Even without custom resolve, encode Option values\n return await Runtime.runPromise(context.runtime)(encodeResolverOutput(config.type, value))\n },\n }\n\n if (config.args) {\n fieldConfig.args = toGraphQLArgsWithRegistry(\n config.args,\n ctx.enumRegistry,\n ctx.inputRegistry,\n ctx.inputs,\n ctx.enums,\n ctx.inputTypeLookupCache\n )\n }\n if (config.description) {\n fieldConfig.description = config.description\n }\n\n return fieldConfig\n}\n\n/**\n * Convert an Effect Stream to an AsyncIterator using a Queue-based approach.\n *\n * This is needed because Stream.toAsyncIterable() requires R = never,\n * but our streams may have service requirements that need to be provided\n * by the runtime context.\n */\nfunction streamToAsyncIterator<A, E, R>(\n stream: Stream.Stream<A, E, R>,\n runtime: Runtime.Runtime<R>\n): AsyncIterator<A> {\n // Create the queue synchronously via runSync since unbounded queue creation is synchronous\n let queue: Queue.Queue<Option.Option<A>>\n let fiber: Fiber.RuntimeFiber<void, E>\n let initialized = false\n let done = false\n\n const initialize = async () => {\n if (initialized) return\n initialized = true\n\n queue = await Runtime.runPromise(runtime)(Queue.unbounded<Option.Option<A>>())\n\n // Fork a fiber to run the stream and push values to the queue\n fiber = Runtime.runFork(runtime)(\n Effect.ensuring(\n Stream.runForEach(stream, (value) => Queue.offer(queue, Option.some(value))),\n // Signal completion by pushing None\n Queue.offer(queue, Option.none())\n )\n )\n }\n\n return {\n [Symbol.asyncIterator]() {\n return this\n },\n\n async next(): Promise<IteratorResult<A>> {\n await initialize()\n\n if (done) {\n return { done: true, value: undefined }\n }\n\n try {\n const optionValue = await Runtime.runPromise(runtime)(Queue.take(queue))\n\n if (Option.isNone(optionValue)) {\n done = true\n return { done: true, value: undefined }\n }\n\n return { done: false, value: optionValue.value }\n } catch (error) {\n done = true\n throw error\n }\n },\n\n async return(): Promise<IteratorResult<A>> {\n // Cleanup - interrupt the fiber and shutdown the queue\n done = true\n if (initialized) {\n try {\n await Runtime.runPromise(runtime)(\n Fiber.interrupt(fiber as unknown as Fiber.Fiber<any, any>)\n )\n await Runtime.runPromise(runtime)(Queue.shutdown(queue))\n } catch {\n // Ignore cleanup errors\n }\n }\n return { done: true, value: undefined }\n },\n } as AsyncIterator<A>\n}\n","import { Effect, Pipeable } from \"effect\"\nimport * as S from \"effect/Schema\"\nimport {\n GraphQLSchema,\n GraphQLObjectType,\n GraphQLInterfaceType,\n GraphQLEnumType,\n GraphQLUnionType,\n GraphQLInputObjectType,\n GraphQLFieldConfigMap,\n GraphQLDirective,\n DirectiveLocation,\n} from \"graphql\"\nimport type {\n FieldRegistration,\n TypeRegistration,\n InterfaceRegistration,\n EnumRegistration,\n UnionRegistration,\n InputTypeRegistration,\n DirectiveRegistration,\n DirectiveApplication,\n SubscriptionFieldRegistration,\n ObjectFieldRegistration,\n MiddlewareRegistration,\n MiddlewareContext,\n CacheHint,\n} from \"./types\"\nimport type { GraphQLExtension, ExecutionArgs } from \"../extensions\"\nimport type {\n GraphQLResolveInfo,\n DocumentNode,\n ExecutionResult,\n GraphQLError as GQLError,\n} from \"graphql\"\nimport type { FieldComplexity, FieldComplexityMap } from \"../server/complexity\"\nimport type { CacheHintMap } from \"../server/cache-control\"\nimport {\n getSchemaName,\n schemaToFields,\n schemaToInputFields,\n toGraphQLArgsWithRegistry,\n buildReverseLookups,\n buildInputTypeLookupCache,\n type TypeConversionContext,\n} from \"./type-registry\"\nimport {\n buildField,\n buildObjectField,\n buildSubscriptionField,\n FieldBuilderContext,\n} from \"./field-builders\"\n\n/**\n * Internal state for the builder\n */\ninterface BuilderState {\n types: Map<string, TypeRegistration>\n interfaces: Map<string, InterfaceRegistration>\n enums: Map<string, EnumRegistration>\n unions: Map<string, UnionRegistration>\n inputs: Map<string, InputTypeRegistration>\n directives: Map<string, DirectiveRegistration>\n middlewares: readonly MiddlewareRegistration[] // Array to preserve registration order\n extensions: readonly GraphQLExtension<any>[] // Array to preserve registration order\n queries: Map<string, FieldRegistration>\n mutations: Map<string, FieldRegistration>\n subscriptions: Map<string, SubscriptionFieldRegistration>\n objectFields: Map<string, Map<string, ObjectFieldRegistration>>\n}\n\n/**\n * Create a new state with one map updated\n */\nfunction updateState<K extends keyof BuilderState>(\n state: BuilderState,\n key: K,\n value: BuilderState[K]\n): BuilderState {\n return { ...state, [key]: value }\n}\n\n/**\n * GraphQL Schema Builder with type-safe service requirements (Layer-per-Request Pattern)\n *\n * The type parameter R accumulates all service requirements from resolvers.\n * Unlike the runtime-in-context approach, this pattern builds the schema without\n * executing any Effects. At request time, you provide a Layer with all required services.\n */\nexport class GraphQLSchemaBuilder<R = never> implements Pipeable.Pipeable {\n private constructor(private readonly state: BuilderState) {}\n\n /**\n * Pipeable interface implementation - enables fluent .pipe() syntax\n */\n pipe<A>(this: A): A\n pipe<A, B>(this: A, ab: (a: A) => B): B\n pipe<A, B, C>(this: A, ab: (a: A) => B, bc: (b: B) => C): C\n pipe<A, B, C, D>(this: A, ab: (a: A) => B, bc: (b: B) => C, cd: (c: C) => D): D\n pipe<A, B, C, D, E>(\n this: A,\n ab: (a: A) => B,\n bc: (b: B) => C,\n cd: (c: C) => D,\n de: (d: D) => E\n ): E\n pipe<A, B, C, D, E, F>(\n this: A,\n ab: (a: A) => B,\n bc: (b: B) => C,\n cd: (c: C) => D,\n de: (d: D) => E,\n ef: (e: E) => F\n ): F\n pipe<A, B, C, D, E, F, G>(\n this: A,\n ab: (a: A) => B,\n bc: (b: B) => C,\n cd: (c: C) => D,\n de: (d: D) => E,\n ef: (e: E) => F,\n fg: (f: F) => G\n ): G\n pipe<A, B, C, D, E, F, G, H>(\n this: A,\n ab: (a: A) => B,\n bc: (b: B) => C,\n cd: (c: C) => D,\n de: (d: D) => E,\n ef: (e: E) => F,\n fg: (f: F) => G,\n gh: (g: G) => H\n ): H\n pipe<A, B, C, D, E, F, G, H, I>(\n this: A,\n ab: (a: A) => B,\n bc: (b: B) => C,\n cd: (c: C) => D,\n de: (d: D) => E,\n ef: (e: E) => F,\n fg: (f: F) => G,\n gh: (g: G) => H,\n hi: (h: H) => I\n ): I\n pipe() {\n return Pipeable.pipeArguments(this, arguments)\n }\n\n /**\n * Create an empty schema builder\n */\n static readonly empty = new GraphQLSchemaBuilder<never>({\n types: new Map(),\n interfaces: new Map(),\n enums: new Map(),\n unions: new Map(),\n inputs: new Map(),\n directives: new Map(),\n middlewares: [],\n extensions: [],\n queries: new Map(),\n mutations: new Map(),\n subscriptions: new Map(),\n objectFields: new Map(),\n })\n\n /**\n * Create a new builder with updated state\n */\n private with(newState: BuilderState): GraphQLSchemaBuilder<any> {\n return new GraphQLSchemaBuilder(newState)\n }\n\n // ============================================================================\n // Registration Methods\n // ============================================================================\n\n /**\n * Add a query field\n */\n query<A, E, R2, Args = void>(\n name: string,\n config: {\n type: S.Schema<A, any, any>\n args?: S.Schema<Args, any, any>\n description?: string\n directives?: readonly DirectiveApplication[]\n /**\n * Complexity cost of this field for query complexity limiting.\n * Can be a static number or a function that receives the resolved arguments.\n */\n complexity?: FieldComplexity\n /**\n * Cache control hint for this field.\n * Used to compute HTTP Cache-Control headers for the response.\n */\n cacheControl?: CacheHint\n resolve: (args: Args) => Effect.Effect<A, E, R2>\n }\n ): GraphQLSchemaBuilder<R | R2> {\n const newQueries = new Map(this.state.queries)\n newQueries.set(name, config)\n return this.with(updateState(this.state, \"queries\", newQueries))\n }\n\n /**\n * Add a mutation field\n */\n mutation<A, E, R2, Args = void>(\n name: string,\n config: {\n type: S.Schema<A, any, any>\n args?: S.Schema<Args, any, any>\n description?: string\n directives?: readonly DirectiveApplication[]\n /**\n * Complexity cost of this field for query complexity limiting.\n * Can be a static number or a function that receives the resolved arguments.\n */\n complexity?: FieldComplexity\n resolve: (args: Args) => Effect.Effect<A, E, R2>\n }\n ): GraphQLSchemaBuilder<R | R2> {\n const newMutations = new Map(this.state.mutations)\n newMutations.set(name, config)\n return this.with(updateState(this.state, \"mutations\", newMutations))\n }\n\n /**\n * Add a subscription field\n *\n * Subscriptions return a Stream that yields values over time.\n * The subscribe function returns an Effect that produces a Stream.\n *\n * @example\n * ```typescript\n * builder.subscription(\"userCreated\", {\n * type: User,\n * subscribe: Effect.gen(function*() {\n * const pubsub = yield* PubSubService\n * return pubsub.subscribe(\"USER_CREATED\")\n * }),\n * })\n * ```\n */\n subscription<A, E, R2, Args = void>(\n name: string,\n config: {\n type: S.Schema<A, any, any>\n args?: S.Schema<Args, any, any>\n description?: string\n directives?: readonly DirectiveApplication[]\n /**\n * Complexity cost of this subscription for query complexity limiting.\n * Can be a static number or a function that receives the resolved arguments.\n */\n complexity?: FieldComplexity\n /**\n * Cache control hint for this subscription.\n * Note: Subscriptions are typically not cached, but this can be used for initial response hints.\n */\n cacheControl?: CacheHint\n subscribe: (args: Args) => Effect.Effect<import(\"effect\").Stream.Stream<A, E, R2>, E, R2>\n resolve?: (value: A, args: Args) => Effect.Effect<A, E, R2>\n }\n ): GraphQLSchemaBuilder<R | R2> {\n const newSubscriptions = new Map(this.state.subscriptions)\n newSubscriptions.set(name, config)\n return this.with(updateState(this.state, \"subscriptions\", newSubscriptions))\n }\n\n /**\n * Register an object type from a schema\n */\n objectType<A, R2 = never>(config: {\n name?: string\n schema: S.Schema<A, any, any>\n description?: string\n implements?: readonly string[]\n directives?: readonly DirectiveApplication[]\n /**\n * Default cache control hint for all fields returning this type.\n * Can be overridden by field-level cacheControl.\n */\n cacheControl?: CacheHint\n fields?: Record<\n string,\n {\n type: S.Schema<any, any, any>\n args?: S.Schema<any, any, any>\n description?: string\n directives?: readonly DirectiveApplication[]\n /**\n * Complexity cost of this field for query complexity limiting.\n */\n complexity?: FieldComplexity\n /**\n * Cache control hint for this field.\n */\n cacheControl?: CacheHint\n resolve: (parent: A, args: any) => Effect.Effect<any, any, any>\n }\n >\n }): GraphQLSchemaBuilder<R | R2> {\n const {\n schema,\n description,\n implements: implementsInterfaces,\n directives,\n cacheControl,\n fields,\n } = config\n const name = config.name ?? getSchemaName(schema)\n if (!name) {\n throw new Error(\n \"objectType requires a name. Either provide one explicitly or use a TaggedStruct/TaggedClass/Schema.Class\"\n )\n }\n\n const newTypes = new Map(this.state.types)\n newTypes.set(name, {\n name,\n schema,\n description,\n implements: implementsInterfaces,\n directives,\n cacheControl,\n })\n\n let newObjectFields = this.state.objectFields\n if (fields) {\n newObjectFields = new Map(this.state.objectFields)\n const typeFields = new Map<string, ObjectFieldRegistration>()\n for (const [fieldName, fieldConfig] of Object.entries(fields)) {\n typeFields.set(fieldName, fieldConfig as ObjectFieldRegistration)\n }\n newObjectFields.set(name, typeFields)\n }\n\n return this.with({\n ...this.state,\n types: newTypes,\n objectFields: newObjectFields,\n })\n }\n\n /**\n * Register an interface type from a schema\n */\n interfaceType(config: {\n name?: string\n schema: S.Schema<any, any, any>\n resolveType?: (value: any) => string\n directives?: readonly DirectiveApplication[]\n }): GraphQLSchemaBuilder<R> {\n const { schema, resolveType, directives } = config\n const name = config.name ?? getSchemaName(schema)\n if (!name) {\n throw new Error(\n \"interfaceType requires a name. Either provide one explicitly or use a TaggedStruct/TaggedClass/Schema.Class\"\n )\n }\n\n const newInterfaces = new Map(this.state.interfaces)\n newInterfaces.set(name, {\n name,\n schema,\n resolveType: resolveType ?? ((value: any) => value._tag),\n directives,\n })\n\n return this.with(updateState(this.state, \"interfaces\", newInterfaces))\n }\n\n /**\n * Register an enum type\n */\n enumType(config: {\n name: string\n values: readonly string[]\n description?: string\n directives?: readonly DirectiveApplication[]\n }): GraphQLSchemaBuilder<R> {\n const { name, values, description, directives } = config\n const newEnums = new Map(this.state.enums)\n newEnums.set(name, { name, values, description, directives })\n return this.with(updateState(this.state, \"enums\", newEnums))\n }\n\n /**\n * Register a union type\n */\n unionType(config: {\n name: string\n types: readonly string[]\n resolveType?: (value: any) => string\n directives?: readonly DirectiveApplication[]\n }): GraphQLSchemaBuilder<R> {\n const { name, types, resolveType, directives } = config\n const newUnions = new Map(this.state.unions)\n newUnions.set(name, {\n name,\n types,\n resolveType: resolveType ?? ((value: any) => value._tag),\n directives,\n })\n return this.with(updateState(this.state, \"unions\", newUnions))\n }\n\n /**\n * Register an input type\n */\n inputType(config: {\n name?: string\n schema: S.Schema<any, any, any>\n description?: string\n directives?: readonly DirectiveApplication[]\n }): GraphQLSchemaBuilder<R> {\n const { schema, description, directives } = config\n const name = config.name ?? getSchemaName(schema)\n if (!name) {\n throw new Error(\n \"inputType requires a name. Either provide one explicitly or use a TaggedStruct/TaggedClass/Schema.Class\"\n )\n }\n\n const newInputs = new Map(this.state.inputs)\n newInputs.set(name, { name, schema, description, directives })\n return this.with(updateState(this.state, \"inputs\", newInputs))\n }\n\n /**\n * Register a directive\n */\n directive<Args = void, R2 = never>(config: {\n name: string\n description?: string\n locations: readonly DirectiveLocation[]\n args?: S.Schema<Args, any, any>\n apply?: (\n args: Args\n ) => <A, E, R3>(effect: Effect.Effect<A, E, R3>) => Effect.Effect<A, E, R2 | R3>\n }): GraphQLSchemaBuilder<R | R2> {\n const newDirectives = new Map(this.state.directives)\n newDirectives.set(config.name, config as DirectiveRegistration)\n return this.with(updateState(this.state, \"directives\", newDirectives))\n }\n\n /**\n * Register a middleware\n *\n * Middleware wraps all resolvers (or those matching a pattern) and executes\n * in an \"onion\" model - first registered middleware is the outermost layer.\n *\n * @param config.name - Middleware name (for debugging/logging)\n * @param config.description - Optional description\n * @param config.match - Optional predicate to filter which fields this applies to\n * @param config.apply - Function that transforms the resolver Effect\n *\n * @example\n * ```typescript\n * builder.middleware({\n * name: \"logging\",\n * apply: (effect, ctx) => Effect.gen(function*() {\n * yield* Effect.logInfo(`Resolving ${ctx.info.fieldName}`)\n * const start = Date.now()\n * const result = yield* effect\n * yield* Effect.logInfo(`Resolved in ${Date.now() - start}ms`)\n * return result\n * })\n * })\n * ```\n */\n middleware<R2 = never>(config: {\n name: string\n description?: string\n match?: (info: GraphQLResolveInfo) => boolean\n apply: <A, E, R3>(\n effect: Effect.Effect<A, E, R3>,\n context: MiddlewareContext\n ) => Effect.Effect<A, E, R2 | R3>\n }): GraphQLSchemaBuilder<R | R2> {\n const newMiddlewares = [...this.state.middlewares, config as MiddlewareRegistration]\n return this.with({ ...this.state, middlewares: newMiddlewares })\n }\n\n /**\n * Register an extension\n *\n * Extensions provide lifecycle hooks that run at each phase of request processing\n * (parse, validate, execute) and can contribute data to the response's extensions field.\n *\n * @param config.name - Extension name (for debugging/logging)\n * @param config.description - Optional description\n * @param config.onParse - Called after query parsing\n * @param config.onValidate - Called after validation\n * @param config.onExecuteStart - Called before execution begins\n * @param config.onExecuteEnd - Called after execution completes\n *\n * @example\n * ```typescript\n * builder.extension({\n * name: \"tracing\",\n * onExecuteStart: () => Effect.gen(function*() {\n * const ext = yield* ExtensionsService\n * yield* ext.set(\"tracing\", { startTime: Date.now() })\n * }),\n * onExecuteEnd: () => Effect.gen(function*() {\n * const ext = yield* ExtensionsService\n * yield* ext.merge(\"tracing\", { endTime: Date.now() })\n * }),\n * })\n * ```\n */\n extension<R2 = never>(config: {\n name: string\n description?: string\n onParse?: (source: string, document: DocumentNode) => Effect.Effect<void, never, R2>\n onValidate?: (\n document: DocumentNode,\n errors: readonly GQLError[]\n ) => Effect.Effect<void, never, R2>\n onExecuteStart?: (args: ExecutionArgs) => Effect.Effect<void, never, R2>\n onExecuteEnd?: (result: ExecutionResult) => Effect.Effect<void, never, R2>\n }): GraphQLSchemaBuilder<R | R2> {\n const newExtensions = [...this.state.extensions, config as GraphQLExtension<R2>]\n return this.with({ ...this.state, extensions: newExtensions })\n }\n\n /**\n * Get the registered extensions for use by the execution layer\n */\n getExtensions(): readonly GraphQLExtension<any>[] {\n return this.state.extensions\n }\n\n /**\n * Add a computed/relational field to an object type\n */\n field<Parent, A, E, R2, Args = void>(\n typeName: string,\n fieldName: string,\n config: {\n type: S.Schema<A, any, any>\n args?: S.Schema<Args, any, any>\n description?: string\n directives?: readonly DirectiveApplication[]\n /**\n * Complexity cost of this field for query complexity limiting.\n * Can be a static number or a function that receives the resolved arguments.\n */\n complexity?: FieldComplexity\n /**\n * Cache control hint for this field.\n * Used to compute HTTP Cache-Control headers for the response.\n */\n cacheControl?: CacheHint\n resolve: (parent: Parent, args: Args) => Effect.Effect<A, E, R2>\n }\n ): GraphQLSchemaBuilder<R | R2> {\n const newObjectFields = new Map(this.state.objectFields)\n const typeFields = newObjectFields.get(typeName) || new Map()\n typeFields.set(fieldName, config)\n newObjectFields.set(typeName, typeFields)\n return this.with(updateState(this.state, \"objectFields\", newObjectFields))\n }\n\n // ============================================================================\n // Schema Building\n // ============================================================================\n\n /**\n * Get the field complexity map for use in complexity validation.\n * Maps \"TypeName.fieldName\" to the complexity value or function.\n */\n getFieldComplexities(): FieldComplexityMap {\n const complexities: FieldComplexityMap = new Map()\n\n // Query fields\n for (const [name, config] of this.state.queries) {\n if (config.complexity !== undefined) {\n complexities.set(`Query.${name}`, config.complexity)\n }\n }\n\n // Mutation fields\n for (const [name, config] of this.state.mutations) {\n if (config.complexity !== undefined) {\n complexities.set(`Mutation.${name}`, config.complexity)\n }\n }\n\n // Subscription fields\n for (const [name, config] of this.state.subscriptions) {\n if (config.complexity !== undefined) {\n complexities.set(`Subscription.${name}`, config.complexity)\n }\n }\n\n // Object type fields\n for (const [typeName, fields] of this.state.objectFields) {\n for (const [fieldName, config] of fields) {\n if (config.complexity !== undefined) {\n complexities.set(`${typeName}.${fieldName}`, config.complexity)\n }\n }\n }\n\n return complexities\n }\n\n /**\n * Get the cache hint map for use in cache control calculation.\n * Maps \"TypeName.fieldName\" to the cache hint for field-level hints,\n * or \"TypeName\" to the cache hint for type-level hints.\n */\n getCacheHints(): CacheHintMap {\n const hints: CacheHintMap = new Map()\n\n // Type-level hints\n for (const [typeName, typeReg] of this.state.types) {\n if (typeReg.cacheControl !== undefined) {\n hints.set(typeName, typeReg.cacheControl)\n }\n }\n\n // Query fields\n for (const [name, config] of this.state.queries) {\n if (config.cacheControl !== undefined) {\n hints.set(`Query.${name}`, config.cacheControl)\n }\n }\n\n // Subscription fields\n for (const [name, config] of this.state.subscriptions) {\n if (config.cacheControl !== undefined) {\n hints.set(`Subscription.${name}`, config.cacheControl)\n }\n }\n\n // Object type fields\n for (const [typeName, fields] of this.state.objectFields) {\n for (const [fieldName, config] of fields) {\n if (config.cacheControl !== undefined) {\n hints.set(`${typeName}.${fieldName}`, config.cacheControl)\n }\n }\n }\n\n return hints\n }\n\n /**\n * Build the GraphQL schema (no services required)\n *\n * Uses a two-phase approach:\n * 1. Phase 1: Build enum and input registries first (these may be referenced by other types)\n * 2. Phase 2: Build interface, object, and union types (which may reference inputs in args)\n *\n * This ensures that when object type fields with args are processed,\n * all registered input types are already available in the inputRegistry.\n */\n buildSchema(): GraphQLSchema {\n // Phase 1: Build foundational registries first\n const enumRegistry = this.buildEnumRegistry()\n const inputRegistry = this.buildInputRegistry(enumRegistry)\n\n // Build cache once for all operations that need input type lookups\n const inputTypeLookupCache = buildInputTypeLookupCache(this.state.inputs, this.state.enums)\n\n // Phase 2: Build types that may reference inputs\n const directiveRegistry = this.buildDirectiveRegistry(\n enumRegistry,\n inputRegistry,\n inputTypeLookupCache\n )\n const interfaceRegistry = this.buildInterfaceRegistry(\n enumRegistry,\n inputRegistry,\n inputTypeLookupCache\n )\n const { typeRegistry, unionRegistry } = this.buildTypeAndUnionRegistries(\n enumRegistry,\n interfaceRegistry,\n inputRegistry,\n inputTypeLookupCache\n )\n\n // Build field builder context for root operations\n const fieldCtx = this.createFieldBuilderContext(\n typeRegistry,\n interfaceRegistry,\n enumRegistry,\n unionRegistry,\n inputRegistry\n )\n\n // Build root type fields\n const queryFields = this.buildQueryFields(fieldCtx)\n const mutationFields = this.buildMutationFields(fieldCtx)\n const subscriptionFields = this.buildSubscriptionFields(fieldCtx)\n\n // Assemble schema\n return this.assembleSchema({\n directiveRegistry,\n enumRegistry,\n inputRegistry,\n interfaceRegistry,\n typeRegistry,\n unionRegistry,\n queryFields,\n mutationFields,\n subscriptionFields,\n })\n }\n\n private buildDirectiveRegistry(\n enumRegistry: Map<string, GraphQLEnumType>,\n inputRegistry: Map<string, GraphQLInputObjectType>,\n cache: ReturnType<typeof buildInputTypeLookupCache>\n ): Map<string, GraphQLDirective> {\n const registry = new Map<string, GraphQLDirective>()\n\n for (const [name, reg] of this.state.directives) {\n const graphqlDirective = new GraphQLDirective({\n name,\n description: reg.description,\n locations: [...reg.locations],\n args: reg.args\n ? toGraphQLArgsWithRegistry(\n reg.args,\n enumRegistry,\n inputRegistry,\n this.state.inputs,\n this.state.enums,\n cache\n )\n : undefined,\n })\n registry.set(name, graphqlDirective)\n }\n\n return registry\n }\n\n private buildEnumRegistry(): Map<string, GraphQLEnumType> {\n const registry = new Map<string, GraphQLEnumType>()\n\n for (const [name, reg] of this.state.enums) {\n const enumValues: Record<string, { value: string }> = {}\n for (const value of reg.values) {\n enumValues[value] = { value }\n }\n registry.set(\n name,\n new GraphQLEnumType({\n name,\n values: enumValues,\n description: reg.description,\n extensions: reg.directives ? { directives: reg.directives } : undefined,\n })\n )\n }\n\n return registry\n }\n\n private buildInputRegistry(\n enumRegistry: Map<string, GraphQLEnumType>\n ): Map<string, GraphQLInputObjectType> {\n const registry = new Map<string, GraphQLInputObjectType>()\n\n // Build cache once for O(1) lookups across all input types\n const cache = buildInputTypeLookupCache(this.state.inputs, this.state.enums)\n\n for (const [name, reg] of this.state.inputs) {\n const inputType = new GraphQLInputObjectType({\n name,\n description: reg.description,\n fields: () =>\n schemaToInputFields(\n reg.schema,\n enumRegistry,\n registry,\n this.state.inputs,\n this.state.enums,\n cache\n ),\n extensions: reg.directives ? { directives: reg.directives } : undefined,\n })\n registry.set(name, inputType)\n }\n\n return registry\n }\n\n private buildInterfaceRegistry(\n enumRegistry: Map<string, GraphQLEnumType>,\n inputRegistry: Map<string, GraphQLInputObjectType>,\n _cache: ReturnType<typeof buildInputTypeLookupCache>\n ): Map<string, GraphQLInterfaceType> {\n const registry = new Map<string, GraphQLInterfaceType>()\n // We need type and union registries for interface fields, but they're built later\n // Use empty maps for now - interfaces shouldn't reference object types directly\n const typeRegistry = new Map<string, GraphQLObjectType>()\n const unionRegistry = new Map<string, GraphQLUnionType>()\n\n // Create shared TypeConversionContext once for all interface field builders\n const sharedCtx: TypeConversionContext = {\n types: this.state.types,\n interfaces: this.state.interfaces,\n enums: this.state.enums,\n unions: this.state.unions,\n inputs: this.state.inputs,\n typeRegistry,\n interfaceRegistry: registry,\n enumRegistry,\n unionRegistry,\n inputRegistry,\n }\n // Pre-build reverse lookup maps once\n buildReverseLookups(sharedCtx)\n\n for (const [name, reg] of this.state.interfaces) {\n const interfaceType = new GraphQLInterfaceType({\n name,\n fields: () => schemaToFields(reg.schema, sharedCtx),\n resolveType: reg.resolveType,\n extensions: reg.directives ? { directives: reg.directives } : undefined,\n })\n registry.set(name, interfaceType)\n }\n\n return registry\n }\n\n private buildTypeAndUnionRegistries(\n enumRegistry: Map<string, GraphQLEnumType>,\n interfaceRegistry: Map<string, GraphQLInterfaceType>,\n inputRegistry: Map<string, GraphQLInputObjectType>,\n inputTypeLookupCache: ReturnType<typeof buildInputTypeLookupCache>\n ): {\n typeRegistry: Map<string, GraphQLObjectType>\n unionRegistry: Map<string, GraphQLUnionType>\n } {\n const typeRegistry = new Map<string, GraphQLObjectType>()\n const unionRegistry = new Map<string, GraphQLUnionType>()\n\n // Create shared TypeConversionContext once and reuse for all lazy field builders\n const sharedCtx: TypeConversionContext = {\n types: this.state.types,\n interfaces: this.state.interfaces,\n enums: this.state.enums,\n unions: this.state.unions,\n inputs: this.state.inputs,\n typeRegistry,\n interfaceRegistry,\n enumRegistry,\n unionRegistry,\n inputRegistry,\n }\n // Pre-build reverse lookup maps once\n buildReverseLookups(sharedCtx)\n\n // Create shared FieldBuilderContext for additional fields\n // IMPORTANT: Use the real inputRegistry so that args with registered input types\n // (like S.Option(CursorFromHex)) can find the registered types\n const sharedFieldCtx: FieldBuilderContext = {\n ...sharedCtx,\n directiveRegistrations: this.state.directives,\n middlewares: this.state.middlewares,\n inputTypeLookupCache,\n }\n\n // Build object types with lazy field builders (allows circular references)\n for (const [typeName, typeReg] of this.state.types) {\n const implementedInterfaces =\n typeReg.implements?.map((name) => interfaceRegistry.get(name)!).filter(Boolean) ?? []\n\n const graphqlType = new GraphQLObjectType({\n name: typeName,\n description: typeReg.description,\n fields: () => {\n const baseFields = schemaToFields(typeReg.schema, sharedCtx)\n const additionalFields = this.state.objectFields.get(typeName)\n\n if (additionalFields) {\n for (const [fieldName, fieldConfig] of additionalFields) {\n baseFields[fieldName] = buildObjectField(fieldConfig, sharedFieldCtx)\n }\n }\n\n return baseFields\n },\n interfaces: implementedInterfaces.length > 0 ? implementedInterfaces : undefined,\n extensions: typeReg.directives ? { directives: typeReg.directives } : undefined,\n })\n typeRegistry.set(typeName, graphqlType)\n }\n\n // Build union types (reference object types)\n for (const [name, reg] of this.state.unions) {\n const unionType = new GraphQLUnionType({\n name,\n types: () => reg.types.map((typeName) => typeRegistry.get(typeName)!).filter(Boolean),\n resolveType: reg.resolveType,\n extensions: reg.directives ? { directives: reg.directives } : undefined,\n })\n unionRegistry.set(name, unionType)\n }\n\n return { typeRegistry, unionRegistry }\n }\n\n private createFieldBuilderContext(\n typeRegistry: Map<string, GraphQLObjectType>,\n interfaceRegistry: Map<string, GraphQLInterfaceType>,\n enumRegistry: Map<string, GraphQLEnumType>,\n unionRegistry: Map<string, GraphQLUnionType>,\n inputRegistry: Map<string, GraphQLInputObjectType>\n ): FieldBuilderContext {\n // Build cache once for O(1) input type lookups across all fields\n const inputTypeLookupCache = buildInputTypeLookupCache(this.state.inputs, this.state.enums)\n\n return {\n types: this.state.types,\n interfaces: this.state.interfaces,\n enums: this.state.enums,\n unions: this.state.unions,\n inputs: this.state.inputs,\n typeRegistry,\n interfaceRegistry,\n enumRegistry,\n unionRegistry,\n inputRegistry,\n directiveRegistrations: this.state.directives,\n middlewares: this.state.middlewares,\n inputTypeLookupCache,\n }\n }\n\n private buildQueryFields(ctx: FieldBuilderContext): GraphQLFieldConfigMap<any, any> {\n const fields: GraphQLFieldConfigMap<any, any> = {}\n for (const [name, config] of this.state.queries) {\n fields[name] = buildField(config, ctx)\n }\n return fields\n }\n\n private buildMutationFields(ctx: FieldBuilderContext): GraphQLFieldConfigMap<any, any> {\n const fields: GraphQLFieldConfigMap<any, any> = {}\n for (const [name, config] of this.state.mutations) {\n fields[name] = buildField(config, ctx)\n }\n return fields\n }\n\n private buildSubscriptionFields(ctx: FieldBuilderContext): GraphQLFieldConfigMap<any, any> {\n const fields: GraphQLFieldConfigMap<any, any> = {}\n for (const [name, config] of this.state.subscriptions) {\n fields[name] = buildSubscriptionField(config, ctx)\n }\n return fields\n }\n\n private assembleSchema(registries: {\n directiveRegistry: Map<string, GraphQLDirective>\n enumRegistry: Map<string, GraphQLEnumType>\n inputRegistry: Map<string, GraphQLInputObjectType>\n interfaceRegistry: Map<string, GraphQLInterfaceType>\n typeRegistry: Map<string, GraphQLObjectType>\n unionRegistry: Map<string, GraphQLUnionType>\n queryFields: GraphQLFieldConfigMap<any, any>\n mutationFields: GraphQLFieldConfigMap<any, any>\n subscriptionFields: GraphQLFieldConfigMap<any, any>\n }): GraphQLSchema {\n const schemaConfig: any = {\n types: [\n ...Array.from(registries.enumRegistry.values()),\n ...Array.from(registries.inputRegistry.values()),\n ...Array.from(registries.interfaceRegistry.values()),\n ...Array.from(registries.typeRegistry.values()),\n ...Array.from(registries.unionRegistry.values()),\n ],\n directives:\n registries.directiveRegistry.size > 0\n ? [...Array.from(registries.directiveRegistry.values())]\n : undefined,\n }\n\n if (Object.keys(registries.queryFields).length > 0) {\n schemaConfig.query = new GraphQLObjectType({\n name: \"Query\",\n fields: registries.queryFields,\n })\n }\n\n if (Object.keys(registries.mutationFields).length > 0) {\n schemaConfig.mutation = new GraphQLObjectType({\n name: \"Mutation\",\n fields: registries.mutationFields,\n })\n }\n\n if (Object.keys(registries.subscriptionFields).length > 0) {\n schemaConfig.subscription = new GraphQLObjectType({\n name: \"Subscription\",\n fields: registries.subscriptionFields,\n })\n }\n\n return new GraphQLSchema(schemaConfig)\n }\n}\n","import { Effect, Stream } from \"effect\"\nimport * as S from \"effect/Schema\"\nimport {\n DirectiveLocation,\n GraphQLResolveInfo,\n DocumentNode,\n ExecutionResult,\n GraphQLError,\n} from \"graphql\"\nimport type { DirectiveApplication, MiddlewareContext, CacheHint } from \"./types\"\nimport type { ExecutionArgs } from \"../extensions\"\nimport { GraphQLSchemaBuilder } from \"./schema-builder\"\nimport type { FieldComplexity } from \"../server/complexity\"\n\n/**\n * Add an object type to the schema builder (pipe-able)\n * Name is optional if schema is TaggedStruct, TaggedClass, or Schema.Class\n */\nexport const objectType =\n <A, R2 = never>(config: {\n name?: string\n schema: S.Schema<A, any, any>\n description?: string\n implements?: readonly string[]\n directives?: readonly DirectiveApplication[]\n /**\n * Default cache control hint for all fields returning this type.\n * Can be overridden by field-level cacheControl.\n */\n cacheControl?: CacheHint\n fields?: Record<\n string,\n {\n type: S.Schema<any, any, any>\n args?: S.Schema<any, any, any>\n description?: string\n directives?: readonly DirectiveApplication[]\n complexity?: FieldComplexity\n cacheControl?: CacheHint\n resolve: (parent: A, args: any) => Effect.Effect<any, any, any>\n }\n >\n }) =>\n <R>(builder: GraphQLSchemaBuilder<R>): GraphQLSchemaBuilder<R | R2> =>\n builder.objectType(config)\n\n/**\n * Add an interface type to the schema builder (pipe-able)\n * Name is optional if schema is TaggedStruct, TaggedClass, or Schema.Class\n */\nexport const interfaceType =\n (config: {\n name?: string\n schema: S.Schema<any, any, any>\n resolveType?: (value: any) => string\n directives?: readonly DirectiveApplication[]\n }) =>\n <R>(builder: GraphQLSchemaBuilder<R>): GraphQLSchemaBuilder<R> =>\n builder.interfaceType(config)\n\n/**\n * Add an enum type to the schema builder (pipe-able)\n */\nexport const enumType =\n (config: {\n name: string\n values: readonly string[]\n description?: string\n directives?: readonly DirectiveApplication[]\n }) =>\n <R>(builder: GraphQLSchemaBuilder<R>): GraphQLSchemaBuilder<R> =>\n builder.enumType(config)\n\n/**\n * Add a union type to the schema builder (pipe-able)\n */\nexport const unionType =\n (config: {\n name: string\n types: readonly string[]\n resolveType?: (value: any) => string\n directives?: readonly DirectiveApplication[]\n }) =>\n <R>(builder: GraphQLSchemaBuilder<R>): GraphQLSchemaBuilder<R> =>\n builder.unionType(config)\n\n/**\n * Add an input type to the schema builder (pipe-able)\n * Name is optional if schema is TaggedStruct, TaggedClass, or Schema.Class\n */\nexport const inputType =\n (config: {\n name?: string\n schema: S.Schema<any, any, any>\n description?: string\n directives?: readonly DirectiveApplication[]\n }) =>\n <R>(builder: GraphQLSchemaBuilder<R>): GraphQLSchemaBuilder<R> =>\n builder.inputType(config)\n\n/**\n * Register a directive (pipe-able)\n *\n * @param config - Directive configuration\n * @param config.name - The directive name (without @)\n * @param config.description - Optional description\n * @param config.locations - Array of DirectiveLocation values where this directive can be applied\n * @param config.args - Optional Effect Schema for directive arguments\n * @param config.apply - Optional function to transform resolver Effects (for executable directives)\n */\nexport const directive =\n <Args = void, R2 = never>(config: {\n name: string\n description?: string\n locations: readonly DirectiveLocation[]\n args?: S.Schema<Args, any, any>\n apply?: (\n args: Args\n ) => <A, E, R3>(effect: Effect.Effect<A, E, R3>) => Effect.Effect<A, E, R2 | R3>\n }) =>\n <R>(builder: GraphQLSchemaBuilder<R>): GraphQLSchemaBuilder<R | R2> =>\n builder.directive(config)\n\n/**\n * Register a middleware (pipe-able)\n *\n * Middleware wraps all resolvers (or those matching a pattern) and executes\n * in an \"onion\" model - first registered middleware is the outermost layer.\n *\n * @param config.name - Middleware name (for debugging/logging)\n * @param config.description - Optional description\n * @param config.match - Optional predicate to filter which fields this applies to\n * @param config.apply - Function that transforms the resolver Effect\n *\n * @example\n * ```typescript\n * GraphQLSchemaBuilder.empty.pipe(\n * middleware({\n * name: \"logging\",\n * apply: (effect, ctx) => Effect.gen(function*() {\n * yield* Effect.logInfo(`Resolving ${ctx.info.fieldName}`)\n * return yield* effect\n * })\n * }),\n * middleware({\n * name: \"adminOnly\",\n * match: (info) => info.fieldName.startsWith(\"admin\"),\n * apply: (effect) => Effect.gen(function*() {\n * const auth = yield* AuthService\n * yield* auth.requireAdmin()\n * return yield* effect\n * })\n * })\n * )\n * ```\n */\nexport const middleware =\n <R2 = never>(config: {\n name: string\n description?: string\n match?: (info: GraphQLResolveInfo) => boolean\n apply: <A, E, R3>(\n effect: Effect.Effect<A, E, R3>,\n context: MiddlewareContext\n ) => Effect.Effect<A, E, R2 | R3>\n }) =>\n <R>(builder: GraphQLSchemaBuilder<R>): GraphQLSchemaBuilder<R | R2> =>\n builder.middleware(config)\n\n/**\n * Register an extension (pipe-able)\n *\n * Extensions provide lifecycle hooks that run at each phase of request processing\n * (parse, validate, execute) and can contribute data to the response's extensions field.\n *\n * @param config.name - Extension name (for debugging/logging)\n * @param config.description - Optional description\n * @param config.onParse - Called after query parsing\n * @param config.onValidate - Called after validation\n * @param config.onExecuteStart - Called before execution begins\n * @param config.onExecuteEnd - Called after execution completes\n *\n * @example\n * ```typescript\n * GraphQLSchemaBuilder.empty.pipe(\n * extension({\n * name: \"tracing\",\n * onExecuteStart: () => Effect.gen(function*() {\n * const ext = yield* ExtensionsService\n * yield* ext.set(\"tracing\", { startTime: Date.now() })\n * }),\n * onExecuteEnd: () => Effect.gen(function*() {\n * const ext = yield* ExtensionsService\n * yield* ext.merge(\"tracing\", { endTime: Date.now() })\n * }),\n * })\n * )\n * ```\n */\nexport const extension =\n <R2 = never>(config: {\n name: string\n description?: string\n onParse?: (source: string, document: DocumentNode) => Effect.Effect<void, never, R2>\n onValidate?: (\n document: DocumentNode,\n errors: readonly GraphQLError[]\n ) => Effect.Effect<void, never, R2>\n onExecuteStart?: (args: ExecutionArgs) => Effect.Effect<void, never, R2>\n onExecuteEnd?: (result: ExecutionResult) => Effect.Effect<void, never, R2>\n }) =>\n <R>(builder: GraphQLSchemaBuilder<R>): GraphQLSchemaBuilder<R | R2> =>\n builder.extension(config)\n\n/**\n * Add a query field to the schema builder (pipe-able)\n */\nexport const query =\n <A, E, R2, Args = void>(\n name: string,\n config: {\n type: S.Schema<A, any, any>\n args?: S.Schema<Args, any, any>\n description?: string\n directives?: readonly DirectiveApplication[]\n complexity?: FieldComplexity\n cacheControl?: CacheHint\n resolve: (args: Args) => Effect.Effect<A, E, R2>\n }\n ) =>\n <R>(builder: GraphQLSchemaBuilder<R>): GraphQLSchemaBuilder<R | R2> =>\n builder.query(name, config)\n\n/**\n * Add a mutation field to the schema builder (pipe-able)\n */\nexport const mutation =\n <A, E, R2, Args = void>(\n name: string,\n config: {\n type: S.Schema<A, any, any>\n args?: S.Schema<Args, any, any>\n description?: string\n directives?: readonly DirectiveApplication[]\n complexity?: FieldComplexity\n resolve: (args: Args) => Effect.Effect<A, E, R2>\n }\n ) =>\n <R>(builder: GraphQLSchemaBuilder<R>): GraphQLSchemaBuilder<R | R2> =>\n builder.mutation(name, config)\n\n/**\n * Add a subscription field to the schema builder (pipe-able)\n *\n * Subscriptions return a Stream that yields values over time.\n *\n * @example\n * ```typescript\n * GraphQLSchemaBuilder.empty.pipe(\n * subscription(\"userCreated\", {\n * type: User,\n * subscribe: Effect.gen(function*() {\n * const pubsub = yield* PubSubService\n * return pubsub.subscribe(\"USER_CREATED\")\n * }),\n * })\n * )\n * ```\n */\nexport const subscription =\n <A, E, R2, Args = void>(\n name: string,\n config: {\n type: S.Schema<A, any, any>\n args?: S.Schema<Args, any, any>\n description?: string\n directives?: readonly DirectiveApplication[]\n complexity?: FieldComplexity\n cacheControl?: CacheHint\n subscribe: (args: Args) => Effect.Effect<Stream.Stream<A, E, R2>, E, R2>\n resolve?: (value: A, args: Args) => Effect.Effect<A, E, R2>\n }\n ) =>\n <R>(builder: GraphQLSchemaBuilder<R>): GraphQLSchemaBuilder<R | R2> =>\n builder.subscription(name, config)\n\n/**\n * Add a field to an existing object type (pipe-able)\n */\nexport const field =\n <Parent, A, E, R2, Args = void>(\n typeName: string,\n fieldName: string,\n config: {\n type: S.Schema<A, any, any>\n args?: S.Schema<Args, any, any>\n description?: string\n directives?: readonly DirectiveApplication[]\n complexity?: FieldComplexity\n cacheControl?: CacheHint\n resolve: (parent: Parent, args: Args) => Effect.Effect<A, E, R2>\n }\n ) =>\n <R>(builder: GraphQLSchemaBuilder<R>): GraphQLSchemaBuilder<R | R2> =>\n builder.field(typeName, fieldName, config)\n\n/**\n * Compose multiple schema operations (helper for arrays)\n */\nexport const compose =\n <R>(...operations: Array<(builder: GraphQLSchemaBuilder<any>) => GraphQLSchemaBuilder<any>>) =>\n (builder: GraphQLSchemaBuilder<R>): GraphQLSchemaBuilder<any> =>\n operations.reduce((b, op) => op(b), builder)\n","import { Context, Effect, Ref } from \"effect\"\nimport type { DocumentNode, ExecutionResult, GraphQLError, GraphQLSchema } from \"graphql\"\nimport type { FieldComplexityMap } from \"./server/complexity\"\n\n/**\n * Execution arguments passed to onExecuteStart hook\n */\nexport interface ExecutionArgs {\n readonly source: string\n readonly document: DocumentNode\n readonly variableValues?: Record<string, unknown>\n readonly operationName?: string\n /** The GraphQL schema being executed against */\n readonly schema: GraphQLSchema\n /** Field complexity definitions from the schema builder */\n readonly fieldComplexities: FieldComplexityMap\n}\n\n/**\n * Configuration for a GraphQL extension\n *\n * Extensions provide lifecycle hooks that run at each phase of request processing,\n * and can contribute data to the response's `extensions` field.\n *\n * @example\n * ```typescript\n * // Tracing extension\n * extension({\n * name: \"tracing\",\n * onExecuteStart: () => Effect.gen(function*() {\n * const ext = yield* ExtensionsService\n * yield* ext.set(\"tracing\", { startTime: Date.now() })\n * }),\n * onExecuteEnd: () => Effect.gen(function*() {\n * const ext = yield* ExtensionsService\n * yield* ext.merge(\"tracing\", { endTime: Date.now() })\n * }),\n * })\n * ```\n */\nexport interface GraphQLExtension<R = never> {\n readonly name: string\n readonly description?: string\n\n /**\n * Called after the query source is parsed into a DocumentNode.\n * Useful for query analysis, caching parsed documents, etc.\n */\n readonly onParse?: (source: string, document: DocumentNode) => Effect.Effect<void, never, R>\n\n /**\n * Called after validation completes.\n * Receives the document and any validation errors.\n * Useful for complexity analysis, query whitelisting, etc.\n */\n readonly onValidate?: (\n document: DocumentNode,\n errors: readonly GraphQLError[]\n ) => Effect.Effect<void, never, R>\n\n /**\n * Called before execution begins.\n * Receives the full execution arguments.\n * Useful for setting up tracing, logging, etc.\n */\n readonly onExecuteStart?: (args: ExecutionArgs) => Effect.Effect<void, never, R>\n\n /**\n * Called after execution completes.\n * Receives the execution result (including data and errors).\n * Useful for recording metrics, finalizing traces, etc.\n */\n readonly onExecuteEnd?: (result: ExecutionResult) => Effect.Effect<void, never, R>\n}\n\n/**\n * Service for accumulating extension data during request processing.\n *\n * This service is automatically provided for each request and allows\n * extensions, middleware, and resolvers to contribute to the response\n * extensions field.\n *\n * @example\n * ```typescript\n * Effect.gen(function*() {\n * const ext = yield* ExtensionsService\n *\n * // Set a value (overwrites existing)\n * yield* ext.set(\"complexity\", { score: 42 })\n *\n * // Merge into existing value\n * yield* ext.merge(\"tracing\", { endTime: Date.now() })\n *\n * // Get all accumulated extensions\n * const all = yield* ext.get()\n * })\n * ```\n */\nexport interface ExtensionsService {\n /**\n * Set a key-value pair in the extensions.\n * Overwrites any existing value for this key.\n */\n readonly set: (key: string, value: unknown) => Effect.Effect<void>\n\n /**\n * Deep merge an object into an existing key's value.\n * If the key doesn't exist, sets the value.\n * If the existing value is not an object, overwrites it.\n */\n readonly merge: (key: string, value: Record<string, unknown>) => Effect.Effect<void>\n\n /**\n * Get all accumulated extensions as a record.\n */\n readonly get: () => Effect.Effect<Record<string, unknown>>\n}\n\n/**\n * Tag for the ExtensionsService\n */\nexport const ExtensionsService = Context.GenericTag<ExtensionsService>(\n \"@effect-gql/ExtensionsService\"\n)\n\n/**\n * Deep merge two objects\n */\nfunction deepMerge(\n target: Record<string, unknown>,\n source: Record<string, unknown>\n): Record<string, unknown> {\n const result = { ...target }\n for (const key of Object.keys(source)) {\n const sourceValue = source[key]\n const targetValue = result[key]\n\n if (\n typeof sourceValue === \"object\" &&\n sourceValue !== null &&\n !Array.isArray(sourceValue) &&\n typeof targetValue === \"object\" &&\n targetValue !== null &&\n !Array.isArray(targetValue)\n ) {\n result[key] = deepMerge(\n targetValue as Record<string, unknown>,\n sourceValue as Record<string, unknown>\n )\n } else {\n result[key] = sourceValue\n }\n }\n return result\n}\n\n/**\n * Create a new ExtensionsService backed by a Ref\n */\nexport const makeExtensionsService = (): Effect.Effect<ExtensionsService, never, never> =>\n Effect.gen(function* () {\n const ref = yield* Ref.make<Record<string, unknown>>({})\n\n return ExtensionsService.of({\n set: (key, value) => Ref.update(ref, (current) => ({ ...current, [key]: value })),\n\n merge: (key, value) =>\n Ref.update(ref, (current) => {\n const existing = current[key]\n if (typeof existing === \"object\" && existing !== null && !Array.isArray(existing)) {\n return {\n ...current,\n [key]: deepMerge(existing as Record<string, unknown>, value),\n }\n }\n return { ...current, [key]: value }\n }),\n\n get: () => Ref.get(ref),\n })\n })\n\n/**\n * Generic helper to run extension hooks with error handling.\n * Filters extensions that have the specified hook, runs them,\n * and logs warnings if any hook fails.\n */\nconst runExtensionHooks = <R, K extends keyof GraphQLExtension<R>>(\n extensions: readonly GraphQLExtension<R>[],\n hookName: K,\n getHookEffect: (ext: GraphQLExtension<R>) => Effect.Effect<void, never, R>\n): Effect.Effect<void, never, R> =>\n Effect.forEach(\n extensions.filter((ext) => ext[hookName] !== undefined),\n (ext) =>\n getHookEffect(ext).pipe(\n Effect.catchAllCause((cause) =>\n Effect.logWarning(`Extension \"${ext.name}\" ${String(hookName)} hook failed`, cause)\n )\n ),\n { discard: true }\n ) as Effect.Effect<void, never, R>\n\n/**\n * Run all onParse hooks for registered extensions\n */\nexport const runParseHooks = <R>(\n extensions: readonly GraphQLExtension<R>[],\n source: string,\n document: DocumentNode\n): Effect.Effect<void, never, R> =>\n runExtensionHooks(extensions, \"onParse\", (ext) => ext.onParse!(source, document))\n\n/**\n * Run all onValidate hooks for registered extensions\n */\nexport const runValidateHooks = <R>(\n extensions: readonly GraphQLExtension<R>[],\n document: DocumentNode,\n errors: readonly GraphQLError[]\n): Effect.Effect<void, never, R> =>\n runExtensionHooks(extensions, \"onValidate\", (ext) => ext.onValidate!(document, errors))\n\n/**\n * Run all onExecuteStart hooks for registered extensions\n */\nexport const runExecuteStartHooks = <R>(\n extensions: readonly GraphQLExtension<R>[],\n args: ExecutionArgs\n): Effect.Effect<void, never, R> =>\n runExtensionHooks(extensions, \"onExecuteStart\", (ext) => ext.onExecuteStart!(args))\n\n/**\n * Run all onExecuteEnd hooks for registered extensions\n */\nexport const runExecuteEndHooks = <R>(\n extensions: readonly GraphQLExtension<R>[],\n result: ExecutionResult\n): Effect.Effect<void, never, R> =>\n runExtensionHooks(extensions, \"onExecuteEnd\", (ext) => ext.onExecuteEnd!(result))\n","import { Effect, Layer } from \"effect\"\nimport {\n GraphQLSchema,\n GraphQLError,\n parse,\n validate,\n execute as graphqlExecute,\n type ExecutionResult,\n type DocumentNode,\n} from \"graphql\"\nimport type { GraphQLEffectContext } from \"./types\"\nimport {\n type GraphQLExtension,\n ExtensionsService,\n makeExtensionsService,\n runParseHooks,\n runValidateHooks,\n runExecuteStartHooks,\n runExecuteEndHooks,\n} from \"../extensions\"\nimport type { FieldComplexityMap } from \"../server/complexity\"\n\n/**\n * Execute a GraphQL query with a service layer\n *\n * This is the layer-per-request execution model. Build the schema once,\n * then execute each request with its own layer (including request-scoped services).\n *\n * The execution follows these phases:\n * 1. Parse - Convert source string to DocumentNode\n * 2. Validate - Check document against schema\n * 3. Execute - Run resolvers and return result\n *\n * Extensions can hook into each phase via onParse, onValidate, onExecuteStart, onExecuteEnd.\n * Extension data is automatically merged into the response's extensions field.\n */\nexport const execute =\n <R>(\n schema: GraphQLSchema,\n layer: Layer.Layer<R>,\n extensions: readonly GraphQLExtension<any>[] = [],\n fieldComplexities: FieldComplexityMap = new Map()\n ) =>\n (\n source: string,\n variableValues?: Record<string, unknown>,\n operationName?: string\n ): Effect.Effect<ExecutionResult, Error> =>\n Effect.gen(function* () {\n // Create the ExtensionsService for this request\n const extensionsService = yield* makeExtensionsService()\n\n // Create runtime from the provided layer\n const runtime = yield* Effect.runtime<R>()\n\n // Phase 1: Parse\n let document: DocumentNode\n try {\n document = parse(source)\n } catch (parseError) {\n // Parse errors are returned as GraphQL errors, not thrown\n const extensionData = yield* extensionsService.get()\n return {\n errors: [\n parseError instanceof GraphQLError ? parseError : new GraphQLError(String(parseError)),\n ],\n extensions: Object.keys(extensionData).length > 0 ? extensionData : undefined,\n } as ExecutionResult\n }\n\n // Run onParse hooks\n yield* runParseHooks(extensions, source, document).pipe(\n Effect.provideService(ExtensionsService, extensionsService)\n )\n\n // Phase 2: Validate\n const validationErrors = validate(schema, document)\n\n // Run onValidate hooks\n yield* runValidateHooks(extensions, document, validationErrors).pipe(\n Effect.provideService(ExtensionsService, extensionsService)\n )\n\n // If validation failed, return errors without executing\n if (validationErrors.length > 0) {\n const extensionData = yield* extensionsService.get()\n return {\n errors: validationErrors,\n extensions: Object.keys(extensionData).length > 0 ? extensionData : undefined,\n } as ExecutionResult\n }\n\n // Phase 3: Execute\n const executionArgs = {\n source,\n document,\n variableValues,\n operationName,\n schema,\n fieldComplexities,\n }\n\n // Run onExecuteStart hooks\n yield* runExecuteStartHooks(extensions, executionArgs).pipe(\n Effect.provideService(ExtensionsService, extensionsService)\n )\n\n // Execute the GraphQL query\n const executeResult = yield* Effect.try({\n try: () =>\n graphqlExecute({\n schema,\n document,\n variableValues,\n operationName,\n contextValue: { runtime } satisfies GraphQLEffectContext<R>,\n }),\n catch: (error) => new Error(String(error)),\n })\n\n // Await result if it's a promise (for subscriptions, it might be)\n const resolvedResult: Awaited<typeof executeResult> =\n executeResult && typeof executeResult === \"object\" && \"then\" in executeResult\n ? yield* Effect.promise(() => executeResult)\n : executeResult\n\n // Run onExecuteEnd hooks\n yield* runExecuteEndHooks(extensions, resolvedResult).pipe(\n Effect.provideService(ExtensionsService, extensionsService)\n )\n\n // Merge extension data into result\n const extensionData = yield* extensionsService.get()\n if (Object.keys(extensionData).length > 0) {\n return {\n ...resolvedResult,\n extensions: {\n ...resolvedResult.extensions,\n ...extensionData,\n },\n }\n }\n\n return resolvedResult\n }).pipe(Effect.provide(layer)) as Effect.Effect<ExecutionResult, Error>\n\n/**\n * Execute a GraphQL query with a service layer (simple version without extensions)\n *\n * @deprecated Use execute() instead, which now supports extensions as an optional parameter\n */\nexport const executeSimple = <R>(schema: GraphQLSchema, layer: Layer.Layer<R>) =>\n execute(schema, layer, [])\n"]}