graphql-compose-elasticsearch
Version:
Elastic search via GraphQL
81 lines • 3.04 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.elasticApiFieldConfig = void 0;
const graphql_compose_1 = require("graphql-compose");
const elasticsearch_1 = __importDefault(require("elasticsearch"));
const ElasticApiParser_1 = __importDefault(require("./ElasticApiParser"));
const DEFAULT_ELASTIC_API_VERSION = '_default';
const { GraphQLString } = graphql_compose_1.graphql;
function elasticApiFieldConfig(esClientOrOpts) {
if (!esClientOrOpts || typeof esClientOrOpts !== 'object') {
throw new Error('You should provide ElasticClient instance or ElasticClientConfig in first argument.');
}
if (isElasticClient(esClientOrOpts)) {
return instanceElasticClient(esClientOrOpts);
}
else {
return contextElasticClient(esClientOrOpts);
}
}
exports.elasticApiFieldConfig = elasticApiFieldConfig;
function instanceElasticClient(elasticClient) {
const apiVersion = elasticClient.transport._config.apiVersion || DEFAULT_ELASTIC_API_VERSION;
const prefix = `ElasticAPI${apiVersion.replace('.', '')}`;
const apiParser = new ElasticApiParser_1.default({
elasticClient,
prefix,
});
return {
description: `Elastic API v${apiVersion}`,
type: graphql_compose_1.ObjectTypeComposer.createTemp({
name: prefix,
fields: apiParser.generateFieldMap(),
}).getType(),
resolve: () => ({}),
};
}
function contextElasticClient(elasticConfig) {
if (!elasticConfig.apiVersion) {
elasticConfig.apiVersion = DEFAULT_ELASTIC_API_VERSION;
}
const { apiVersion } = elasticConfig;
const prefix = `ElasticAPI${apiVersion.replace('.', '')}`;
const apiParser = new ElasticApiParser_1.default({
apiVersion,
prefix,
});
return {
description: `Elastic API v${apiVersion}`,
type: graphql_compose_1.ObjectTypeComposer.createTemp({
name: prefix,
fields: apiParser.generateFieldMap(),
}).getType(),
args: {
host: {
type: GraphQLString,
defaultValue: elasticConfig.host || 'http://user:pass@localhost:9200',
},
},
resolve: (_, args, context) => {
if (typeof context === 'object') {
const opts = args.host
? Object.assign(Object.assign({}, elasticConfig), { host: args.host }) : elasticConfig;
context.elasticClient = new elasticsearch_1.default.Client(opts);
}
return {};
},
};
}
function isElasticClient(obj) {
if (obj instanceof elasticsearch_1.default.Client) {
return true;
}
if (obj && obj.transport && obj.transport._config && obj.transport._config.__reused) {
return true;
}
return false;
}
//# sourceMappingURL=elasticApiFieldConfig.js.map