| 222 | } |
| 223 | |
| 224 | export const extract = ( |
| 225 | introspection: IntrospectionResult, |
| 226 | ): Effect.Effect<ExtractionOutput, GraphqlExtractionError> => |
| 227 | Effect.try({ |
| 228 | try: () => { |
| 229 | const schema = introspection.__schema; |
| 230 | const typeMap = new Map<string, IntrospectionType>(); |
| 231 | for (const t of schema.types) { |
| 232 | typeMap.set(t.name, t); |
| 233 | } |
| 234 | |
| 235 | const definitions = buildDefinitions(typeMap); |
| 236 | |
| 237 | const queryFields = extractFields(schema, "query", schema.queryType?.name, typeMap); |
| 238 | const mutationFields = extractFields(schema, "mutation", schema.mutationType?.name, typeMap); |
| 239 | |
| 240 | return { |
| 241 | result: ExtractionResult.make({ |
| 242 | schemaName: Option.none(), |
| 243 | fields: [...queryFields, ...mutationFields], |
| 244 | }), |
| 245 | definitions, |
| 246 | }; |
| 247 | }, |
| 248 | catch: () => |
| 249 | new GraphqlExtractionError({ |
| 250 | message: "Failed to extract GraphQL schema", |
| 251 | }), |
| 252 | }); |