UNPKG

@graphql-inspector/loaders

Version:
107 lines (103 loc) 3.75 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.useLoaders = exports.LoadersRegistry = void 0; const graphql_1 = require("graphql"); const load_1 = require("@graphql-tools/load"); class LoadersRegistry { constructor() { this.loaders = []; } register(loader) { this.loaders.push(loader); } registerModule(loaderName) { try { const loader = loadModule(`@graphql-inspector/${loaderName}-loader`); this.register(loader); } catch (error) { console.error(error); throw new Error(`Couldn't load ${loaderName} loader`); } } loadSchema(pointer, options = {}, enableApolloFederation, enableAWS) { return enrichError((0, load_1.loadSchema)(pointer, { loaders: this.loaders, ...options, ...(enableApolloFederation ? { schemas: [ (0, graphql_1.buildSchema)(/* GraphQL */ ` scalar _FieldSet directive @external on FIELD_DEFINITION directive @requires(fields: _FieldSet!) on FIELD_DEFINITION directive @provides(fields: _FieldSet!) on FIELD_DEFINITION directive @key(fields: _FieldSet!) on OBJECT | INTERFACE directive @extends on OBJECT | INTERFACE `), ], } : {}), ...(enableAWS ? { schemas: [ (0, graphql_1.buildSchema)(/* GraphQL */ ` scalar AWSDate scalar AWSTime scalar AWSDateTime scalar AWSTimestamp scalar AWSEmail scalar AWSJSON scalar AWSURL scalar AWSPhone scalar AWSIPAddress scalar BigInt scalar Double directive @aws_subscribe(mutations: [String!]!) on FIELD_DEFINITION directive @deprecated( reason: String ) on FIELD_DEFINITION | INPUT_FIELD_DEFINITION | ENUM | ENUM_VALUE directive @aws_auth(cognito_groups: [String!]!) on FIELD_DEFINITION directive @aws_api_key on FIELD_DEFINITION | OBJECT directive @aws_iam on FIELD_DEFINITION | OBJECT directive @aws_oidc on FIELD_DEFINITION | OBJECT directive @aws_cognito_user_pools( cognito_groups: [String!] ) on FIELD_DEFINITION | OBJECT directive @aws_lambda on FIELD_DEFINITION | OBJECT `), ], } : {}), })); } loadDocuments(pointer, options = {}) { return enrichError((0, load_1.loadDocuments)(pointer, { loaders: this.loaders, ...options, })); } } exports.LoadersRegistry = LoadersRegistry; function useLoaders(config) { const loaders = new LoadersRegistry(); for (const loaderName of config.loaders) loaders.registerModule(loaderName); return loaders; } exports.useLoaders = useLoaders; function loadModule(name) { const mod = require(name); return mod.default || mod; } /** * Adds `(source: <file-path>)` suffix to error message if source is available */ function enrichError(looksPromising) { return looksPromising.catch(error => { if (error.source?.name) { error.message = `${error.message} (source: ${error.source?.name})`; } return Promise.reject(error); }); }