UNPKG

@searchkit/schema

Version:

Elasticsearch GraphQL Resolvers

251 lines (226 loc) 6.29 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const graphql_tag_1 = __importDefault(require("graphql-tag")); const resolvers_1 = require("./resolvers"); const baseSearchkitTypeDefs = graphql_tag_1.default ` type SKSortOption { id: ID! label: String! } type SKSummary { total: Float! appliedFilters: [SKSelectedFilter] disabledFilters: [SKDisabledFilter] query: String sortOptions: [SKSortOption] } type SKDisabledFilter { identifier: String! } interface SKSelectedFilter { id: ID! identifier: String! label: String! display: String! } type ValueSelectedFilter implements SKSelectedFilter { id: ID! identifier: String! display: String! label: String! value: String! } type NumericRangeSelectedFilter implements SKSelectedFilter { id: ID! identifier: String! label: String! display: String! min: Float max: Float } type DateRangeSelectedFilter implements SKSelectedFilter { id: ID! identifier: String! label: String! display: String! dateMin: String! dateMax: String! } type GeoBoundingBoxSelectedFilter implements SKSelectedFilter { id: ID! identifier: String! label: String! display: String! topLeft: SKGeoPoint bottomRight: SKGeoPoint bottomLeft: SKGeoPoint topRight: SKGeoPoint } type HierarchicalValueSelectedFilter implements SKSelectedFilter { id: ID! identifier: String! label: String! display: String! level: Int! value: String! } type SKGeoPoint { lat: Float! lon: Float! } type SKPageInfo { total: Float totalPages: Float pageNumber: Float from: Float size: Float } type SKHitResults { items: [SKHit] page: SKPageInfo sortedBy: String } interface SKHit { id: ID! } input SKPageInput { from: Float size: Float } input SKQueryOptions { fields: [String] } input SKFiltersSet { identifier: String! value: String min: Float max: Float dateMin: String dateMax: String geoBoundingBox: SKGeoBoundingBoxInput level: Int } input SKGeoBoundingBoxInput { topLeft: SKGeoPointInput bottomRight: SKGeoPointInput topRight: SKGeoPointInput bottomLeft: SKGeoPointInput } input SKGeoPointInput { lat: Float! lon: Float! } interface SKFacetSet { identifier: String label: String type: String display: String entries: [SKFacetSetEntry] } type SKFacetSetEntry { label: String count: Float isSelected: Boolean level: Int entries: [SKFacetSetEntry] } type RefinementSelectFacet implements SKFacetSet { identifier: String label: String type: String display: String entries: [SKFacetSetEntry] } type RangeFacet implements SKFacetSet { identifier: String label: String type: String display: String entries: [SKFacetSetEntry] } type DateRangeFacet implements SKFacetSet { identifier: String label: String type: String display: String entries: [SKFacetSetEntry] } type HierarchicalMenuFacet implements SKFacetSet { identifier: String label: String type: String display: String entries: [SKFacetSetEntry] } `; exports.default = (schemaConfigs) => { const { typeDefs, context, resolvers } = (Array.isArray(schemaConfigs) ? schemaConfigs : [schemaConfigs]).reduce((sum, schemaConfig) => { const typeName = schemaConfig.typeName; const extendQuery = schemaConfig.addToQueryType ? ` extend type Query { results(query: String, queryOptions: SKQueryOptions, filters: [SKFiltersSet], page: SKPageInput): ${typeName} }` : ''; const configTypeDefs = graphql_tag_1.default ` type ${typeName} { summary: SKSummary hits(page: SKPageInput, sortBy: String): SKHitResults facets: [SKFacetSet] facet(identifier: String!, query: String, size: Float): SKFacetSet } ${extendQuery} `; return { typeDefs: [...sum.typeDefs, configTypeDefs], resolvers: Object.assign(Object.assign(Object.assign({}, sum.resolvers), { [typeName]: { hits: resolvers_1.HitsResolver, facets: resolvers_1.FacetsResolver, facet: resolvers_1.FacetResolver, summary: resolvers_1.SummaryResolver } }), (schemaConfig.addToQueryType ? { Query: Object.assign(Object.assign({}, sum.resolvers.Query), { results: resolvers_1.SearchkitResolver }) } : { Query: sum.resolvers.Query })), context: { searchkit: { configs: Object.assign(Object.assign({}, sum.context.searchkit.configs), { [typeName]: schemaConfig.config }), baseFilters: Object.assign(Object.assign({}, sum.context.searchkit.baseFilters), { [typeName]: schemaConfig.getBaseFilters }), hitTypeMappings: Object.assign(Object.assign({}, sum.context.searchkit.hitTypeMappings), { [typeName]: schemaConfig.hitTypeName }) } } }; }, { typeDefs: [baseSearchkitTypeDefs], resolvers: { SKHit: { __resolveType: (e) => e.type }, SKFacetSet: { __resolveType: (e) => e.type }, SKSelectedFilter: { __resolveType: (e) => e.type }, Query: {} }, context: { searchkit: { configs: {}, baseFilters: {}, hitTypeMappings: {} } } }); return { typeDefs, withSearchkitResolvers: (userResolvers = {}) => (Object.assign(Object.assign(Object.assign({}, userResolvers), resolvers), { Query: Object.assign(Object.assign({}, userResolvers.Query), resolvers.Query) })), context }; };