UNPKG

graphql-compose-elasticsearch

Version:
81 lines 3.04 kB
"use strict"; 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