@effect-gql/core 0.1.0 → 1.1.0

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.
Files changed (164) hide show
  1. package/README.md +100 -0
  2. package/builder/index.cjs +1446 -0
  3. package/builder/index.cjs.map +1 -0
  4. package/builder/index.d.cts +260 -0
  5. package/{dist/builder/pipe-api.d.ts → builder/index.d.ts} +50 -21
  6. package/builder/index.js +1405 -0
  7. package/builder/index.js.map +1 -0
  8. package/index.cjs +3469 -0
  9. package/index.cjs.map +1 -0
  10. package/index.d.cts +529 -0
  11. package/index.d.ts +529 -0
  12. package/index.js +3292 -0
  13. package/index.js.map +1 -0
  14. package/package.json +19 -28
  15. package/schema-builder-DKvkzU_M.d.cts +965 -0
  16. package/schema-builder-DKvkzU_M.d.ts +965 -0
  17. package/server/index.cjs +1579 -0
  18. package/server/index.cjs.map +1 -0
  19. package/server/index.d.cts +682 -0
  20. package/server/index.d.ts +682 -0
  21. package/server/index.js +1548 -0
  22. package/server/index.js.map +1 -0
  23. package/dist/analyzer-extension.d.ts +0 -105
  24. package/dist/analyzer-extension.d.ts.map +0 -1
  25. package/dist/analyzer-extension.js +0 -137
  26. package/dist/analyzer-extension.js.map +0 -1
  27. package/dist/builder/execute.d.ts +0 -26
  28. package/dist/builder/execute.d.ts.map +0 -1
  29. package/dist/builder/execute.js +0 -104
  30. package/dist/builder/execute.js.map +0 -1
  31. package/dist/builder/field-builders.d.ts +0 -30
  32. package/dist/builder/field-builders.d.ts.map +0 -1
  33. package/dist/builder/field-builders.js +0 -200
  34. package/dist/builder/field-builders.js.map +0 -1
  35. package/dist/builder/index.d.ts +0 -7
  36. package/dist/builder/index.d.ts.map +0 -1
  37. package/dist/builder/index.js +0 -31
  38. package/dist/builder/index.js.map +0 -1
  39. package/dist/builder/pipe-api.d.ts.map +0 -1
  40. package/dist/builder/pipe-api.js +0 -151
  41. package/dist/builder/pipe-api.js.map +0 -1
  42. package/dist/builder/schema-builder.d.ts +0 -301
  43. package/dist/builder/schema-builder.d.ts.map +0 -1
  44. package/dist/builder/schema-builder.js +0 -566
  45. package/dist/builder/schema-builder.js.map +0 -1
  46. package/dist/builder/type-registry.d.ts +0 -80
  47. package/dist/builder/type-registry.d.ts.map +0 -1
  48. package/dist/builder/type-registry.js +0 -505
  49. package/dist/builder/type-registry.js.map +0 -1
  50. package/dist/builder/types.d.ts +0 -283
  51. package/dist/builder/types.d.ts.map +0 -1
  52. package/dist/builder/types.js +0 -3
  53. package/dist/builder/types.js.map +0 -1
  54. package/dist/cli/generate-schema.d.ts +0 -29
  55. package/dist/cli/generate-schema.d.ts.map +0 -1
  56. package/dist/cli/generate-schema.js +0 -233
  57. package/dist/cli/generate-schema.js.map +0 -1
  58. package/dist/cli/index.d.ts +0 -19
  59. package/dist/cli/index.d.ts.map +0 -1
  60. package/dist/cli/index.js +0 -24
  61. package/dist/cli/index.js.map +0 -1
  62. package/dist/context.d.ts +0 -18
  63. package/dist/context.d.ts.map +0 -1
  64. package/dist/context.js +0 -11
  65. package/dist/context.js.map +0 -1
  66. package/dist/error.d.ts +0 -45
  67. package/dist/error.d.ts.map +0 -1
  68. package/dist/error.js +0 -29
  69. package/dist/error.js.map +0 -1
  70. package/dist/extensions.d.ts +0 -130
  71. package/dist/extensions.d.ts.map +0 -1
  72. package/dist/extensions.js +0 -78
  73. package/dist/extensions.js.map +0 -1
  74. package/dist/index.d.ts +0 -12
  75. package/dist/index.d.ts.map +0 -1
  76. package/dist/index.js +0 -47
  77. package/dist/index.js.map +0 -1
  78. package/dist/loader.d.ts +0 -169
  79. package/dist/loader.d.ts.map +0 -1
  80. package/dist/loader.js +0 -237
  81. package/dist/loader.js.map +0 -1
  82. package/dist/resolver-context.d.ts +0 -154
  83. package/dist/resolver-context.d.ts.map +0 -1
  84. package/dist/resolver-context.js +0 -184
  85. package/dist/resolver-context.js.map +0 -1
  86. package/dist/schema-mapping.d.ts +0 -30
  87. package/dist/schema-mapping.d.ts.map +0 -1
  88. package/dist/schema-mapping.js +0 -280
  89. package/dist/schema-mapping.js.map +0 -1
  90. package/dist/server/cache-control.d.ts +0 -96
  91. package/dist/server/cache-control.d.ts.map +0 -1
  92. package/dist/server/cache-control.js +0 -308
  93. package/dist/server/cache-control.js.map +0 -1
  94. package/dist/server/complexity.d.ts +0 -165
  95. package/dist/server/complexity.d.ts.map +0 -1
  96. package/dist/server/complexity.js +0 -433
  97. package/dist/server/complexity.js.map +0 -1
  98. package/dist/server/config.d.ts +0 -66
  99. package/dist/server/config.d.ts.map +0 -1
  100. package/dist/server/config.js +0 -104
  101. package/dist/server/config.js.map +0 -1
  102. package/dist/server/graphiql.d.ts +0 -5
  103. package/dist/server/graphiql.d.ts.map +0 -1
  104. package/dist/server/graphiql.js +0 -43
  105. package/dist/server/graphiql.js.map +0 -1
  106. package/dist/server/index.d.ts +0 -18
  107. package/dist/server/index.d.ts.map +0 -1
  108. package/dist/server/index.js +0 -48
  109. package/dist/server/index.js.map +0 -1
  110. package/dist/server/router.d.ts +0 -79
  111. package/dist/server/router.d.ts.map +0 -1
  112. package/dist/server/router.js +0 -232
  113. package/dist/server/router.js.map +0 -1
  114. package/dist/server/schema-builder-extensions.d.ts +0 -42
  115. package/dist/server/schema-builder-extensions.d.ts.map +0 -1
  116. package/dist/server/schema-builder-extensions.js +0 -48
  117. package/dist/server/schema-builder-extensions.js.map +0 -1
  118. package/dist/server/sse-adapter.d.ts +0 -64
  119. package/dist/server/sse-adapter.d.ts.map +0 -1
  120. package/dist/server/sse-adapter.js +0 -227
  121. package/dist/server/sse-adapter.js.map +0 -1
  122. package/dist/server/sse-types.d.ts +0 -192
  123. package/dist/server/sse-types.d.ts.map +0 -1
  124. package/dist/server/sse-types.js +0 -63
  125. package/dist/server/sse-types.js.map +0 -1
  126. package/dist/server/ws-adapter.d.ts +0 -39
  127. package/dist/server/ws-adapter.d.ts.map +0 -1
  128. package/dist/server/ws-adapter.js +0 -247
  129. package/dist/server/ws-adapter.js.map +0 -1
  130. package/dist/server/ws-types.d.ts +0 -169
  131. package/dist/server/ws-types.d.ts.map +0 -1
  132. package/dist/server/ws-types.js +0 -11
  133. package/dist/server/ws-types.js.map +0 -1
  134. package/dist/server/ws-utils.d.ts +0 -42
  135. package/dist/server/ws-utils.d.ts.map +0 -1
  136. package/dist/server/ws-utils.js +0 -99
  137. package/dist/server/ws-utils.js.map +0 -1
  138. package/src/analyzer-extension.ts +0 -254
  139. package/src/builder/execute.ts +0 -153
  140. package/src/builder/field-builders.ts +0 -322
  141. package/src/builder/index.ts +0 -48
  142. package/src/builder/pipe-api.ts +0 -312
  143. package/src/builder/schema-builder.ts +0 -970
  144. package/src/builder/type-registry.ts +0 -670
  145. package/src/builder/types.ts +0 -305
  146. package/src/context.ts +0 -23
  147. package/src/error.ts +0 -32
  148. package/src/extensions.ts +0 -240
  149. package/src/index.ts +0 -32
  150. package/src/loader.ts +0 -363
  151. package/src/resolver-context.ts +0 -253
  152. package/src/schema-mapping.ts +0 -307
  153. package/src/server/cache-control.ts +0 -590
  154. package/src/server/complexity.ts +0 -774
  155. package/src/server/config.ts +0 -174
  156. package/src/server/graphiql.ts +0 -38
  157. package/src/server/index.ts +0 -96
  158. package/src/server/router.ts +0 -432
  159. package/src/server/schema-builder-extensions.ts +0 -51
  160. package/src/server/sse-adapter.ts +0 -327
  161. package/src/server/sse-types.ts +0 -234
  162. package/src/server/ws-adapter.ts +0 -355
  163. package/src/server/ws-types.ts +0 -192
  164. package/src/server/ws-utils.ts +0 -136
