@webiny/api-headless-cms-ddb-es 5.32.0 → 5.33.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/dynamoDb/index.js +4 -6
  2. package/dynamoDb/index.js.map +1 -1
  3. package/dynamoDb/storage/date.d.ts +1 -2
  4. package/dynamoDb/storage/date.js +78 -44
  5. package/dynamoDb/storage/date.js.map +1 -1
  6. package/dynamoDb/storage/longText.d.ts +6 -3
  7. package/dynamoDb/storage/longText.js +68 -55
  8. package/dynamoDb/storage/longText.js.map +1 -1
  9. package/dynamoDb/storage/richText.d.ts +1 -2
  10. package/dynamoDb/storage/richText.js +70 -72
  11. package/dynamoDb/storage/richText.js.map +1 -1
  12. package/elasticsearch/indexing/dateTimeIndexing.js +14 -0
  13. package/elasticsearch/indexing/dateTimeIndexing.js.map +1 -1
  14. package/elasticsearch/indexing/objectIndexing.d.ts +9 -0
  15. package/elasticsearch/indexing/objectIndexing.js +16 -7
  16. package/elasticsearch/indexing/objectIndexing.js.map +1 -1
  17. package/elasticsearch/search/refSearch.js +2 -2
  18. package/elasticsearch/search/refSearch.js.map +1 -1
  19. package/helpers/createElasticsearchQueryBody.js +74 -15
  20. package/helpers/createElasticsearchQueryBody.js.map +1 -1
  21. package/helpers/entryIndexHelpers.js +8 -8
  22. package/helpers/entryIndexHelpers.js.map +1 -1
  23. package/helpers/fields.d.ts +3 -1
  24. package/helpers/fields.js +27 -5
  25. package/helpers/fields.js.map +1 -1
  26. package/operations/entry/index.js +221 -59
  27. package/operations/entry/index.js.map +1 -1
  28. package/operations/model/index.js +2 -2
  29. package/operations/model/index.js.map +1 -1
  30. package/package.json +14 -14
  31. package/operations/entry/fields.d.ts +0 -3
  32. package/operations/entry/fields.js +0 -69
  33. package/operations/entry/fields.js.map +0 -1
