|
|
@@ -36,6 +36,25 @@ import { ElasticsearchIndexService } from './indexing/elasticsearch-index.servic
|
|
|
import { ElasticsearchIndexerController } from './indexing/indexer.controller';
|
|
|
import { ElasticsearchOptions, ElasticsearchRuntimeOptions, mergeWithDefaults } from './options';
|
|
|
|
|
|
+function getCustomResolvers(options: ElasticsearchRuntimeOptions) {
|
|
|
+ const requiresUnionResolver =
|
|
|
+ 0 < Object.keys(options.customProductMappings || {}).length &&
|
|
|
+ 0 < Object.keys(options.customProductVariantMappings || {}).length;
|
|
|
+ const requiresUnionScriptResolver =
|
|
|
+ 0 <
|
|
|
+ Object.values(options.searchConfig.scriptFields || {}).filter(
|
|
|
+ field => field.context !== 'product',
|
|
|
+ ).length &&
|
|
|
+ 0 <
|
|
|
+ Object.values(options.searchConfig.scriptFields || {}).filter(
|
|
|
+ field => field.context !== 'variant',
|
|
|
+ ).length;
|
|
|
+ return [
|
|
|
+ ...(requiresUnionResolver ? [CustomMappingsResolver] : []),
|
|
|
+ ...(requiresUnionScriptResolver ? [CustomScriptFieldsResolver] : []),
|
|
|
+ ];
|
|
|
+}
|
|
|
+
|
|
|
/**
|
|
|
* @description
|
|
|
* This plugin allows your product search to be powered by [Elasticsearch](https://github.com/elastic/elasticsearch) - a powerful Open Source search
|
|
|
@@ -214,31 +233,19 @@ import { ElasticsearchOptions, ElasticsearchRuntimeOptions, mergeWithDefaults }
|
|
|
},
|
|
|
],
|
|
|
adminApiExtensions: {
|
|
|
- resolvers: [AdminElasticSearchResolver, EntityElasticSearchResolver],
|
|
|
+ resolvers: () => [
|
|
|
+ AdminElasticSearchResolver,
|
|
|
+ EntityElasticSearchResolver,
|
|
|
+ ...getCustomResolvers(ElasticsearchPlugin.options),
|
|
|
+ ],
|
|
|
schema: () => generateSchemaExtensions(ElasticsearchPlugin.options as any),
|
|
|
},
|
|
|
shopApiExtensions: {
|
|
|
- resolvers: () => {
|
|
|
- const { options } = ElasticsearchPlugin;
|
|
|
- const requiresUnionResolver =
|
|
|
- 0 < Object.keys(options.customProductMappings || {}).length &&
|
|
|
- 0 < Object.keys(options.customProductVariantMappings || {}).length;
|
|
|
- const requiresUnionScriptResolver =
|
|
|
- 0 <
|
|
|
- Object.values(options.searchConfig.scriptFields || {}).filter(
|
|
|
- field => field.context !== 'product',
|
|
|
- ).length &&
|
|
|
- 0 <
|
|
|
- Object.values(options.searchConfig.scriptFields || {}).filter(
|
|
|
- field => field.context !== 'variant',
|
|
|
- ).length;
|
|
|
- return [
|
|
|
- ShopElasticSearchResolver,
|
|
|
- EntityElasticSearchResolver,
|
|
|
- ...(requiresUnionResolver ? [CustomMappingsResolver] : []),
|
|
|
- ...(requiresUnionScriptResolver ? [CustomScriptFieldsResolver] : []),
|
|
|
- ];
|
|
|
- },
|
|
|
+ resolvers: () => [
|
|
|
+ ShopElasticSearchResolver,
|
|
|
+ EntityElasticSearchResolver,
|
|
|
+ ...getCustomResolvers(ElasticsearchPlugin.options),
|
|
|
+ ],
|
|
|
// `any` cast is there due to a strange error "Property '[Symbol.iterator]' is missing in type... URLSearchParams"
|
|
|
// which looks like possibly a TS/definitions bug.
|
|
|
schema: () => generateSchemaExtensions(ElasticsearchPlugin.options as any),
|