apollo-language-server
Version:
A language server for Apollo GraphQL projects
88 lines • 3.33 kB
JavaScript
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.GraphQLDataSource = void 0;
const apollo_link_1 = require("apollo-link");
const apollo_link_context_1 = require("apollo-link-context");
const apollo_link_error_1 = require("apollo-link-error");
const apollo_link_http_1 = require("apollo-link-http");
const apollo_server_errors_1 = require("apollo-server-errors");
const await_to_js_1 = __importDefault(require("await-to-js"));
const apollo_env_1 = require("apollo-env");
class GraphQLDataSource {
initialize(config) {
this.context = config.context;
}
async execute(operation) {
return this.executeSingleOperation(operation);
}
composeLinks() {
const uri = this.resolveUri();
return apollo_link_1.ApolloLink.from([
this.onErrorLink(),
this.onRequestLink(),
(0, apollo_link_http_1.createHttpLink)({ fetch: apollo_env_1.fetch, uri }),
]);
}
didEncounterError(error) {
const status = error.statusCode ? error.statusCode : null;
const message = error.bodyText
? error.bodyText
: error.message
? error.message
: null;
let apolloError;
switch (status) {
case 401:
apolloError = new apollo_server_errors_1.AuthenticationError(message);
break;
case 403:
apolloError = new apollo_server_errors_1.ForbiddenError(message);
break;
default:
apolloError = new apollo_server_errors_1.ApolloError(message);
}
throw apolloError;
}
async executeSingleOperation(operation) {
const link = this.composeLinks();
const [error, response] = await (0, await_to_js_1.default)((0, apollo_link_1.makePromise)((0, apollo_link_1.execute)(link, operation)));
if (error) {
this.didEncounterError(error);
}
return response;
}
resolveUri() {
const baseURL = this.baseURL;
if (!baseURL) {
throw new apollo_server_errors_1.ApolloError("Cannot make request to GraphQL API, missing baseURL");
}
return baseURL;
}
onRequestLink() {
return (0, apollo_link_context_1.setContext)((_, request) => {
if (this.willSendRequest) {
this.willSendRequest(request);
}
return request;
});
}
onErrorLink() {
return (0, apollo_link_error_1.onError)(({ graphQLErrors, networkError, operation }) => {
const { result, response } = operation.getContext();
if (graphQLErrors) {
graphQLErrors.map((graphqlError) => console.error(`[GraphQL error]: ${graphqlError.message}`));
}
if (networkError) {
console.log(`[Network Error]: ${networkError}`);
}
if (response && response.status >= 400) {
console.log(`[Network Error] ${response.bodyText}`);
}
});
}
}
exports.GraphQLDataSource = GraphQLDataSource;
//# sourceMappingURL=GraphQLDataSource.js.map
;