@@ -71,6 +71,14 @@ var _default = () => ({
71
71
  field,
72
72
  value
73
73
  }) {
74
+ if (Array.isArray(value) === true) {
75
+ return {
76
+ value: value.map(v => {
77
+ return convertValueToIndex(v, field);
78
+ })
79
+ };
80
+ }
81
+
74
82
  const dateValue = convertValueToIndex(value, field);
75
83
  return {
76
84
  value: dateValue
@@ -81,6 +89,12 @@ var _default = () => ({
81
89
  field,
82
90
  value
83
91
  }) {
92
+ if (Array.isArray(value)) {
93
+ return value.map(v => {
94
+ return convertValueFromIndex(v, field);
95
+ });
96
+ }
97
+
84
98
  return convertValueFromIndex(value, field);
85
99
  }
86
100
 
@@ -1 +1 @@
1
- {"version":3,"names":["convertTimeToNumber","time","hours","minutes","seconds","split","map","Number","convertNumberToTime","value","undefined","String","match","Math","floor","v","padStart","join","convertValueFromIndex","field","type","settings","dateValue","Date","toISOString","slice","convertValueToIndex","name","fieldType","unmappedType","toIndex","fromIndex"],"sources":["dateTimeIndexing.ts"],"sourcesContent":["import { CmsModelDateTimeField } from \"@webiny/api-headless-cms/types\";\nimport { CmsModelFieldToElasticsearchPlugin } from \"~/types\";\n\nconst convertTimeToNumber = (time?: string): number | null => {\n if (!time) {\n return null;\n }\n const [hours, minutes, seconds = 0] = time.split(\":\").map(Number);\n return hours * 60 * 60 + minutes * 60 + seconds;\n};\n\nconst convertNumberToTime = (value?: number): string | null => {\n if (value === undefined || value === null) {\n return null;\n }\n // TODO remove when v5 goes out\n // this is a fix for pre beta.5\n if (String(value).match(/^([0-9]{2}):([0-9]{2})/) !== null) {\n return String(value);\n }\n //\n const hours = Math.floor(value / 60 / 60);\n\n const minutes = Math.floor((value - hours * 60 * 60) / 60);\n\n const seconds = Math.floor(value - hours * 60 * 60 - minutes * 60);\n\n return [hours, minutes, seconds].map(v => String(v).padStart(2, \"0\")).join(\":\");\n};\n\nconst convertValueFromIndex = (\n value: string | number,\n field: CmsModelDateTimeField\n): string | null => {\n const type = field.settings.type;\n if (type === \"time\") {\n return convertNumberToTime(value as number);\n } else if (!value) {\n return null;\n } else if (type === \"dateTimeWithTimezone\") {\n return value as string;\n } else if (type === \"date\") {\n const dateValue = new Date(value);\n return dateValue.toISOString().slice(0, 10);\n }\n return new Date(value).toISOString();\n};\n\nconst convertValueToIndex = (value: string, field: CmsModelDateTimeField) => {\n if (!value) {\n return null;\n } else if (field.settings.type === \"time\") {\n return convertTimeToNumber(value);\n }\n return value;\n};\n\nexport default (): CmsModelFieldToElasticsearchPlugin => ({\n type: \"cms-model-field-to-elastic-search\",\n name: \"cms-model-field-to-elastic-search-datetime\",\n fieldType: \"datetime\",\n unmappedType: () => {\n return \"date\";\n },\n toIndex({ field, value }) {\n const dateValue = convertValueToIndex(value, field as CmsModelDateTimeField);\n return {\n value: dateValue\n };\n },\n fromIndex({ field, value }) {\n return convertValueFromIndex(value, field as CmsModelDateTimeField);\n }\n});\n"],"mappings":"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"}
1
+ {"version":3,"names":["convertTimeToNumber","time","hours","minutes","seconds","split","map","Number","convertNumberToTime","value","undefined","String","match","Math","floor","v","padStart","join","convertValueFromIndex","field","type","settings","dateValue","Date","toISOString","slice","convertValueToIndex","name","fieldType","unmappedType","toIndex","Array","isArray","fromIndex"],"sources":["dateTimeIndexing.ts"],"sourcesContent":["import { CmsModelDateTimeField } from \"@webiny/api-headless-cms/types\";\nimport { CmsModelFieldToElasticsearchPlugin } from \"~/types\";\n\nconst convertTimeToNumber = (time?: string): number | null => {\n if (!time) {\n return null;\n }\n const [hours, minutes, seconds = 0] = time.split(\":\").map(Number);\n return hours * 60 * 60 + minutes * 60 + seconds;\n};\n\nconst convertNumberToTime = (value?: number): string | null => {\n if (value === undefined || value === null) {\n return null;\n }\n // TODO remove when v5 goes out\n // this is a fix for pre beta.5\n if (String(value).match(/^([0-9]{2}):([0-9]{2})/) !== null) {\n return String(value);\n }\n //\n const hours = Math.floor(value / 60 / 60);\n\n const minutes = Math.floor((value - hours * 60 * 60) / 60);\n\n const seconds = Math.floor(value - hours * 60 * 60 - minutes * 60);\n\n return [hours, minutes, seconds].map(v => String(v).padStart(2, \"0\")).join(\":\");\n};\n\nconst convertValueFromIndex = (\n value: string | number,\n field: CmsModelDateTimeField\n): string | null => {\n const type = field.settings.type;\n if (type === \"time\") {\n return convertNumberToTime(value as number);\n } else if (!value) {\n return null;\n } else if (type === \"dateTimeWithTimezone\") {\n return value as string;\n } else if (type === \"date\") {\n const dateValue = new Date(value);\n return dateValue.toISOString().slice(0, 10);\n }\n return new Date(value).toISOString();\n};\n\nconst convertValueToIndex = (value: string, field: CmsModelDateTimeField) => {\n if (!value) {\n return null;\n } else if (field.settings.type === \"time\") {\n return convertTimeToNumber(value);\n }\n return value;\n};\n\nexport default (): CmsModelFieldToElasticsearchPlugin => ({\n type: \"cms-model-field-to-elastic-search\",\n name: \"cms-model-field-to-elastic-search-datetime\",\n fieldType: \"datetime\",\n unmappedType: () => {\n return \"date\";\n },\n toIndex({ field, value }) {\n if (Array.isArray(value) === true) {\n return {\n value: value.map((v: string) => {\n return convertValueToIndex(v, field as CmsModelDateTimeField);\n })\n };\n }\n const dateValue = convertValueToIndex(value, field as CmsModelDateTimeField);\n return {\n value: dateValue\n };\n },\n fromIndex({ field, value }) {\n if (Array.isArray(value)) {\n return value.map((v: string) => {\n return convertValueFromIndex(v, field as CmsModelDateTimeField);\n });\n }\n return convertValueFromIndex(value, field as CmsModelDateTimeField);\n }\n});\n"],"mappings":"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"}
@@ -1,3 +1,12 @@
1
+ /**
2
+ * TODO remove rawValue when field aliases and field types targeting will be active.
3
+ *
4
+ * Currently we use rawValue for the values that we do not want to be indexed.
5
+ * When field aliases and types in the value path will be active, we can target the keys directly.
6
+ *
7
+ * This change will be incompatible with the current systems so we will need to release a major version.
8
+ *
9
+ */
1
10
  import { CmsModelFieldToElasticsearchPlugin } from "../../types";
2
11
  declare const _default: () => CmsModelFieldToElasticsearchPlugin;
3
12
  export default _default;
@@ -5,6 +5,15 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.default = void 0;
7
7
 
8
+ /**
9
+ * TODO remove rawValue when field aliases and field types targeting will be active.
10
+ *
11
+ * Currently we use rawValue for the values that we do not want to be indexed.
12
+ * When field aliases and types in the value path will be active, we can target the keys directly.
13
+ *
14
+ * This change will be incompatible with the current systems so we will need to release a major version.
15
+ *
16
+ */
8
17
  const processToIndex = ({
9
18
  fields,
10
19
  value: sourceValue,
@@ -27,19 +36,19 @@ const processToIndex = ({
27
36
  } = plugin.toIndex({
28
37
  model,
29
38
  field,
30
- value: sourceValue[field.fieldId],
31
- rawValue: sourceRawValue[field.fieldId],
39
+ value: sourceValue[field.storageId],
40
+ rawValue: sourceRawValue[field.storageId],
32
41
  getFieldIndexPlugin,
33
42
  getFieldTypePlugin,
34
43
  plugins
35
44
  });
36
45
 
37
46
  if (value !== undefined) {
38
- values.value[field.fieldId] = value;
47
+ values.value[field.storageId] = value;
39
48
  }
40
49
 
41
50
  if (rawValue !== undefined) {
42
- values.rawValue[field.fieldId] = rawValue;
51
+ values.rawValue[field.storageId] = rawValue;
43
52
  }
44
53
 
45
54
  return values;
@@ -71,14 +80,14 @@ const processFromIndex = ({
71
80
  plugins,
72
81
  model,
73
82
  field,
74
- value: sourceValue[field.fieldId],
75
- rawValue: sourceRawValue[field.fieldId],
83
+ value: sourceValue[field.storageId],
84
+ rawValue: sourceRawValue[field.storageId],
76
85
  getFieldIndexPlugin,
77
86
  getFieldTypePlugin
78
87
  });
79
88
 
80
89
  if (value !== undefined) {
81
- values[field.fieldId] = value;
90
+ values[field.storageId] = value;
82
91
  }
83
92
 
84
93
  return values;
@@ -1 +1 @@
1
- {"version":3,"names":["processToIndex","fields","value","sourceValue","rawValue","sourceRawValue","getFieldIndexPlugin","getFieldTypePlugin","plugins","model","reducer","values","field","plugin","type","toIndex","fieldId","undefined","reduce","processFromIndex","fromIndex","name","fieldType","initialValue","initialRawValue","settings","multipleValues","result","key","Object","keys","length","push","source","map","_","index"],"sources":["objectIndexing.ts"],"sourcesContent":["import { CmsModelFieldToElasticsearchPlugin } from \"~/types\";\nimport {\n CmsModel,\n CmsModelField,\n CmsModelFieldToGraphQLPlugin\n} from \"@webiny/api-headless-cms/types\";\nimport { PluginsContainer } from \"@webiny/plugins\";\n\ninterface ProcessToIndex {\n (params: {\n fields: CmsModelField[];\n value: Record<string, any>;\n rawValue: Record<string, any>;\n getFieldIndexPlugin: (fieldType: string) => CmsModelFieldToElasticsearchPlugin;\n getFieldTypePlugin: (fieldType: string) => CmsModelFieldToGraphQLPlugin;\n plugins: PluginsContainer;\n model: CmsModel;\n }): Record<\"value\" | \"rawValue\", Record<string, any>>;\n}\n\ninterface ProcessFromIndex {\n (params: {\n fields: CmsModelField[];\n value: Record<string, any>;\n rawValue: Record<string, any>;\n getFieldIndexPlugin: (fieldType: string) => CmsModelFieldToElasticsearchPlugin;\n getFieldTypePlugin: (fieldType: string) => CmsModelFieldToGraphQLPlugin;\n plugins: PluginsContainer;\n model: CmsModel;\n }): Record<string, any>;\n}\n\ninterface ReducerValue {\n value: {\n [key: string]: string;\n };\n rawValue: {\n [key: string]: string;\n };\n}\n\nconst processToIndex: ProcessToIndex = ({\n fields,\n value: sourceValue,\n rawValue: sourceRawValue,\n getFieldIndexPlugin,\n getFieldTypePlugin,\n plugins,\n model\n}) => {\n const reducer = (values: ReducerValue, field: CmsModelField) => {\n const plugin = getFieldIndexPlugin(field.type);\n if (!plugin || !plugin.toIndex) {\n return values;\n }\n const { value, rawValue } = plugin.toIndex({\n model,\n field,\n value: sourceValue[field.fieldId],\n rawValue: sourceRawValue[field.fieldId],\n getFieldIndexPlugin,\n getFieldTypePlugin,\n plugins\n });\n\n if (value !== undefined) {\n values.value[field.fieldId] = value;\n }\n\n if (rawValue !== undefined) {\n values.rawValue[field.fieldId] = rawValue;\n }\n\n return values;\n };\n\n return fields.reduce(reducer, { value: {}, rawValue: {} });\n};\nconst processFromIndex: ProcessFromIndex = ({\n fields,\n value: sourceValue,\n rawValue: sourceRawValue,\n getFieldIndexPlugin,\n getFieldTypePlugin,\n plugins,\n model\n}) => {\n const reducer = (values: Record<string, string>, field: CmsModelField) => {\n const plugin = getFieldIndexPlugin(field.type);\n if (!plugin || !plugin.fromIndex) {\n return values;\n }\n const value = plugin.fromIndex({\n plugins,\n model,\n field,\n value: sourceValue[field.fieldId],\n rawValue: sourceRawValue[field.fieldId],\n getFieldIndexPlugin,\n getFieldTypePlugin\n });\n\n if (value !== undefined) {\n values[field.fieldId] = value;\n }\n\n return values;\n };\n\n return fields.reduce(reducer, {});\n};\n\ninterface ToIndexMultipleFieldValue {\n value: Record<string, string>[];\n rawValue: Record<string, string>[];\n}\n\nexport default (): CmsModelFieldToElasticsearchPlugin => ({\n type: \"cms-model-field-to-elastic-search\",\n name: \"cms-model-field-to-elastic-search-object\",\n fieldType: \"object\",\n toIndex({\n plugins,\n model,\n field,\n value: initialValue,\n rawValue: initialRawValue,\n getFieldIndexPlugin,\n getFieldTypePlugin\n }) {\n if (!initialValue) {\n return { value: null };\n }\n\n const fields = (field.settings?.fields || []) as CmsModelField[];\n\n /**\n * In \"object\" field, value is either an object or an array of objects.\n */\n if (field.multipleValues) {\n const result: ToIndexMultipleFieldValue = {\n value: [],\n rawValue: []\n };\n for (const key in initialValue) {\n const { value, rawValue } = processToIndex({\n value: initialValue[key],\n rawValue: initialRawValue[key],\n getFieldIndexPlugin,\n getFieldTypePlugin,\n model,\n plugins,\n fields\n });\n if (Object.keys(value).length > 0) {\n result.value.push(value);\n }\n\n if (Object.keys(rawValue).length > 0) {\n result.rawValue.push(rawValue);\n }\n }\n\n return {\n value: result.value.length > 0 ? result.value : undefined,\n rawValue: result.rawValue.length > 0 ? result.rawValue : undefined\n };\n }\n\n return processToIndex({\n value: initialValue,\n rawValue: initialRawValue,\n getFieldIndexPlugin,\n getFieldTypePlugin,\n model,\n plugins,\n fields\n });\n },\n fromIndex({ field, value, rawValue, model, plugins, getFieldIndexPlugin, getFieldTypePlugin }) {\n if (!value) {\n return null;\n }\n\n const fields = (field.settings?.fields || []) as CmsModelField[];\n\n /**\n * In \"object\" field, value is either an object or an array of objects.\n */\n if (field.multipleValues) {\n /**\n * Why this `value || rawValue || []`?\n * It's possible that an object contains all non-indexable fields, or vice-versa, and so\n * we can never be sure which array we can reliably use as a source of values.\n */\n const source = value || rawValue || [];\n\n return source.map((_: any, index: number) =>\n processFromIndex({\n value: value ? value[index] || {} : {},\n rawValue: rawValue ? rawValue[index] || {} : {},\n getFieldIndexPlugin,\n getFieldTypePlugin,\n model,\n plugins,\n fields\n })\n );\n }\n\n return processFromIndex({\n value,\n rawValue,\n getFieldIndexPlugin,\n getFieldTypePlugin,\n model,\n plugins,\n fields\n });\n }\n});\n"],"mappings":"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"}
1
+ {"version":3,"names":["processToIndex","fields","value","sourceValue","rawValue","sourceRawValue","getFieldIndexPlugin","getFieldTypePlugin","plugins","model","reducer","values","field","plugin","type","toIndex","storageId","undefined","reduce","processFromIndex","fromIndex","name","fieldType","initialValue","initialRawValue","settings","multipleValues","result","key","Object","keys","length","push","source","map","_","index"],"sources":["objectIndexing.ts"],"sourcesContent":["/**\n * TODO remove rawValue when field aliases and field types targeting will be active.\n *\n * Currently we use rawValue for the values that we do not want to be indexed.\n * When field aliases and types in the value path will be active, we can target the keys directly.\n *\n * This change will be incompatible with the current systems so we will need to release a major version.\n *\n */\n\nimport { CmsModelFieldToElasticsearchPlugin } from \"~/types\";\nimport {\n CmsModel,\n CmsModelField,\n CmsModelFieldToGraphQLPlugin\n} from \"@webiny/api-headless-cms/types\";\nimport { PluginsContainer } from \"@webiny/plugins\";\n\ninterface ProcessToIndex {\n (params: {\n fields: CmsModelField[];\n value: Record<string, any>;\n rawValue: Record<string, any>;\n getFieldIndexPlugin: (fieldType: string) => CmsModelFieldToElasticsearchPlugin;\n getFieldTypePlugin: (fieldType: string) => CmsModelFieldToGraphQLPlugin;\n plugins: PluginsContainer;\n model: CmsModel;\n }): Record<\"value\" | \"rawValue\", Record<string, any>>;\n}\n\ninterface ProcessFromIndex {\n (params: {\n fields: CmsModelField[];\n value: Record<string, any>;\n rawValue: Record<string, any>;\n getFieldIndexPlugin: (fieldType: string) => CmsModelFieldToElasticsearchPlugin;\n getFieldTypePlugin: (fieldType: string) => CmsModelFieldToGraphQLPlugin;\n plugins: PluginsContainer;\n model: CmsModel;\n }): Record<string, any>;\n}\n\ninterface ReducerValue {\n value: {\n [key: string]: string;\n };\n rawValue: {\n [key: string]: string;\n };\n}\n\nconst processToIndex: ProcessToIndex = ({\n fields,\n value: sourceValue,\n rawValue: sourceRawValue,\n getFieldIndexPlugin,\n getFieldTypePlugin,\n plugins,\n model\n}) => {\n const reducer = (values: ReducerValue, field: CmsModelField) => {\n const plugin = getFieldIndexPlugin(field.type);\n if (!plugin || !plugin.toIndex) {\n return values;\n }\n const { value, rawValue } = plugin.toIndex({\n model,\n field,\n value: sourceValue[field.storageId],\n rawValue: sourceRawValue[field.storageId],\n getFieldIndexPlugin,\n getFieldTypePlugin,\n plugins\n });\n\n if (value !== undefined) {\n values.value[field.storageId] = value;\n }\n if (rawValue !== undefined) {\n values.rawValue[field.storageId] = rawValue;\n }\n\n return values;\n };\n\n return fields.reduce(reducer, { value: {}, rawValue: {} });\n};\nconst processFromIndex: ProcessFromIndex = ({\n fields,\n value: sourceValue,\n rawValue: sourceRawValue,\n getFieldIndexPlugin,\n getFieldTypePlugin,\n plugins,\n model\n}) => {\n const reducer = (values: Record<string, string>, field: CmsModelField) => {\n const plugin = getFieldIndexPlugin(field.type);\n if (!plugin || !plugin.fromIndex) {\n return values;\n }\n const value = plugin.fromIndex({\n plugins,\n model,\n field,\n value: sourceValue[field.storageId],\n rawValue: sourceRawValue[field.storageId],\n getFieldIndexPlugin,\n getFieldTypePlugin\n });\n\n if (value !== undefined) {\n values[field.storageId] = value;\n }\n\n return values;\n };\n\n return fields.reduce(reducer, {});\n};\n\ninterface ToIndexMultipleFieldValue {\n value: Record<string, string>[];\n rawValue: Record<string, string>[];\n}\n\nexport default (): CmsModelFieldToElasticsearchPlugin => ({\n type: \"cms-model-field-to-elastic-search\",\n name: \"cms-model-field-to-elastic-search-object\",\n fieldType: \"object\",\n toIndex({\n plugins,\n model,\n field,\n value: initialValue,\n rawValue: initialRawValue,\n getFieldIndexPlugin,\n getFieldTypePlugin\n }) {\n if (!initialValue) {\n return { value: null };\n }\n\n const fields = (field.settings?.fields || []) as CmsModelField[];\n\n /**\n * In \"object\" field, value is either an object or an array of objects.\n */\n if (field.multipleValues) {\n const result: ToIndexMultipleFieldValue = {\n value: [],\n rawValue: []\n };\n for (const key in initialValue) {\n const { value, rawValue } = processToIndex({\n value: initialValue[key],\n rawValue: initialRawValue[key],\n getFieldIndexPlugin,\n getFieldTypePlugin,\n model,\n plugins,\n fields\n });\n if (Object.keys(value).length > 0) {\n result.value.push(value);\n }\n\n if (Object.keys(rawValue).length > 0) {\n result.rawValue.push(rawValue);\n }\n }\n\n return {\n value: result.value.length > 0 ? result.value : undefined,\n rawValue: result.rawValue.length > 0 ? result.rawValue : undefined\n };\n }\n\n return processToIndex({\n value: initialValue,\n rawValue: initialRawValue,\n getFieldIndexPlugin,\n getFieldTypePlugin,\n model,\n plugins,\n fields\n });\n },\n fromIndex({ field, value, rawValue, model, plugins, getFieldIndexPlugin, getFieldTypePlugin }) {\n if (!value) {\n return null;\n }\n\n const fields = field.settings?.fields || [];\n\n /**\n * In \"object\" field, value is either an object or an array of objects.\n */\n if (field.multipleValues) {\n /**\n * Why this `value || rawValue || []`?\n * It's possible that an object contains all non-indexable fields, or vice-versa, and so\n * we can never be sure which array we can reliably use as a source of values.\n */\n const source = value || rawValue || [];\n\n return source.map((_: any, index: number) =>\n processFromIndex({\n value: value ? value[index] || {} : {},\n rawValue: rawValue ? rawValue[index] || {} : {},\n getFieldIndexPlugin,\n getFieldTypePlugin,\n model,\n plugins,\n fields\n })\n );\n }\n\n return processFromIndex({\n value,\n rawValue,\n getFieldIndexPlugin,\n getFieldTypePlugin,\n model,\n plugins,\n fields\n });\n }\n});\n"],"mappings":"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"}
@@ -12,10 +12,10 @@ const createPath = ({
12
12
  key
13
13
  }) => {
14
14
  if (key && key.match("entryId") === null) {
15
- return `${field.fieldId}.id`;
15
+ return `${field.storageId}.id`;
16
16
  }
17
17
 
18
- return `${field.fieldId}.entryId`;
18
+ return `${field.storageId}.entryId`;
19
19
  };
20
20
 
21
21
  const transform = params => {
@@ -1 +1 @@
1
- {"version":3,"names":["createPath","field","key","match","fieldId","transform","params","value","createRefSearchPlugin","CmsEntryElasticsearchQueryBuilderValueSearchPlugin","fieldType","path"],"sources":["refSearch.ts"],"sourcesContent":["import {\n CmsEntryElasticsearchQueryBuilderValueSearchPlugin,\n CreatePathCallable,\n TransformCallable\n} from \"~/plugins/CmsEntryElasticsearchQueryBuilderValueSearchPlugin\";\n\nconst createPath: CreatePathCallable<string> = ({ field, key }) => {\n if (key && key.match(\"entryId\") === null) {\n return `${field.fieldId}.id`;\n }\n return `${field.fieldId}.entryId`;\n};\n\nconst transform: TransformCallable<string> = params => {\n return params.value;\n};\n\nexport const createRefSearchPlugin = (): CmsEntryElasticsearchQueryBuilderValueSearchPlugin => {\n return new CmsEntryElasticsearchQueryBuilderValueSearchPlugin({\n fieldType: \"ref\",\n path: createPath,\n transform\n });\n};\n"],"mappings":";;;;;;;AAAA;;AAMA,MAAMA,UAAsC,GAAG,CAAC;EAAEC,KAAF;EAASC;AAAT,CAAD,KAAoB;EAC/D,IAAIA,GAAG,IAAIA,GAAG,CAACC,KAAJ,CAAU,SAAV,MAAyB,IAApC,EAA0C;IACtC,OAAQ,GAAEF,KAAK,CAACG,OAAQ,KAAxB;EACH;;EACD,OAAQ,GAAEH,KAAK,CAACG,OAAQ,UAAxB;AACH,CALD;;AAOA,MAAMC,SAAoC,GAAGC,MAAM,IAAI;EACnD,OAAOA,MAAM,CAACC,KAAd;AACH,CAFD;;AAIO,MAAMC,qBAAqB,GAAG,MAA0D;EAC3F,OAAO,IAAIC,sGAAJ,CAAuD;IAC1DC,SAAS,EAAE,KAD+C;IAE1DC,IAAI,EAAEX,UAFoD;IAG1DK;EAH0D,CAAvD,CAAP;AAKH,CANM"}
1
+ {"version":3,"names":["createPath","field","key","match","storageId","transform","params","value","createRefSearchPlugin","CmsEntryElasticsearchQueryBuilderValueSearchPlugin","fieldType","path"],"sources":["refSearch.ts"],"sourcesContent":["import {\n CmsEntryElasticsearchQueryBuilderValueSearchPlugin,\n CreatePathCallable,\n TransformCallable\n} from \"~/plugins/CmsEntryElasticsearchQueryBuilderValueSearchPlugin\";\n\nconst createPath: CreatePathCallable<string> = ({ field, key }) => {\n if (key && key.match(\"entryId\") === null) {\n return `${field.storageId}.id`;\n }\n return `${field.storageId}.entryId`;\n};\n\nconst transform: TransformCallable<string> = params => {\n return params.value;\n};\n\nexport const createRefSearchPlugin = (): CmsEntryElasticsearchQueryBuilderValueSearchPlugin => {\n return new CmsEntryElasticsearchQueryBuilderValueSearchPlugin({\n fieldType: \"ref\",\n path: createPath,\n transform\n });\n};\n"],"mappings":";;;;;;;AAAA;;AAMA,MAAMA,UAAsC,GAAG,CAAC;EAAEC,KAAF;EAASC;AAAT,CAAD,KAAoB;EAC/D,IAAIA,GAAG,IAAIA,GAAG,CAACC,KAAJ,CAAU,SAAV,MAAyB,IAApC,EAA0C;IACtC,OAAQ,GAAEF,KAAK,CAACG,SAAU,KAA1B;EACH;;EACD,OAAQ,GAAEH,KAAK,CAACG,SAAU,UAA1B;AACH,CALD;;AAOA,MAAMC,SAAoC,GAAGC,MAAM,IAAI;EACnD,OAAOA,MAAM,CAACC,KAAd;AACH,CAFD;;AAIO,MAAMC,qBAAqB,GAAG,MAA0D;EAC3F,OAAO,IAAIC,sGAAJ,CAAuD;IAC1DC,SAAS,EAAE,KAD+C;IAE1DC,IAAI,EAAEX,UAFoD;IAG1DK;EAH0D,CAAvD,CAAP;AAKH,CANM"}
@@ -42,7 +42,7 @@ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (O
42
42
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
43
43
 
44
44
  const specialFields = ["published", "latest"];
45
- const noKeywordFields = ["date", "number", "boolean"];
45
+ const noKeywordFields = ["date", "datetime", "number", "boolean"];
46
46
 
47
47
  const createElasticsearchSortParams = args => {
48
48
  const {
@@ -56,16 +56,26 @@ const createElasticsearchSortParams = args => {
56
56
  return [];
57
57
  }
58
58
 
59
+ const fieldIdToStorageIdIdMap = {};
59
60
  const sortPlugins = Object.values(modelFields).reduce((plugins, modelField) => {
60
61
  const searchPlugin = searchPlugins[modelField.type];
61
- plugins[modelField.field.fieldId] = new _CmsEntryElasticsearchFieldPlugin.CmsEntryElasticsearchFieldPlugin({
62
+ const {
63
+ fieldId,
64
+ storageId
65
+ } = modelField.field;
66
+ fieldIdToStorageIdIdMap[fieldId] = fieldId;
67
+ /**
68
+ * Plugins must be stored with fieldId as key because it is later used to find the sorting plugin.
69
+ */
70
+
71
+ plugins[fieldId] = new _CmsEntryElasticsearchFieldPlugin.CmsEntryElasticsearchFieldPlugin({
62
72
  unmappedType: modelField.unmappedType,
63
73
  keyword: hasKeyword(modelField),
64
74
  sortable: modelField.isSortable,
65
75
  searchable: modelField.isSearchable,
66
- field: modelField.field.fieldId,
76
+ field: fieldId,
67
77
  path: createFieldPath({
68
- key: modelField.field.fieldId,
78
+ key: storageId,
69
79
  parentPath,
70
80
  modelField,
71
81
  searchPlugin
@@ -73,9 +83,30 @@ const createElasticsearchSortParams = args => {
73
83
  });
74
84
  return plugins;
75
85
  }, {});
86
+ const transformedSort = sort.map(value => {
87
+ const matched = value.match(/^([a-zA-Z-0-9_]+)_(ASC|DESC)$/);
88
+
89
+ if (!matched) {
90
+ return null;
91
+ }
92
+
93
+ const [, fieldId, order] = matched;
94
+
95
+ if (fieldIdToStorageIdIdMap[fieldId]) {
96
+ return `${fieldIdToStorageIdIdMap[fieldId]}_${order}`;
97
+ }
98
+
99
+ return value;
100
+ }).filter(Boolean);
76
101
  return (0, _sort.createSort)({
77
102
  fieldPlugins: sortPlugins,
78
- sort
103
+ sort: transformedSort
104
+ });
105
+ };
106
+
107
+ const findFieldByFieldId = (model, fieldId) => {
108
+ return model.fields.find(field => {
109
+ return field.fieldId === fieldId;
79
110
  });
80
111
  };
81
112
  /**
@@ -160,14 +191,14 @@ const createFieldPath = ({
160
191
  key
161
192
  });
162
193
  } else if (typeof modelField.path === "function") {
163
- path = modelField.path(modelField.field.fieldId);
194
+ path = modelField.path(modelField.field.storageId);
164
195
  }
165
196
 
166
197
  if (!path) {
167
198
  /**
168
199
  * We know that modelFieldPath is a string or undefined at this point.
169
200
  */
170
- path = modelField.path || modelField.field.fieldId || modelField.field.id;
201
+ path = modelField.path || modelField.field.storageId || modelField.field.id;
171
202
  }
172
203
 
173
204
  return modelField.isSystemField || !parentPath || path.match(parentPath) ? path : `${parentPath}.${path}`;
@@ -246,7 +277,7 @@ const fieldPathFactory = params => {
246
277
  }
247
278
 
248
279
  if (!fieldPath) {
249
- fieldPath = field.fieldId;
280
+ fieldPath = field.storageId;
250
281
 
251
282
  if (modelField.path) {
252
283
  fieldPath = typeof modelField.path === "function" ? modelField.path(value) : modelField.path;
@@ -322,13 +353,13 @@ const applyFullTextSearch = params => {
322
353
  }
323
354
 
324
355
  const fieldPaths = fields.reduce((collection, field) => {
325
- const modelField = modelFields[field];
356
+ const modelField = modelFields[field.fieldId];
326
357
 
327
358
  if (!modelField) {
328
359
  return collection;
329
360
  }
330
361
 
331
- collection.push(`values.${field}`);
362
+ collection.push(`values.${field.storageId}`);
332
363
  return collection;
333
364
  }, []);
334
365
  query.must.push({
@@ -406,10 +437,26 @@ const execElasticsearchBuildQueryPlugins = params => {
406
437
  field,
407
438
  operator
408
439
  } = (0, _where.parseWhereKey)(key);
409
- const modelField = modelFields[field];
440
+ /**
441
+ * TODO This will be required until the storage operations receive the fieldId instead of field storageId.
442
+ * TODO For this to work without field searching, we need to refactor how the query looks like.
443
+ *
444
+ * Storage operations should NEVER receive an field storageId, only alias - fieldId.
445
+ */
446
+
447
+ let fieldId = field;
448
+ const cmsModelField = findFieldByFieldId(model, fieldId);
449
+
450
+ if (!cmsModelField && !modelFields[fieldId]) {
451
+ throw new _error.default(`There is no CMS Model Field field "${fieldId}".`);
452
+ } else if (cmsModelField) {
453
+ fieldId = cmsModelField.fieldId;
454
+ }
455
+
456
+ const modelField = modelFields[fieldId];
410
457
 
411
458
  if (!modelField) {
412
- throw new _error.default(`There is no field "${field}".`);
459
+ throw new _error.default(`There is no field "${fieldId}".`);
413
460
  }
414
461
 
415
462
  const {
@@ -418,7 +465,7 @@ const execElasticsearchBuildQueryPlugins = params => {
418
465
  } = modelField;
419
466
 
420
467
  if (!isSearchable) {
421
- throw new _error.default(`Field "${field}" is not searchable.`);
468
+ throw new _error.default(`Field "${fieldId}" is not searchable.`);
422
469
  }
423
470
  /**
424
471
  * There is a possibility that value is an object.
@@ -481,10 +528,22 @@ const createElasticsearchQueryBody = params => {
481
528
  limit,
482
529
  sort: initialSort,
483
530
  search,
484
- fields
531
+ fields = []
485
532
  } = args;
486
533
  const modelFields = (0, _fields.createModelFields)(plugins, model);
487
534
  const searchPlugins = (0, _searchPluginsList.searchPluginsList)(plugins);
535
+ const fullTextSearchFields = [];
536
+
537
+ for (const fieldId of fields) {
538
+ const field = model.fields.find(f => f.fieldId === fieldId);
539
+
540
+ if (!field) {
541
+ continue;
542
+ }
543
+
544
+ fullTextSearchFields.push(field);
545
+ }
546
+
488
547
  const query = execElasticsearchBuildQueryPlugins({
489
548
  model,
490
549
  plugins,
@@ -494,7 +553,7 @@ const createElasticsearchQueryBody = params => {
494
553
  searchPlugins,
495
554
  fullTextSearch: {
496
555
  term: search,
497
- fields: fields || []
556
+ fields: fullTextSearchFields
498
557
  }
499
558
  });
500
559
  const queryPlugins = plugins.byType(_CmsEntryElasticsearchQueryModifierPlugin.CmsEntryElasticsearchQueryModifierPlugin.type).filter(pl => {
@@ -1 +1 @@
1
- {"version":3,"names":["specialFields","noKeywordFields","createElasticsearchSortParams","args","sort","modelFields","parentPath","searchPlugins","length","sortPlugins","Object","values","reduce","plugins","modelField","searchPlugin","type","field","fieldId","CmsEntryElasticsearchFieldPlugin","unmappedType","keyword","hasKeyword","sortable","isSortable","searchable","isSearchable","path","createFieldPath","key","createSort","fieldPlugins","createInitialQueryValue","params","model","where","initialWhere","query","must","must_not","should","filter","sharedIndex","process","env","ELASTICSEARCH_SHARED_INDEXES","push","term","tenant","locale","published","createPublishedType","latest","createLatestType","WebinyError","createPath","value","id","isSystemField","match","includes","nonRefFieldTypes","isRefFieldFiltering","typeOf","Array","isArray","Date","toISOString","fieldPathFactory","plugin","fieldPath","keywordValue","applyFiltering","operator","initialValue","operatorPlugins","fieldSearchPlugin","transformValueForSearch","apply","basePath","applyFullTextSearch","fields","fieldPaths","collection","query_string","allow_leading_wildcard","normalizeValue","default_operator","execElasticsearchBuildQueryPlugins","fullTextSearch","sf","keys","getElasticsearchOperatorPluginsByLocale","hasOwnProperty","undefined","parseWhereKey","cmsField","whereKey","createElasticsearchQueryBody","after","limit","initialSort","search","createModelFields","searchPluginsList","queryPlugins","byType","CmsEntryElasticsearchQueryModifierPlugin","pl","modelId","modifyQuery","CmsEntryElasticsearchSortModifierPlugin","modifySort","body","bool","size","search_after","decodeCursor","track_total_hits","bodyPlugins","CmsEntryElasticsearchBodyModifierPlugin","modifyBody"],"sources":["createElasticsearchQueryBody.ts"],"sourcesContent":["import WebinyError from \"@webiny/error\";\nimport { transformValueForSearch } from \"./transformValueForSearch\";\nimport { searchPluginsList } from \"./searchPluginsList\";\nimport {\n CmsEntryListParams,\n CmsEntryListSort,\n CmsEntryListWhere,\n CmsModel,\n CmsModelField\n} from \"@webiny/api-headless-cms/types\";\nimport {\n SearchBody as esSearchBody,\n Sort as esSort,\n ElasticsearchBoolQueryConfig\n} from \"@webiny/api-elasticsearch/types\";\nimport { decodeCursor } from \"@webiny/api-elasticsearch/cursors\";\nimport { createSort } from \"@webiny/api-elasticsearch/sort\";\nimport { createModelFields, ModelField, ModelFields } from \"./fields\";\nimport { CmsEntryElasticsearchFieldPlugin } from \"~/plugins/CmsEntryElasticsearchFieldPlugin\";\nimport { parseWhereKey } from \"@webiny/api-elasticsearch/where\";\nimport { PluginsContainer } from \"@webiny/plugins\";\nimport { createLatestType, createPublishedType } from \"~/operations/entry\";\nimport { CmsEntryElasticsearchQueryModifierPlugin } from \"~/plugins/CmsEntryElasticsearchQueryModifierPlugin\";\nimport { CmsEntryElasticsearchSortModifierPlugin } from \"~/plugins/CmsEntryElasticsearchSortModifierPlugin\";\nimport { CmsEntryElasticsearchBodyModifierPlugin } from \"~/plugins/CmsEntryElasticsearchBodyModifierPlugin\";\nimport {\n CmsEntryElasticsearchQueryBuilderValueSearchPlugin,\n CreatePathCallableParams\n} from \"~/plugins/CmsEntryElasticsearchQueryBuilderValueSearchPlugin\";\nimport { getElasticsearchOperatorPluginsByLocale } from \"@webiny/api-elasticsearch/operators\";\nimport { normalizeValue } from \"@webiny/api-elasticsearch/normalize\";\nimport { ElasticsearchQueryBuilderOperatorPlugin } from \"@webiny/api-elasticsearch/plugins/definition/ElasticsearchQueryBuilderOperatorPlugin\";\n\ninterface CreateElasticsearchParams {\n plugins: PluginsContainer;\n model: CmsModel;\n args: CmsEntryListParams;\n parentPath?: string;\n}\n\ninterface CreateElasticsearchSortParams {\n plugins: PluginsContainer;\n sort?: CmsEntryListSort;\n modelFields: ModelFields;\n parentPath?: string | null;\n model: CmsModel;\n searchPlugins: Record<string, CmsEntryElasticsearchQueryBuilderValueSearchPlugin>;\n}\n\ninterface CreateElasticsearchQueryArgs {\n model: CmsModel;\n plugins: PluginsContainer;\n where: CmsEntryListWhere;\n modelFields: ModelFields;\n parentPath?: string | null;\n searchPlugins: Record<string, CmsEntryElasticsearchQueryBuilderValueSearchPlugin>;\n fullTextSearch: {\n term?: string;\n fields: string[];\n };\n}\n\nconst specialFields: (keyof Partial<CmsEntryListWhere>)[] = [\"published\", \"latest\"];\nconst noKeywordFields = [\"date\", \"number\", \"boolean\"];\n\nconst createElasticsearchSortParams = (args: CreateElasticsearchSortParams): esSort => {\n const { sort, modelFields, parentPath, searchPlugins } = args;\n\n if (!sort || sort.length === 0) {\n return [];\n }\n\n const sortPlugins = Object.values(modelFields).reduce((plugins, modelField) => {\n const searchPlugin = searchPlugins[modelField.type];\n\n plugins[modelField.field.fieldId] = new CmsEntryElasticsearchFieldPlugin({\n unmappedType: modelField.unmappedType,\n keyword: hasKeyword(modelField),\n sortable: modelField.isSortable,\n searchable: modelField.isSearchable,\n field: modelField.field.fieldId,\n path: createFieldPath({\n key: modelField.field.fieldId,\n parentPath,\n modelField,\n searchPlugin\n })\n });\n return plugins;\n }, {} as Record<string, CmsEntryElasticsearchFieldPlugin>);\n\n return createSort({\n fieldPlugins: sortPlugins,\n sort\n });\n};\n/**\n * Latest and published are specific in Elasticsearch to that extend that they are tagged in the __type property.\n * We allow either published or either latest.\n * Latest is used in the manage API and published in the read API.\n */\nconst createInitialQueryValue = (\n params: CreateElasticsearchQueryArgs\n): ElasticsearchBoolQueryConfig => {\n const { model, where: initialWhere } = params;\n /**\n * Cast as partial so we can remove unnecessary keys.\n */\n const where: CmsEntryListWhere = {\n ...initialWhere\n };\n\n const query: ElasticsearchBoolQueryConfig = {\n must: [],\n must_not: [],\n should: [],\n filter: []\n };\n\n // When ES index is shared between tenants, we need to filter records by tenant ID\n const sharedIndex = process.env.ELASTICSEARCH_SHARED_INDEXES === \"true\";\n if (sharedIndex) {\n query.must.push({ term: { \"tenant.keyword\": model.tenant } });\n }\n\n query.must.push({\n term: {\n \"locale.keyword\": model.locale\n }\n });\n\n /**\n * We must transform published and latest where args into something that is understandable by our Elasticsearch\n */\n if (where.published === true) {\n query.must.push({\n term: {\n \"__type.keyword\": createPublishedType()\n }\n });\n } else if (where.latest === true) {\n query.must.push({\n term: {\n \"__type.keyword\": createLatestType()\n }\n });\n }\n // we do not allow not published and not latest\n else {\n throw new WebinyError(\n `Cannot call Elasticsearch query when not setting \"published\" or \"latest\".`,\n \"ELASTICSEARCH_UNSUPPORTED_QUERY\",\n {\n where\n }\n );\n }\n //\n return query;\n};\n\ninterface CreateFieldPathParams {\n modelField: ModelField;\n key: string;\n searchPlugin?: CmsEntryElasticsearchQueryBuilderValueSearchPlugin;\n parentPath?: string | null;\n}\nconst createFieldPath = ({\n modelField,\n searchPlugin,\n parentPath,\n key\n}: CreateFieldPathParams): string => {\n let path: string | null = null;\n if (searchPlugin && typeof searchPlugin.createPath === \"function\") {\n path = searchPlugin.createPath({\n field: modelField.field,\n value: null,\n key\n });\n } else if (typeof modelField.path === \"function\") {\n path = modelField.path(modelField.field.fieldId);\n }\n if (!path) {\n /**\n * We know that modelFieldPath is a string or undefined at this point.\n */\n path = (modelField.path as string) || modelField.field.fieldId || modelField.field.id;\n }\n return modelField.isSystemField || !parentPath || path.match(parentPath)\n ? path\n : `${parentPath}.${path}`;\n};\n\nconst hasKeyword = (modelField: ModelField): boolean => {\n /**\n * We defined some field types that MUST have no keyword added to the field path\n */\n if (noKeywordFields.includes(modelField.type)) {\n return false;\n } else if (modelField.unmappedType) {\n /**\n * If modelField has unmapped type defined, do not add keyword.\n */\n return false;\n } else if (modelField.keyword === false) {\n /**\n * And if specifically defined that modelField has no keyword, do not add it.\n */\n return false;\n }\n /**\n * All other fields have keyword added.\n */\n return true;\n};\n\ninterface IsRefFieldFilteringParams {\n key: string;\n value: any;\n field: CmsModelField;\n}\n\n/**\n * A list of typeof strings that are 100% not ref field filtering.\n * We also need to check for array and date.\n */\nconst nonRefFieldTypes: string[] = [\n \"string\",\n \"number\",\n \"undefined\",\n \"symbol\",\n \"bigint\",\n \"function\",\n \"boolean\"\n];\nconst isRefFieldFiltering = (params: IsRefFieldFilteringParams): boolean => {\n const { key, value, field } = params;\n const typeOf = typeof value;\n if (\n !value ||\n nonRefFieldTypes.includes(typeOf) ||\n Array.isArray(value) ||\n value instanceof Date ||\n !!value.toISOString\n ) {\n return false;\n } else if (typeOf === \"object\" && field.type === \"ref\") {\n return true;\n }\n throw new WebinyError(\n \"Could not determine if the search value is ref field search.\",\n \"REF_FIELD_SEARCH_ERROR\",\n {\n value,\n field,\n key\n }\n );\n};\n\ninterface FieldPathFactoryParams extends Omit<CreatePathCallableParams, \"field\"> {\n plugin?: CmsEntryElasticsearchQueryBuilderValueSearchPlugin;\n modelField: ModelField;\n key: string;\n parentPath?: string | null;\n keyword?: boolean;\n}\nconst fieldPathFactory = (params: FieldPathFactoryParams): string => {\n const { plugin, modelField, value, parentPath, keyword, key } = params;\n\n const field = modelField.field;\n\n let fieldPath: string | null = null;\n if (plugin) {\n fieldPath = plugin.createPath({ field, value, key });\n }\n if (!fieldPath) {\n fieldPath = field.fieldId;\n if (modelField.path) {\n fieldPath =\n typeof modelField.path === \"function\" ? modelField.path(value) : modelField.path;\n }\n }\n\n const keywordValue = keyword ? \".keyword\" : \"\";\n if (!parentPath) {\n return `${fieldPath}${keywordValue}`;\n }\n return `${parentPath}.${fieldPath}${keywordValue}`;\n};\n\ninterface ApplyFilteringParams {\n query: ElasticsearchBoolQueryConfig;\n modelField: ModelField;\n operator: string;\n key: string;\n value: any;\n operatorPlugins: Record<string, ElasticsearchQueryBuilderOperatorPlugin>;\n searchPlugins: Record<string, CmsEntryElasticsearchQueryBuilderValueSearchPlugin>;\n parentPath?: string | null;\n}\nconst applyFiltering = (params: ApplyFilteringParams) => {\n const {\n query,\n modelField,\n operator,\n key,\n value: initialValue,\n operatorPlugins,\n searchPlugins,\n parentPath\n } = params;\n const plugin = operatorPlugins[operator];\n if (!plugin) {\n throw new WebinyError(\"Operator plugin missing.\", \"PLUGIN_MISSING\", {\n operator\n });\n }\n const fieldSearchPlugin = searchPlugins[modelField.type];\n const value = transformValueForSearch({\n plugins: searchPlugins,\n field: modelField.field,\n value: initialValue\n });\n\n const keyword = hasKeyword(modelField);\n plugin.apply(query, {\n basePath: fieldPathFactory({\n plugin: fieldSearchPlugin,\n modelField,\n parentPath: modelField.isSystemField ? null : parentPath,\n value,\n key\n }),\n path: fieldPathFactory({\n plugin: fieldSearchPlugin,\n modelField,\n value,\n parentPath: modelField.isSystemField ? null : parentPath,\n keyword,\n key\n }),\n value,\n keyword\n });\n};\n\ninterface ApplyFullTextSearchParams {\n query: ElasticsearchBoolQueryConfig;\n modelFields: ModelFields;\n term?: string;\n fields: string[];\n}\nconst applyFullTextSearch = (params: ApplyFullTextSearchParams): void => {\n const { query, modelFields, term, fields } = params;\n if (!term || term.length === 0 || fields.length === 0) {\n return;\n }\n\n const fieldPaths = fields.reduce((collection, field) => {\n const modelField = modelFields[field];\n if (!modelField) {\n return collection;\n }\n\n collection.push(`values.${field}`);\n\n return collection;\n }, [] as string[]);\n\n query.must.push({\n query_string: {\n allow_leading_wildcard: true,\n fields: fieldPaths,\n query: normalizeValue(term),\n default_operator: \"or\"\n }\n });\n};\n/*\n * Iterate through where keys and apply plugins where necessary\n */\nconst execElasticsearchBuildQueryPlugins = (\n params: CreateElasticsearchQueryArgs\n): ElasticsearchBoolQueryConfig => {\n const {\n model,\n where: initialWhere,\n modelFields,\n parentPath,\n plugins,\n searchPlugins,\n fullTextSearch\n } = params;\n\n const where: Partial<CmsEntryListWhere> = {\n ...initialWhere\n };\n const query = createInitialQueryValue({\n ...params,\n where\n });\n\n /**\n * Add full text search for requested fields.\n */\n applyFullTextSearch({\n query,\n modelFields,\n term: fullTextSearch.term,\n fields: fullTextSearch.fields\n });\n\n /**\n * Always remove special fields, as these do not exist in Elasticsearch.\n */\n for (const sf of specialFields) {\n delete where[sf];\n }\n\n if (Object.keys(where).length === 0) {\n return query;\n }\n\n const operatorPlugins = getElasticsearchOperatorPluginsByLocale(plugins, model.locale);\n\n for (const key in where) {\n if (where.hasOwnProperty(key) === false) {\n continue;\n }\n /**\n * We do not need to go further if value is undefined.\n * There are few hardcoded possibilities when value is undefined, for example, ownedBy.\n */\n // TODO figure out how to have type.\n const value = (where as any)[key];\n if (value === undefined) {\n continue;\n }\n const { field, operator } = parseWhereKey(key);\n const modelField = modelFields[field];\n\n if (!modelField) {\n throw new WebinyError(`There is no field \"${field}\".`);\n }\n const { isSearchable = false, field: cmsField } = modelField;\n if (!isSearchable) {\n throw new WebinyError(`Field \"${field}\" is not searchable.`);\n }\n /**\n * There is a possibility that value is an object.\n * In that case, check if field is ref field and continue a bit differently.\n */\n if (isRefFieldFiltering({ key, value, field: cmsField })) {\n /**\n * We we need to go through each key in where[key] to determine the filters.\n */\n for (const whereKey in value) {\n const { operator } = parseWhereKey(whereKey);\n applyFiltering({\n query,\n modelField,\n operator,\n key: whereKey,\n value: value[whereKey],\n searchPlugins,\n operatorPlugins,\n parentPath\n });\n }\n continue;\n }\n applyFiltering({\n query,\n modelField,\n operator,\n key,\n value,\n searchPlugins,\n operatorPlugins,\n parentPath\n });\n }\n\n return query;\n};\n\nexport const createElasticsearchQueryBody = (params: CreateElasticsearchParams): esSearchBody => {\n const { plugins, model, args, parentPath = null } = params;\n const { where = {}, after, limit, sort: initialSort, search, fields } = args;\n\n const modelFields = createModelFields(plugins, model);\n const searchPlugins = searchPluginsList(plugins);\n\n const query = execElasticsearchBuildQueryPlugins({\n model,\n plugins,\n where,\n modelFields,\n parentPath,\n searchPlugins,\n fullTextSearch: {\n term: search,\n fields: fields || []\n }\n });\n\n const queryPlugins = plugins\n .byType<CmsEntryElasticsearchQueryModifierPlugin>(\n CmsEntryElasticsearchQueryModifierPlugin.type\n )\n .filter(pl => {\n return !pl.modelId || pl.modelId === model.modelId;\n });\n for (const pl of queryPlugins) {\n pl.modifyQuery({ query, model, where });\n }\n\n const sort = createElasticsearchSortParams({\n plugins,\n sort: initialSort,\n modelFields,\n parentPath,\n model,\n searchPlugins\n });\n\n const sortPlugins = plugins\n .byType<CmsEntryElasticsearchSortModifierPlugin>(\n CmsEntryElasticsearchSortModifierPlugin.type\n )\n .filter(pl => {\n return !pl.modelId || pl.modelId === model.modelId;\n });\n for (const pl of sortPlugins) {\n pl.modifySort({\n sort,\n model\n });\n }\n\n const body: esSearchBody = {\n query: {\n bool: {\n must: query.must.length > 0 ? query.must : undefined,\n must_not: query.must_not.length > 0 ? query.must_not : undefined,\n should: query.should.length > 0 ? query.should : undefined,\n filter: query.filter.length > 0 ? query.filter : undefined\n }\n },\n sort,\n size: (limit || 0) + 1,\n // eslint-disable-next-line\n search_after: decodeCursor(after) as any,\n // eslint-disable-next-line\n track_total_hits: true\n };\n\n const bodyPlugins = plugins\n .byType<CmsEntryElasticsearchBodyModifierPlugin>(\n CmsEntryElasticsearchBodyModifierPlugin.type\n )\n .filter(pl => {\n return !pl.modelId || pl.modelId === model.modelId;\n });\n for (const pl of bodyPlugins) {\n pl.modifyBody({\n body,\n model\n });\n }\n\n return body;\n};\n"],"mappings":"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"}
1
+ {"version":3,"names":["specialFields","noKeywordFields","createElasticsearchSortParams","args","sort","modelFields","parentPath","searchPlugins","length","fieldIdToStorageIdIdMap","sortPlugins","Object","values","reduce","plugins","modelField","searchPlugin","type","fieldId","storageId","field","CmsEntryElasticsearchFieldPlugin","unmappedType","keyword","hasKeyword","sortable","isSortable","searchable","isSearchable","path","createFieldPath","key","transformedSort","map","value","matched","match","order","filter","Boolean","createSort","fieldPlugins","findFieldByFieldId","model","fields","find","createInitialQueryValue","params","where","initialWhere","query","must","must_not","should","sharedIndex","process","env","ELASTICSEARCH_SHARED_INDEXES","push","term","tenant","locale","published","createPublishedType","latest","createLatestType","WebinyError","createPath","id","isSystemField","includes","nonRefFieldTypes","isRefFieldFiltering","typeOf","Array","isArray","Date","toISOString","fieldPathFactory","plugin","fieldPath","keywordValue","applyFiltering","operator","initialValue","operatorPlugins","fieldSearchPlugin","transformValueForSearch","apply","basePath","applyFullTextSearch","fieldPaths","collection","query_string","allow_leading_wildcard","normalizeValue","default_operator","execElasticsearchBuildQueryPlugins","fullTextSearch","sf","keys","getElasticsearchOperatorPluginsByLocale","hasOwnProperty","undefined","parseWhereKey","cmsModelField","cmsField","whereKey","createElasticsearchQueryBody","after","limit","initialSort","search","createModelFields","searchPluginsList","fullTextSearchFields","f","queryPlugins","byType","CmsEntryElasticsearchQueryModifierPlugin","pl","modelId","modifyQuery","CmsEntryElasticsearchSortModifierPlugin","modifySort","body","bool","size","search_after","decodeCursor","track_total_hits","bodyPlugins","CmsEntryElasticsearchBodyModifierPlugin","modifyBody"],"sources":["createElasticsearchQueryBody.ts"],"sourcesContent":["import WebinyError from \"@webiny/error\";\nimport { transformValueForSearch } from \"./transformValueForSearch\";\nimport { searchPluginsList } from \"./searchPluginsList\";\nimport {\n CmsEntryListParams,\n CmsEntryListSort,\n CmsEntryListWhere,\n CmsModel,\n CmsModelField\n} from \"@webiny/api-headless-cms/types\";\nimport {\n SearchBody as esSearchBody,\n Sort as esSort,\n ElasticsearchBoolQueryConfig\n} from \"@webiny/api-elasticsearch/types\";\nimport { decodeCursor } from \"@webiny/api-elasticsearch/cursors\";\nimport { createSort } from \"@webiny/api-elasticsearch/sort\";\nimport { createModelFields, ModelField, ModelFields } from \"./fields\";\nimport { CmsEntryElasticsearchFieldPlugin } from \"~/plugins/CmsEntryElasticsearchFieldPlugin\";\nimport { parseWhereKey } from \"@webiny/api-elasticsearch/where\";\nimport { PluginsContainer } from \"@webiny/plugins\";\nimport { createLatestType, createPublishedType } from \"~/operations/entry\";\nimport { CmsEntryElasticsearchQueryModifierPlugin } from \"~/plugins/CmsEntryElasticsearchQueryModifierPlugin\";\nimport { CmsEntryElasticsearchSortModifierPlugin } from \"~/plugins/CmsEntryElasticsearchSortModifierPlugin\";\nimport { CmsEntryElasticsearchBodyModifierPlugin } from \"~/plugins/CmsEntryElasticsearchBodyModifierPlugin\";\nimport {\n CmsEntryElasticsearchQueryBuilderValueSearchPlugin,\n CreatePathCallableParams\n} from \"~/plugins/CmsEntryElasticsearchQueryBuilderValueSearchPlugin\";\nimport { getElasticsearchOperatorPluginsByLocale } from \"@webiny/api-elasticsearch/operators\";\nimport { normalizeValue } from \"@webiny/api-elasticsearch/normalize\";\nimport { ElasticsearchQueryBuilderOperatorPlugin } from \"@webiny/api-elasticsearch/plugins/definition/ElasticsearchQueryBuilderOperatorPlugin\";\n\ninterface CreateElasticsearchParams {\n plugins: PluginsContainer;\n model: CmsModel;\n args: CmsEntryListParams;\n parentPath?: string;\n}\n\ninterface CreateElasticsearchSortParams {\n plugins: PluginsContainer;\n sort?: CmsEntryListSort;\n modelFields: ModelFields;\n parentPath?: string | null;\n model: CmsModel;\n searchPlugins: Record<string, CmsEntryElasticsearchQueryBuilderValueSearchPlugin>;\n}\n\ninterface CreateElasticsearchQueryArgs {\n model: CmsModel;\n plugins: PluginsContainer;\n where: CmsEntryListWhere;\n modelFields: ModelFields;\n parentPath?: string | null;\n searchPlugins: Record<string, CmsEntryElasticsearchQueryBuilderValueSearchPlugin>;\n fullTextSearch: {\n term?: string;\n fields: CmsModelField[];\n };\n}\n\nconst specialFields: (keyof Partial<CmsEntryListWhere>)[] = [\"published\", \"latest\"];\nconst noKeywordFields = [\"date\", \"datetime\", \"number\", \"boolean\"];\n\nconst createElasticsearchSortParams = (args: CreateElasticsearchSortParams): esSort => {\n const { sort, modelFields, parentPath, searchPlugins } = args;\n\n if (!sort || sort.length === 0) {\n return [];\n }\n\n const fieldIdToStorageIdIdMap: Record<string, string> = {};\n\n const sortPlugins = Object.values(modelFields).reduce((plugins, modelField) => {\n const searchPlugin = searchPlugins[modelField.type];\n\n const { fieldId, storageId } = modelField.field;\n\n fieldIdToStorageIdIdMap[fieldId] = fieldId;\n /**\n * Plugins must be stored with fieldId as key because it is later used to find the sorting plugin.\n */\n plugins[fieldId] = new CmsEntryElasticsearchFieldPlugin({\n unmappedType: modelField.unmappedType,\n keyword: hasKeyword(modelField),\n sortable: modelField.isSortable,\n searchable: modelField.isSearchable,\n field: fieldId,\n path: createFieldPath({\n key: storageId,\n parentPath,\n modelField,\n searchPlugin\n })\n });\n return plugins;\n }, {} as Record<string, CmsEntryElasticsearchFieldPlugin>);\n\n const transformedSort = sort\n .map(value => {\n const matched = value.match(/^([a-zA-Z-0-9_]+)_(ASC|DESC)$/);\n if (!matched) {\n return null;\n }\n const [, fieldId, order] = matched;\n if (fieldIdToStorageIdIdMap[fieldId]) {\n return `${fieldIdToStorageIdIdMap[fieldId]}_${order}`;\n }\n\n return value;\n })\n .filter(Boolean) as string[];\n return createSort({\n fieldPlugins: sortPlugins,\n sort: transformedSort\n });\n};\n\nconst findFieldByFieldId = (model: CmsModel, fieldId: string): CmsModelField | undefined => {\n return model.fields.find(field => {\n return field.fieldId === fieldId;\n });\n};\n/**\n * Latest and published are specific in Elasticsearch to that extend that they are tagged in the __type property.\n * We allow either published or either latest.\n * Latest is used in the manage API and published in the read API.\n */\nconst createInitialQueryValue = (\n params: CreateElasticsearchQueryArgs\n): ElasticsearchBoolQueryConfig => {\n const { model, where: initialWhere } = params;\n /**\n * Cast as partial so we can remove unnecessary keys.\n */\n const where: CmsEntryListWhere = {\n ...initialWhere\n };\n\n const query: ElasticsearchBoolQueryConfig = {\n must: [],\n must_not: [],\n should: [],\n filter: []\n };\n\n // When ES index is shared between tenants, we need to filter records by tenant ID\n const sharedIndex = process.env.ELASTICSEARCH_SHARED_INDEXES === \"true\";\n if (sharedIndex) {\n query.must.push({ term: { \"tenant.keyword\": model.tenant } });\n }\n\n query.must.push({\n term: {\n \"locale.keyword\": model.locale\n }\n });\n\n /**\n * We must transform published and latest where args into something that is understandable by our Elasticsearch\n */\n if (where.published === true) {\n query.must.push({\n term: {\n \"__type.keyword\": createPublishedType()\n }\n });\n } else if (where.latest === true) {\n query.must.push({\n term: {\n \"__type.keyword\": createLatestType()\n }\n });\n }\n // we do not allow not published and not latest\n else {\n throw new WebinyError(\n `Cannot call Elasticsearch query when not setting \"published\" or \"latest\".`,\n \"ELASTICSEARCH_UNSUPPORTED_QUERY\",\n {\n where\n }\n );\n }\n //\n return query;\n};\n\ninterface CreateFieldPathParams {\n modelField: ModelField;\n key: string;\n searchPlugin?: CmsEntryElasticsearchQueryBuilderValueSearchPlugin;\n parentPath?: string | null;\n}\nconst createFieldPath = ({\n modelField,\n searchPlugin,\n parentPath,\n key\n}: CreateFieldPathParams): string => {\n let path: string | null = null;\n if (searchPlugin && typeof searchPlugin.createPath === \"function\") {\n path = searchPlugin.createPath({\n field: modelField.field,\n value: null,\n key\n });\n } else if (typeof modelField.path === \"function\") {\n path = modelField.path(modelField.field.storageId);\n }\n if (!path) {\n /**\n * We know that modelFieldPath is a string or undefined at this point.\n */\n path = (modelField.path as string) || modelField.field.storageId || modelField.field.id;\n }\n return modelField.isSystemField || !parentPath || path.match(parentPath)\n ? path\n : `${parentPath}.${path}`;\n};\n\nconst hasKeyword = (modelField: ModelField): boolean => {\n /**\n * We defined some field types that MUST have no keyword added to the field path\n */\n if (noKeywordFields.includes(modelField.type)) {\n return false;\n } else if (modelField.unmappedType) {\n /**\n * If modelField has unmapped type defined, do not add keyword.\n */\n return false;\n } else if (modelField.keyword === false) {\n /**\n * And if specifically defined that modelField has no keyword, do not add it.\n */\n return false;\n }\n /**\n * All other fields have keyword added.\n */\n return true;\n};\n\ninterface IsRefFieldFilteringParams {\n key: string;\n value: any;\n field: CmsModelField;\n}\n\n/**\n * A list of typeof strings that are 100% not ref field filtering.\n * We also need to check for array and date.\n */\nconst nonRefFieldTypes: string[] = [\n \"string\",\n \"number\",\n \"undefined\",\n \"symbol\",\n \"bigint\",\n \"function\",\n \"boolean\"\n];\nconst isRefFieldFiltering = (params: IsRefFieldFilteringParams): boolean => {\n const { key, value, field } = params;\n const typeOf = typeof value;\n if (\n !value ||\n nonRefFieldTypes.includes(typeOf) ||\n Array.isArray(value) ||\n value instanceof Date ||\n !!value.toISOString\n ) {\n return false;\n } else if (typeOf === \"object\" && field.type === \"ref\") {\n return true;\n }\n throw new WebinyError(\n \"Could not determine if the search value is ref field search.\",\n \"REF_FIELD_SEARCH_ERROR\",\n {\n value,\n field,\n key\n }\n );\n};\n\ninterface FieldPathFactoryParams extends Omit<CreatePathCallableParams, \"field\"> {\n plugin?: CmsEntryElasticsearchQueryBuilderValueSearchPlugin;\n modelField: ModelField;\n key: string;\n parentPath?: string | null;\n keyword?: boolean;\n}\nconst fieldPathFactory = (params: FieldPathFactoryParams): string => {\n const { plugin, modelField, value, parentPath, keyword, key } = params;\n\n const field = modelField.field;\n\n let fieldPath: string | null = null;\n if (plugin) {\n fieldPath = plugin.createPath({ field, value, key });\n }\n if (!fieldPath) {\n fieldPath = field.storageId;\n if (modelField.path) {\n fieldPath =\n typeof modelField.path === \"function\" ? modelField.path(value) : modelField.path;\n }\n }\n\n const keywordValue = keyword ? \".keyword\" : \"\";\n if (!parentPath) {\n return `${fieldPath}${keywordValue}`;\n }\n return `${parentPath}.${fieldPath}${keywordValue}`;\n};\n\ninterface ApplyFilteringParams {\n query: ElasticsearchBoolQueryConfig;\n modelField: ModelField;\n operator: string;\n key: string;\n value: any;\n operatorPlugins: Record<string, ElasticsearchQueryBuilderOperatorPlugin>;\n searchPlugins: Record<string, CmsEntryElasticsearchQueryBuilderValueSearchPlugin>;\n parentPath?: string | null;\n}\nconst applyFiltering = (params: ApplyFilteringParams) => {\n const {\n query,\n modelField,\n operator,\n key,\n value: initialValue,\n operatorPlugins,\n searchPlugins,\n parentPath\n } = params;\n const plugin = operatorPlugins[operator];\n if (!plugin) {\n throw new WebinyError(\"Operator plugin missing.\", \"PLUGIN_MISSING\", {\n operator\n });\n }\n const fieldSearchPlugin = searchPlugins[modelField.type];\n const value = transformValueForSearch({\n plugins: searchPlugins,\n field: modelField.field,\n value: initialValue\n });\n\n const keyword = hasKeyword(modelField);\n plugin.apply(query, {\n basePath: fieldPathFactory({\n plugin: fieldSearchPlugin,\n modelField,\n parentPath: modelField.isSystemField ? null : parentPath,\n value,\n key\n }),\n path: fieldPathFactory({\n plugin: fieldSearchPlugin,\n modelField,\n value,\n parentPath: modelField.isSystemField ? null : parentPath,\n keyword,\n key\n }),\n value,\n keyword\n });\n};\n\ninterface ApplyFullTextSearchParams {\n query: ElasticsearchBoolQueryConfig;\n modelFields: ModelFields;\n term?: string;\n fields: CmsModelField[];\n}\nconst applyFullTextSearch = (params: ApplyFullTextSearchParams): void => {\n const { query, modelFields, term, fields } = params;\n if (!term || term.length === 0 || fields.length === 0) {\n return;\n }\n\n const fieldPaths = fields.reduce((collection, field) => {\n const modelField = modelFields[field.fieldId];\n if (!modelField) {\n return collection;\n }\n\n collection.push(`values.${field.storageId}`);\n\n return collection;\n }, [] as string[]);\n\n query.must.push({\n query_string: {\n allow_leading_wildcard: true,\n fields: fieldPaths,\n query: normalizeValue(term),\n default_operator: \"or\"\n }\n });\n};\n\n/*\n * Iterate through where keys and apply plugins where necessary\n */\nconst execElasticsearchBuildQueryPlugins = (\n params: CreateElasticsearchQueryArgs\n): ElasticsearchBoolQueryConfig => {\n const {\n model,\n where: initialWhere,\n modelFields,\n parentPath,\n plugins,\n searchPlugins,\n fullTextSearch\n } = params;\n\n const where: Partial<CmsEntryListWhere> = {\n ...initialWhere\n };\n const query = createInitialQueryValue({\n ...params,\n where\n });\n\n /**\n * Add full text search for requested fields.\n */\n applyFullTextSearch({\n query,\n modelFields,\n term: fullTextSearch.term,\n fields: fullTextSearch.fields\n });\n\n /**\n * Always remove special fields, as these do not exist in Elasticsearch.\n */\n for (const sf of specialFields) {\n delete where[sf];\n }\n\n if (Object.keys(where).length === 0) {\n return query;\n }\n\n const operatorPlugins = getElasticsearchOperatorPluginsByLocale(plugins, model.locale);\n\n for (const key in where) {\n if (where.hasOwnProperty(key) === false) {\n continue;\n }\n /**\n * We do not need to go further if value is undefined.\n * There are few hardcoded possibilities when value is undefined, for example, ownedBy.\n */\n // TODO figure out how to have type.\n const value = (where as any)[key];\n if (value === undefined) {\n continue;\n }\n const { field, operator } = parseWhereKey(key);\n /**\n * TODO This will be required until the storage operations receive the fieldId instead of field storageId.\n * TODO For this to work without field searching, we need to refactor how the query looks like.\n *\n * Storage operations should NEVER receive an field storageId, only alias - fieldId.\n */\n\n let fieldId = field;\n const cmsModelField = findFieldByFieldId(model, fieldId);\n if (!cmsModelField && !modelFields[fieldId]) {\n throw new WebinyError(`There is no CMS Model Field field \"${fieldId}\".`);\n } else if (cmsModelField) {\n fieldId = cmsModelField.fieldId;\n }\n\n const modelField = modelFields[fieldId];\n\n if (!modelField) {\n throw new WebinyError(`There is no field \"${fieldId}\".`);\n }\n const { isSearchable = false, field: cmsField } = modelField;\n if (!isSearchable) {\n throw new WebinyError(`Field \"${fieldId}\" is not searchable.`);\n }\n /**\n * There is a possibility that value is an object.\n * In that case, check if field is ref field and continue a bit differently.\n */\n if (isRefFieldFiltering({ key, value, field: cmsField })) {\n /**\n * We we need to go through each key in where[key] to determine the filters.\n */\n for (const whereKey in value) {\n const { operator } = parseWhereKey(whereKey);\n applyFiltering({\n query,\n modelField,\n operator,\n key: whereKey,\n value: value[whereKey],\n searchPlugins,\n operatorPlugins,\n parentPath\n });\n }\n continue;\n }\n applyFiltering({\n query,\n modelField,\n operator,\n key,\n value,\n searchPlugins,\n operatorPlugins,\n parentPath\n });\n }\n\n return query;\n};\n\nexport const createElasticsearchQueryBody = (params: CreateElasticsearchParams): esSearchBody => {\n const { plugins, model, args, parentPath = null } = params;\n const { where = {}, after, limit, sort: initialSort, search, fields = [] } = args;\n\n const modelFields = createModelFields(plugins, model);\n const searchPlugins = searchPluginsList(plugins);\n\n const fullTextSearchFields: CmsModelField[] = [];\n for (const fieldId of fields) {\n const field = model.fields.find(f => f.fieldId === fieldId);\n if (!field) {\n continue;\n }\n fullTextSearchFields.push(field);\n }\n\n const query = execElasticsearchBuildQueryPlugins({\n model,\n plugins,\n where,\n modelFields,\n parentPath,\n searchPlugins,\n fullTextSearch: {\n term: search,\n fields: fullTextSearchFields\n }\n });\n\n const queryPlugins = plugins\n .byType<CmsEntryElasticsearchQueryModifierPlugin>(\n CmsEntryElasticsearchQueryModifierPlugin.type\n )\n .filter(pl => {\n return !pl.modelId || pl.modelId === model.modelId;\n });\n for (const pl of queryPlugins) {\n pl.modifyQuery({ query, model, where });\n }\n\n const sort = createElasticsearchSortParams({\n plugins,\n sort: initialSort,\n modelFields,\n parentPath,\n model,\n searchPlugins\n });\n\n const sortPlugins = plugins\n .byType<CmsEntryElasticsearchSortModifierPlugin>(\n CmsEntryElasticsearchSortModifierPlugin.type\n )\n .filter(pl => {\n return !pl.modelId || pl.modelId === model.modelId;\n });\n for (const pl of sortPlugins) {\n pl.modifySort({\n sort,\n model\n });\n }\n\n const body: esSearchBody = {\n query: {\n bool: {\n must: query.must.length > 0 ? query.must : undefined,\n must_not: query.must_not.length > 0 ? query.must_not : undefined,\n should: query.should.length > 0 ? query.should : undefined,\n filter: query.filter.length > 0 ? query.filter : undefined\n }\n },\n sort,\n size: (limit || 0) + 1,\n // eslint-disable-next-line\n search_after: decodeCursor(after) as any,\n // eslint-disable-next-line\n track_total_hits: true\n };\n\n const bodyPlugins = plugins\n .byType<CmsEntryElasticsearchBodyModifierPlugin>(\n CmsEntryElasticsearchBodyModifierPlugin.type\n )\n .filter(pl => {\n return !pl.modelId || pl.modelId === model.modelId;\n });\n for (const pl of bodyPlugins) {\n pl.modifyBody({\n body,\n model\n });\n }\n\n return body;\n};\n"],"mappings":"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"}
@@ -49,7 +49,7 @@ const prepareEntryToIndex = params => {
49
49
  const rawValues = {}; // We're only interested in current model fields.
50
50
 
51
51
  for (const field of model.fields) {
52
- if (storageEntry.values.hasOwnProperty(field.fieldId) === false) {
52
+ if (storageEntry.values.hasOwnProperty(field.storageId) === false) {
53
53
  continue;
54
54
  }
55
55
 
@@ -66,18 +66,18 @@ const prepareEntryToIndex = params => {
66
66
  plugins,
67
67
  model,
68
68
  field,
69
- rawValue: entry.values[field.fieldId],
70
- value: storageEntry.values[field.fieldId],
69
+ rawValue: entry.values[field.storageId],
70
+ value: storageEntry.values[field.storageId],
71
71
  getFieldIndexPlugin,
72
72
  getFieldTypePlugin
73
73
  });
74
74
 
75
75
  if (typeof value !== "undefined") {
76
- values[field.fieldId] = value;
76
+ values[field.storageId] = value;
77
77
  }
78
78
 
79
79
  if (typeof rawValue !== "undefined") {
80
- rawValues[field.fieldId] = rawValue;
80
+ rawValues[field.storageId] = rawValue;
81
81
  }
82
82
  }
83
83
 
@@ -157,18 +157,18 @@ const extractEntriesFromIndex = ({
157
157
  }
158
158
 
159
159
  try {
160
- indexValues[field.fieldId] = targetFieldPlugin.fromIndex({
160
+ indexValues[field.storageId] = targetFieldPlugin.fromIndex({
161
161
  plugins,
162
162
  model,
163
163
  field,
164
164
  getFieldIndexPlugin,
165
165
  getFieldTypePlugin,
166
- value: entry.values[field.fieldId],
166
+ value: entry.values[field.storageId],
167
167
 
168
168
  /**
169
169
  * Possibly no rawValues so we must check for the existence of the field.
170
170
  */
171
- rawValue: entry.rawValues ? entry.rawValues[field.fieldId] : null
171
+ rawValue: entry.rawValues ? entry.rawValues[field.storageId] : null
172
172
  });
173
173
  } catch (ex) {
174
174
  throw new _error.default(ex.message || "Could not transform entry field from index.", ex.code || "FIELD_FROM_INDEX_ERROR", {