@graphql-inspector/loaders
Version:
Loaders in GraphQL Inspector
107 lines (103 loc) • 3.75 kB
JavaScript
;
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);
});
}