@@ -0,0 +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":["S","field","AST2","GraphQLNonNull","enumType","GraphQLList","unionType","middleware","GraphQLEnumType","inputType","GraphQLInputObjectType","interfaceType","GraphQLInterfaceType","GraphQLObjectType","GraphQLUnionType","Effect","extensionData","graphqlExecute"],"mappings":"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","file":"index.js","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 // S.Int uses a filter with a specific predicate\n // Check the annotations for the integer identifier\n const annotations = refinement.annotations\n if (annotations) {\n // Check for identifier annotation\n const identifier = AST.getIdentifierAnnotation(refinement)\n if (identifier._tag === \"Some\" && identifier.value === \"Int\") {\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 * 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 if (ast._tag === \"StringKeyword\") return GraphQLString\n if (ast._tag === \"NumberKeyword\") return GraphQLFloat\n if (ast._tag === \"BooleanKeyword\") return GraphQLBoolean\n\n // Handle refinements (e.g., S.Int)\n if (ast._tag === \"Refinement\") {\n if (isIntegerType(ast)) {\n return GraphQLInt\n }\n // For other refinements, use the base type\n return toGraphQLType(S.make((ast as any).from))\n }\n\n // Handle literals\n if (ast._tag === \"Literal\") {\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 }\n\n // Handle arrays - check for TupleType\n if (ast._tag === \"TupleType\") {\n const elements = ast.elements\n if (elements.length > 0) {\n const elementSchema = S.make(elements[0].type)\n return new GraphQLList(toGraphQLType(elementSchema))\n }\n }\n\n // Handle structs/objects\n if (ast._tag === \"TypeLiteral\") {\n const fields: GraphQLFieldConfigMap<any, any> = {}\n\n for (const field of ast.propertySignatures) {\n const fieldName = String(field.name)\n const fieldSchema = S.make(field.type)\n let fieldType = toGraphQLType(fieldSchema)\n\n // Make non-optional fields non-null\n if (!field.isOptional) {\n fieldType = new GraphQLNonNull(fieldType)\n }\n\n fields[fieldName] = { type: fieldType }\n }\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 return toGraphQLType(S.make(ast.to))\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 if (ast._tag === \"StringKeyword\") return GraphQLString\n if (ast._tag === \"NumberKeyword\") return GraphQLFloat\n if (ast._tag === \"BooleanKeyword\") return GraphQLBoolean\n\n // Handle refinements (e.g., S.Int)\n if (ast._tag === \"Refinement\") {\n if (isIntegerType(ast)) {\n return GraphQLInt\n }\n // For other refinements, use the base type\n return toGraphQLInputType(S.make((ast as any).from))\n }\n\n // Handle literals\n if (ast._tag === \"Literal\") {\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 }\n\n // Handle arrays\n if (ast._tag === \"TupleType\") {\n const elements = ast.elements\n if (elements.length > 0) {\n const elementSchema = S.make(elements[0].type)\n return new GraphQLList(toGraphQLInputType(elementSchema))\n }\n }\n\n // Handle structs/objects as input types\n if (ast._tag === \"TypeLiteral\") {\n const fields: Record<string, { type: GraphQLInputType }> = {}\n\n for (const field of ast.propertySignatures) {\n const fieldName = String(field.name)\n const fieldSchema = S.make(field.type)\n let fieldType = toGraphQLInputType(fieldSchema)\n\n // Make non-optional fields non-null\n if (!field.isOptional) {\n fieldType = new GraphQLNonNull(fieldType)\n }\n\n fields[fieldName] = { type: fieldType }\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 return toGraphQLInputType(S.make(ast.from))\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 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 const ast = schema.ast\n\n if (ast._tag === \"TypeLiteral\") {\n const fields: GraphQLFieldConfigMap<any, any> = {}\n\n // Add fields from schema\n for (const field of ast.propertySignatures) {\n const fieldName = String(field.name)\n const fieldSchema = S.make(field.type)\n let fieldType = toGraphQLType(fieldSchema)\n\n // Make non-optional fields non-null\n if (!field.isOptional) {\n fieldType = new GraphQLNonNull(fieldType)\n }\n\n fields[fieldName] = { type: fieldType }\n }\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: GraphQLFieldConfigArgumentMap = {}\n\n for (const field of ast.propertySignatures) {\n const fieldName = String(field.name)\n const fieldSchema = S.make(field.type)\n let fieldType = toGraphQLInputType(fieldSchema)\n\n // Make non-optional fields non-null\n if (!field.isOptional) {\n fieldType = new GraphQLNonNull(fieldType)\n }\n\n args[fieldName] = { type: fieldType }\n }\n\n return args\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 { toGraphQLType, toGraphQLArgs, toGraphQLInputType } 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 }\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 }\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 }\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 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 * Handle Transformation AST nodes (arrays, optional, Schema.Class, etc.)\n */\nfunction handleTransformationAST(ast: any, ctx: TypeConversionContext): any {\n const toAst = ast.to\n\n // Check if it's an array (readonly array on the to side)\n if (toAst._tag === \"TupleType\") {\n if (toAst.rest && toAst.rest.length > 0) {\n const elementSchema = S.make(toAst.rest[0].type)\n const elementType = toGraphQLTypeWithRegistry(elementSchema, ctx)\n return new GraphQLList(elementType)\n } else if (toAst.elements.length > 0) {\n const elementSchema = S.make(toAst.elements[0].type)\n const elementType = toGraphQLTypeWithRegistry(elementSchema, ctx)\n return new GraphQLList(elementType)\n }\n }\n\n // Other transformations - recurse on the \"to\" side\n return toGraphQLTypeWithRegistry(S.make(ast.to), ctx)\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 // 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 && typeParams[0]._tag === \"TypeLiteral\") {\n ast = typeParams[0]\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 const fieldSchema = S.make(field.type)\n let fieldType = toGraphQLTypeWithRegistry(fieldSchema, ctx)\n\n // Make non-optional fields non-null (memoized)\n if (!field.isOptional) {\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 const ast = schema.ast\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 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 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\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 * 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 // Handle transformations (like S.optional wrapping)\n if (ast._tag === \"Transformation\") {\n const toAst = (ast as any).to\n return toGraphQLInputTypeWithRegistry(\n S.make(toAst),\n enumRegistry,\n inputRegistry,\n inputs,\n enums,\n cache\n )\n }\n\n // Check if this schema matches a registered input type (O(1) with cache)\n if (cache?.schemaToInputName || cache?.astToInputName) {\n const inputName = cache.schemaToInputName?.get(schema) ?? cache.astToInputName?.get(ast)\n if (inputName) {\n const result = inputRegistry.get(inputName)\n if (result) return result\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 const result = inputRegistry.get(inputName)\n if (result) return result\n }\n }\n }\n\n // Check if this schema matches a registered enum\n if (ast._tag === \"Union\") {\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 && nonUndefinedTypes[0]._tag === \"Union\") {\n return toGraphQLInputTypeWithRegistry(\n S.make(nonUndefinedTypes[0]),\n enumRegistry,\n inputRegistry,\n inputs,\n enums,\n cache\n )\n }\n\n // Check for nested input type inside optional\n if (nonUndefinedTypes.length === 1 && 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 const allLiterals = unionAst.types.every((t: any) => t._tag === \"Literal\")\n\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\n // Check single literal (O(1) with cache)\n if (ast._tag === \"Literal\") {\n const literalValue = String((ast as any).literal)\n if (cache?.literalToEnumName) {\n const enumName = cache.literalToEnumName.get(literalValue)\n if (enumName) {\n const result = enumRegistry.get(enumName)\n if (result) return result\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 const result = enumRegistry.get(enumName)\n if (result) return result\n }\n }\n }\n }\n\n // Handle Suspend (recursive/self-referential schemas)\n if (ast._tag === \"Suspend\") {\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 // 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 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 { 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 * 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 return await Runtime.runPromise(context.runtime)(effect)\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 return await Runtime.runPromise(context.runtime)(effect)\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, 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 return await Runtime.runPromise(context.runtime)(effect)\n }\n : (value) => value,\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 type 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 buildSchema(): GraphQLSchema {\n // Build all registries\n const directiveRegistry = this.buildDirectiveRegistry()\n const enumRegistry = this.buildEnumRegistry()\n const inputRegistry = this.buildInputRegistry(enumRegistry)\n const interfaceRegistry = this.buildInterfaceRegistry(enumRegistry)\n const { typeRegistry, unionRegistry } = this.buildTypeAndUnionRegistries(\n enumRegistry,\n interfaceRegistry\n )\n\n // Build field builder context\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(): Map<string, GraphQLDirective> {\n const registry = new Map<string, GraphQLDirective>()\n\n // Build cache once for O(1) lookups across all directives\n const cache = buildInputTypeLookupCache(this.state.inputs, this.state.enums)\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 new Map(),\n new Map(),\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 ): 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: new Map(),\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 ): {\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: new Map(),\n }\n // Pre-build reverse lookup maps once\n buildReverseLookups(sharedCtx)\n\n // Create shared FieldBuilderContext for additional fields\n const sharedFieldCtx = this.createFieldBuilderContext(\n typeRegistry,\n interfaceRegistry,\n enumRegistry,\n unionRegistry,\n new Map()\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"]}