@webiny/api-elasticsearch 5.34.8 → 5.35.0-beta.0

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 (87) hide show
  1. package/client.js +4 -16
  2. package/client.js.map +1 -1
  3. package/compression.js +0 -17
  4. package/compression.js.map +1 -1
  5. package/cursors.js +0 -12
  6. package/cursors.js.map +1 -1
  7. package/index.js +0 -32
  8. package/index.js.map +1 -1
  9. package/indexConfiguration/base.js +0 -5
  10. package/indexConfiguration/base.js.map +1 -1
  11. package/indexConfiguration/common.js +0 -4
  12. package/indexConfiguration/common.js.map +1 -1
  13. package/indexConfiguration/index.js +0 -6
  14. package/indexConfiguration/index.js.map +1 -1
  15. package/indexConfiguration/japanese.js +0 -5
  16. package/indexConfiguration/japanese.js.map +1 -1
  17. package/indices.js +0 -7
  18. package/indices.js.map +1 -1
  19. package/limit.js +0 -8
  20. package/limit.js.map +1 -1
  21. package/normalize.js +3 -7
  22. package/normalize.js.map +1 -1
  23. package/operators.js +0 -11
  24. package/operators.js.map +1 -1
  25. package/package.json +9 -9
  26. package/plugins/GzipCompression.js +0 -18
  27. package/plugins/GzipCompression.js.map +1 -1
  28. package/plugins/definition/CompressionPlugin.js +0 -5
  29. package/plugins/definition/CompressionPlugin.js.map +1 -1
  30. package/plugins/definition/ElasticsearchBodyModifierPlugin.js +0 -9
  31. package/plugins/definition/ElasticsearchBodyModifierPlugin.js.map +1 -1
  32. package/plugins/definition/ElasticsearchFieldPlugin.d.ts +1 -1
  33. package/plugins/definition/ElasticsearchFieldPlugin.js +0 -23
  34. package/plugins/definition/ElasticsearchFieldPlugin.js.map +1 -1
  35. package/plugins/definition/ElasticsearchIndexPlugin.js +0 -10
  36. package/plugins/definition/ElasticsearchIndexPlugin.js.map +1 -1
  37. package/plugins/definition/ElasticsearchQueryBuilderOperatorPlugin.js +0 -6
  38. package/plugins/definition/ElasticsearchQueryBuilderOperatorPlugin.js.map +1 -1
  39. package/plugins/definition/ElasticsearchQueryModifierPlugin.js +0 -9
  40. package/plugins/definition/ElasticsearchQueryModifierPlugin.js.map +1 -1
  41. package/plugins/definition/ElasticsearchSortModifierPlugin.js +0 -9
  42. package/plugins/definition/ElasticsearchSortModifierPlugin.js.map +1 -1
  43. package/plugins/definition/index.js +0 -14
  44. package/plugins/definition/index.js.map +1 -1
  45. package/plugins/index.js +0 -4
  46. package/plugins/index.js.map +1 -1
  47. package/plugins/operator/andIn.js +2 -13
  48. package/plugins/operator/andIn.js.map +1 -1
  49. package/plugins/operator/between.js +2 -12
  50. package/plugins/operator/between.js.map +1 -1
  51. package/plugins/operator/contains.js +0 -9
  52. package/plugins/operator/contains.js.map +1 -1
  53. package/plugins/operator/equal.js +0 -14
  54. package/plugins/operator/equal.js.map +1 -1
  55. package/plugins/operator/gt.js +0 -8
  56. package/plugins/operator/gt.js.map +1 -1
  57. package/plugins/operator/gte.js +0 -8
  58. package/plugins/operator/gte.js.map +1 -1
  59. package/plugins/operator/in.js +2 -11
  60. package/plugins/operator/in.js.map +1 -1
  61. package/plugins/operator/index.js +0 -32
  62. package/plugins/operator/index.js.map +1 -1
  63. package/plugins/operator/japanese/contains.js +0 -11
  64. package/plugins/operator/japanese/contains.js.map +1 -1
  65. package/plugins/operator/lt.js +0 -8
  66. package/plugins/operator/lt.js.map +1 -1
  67. package/plugins/operator/lte.js +0 -8
  68. package/plugins/operator/lte.js.map +1 -1
  69. package/plugins/operator/not.js +0 -12
  70. package/plugins/operator/not.js.map +1 -1
  71. package/plugins/operator/notBetween.js +2 -12
  72. package/plugins/operator/notBetween.js.map +1 -1
  73. package/plugins/operator/notContains.js +0 -9
  74. package/plugins/operator/notContains.js.map +1 -1
  75. package/plugins/operator/notIn.js +0 -10
  76. package/plugins/operator/notIn.js.map +1 -1
  77. package/plugins/operator/notStartsWith.js +0 -8
  78. package/plugins/operator/notStartsWith.js.map +1 -1
  79. package/plugins/operator/startsWith.js +0 -8
  80. package/plugins/operator/startsWith.js.map +1 -1
  81. package/sort.js +0 -16
  82. package/sort.js.map +1 -1
  83. package/types.d.ts +1 -0
  84. package/types.js +0 -3
  85. package/types.js.map +1 -1
  86. package/where.js +2 -23
  87. package/where.js.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"names":["ElasticsearchQueryBuilderOperatorNotStartsWithPlugin","ElasticsearchQueryBuilderOperatorPlugin","getOperator","apply","query","params","value","basePath","must_not","push","match_phrase_prefix"],"sources":["notStartsWith.ts"],"sourcesContent":["import { ElasticsearchQueryBuilderOperatorPlugin } from \"~/plugins/definition/ElasticsearchQueryBuilderOperatorPlugin\";\nimport { ElasticsearchBoolQueryConfig, ElasticsearchQueryBuilderArgsPlugin } from \"~/types\";\n\nexport class ElasticsearchQueryBuilderOperatorNotStartsWithPlugin extends ElasticsearchQueryBuilderOperatorPlugin {\n public override name = \"elasticsearch.queryBuilder.operator.notStartsWith.default\";\n\n public getOperator(): string {\n return \"not_startsWith\";\n }\n\n public apply(\n query: ElasticsearchBoolQueryConfig,\n params: ElasticsearchQueryBuilderArgsPlugin\n ): void {\n const { value, basePath } = params;\n query.must_not.push({\n match_phrase_prefix: {\n [basePath]: value\n }\n });\n }\n}\n"],"mappings":";;;;;;;;;;;AAAA;;AAGO,MAAMA,oDAAN,SAAmEC,gFAAnE,CAA2G;EAAA;IAAA;IAAA,4CACvF,2DADuF;EAAA;;EAGvGC,WAAW,GAAW;IACzB,OAAO,gBAAP;EACH;;EAEMC,KAAK,CACRC,KADQ,EAERC,MAFQ,EAGJ;IACJ,MAAM;MAAEC,KAAF;MAASC;IAAT,IAAsBF,MAA5B;IACAD,KAAK,CAACI,QAAN,CAAeC,IAAf,CAAoB;MAChBC,mBAAmB,EAAE;QACjB,CAACH,QAAD,GAAYD;MADK;IADL,CAApB;EAKH;;AAjB6G"}
1
+ {"version":3,"names":["ElasticsearchQueryBuilderOperatorNotStartsWithPlugin","ElasticsearchQueryBuilderOperatorPlugin","getOperator","apply","query","params","value","basePath","must_not","push","match_phrase_prefix"],"sources":["notStartsWith.ts"],"sourcesContent":["import { ElasticsearchQueryBuilderOperatorPlugin } from \"~/plugins/definition/ElasticsearchQueryBuilderOperatorPlugin\";\nimport { ElasticsearchBoolQueryConfig, ElasticsearchQueryBuilderArgsPlugin } from \"~/types\";\n\nexport class ElasticsearchQueryBuilderOperatorNotStartsWithPlugin extends ElasticsearchQueryBuilderOperatorPlugin {\n public override name = \"elasticsearch.queryBuilder.operator.notStartsWith.default\";\n\n public getOperator(): string {\n return \"not_startsWith\";\n }\n\n public apply(\n query: ElasticsearchBoolQueryConfig,\n params: ElasticsearchQueryBuilderArgsPlugin\n ): void {\n const { value, basePath } = params;\n query.must_not.push({\n match_phrase_prefix: {\n [basePath]: value\n }\n });\n }\n}\n"],"mappings":";;;;;;;;AAAA;AAGO,MAAMA,oDAAoD,SAASC,gFAAuC,CAAC;EAAA;IAAA;IAAA,4CACvF,2DAA2D;EAAA;EAE3EC,WAAW,GAAW;IACzB,OAAO,gBAAgB;EAC3B;EAEOC,KAAK,CACRC,KAAmC,EACnCC,MAA2C,EACvC;IACJ,MAAM;MAAEC,KAAK;MAAEC;IAAS,CAAC,GAAGF,MAAM;IAClCD,KAAK,CAACI,QAAQ,CAACC,IAAI,CAAC;MAChBC,mBAAmB,EAAE;QACjB,CAACH,QAAQ,GAAGD;MAChB;IACJ,CAAC,CAAC;EACN;AACJ;AAAC"}
@@ -1,26 +1,20 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
-
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
7
  exports.ElasticsearchQueryBuilderOperatorStartsWithPlugin = void 0;
9
-
10
8
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
-
12
9
  var _ElasticsearchQueryBuilderOperatorPlugin = require("../definition/ElasticsearchQueryBuilderOperatorPlugin");
13
-
14
10
  class ElasticsearchQueryBuilderOperatorStartsWithPlugin extends _ElasticsearchQueryBuilderOperatorPlugin.ElasticsearchQueryBuilderOperatorPlugin {
15
11
  constructor(...args) {
16
12
  super(...args);
17
13
  (0, _defineProperty2.default)(this, "name", "elasticsearch.queryBuilder.operator.startsWith.default");
18
14
  }
19
-
20
15
  getOperator() {
21
16
  return "startsWith";
22
17
  }
23
-
24
18
  apply(query, params) {
25
19
  const {
26
20
  value,
@@ -32,7 +26,5 @@ class ElasticsearchQueryBuilderOperatorStartsWithPlugin extends _ElasticsearchQu
32
26
  }
33
27
  });
34
28
  }
35
-
36
29
  }
37
-
38
30
  exports.ElasticsearchQueryBuilderOperatorStartsWithPlugin = ElasticsearchQueryBuilderOperatorStartsWithPlugin;
@@ -1 +1 @@
1
- {"version":3,"names":["ElasticsearchQueryBuilderOperatorStartsWithPlugin","ElasticsearchQueryBuilderOperatorPlugin","getOperator","apply","query","params","value","basePath","filter","push","match_phrase_prefix"],"sources":["startsWith.ts"],"sourcesContent":["import { ElasticsearchQueryBuilderOperatorPlugin } from \"~/plugins/definition/ElasticsearchQueryBuilderOperatorPlugin\";\nimport { ElasticsearchBoolQueryConfig, ElasticsearchQueryBuilderArgsPlugin } from \"~/types\";\n\nexport class ElasticsearchQueryBuilderOperatorStartsWithPlugin extends ElasticsearchQueryBuilderOperatorPlugin {\n public override name = \"elasticsearch.queryBuilder.operator.startsWith.default\";\n\n public getOperator(): string {\n return \"startsWith\";\n }\n\n public apply(\n query: ElasticsearchBoolQueryConfig,\n params: ElasticsearchQueryBuilderArgsPlugin\n ): void {\n const { value, basePath } = params;\n query.filter.push({\n match_phrase_prefix: {\n [basePath]: value\n }\n });\n }\n}\n"],"mappings":";;;;;;;;;;;AAAA;;AAGO,MAAMA,iDAAN,SAAgEC,gFAAhE,CAAwG;EAAA;IAAA;IAAA,4CACpF,wDADoF;EAAA;;EAGpGC,WAAW,GAAW;IACzB,OAAO,YAAP;EACH;;EAEMC,KAAK,CACRC,KADQ,EAERC,MAFQ,EAGJ;IACJ,MAAM;MAAEC,KAAF;MAASC;IAAT,IAAsBF,MAA5B;IACAD,KAAK,CAACI,MAAN,CAAaC,IAAb,CAAkB;MACdC,mBAAmB,EAAE;QACjB,CAACH,QAAD,GAAYD;MADK;IADP,CAAlB;EAKH;;AAjB0G"}
1
+ {"version":3,"names":["ElasticsearchQueryBuilderOperatorStartsWithPlugin","ElasticsearchQueryBuilderOperatorPlugin","getOperator","apply","query","params","value","basePath","filter","push","match_phrase_prefix"],"sources":["startsWith.ts"],"sourcesContent":["import { ElasticsearchQueryBuilderOperatorPlugin } from \"~/plugins/definition/ElasticsearchQueryBuilderOperatorPlugin\";\nimport { ElasticsearchBoolQueryConfig, ElasticsearchQueryBuilderArgsPlugin } from \"~/types\";\n\nexport class ElasticsearchQueryBuilderOperatorStartsWithPlugin extends ElasticsearchQueryBuilderOperatorPlugin {\n public override name = \"elasticsearch.queryBuilder.operator.startsWith.default\";\n\n public getOperator(): string {\n return \"startsWith\";\n }\n\n public apply(\n query: ElasticsearchBoolQueryConfig,\n params: ElasticsearchQueryBuilderArgsPlugin\n ): void {\n const { value, basePath } = params;\n query.filter.push({\n match_phrase_prefix: {\n [basePath]: value\n }\n });\n }\n}\n"],"mappings":";;;;;;;;AAAA;AAGO,MAAMA,iDAAiD,SAASC,gFAAuC,CAAC;EAAA;IAAA;IAAA,4CACpF,wDAAwD;EAAA;EAExEC,WAAW,GAAW;IACzB,OAAO,YAAY;EACvB;EAEOC,KAAK,CACRC,KAAmC,EACnCC,MAA2C,EACvC;IACJ,MAAM;MAAEC,KAAK;MAAEC;IAAS,CAAC,GAAGF,MAAM;IAClCD,KAAK,CAACI,MAAM,CAACC,IAAI,CAAC;MACdC,mBAAmB,EAAE;QACjB,CAACH,QAAQ,GAAGD;MAChB;IACJ,CAAC,CAAC;EACN;AACJ;AAAC"}
package/sort.js CHANGED
@@ -1,25 +1,19 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
-
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
7
  exports.createSort = void 0;
9
-
10
8
  var _error = _interopRequireDefault(require("@webiny/error"));
11
-
12
9
  var _plugins = require("./plugins");
13
-
14
10
  const sortRegExp = new RegExp(/^([a-zA-Z-0-9_@]+)_(ASC|DESC)$/);
15
-
16
11
  const createSort = params => {
17
12
  const {
18
13
  sort,
19
14
  defaults,
20
15
  fieldPlugins
21
16
  } = params;
22
-
23
17
  if (!sort || sort.length === 0) {
24
18
  const {
25
19
  field,
@@ -29,7 +23,6 @@ const createSort = params => {
29
23
  /**
30
24
  * We say that our system defaults is always id since all records we create have some kind of primary ID.
31
25
  */
32
-
33
26
  return {
34
27
  [field || "id.keyword"]: {
35
28
  order: order || "desc",
@@ -40,23 +33,17 @@ const createSort = params => {
40
33
  /**
41
34
  * Cast as string because nothing else should be allowed yet.
42
35
  */
43
-
44
-
45
36
  return sort.reduce((acc, value) => {
46
37
  if (typeof value !== "string") {
47
38
  throw new _error.default(`Sort as object is not supported..`);
48
39
  }
49
-
50
40
  const match = value.match(sortRegExp);
51
-
52
41
  if (!match) {
53
42
  throw new _error.default(`Cannot sort by "${value}".`);
54
43
  }
55
-
56
44
  const [, field, initialOrder] = match;
57
45
  const order = initialOrder.toLowerCase() === "asc" ? "asc" : "desc";
58
46
  const plugin = fieldPlugins[field] || fieldPlugins[_plugins.ElasticsearchFieldPlugin.ALL];
59
-
60
47
  if (!plugin) {
61
48
  throw new _error.default(`Missing plugin for the field "${field}"`, "PLUGIN_SORT_ERROR", {
62
49
  field
@@ -66,12 +53,9 @@ const createSort = params => {
66
53
  * In case field plugin is the global one, change the * with actual field name.
67
54
  * Custom path methods will return their own values anyway so replacing * will not matter.
68
55
  */
69
-
70
-
71
56
  const path = plugin.getPath(field);
72
57
  acc[path] = plugin.getSortOptions(order);
73
58
  return acc;
74
59
  }, {});
75
60
  };
76
-
77
61
  exports.createSort = createSort;
package/sort.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"names":["sortRegExp","RegExp","createSort","params","sort","defaults","fieldPlugins","length","field","order","unmappedType","unmapped_type","undefined","reduce","acc","value","WebinyError","match","initialOrder","toLowerCase","plugin","ElasticsearchFieldPlugin","ALL","path","getPath","getSortOptions"],"sources":["sort.ts"],"sourcesContent":["import WebinyError from \"@webiny/error\";\nimport { FieldSortOptions, SortType, SortOrder } from \"~/types\";\nimport { ElasticsearchFieldPlugin } from \"~/plugins\";\n\nconst sortRegExp = new RegExp(/^([a-zA-Z-0-9_@]+)_(ASC|DESC)$/);\n\ninterface CreateSortParams {\n sort: string[];\n defaults?: {\n field?: string;\n order?: SortOrder;\n unmappedType?: string;\n };\n fieldPlugins: Record<string, ElasticsearchFieldPlugin>;\n}\n\nexport const createSort = (params: CreateSortParams): SortType => {\n const { sort, defaults, fieldPlugins } = params;\n if (!sort || sort.length === 0) {\n const { field, order, unmappedType } = defaults || {};\n /**\n * We say that our system defaults is always id since all records we create have some kind of primary ID.\n */\n return {\n [field || \"id.keyword\"]: {\n order: order || \"desc\",\n unmapped_type: unmappedType || undefined\n }\n };\n }\n /**\n * Cast as string because nothing else should be allowed yet.\n */\n return sort.reduce((acc, value) => {\n if (typeof value !== \"string\") {\n throw new WebinyError(`Sort as object is not supported..`);\n }\n const match = value.match(sortRegExp);\n\n if (!match) {\n throw new WebinyError(`Cannot sort by \"${value}\".`);\n }\n\n const [, field, initialOrder] = match;\n const order: SortOrder = initialOrder.toLowerCase() === \"asc\" ? \"asc\" : \"desc\";\n\n const plugin: ElasticsearchFieldPlugin =\n fieldPlugins[field] || fieldPlugins[ElasticsearchFieldPlugin.ALL];\n if (!plugin) {\n throw new WebinyError(`Missing plugin for the field \"${field}\"`, \"PLUGIN_SORT_ERROR\", {\n field\n });\n }\n /**\n * In case field plugin is the global one, change the * with actual field name.\n * Custom path methods will return their own values anyway so replacing * will not matter.\n */\n const path = plugin.getPath(field);\n\n acc[path] = plugin.getSortOptions(order);\n\n return acc;\n }, {} as Record<string, FieldSortOptions>);\n};\n"],"mappings":";;;;;;;;;AAAA;;AAEA;;AAEA,MAAMA,UAAU,GAAG,IAAIC,MAAJ,CAAW,gCAAX,CAAnB;;AAYO,MAAMC,UAAU,GAAIC,MAAD,IAAwC;EAC9D,MAAM;IAAEC,IAAF;IAAQC,QAAR;IAAkBC;EAAlB,IAAmCH,MAAzC;;EACA,IAAI,CAACC,IAAD,IAASA,IAAI,CAACG,MAAL,KAAgB,CAA7B,EAAgC;IAC5B,MAAM;MAAEC,KAAF;MAASC,KAAT;MAAgBC;IAAhB,IAAiCL,QAAQ,IAAI,EAAnD;IACA;AACR;AACA;;IACQ,OAAO;MACH,CAACG,KAAK,IAAI,YAAV,GAAyB;QACrBC,KAAK,EAAEA,KAAK,IAAI,MADK;QAErBE,aAAa,EAAED,YAAY,IAAIE;MAFV;IADtB,CAAP;EAMH;EACD;AACJ;AACA;;;EACI,OAAOR,IAAI,CAACS,MAAL,CAAY,CAACC,GAAD,EAAMC,KAAN,KAAgB;IAC/B,IAAI,OAAOA,KAAP,KAAiB,QAArB,EAA+B;MAC3B,MAAM,IAAIC,cAAJ,CAAiB,mCAAjB,CAAN;IACH;;IACD,MAAMC,KAAK,GAAGF,KAAK,CAACE,KAAN,CAAYjB,UAAZ,CAAd;;IAEA,IAAI,CAACiB,KAAL,EAAY;MACR,MAAM,IAAID,cAAJ,CAAiB,mBAAkBD,KAAM,IAAzC,CAAN;IACH;;IAED,MAAM,GAAGP,KAAH,EAAUU,YAAV,IAA0BD,KAAhC;IACA,MAAMR,KAAgB,GAAGS,YAAY,CAACC,WAAb,OAA+B,KAA/B,GAAuC,KAAvC,GAA+C,MAAxE;IAEA,MAAMC,MAAgC,GAClCd,YAAY,CAACE,KAAD,CAAZ,IAAuBF,YAAY,CAACe,iCAAA,CAAyBC,GAA1B,CADvC;;IAEA,IAAI,CAACF,MAAL,EAAa;MACT,MAAM,IAAIJ,cAAJ,CAAiB,iCAAgCR,KAAM,GAAvD,EAA2D,mBAA3D,EAAgF;QAClFA;MADkF,CAAhF,CAAN;IAGH;IACD;AACR;AACA;AACA;;;IACQ,MAAMe,IAAI,GAAGH,MAAM,CAACI,OAAP,CAAehB,KAAf,CAAb;IAEAM,GAAG,CAACS,IAAD,CAAH,GAAYH,MAAM,CAACK,cAAP,CAAsBhB,KAAtB,CAAZ;IAEA,OAAOK,GAAP;EACH,CA7BM,EA6BJ,EA7BI,CAAP;AA8BH,CA/CM"}
1
+ {"version":3,"names":["sortRegExp","RegExp","createSort","params","sort","defaults","fieldPlugins","length","field","order","unmappedType","unmapped_type","undefined","reduce","acc","value","WebinyError","match","initialOrder","toLowerCase","plugin","ElasticsearchFieldPlugin","ALL","path","getPath","getSortOptions"],"sources":["sort.ts"],"sourcesContent":["import WebinyError from \"@webiny/error\";\nimport { FieldSortOptions, SortType, SortOrder } from \"~/types\";\nimport { ElasticsearchFieldPlugin } from \"~/plugins\";\n\nconst sortRegExp = new RegExp(/^([a-zA-Z-0-9_@]+)_(ASC|DESC)$/);\n\ninterface CreateSortParams {\n sort: string[];\n defaults?: {\n field?: string;\n order?: SortOrder;\n unmappedType?: string;\n };\n fieldPlugins: Record<string, ElasticsearchFieldPlugin>;\n}\n\nexport const createSort = (params: CreateSortParams): SortType => {\n const { sort, defaults, fieldPlugins } = params;\n if (!sort || sort.length === 0) {\n const { field, order, unmappedType } = defaults || {};\n /**\n * We say that our system defaults is always id since all records we create have some kind of primary ID.\n */\n return {\n [field || \"id.keyword\"]: {\n order: order || \"desc\",\n unmapped_type: unmappedType || undefined\n }\n };\n }\n /**\n * Cast as string because nothing else should be allowed yet.\n */\n return sort.reduce((acc, value) => {\n if (typeof value !== \"string\") {\n throw new WebinyError(`Sort as object is not supported..`);\n }\n const match = value.match(sortRegExp);\n\n if (!match) {\n throw new WebinyError(`Cannot sort by \"${value}\".`);\n }\n\n const [, field, initialOrder] = match;\n const order: SortOrder = initialOrder.toLowerCase() === \"asc\" ? \"asc\" : \"desc\";\n\n const plugin: ElasticsearchFieldPlugin =\n fieldPlugins[field] || fieldPlugins[ElasticsearchFieldPlugin.ALL];\n if (!plugin) {\n throw new WebinyError(`Missing plugin for the field \"${field}\"`, \"PLUGIN_SORT_ERROR\", {\n field\n });\n }\n /**\n * In case field plugin is the global one, change the * with actual field name.\n * Custom path methods will return their own values anyway so replacing * will not matter.\n */\n const path = plugin.getPath(field);\n\n acc[path] = plugin.getSortOptions(order);\n\n return acc;\n }, {} as Record<string, FieldSortOptions>);\n};\n"],"mappings":";;;;;;;AAAA;AAEA;AAEA,MAAMA,UAAU,GAAG,IAAIC,MAAM,CAAC,gCAAgC,CAAC;AAYxD,MAAMC,UAAU,GAAIC,MAAwB,IAAe;EAC9D,MAAM;IAAEC,IAAI;IAAEC,QAAQ;IAAEC;EAAa,CAAC,GAAGH,MAAM;EAC/C,IAAI,CAACC,IAAI,IAAIA,IAAI,CAACG,MAAM,KAAK,CAAC,EAAE;IAC5B,MAAM;MAAEC,KAAK;MAAEC,KAAK;MAAEC;IAAa,CAAC,GAAGL,QAAQ,IAAI,CAAC,CAAC;IACrD;AACR;AACA;IACQ,OAAO;MACH,CAACG,KAAK,IAAI,YAAY,GAAG;QACrBC,KAAK,EAAEA,KAAK,IAAI,MAAM;QACtBE,aAAa,EAAED,YAAY,IAAIE;MACnC;IACJ,CAAC;EACL;EACA;AACJ;AACA;EACI,OAAOR,IAAI,CAACS,MAAM,CAAC,CAACC,GAAG,EAAEC,KAAK,KAAK;IAC/B,IAAI,OAAOA,KAAK,KAAK,QAAQ,EAAE;MAC3B,MAAM,IAAIC,cAAW,CAAE,mCAAkC,CAAC;IAC9D;IACA,MAAMC,KAAK,GAAGF,KAAK,CAACE,KAAK,CAACjB,UAAU,CAAC;IAErC,IAAI,CAACiB,KAAK,EAAE;MACR,MAAM,IAAID,cAAW,CAAE,mBAAkBD,KAAM,IAAG,CAAC;IACvD;IAEA,MAAM,GAAGP,KAAK,EAAEU,YAAY,CAAC,GAAGD,KAAK;IACrC,MAAMR,KAAgB,GAAGS,YAAY,CAACC,WAAW,EAAE,KAAK,KAAK,GAAG,KAAK,GAAG,MAAM;IAE9E,MAAMC,MAAgC,GAClCd,YAAY,CAACE,KAAK,CAAC,IAAIF,YAAY,CAACe,iCAAwB,CAACC,GAAG,CAAC;IACrE,IAAI,CAACF,MAAM,EAAE;MACT,MAAM,IAAIJ,cAAW,CAAE,iCAAgCR,KAAM,GAAE,EAAE,mBAAmB,EAAE;QAClFA;MACJ,CAAC,CAAC;IACN;IACA;AACR;AACA;AACA;IACQ,MAAMe,IAAI,GAAGH,MAAM,CAACI,OAAO,CAAChB,KAAK,CAAC;IAElCM,GAAG,CAACS,IAAI,CAAC,GAAGH,MAAM,CAACK,cAAc,CAAChB,KAAK,CAAC;IAExC,OAAOK,GAAG;EACd,CAAC,EAAE,CAAC,CAAC,CAAqC;AAC9C,CAAC;AAAC"}
package/types.d.ts CHANGED
@@ -64,6 +64,7 @@ export interface ElasticsearchSearchResponseHit<T> {
64
64
  }
65
65
  export interface ElasticsearchSearchResponseAggregationBucket<T> {
66
66
  key: T;
67
+ doc_count: number;
67
68
  }
68
69
  export interface ElasticsearchSearchResponse<T = any> {
69
70
  body: {
package/types.js CHANGED
@@ -12,11 +12,8 @@ Object.defineProperty(exports, "ApiResponse", {
12
12
  return _elasticsearch.ApiResponse;
13
13
  }
14
14
  });
15
-
16
15
  var _elasticsearch = require("@elastic/elasticsearch");
17
-
18
16
  var _elasticTs = require("elastic-ts");
19
-
20
17
  Object.keys(_elasticTs).forEach(function (key) {
21
18
  if (key === "default" || key === "__esModule") return;
22
19
  if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
package/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["import { Client, ApiResponse } from \"@elastic/elasticsearch\";\nimport { BoolQueryConfig as esBoolQueryConfig, Query as esQuery } from \"elastic-ts\";\nimport { Context } from \"@webiny/api/types\";\n/**\n * Re-export some dep lib types.\n */\nexport * from \"elastic-ts\";\nexport { ApiResponse };\n\nexport interface ElasticsearchContext extends Context {\n elasticsearch: Client;\n}\n\n/**\n * To simplify our plugins, we say that query contains arrays of objects, not single objects.\n * And that they all are defined as empty arrays at the start.\n */\nexport interface ElasticsearchBoolQueryConfig extends esBoolQueryConfig {\n must: esQuery[];\n filter: esQuery[];\n should: esQuery[];\n must_not: esQuery[];\n}\n\n/**\n * Definitions of possible Elasticsearch operators.\n *\n * @category Elasticsearch\n */\nexport type ElasticsearchQueryOperator =\n | \"eq\"\n | \"not\"\n | \"in\"\n | \"not_in\"\n | \"contains\"\n | \"not_contains\"\n | \"between\"\n | \"not_between\"\n | \"gt\"\n | \"gte\"\n | \"lt\"\n | \"lte\"\n | string;\n\n/**\n * Definition for arguments of the ElasticsearchQueryBuilderOperatorPlugin.apply method.\n *\n * @see ElasticsearchQueryBuilderOperatorPlugin.apply\n *\n * @category Plugin\n * @category Elasticsearch\n */\nexport interface ElasticsearchQueryBuilderArgsPlugin {\n /**\n * Name of the field.\n */\n name: string;\n /**\n * A full path to the field. Including the \".keyword\" if it is added.\n */\n path: string;\n /**\n * A path to the field, plain.\n */\n basePath: string;\n /**\n * Value to apply.\n */\n value: any;\n /**\n * Is path containing the \".keyword\"\n */\n keyword: boolean;\n}\n\n/**\n * Elasticsearch responses.\n */\nexport interface ElasticsearchSearchResponseHit<T> {\n _source: T;\n sort: string;\n}\nexport interface ElasticsearchSearchResponseAggregationBucket<T> {\n key: T;\n}\nexport interface ElasticsearchSearchResponse<T = any> {\n body: {\n hits: {\n hits: ElasticsearchSearchResponseHit<T>[];\n total: {\n value: number;\n };\n };\n aggregations: {\n [key: string]: {\n buckets: ElasticsearchSearchResponseAggregationBucket<T>[];\n };\n };\n };\n}\n\nexport interface ElasticsearchIndexRequestBodyMappingsDynamicTemplate {\n [key: string]: {\n path_match?: string;\n path_unmatch?: string;\n match_mapping_type?: string;\n match?: string;\n unmatch?: string;\n mapping?: {\n numeric_detection?: boolean;\n date_detection?: boolean;\n type?:\n | \"string\"\n | \"date\"\n | \"binary\"\n | \"boolean\"\n | \"object\"\n | \"ip\"\n | \"geo\"\n | \"long\"\n | \"integer\"\n | \"short\"\n | \"byte\"\n | \"double\"\n | \"float\"\n | \"half_float\"\n | \"scaled_float\"\n | \"unsigned_long\"\n | string;\n search_analyzer?: string;\n analyzer?: string;\n fields?: {\n [key: string]:\n | {\n type: string;\n search_analyzer?: string;\n analyzer?: string;\n ignore_above?: number;\n [key: string]: any;\n }\n | undefined;\n };\n [key: string]: any;\n };\n [key: string]: any;\n };\n}\n\ninterface ElasticsearchIndexRequestBodySettings {\n analysis?: {\n [key: string]: any;\n };\n number_of_shards?: number;\n number_of_routing_shards?: number;\n codec?: string;\n routing_partition_size?: number;\n soft_deletes?: {\n enabled?: boolean;\n retention_lease?: {\n period?: string;\n };\n };\n load_fixed_bitset_filters_eagerly?: boolean;\n shard?: {\n check_on_startup?: boolean | \"checksum\";\n };\n number_of_replicas?: number;\n auto_expand_replicas?: string | \"all\" | false;\n search?: {\n idle?: {\n after?: string;\n };\n };\n refresh_interval?: string;\n max_result_window?: number;\n max_inner_result_window?: number;\n max_rescore_window?: number;\n max_docvalue_fields_search?: number;\n max_script_fields?: number;\n max_ngram_diff?: number;\n max_shingle_diff?: number;\n max_refresh_listeners?: number;\n analyze?: {\n max_token_count?: number;\n };\n highlight?: {\n max_analyzed_offset?: number;\n };\n max_terms_count?: number;\n max_regex_length?: number;\n query?: {\n default_field?: string;\n };\n routing?: {\n allocation?: {\n enable?: \"all\" | \"primaries\" | \"new_primaries\" | \"none\";\n };\n rebalance?: {\n enable?: \"all\" | \"primaries\" | \"new_primaries\" | \"none\";\n };\n };\n gc_deletes?: string;\n default_pipeline?: string;\n final_pipeline?: string;\n hidden?: boolean;\n [key: string]: any;\n}\n\nexport interface ElasticsearchIndexRequestBody {\n settings?: {\n index?: Partial<ElasticsearchIndexRequestBodySettings>;\n };\n mappings: {\n numeric_detection?: boolean;\n dynamic_templates?: ElasticsearchIndexRequestBodyMappingsDynamicTemplate[];\n properties?: {\n [key: string]: {\n analyzer?: string;\n type?: string;\n normalizer?: string;\n index?: string;\n fields?: {\n [key: string]: {\n type: string;\n ignore_above?: number;\n search_analyzer?: string;\n analyzer?: string;\n [key: string]: any;\n };\n };\n [key: string]: any;\n };\n };\n [key: string]: any;\n };\n aliases?: {\n [key: string]: {\n filter?: {\n [key: string]: any;\n };\n index_routing?: string;\n is_hidden?: boolean;\n is_write_index?: boolean;\n routing?: string;\n search_routing?: string;\n };\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;AAAA;;AAMA;;AAAA;EAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA"}
1
+ {"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["import { Client, ApiResponse } from \"@elastic/elasticsearch\";\nimport { BoolQueryConfig as esBoolQueryConfig, Query as esQuery } from \"elastic-ts\";\nimport { Context } from \"@webiny/api/types\";\n/**\n * Re-export some dep lib types.\n */\nexport * from \"elastic-ts\";\nexport { ApiResponse };\n\nexport interface ElasticsearchContext extends Context {\n elasticsearch: Client;\n}\n\n/**\n * To simplify our plugins, we say that query contains arrays of objects, not single objects.\n * And that they all are defined as empty arrays at the start.\n */\nexport interface ElasticsearchBoolQueryConfig extends esBoolQueryConfig {\n must: esQuery[];\n filter: esQuery[];\n should: esQuery[];\n must_not: esQuery[];\n}\n\n/**\n * Definitions of possible Elasticsearch operators.\n *\n * @category Elasticsearch\n */\nexport type ElasticsearchQueryOperator =\n | \"eq\"\n | \"not\"\n | \"in\"\n | \"not_in\"\n | \"contains\"\n | \"not_contains\"\n | \"between\"\n | \"not_between\"\n | \"gt\"\n | \"gte\"\n | \"lt\"\n | \"lte\"\n | string;\n\n/**\n * Definition for arguments of the ElasticsearchQueryBuilderOperatorPlugin.apply method.\n *\n * @see ElasticsearchQueryBuilderOperatorPlugin.apply\n *\n * @category Plugin\n * @category Elasticsearch\n */\nexport interface ElasticsearchQueryBuilderArgsPlugin {\n /**\n * Name of the field.\n */\n name: string;\n /**\n * A full path to the field. Including the \".keyword\" if it is added.\n */\n path: string;\n /**\n * A path to the field, plain.\n */\n basePath: string;\n /**\n * Value to apply.\n */\n value: any;\n /**\n * Is path containing the \".keyword\"\n */\n keyword: boolean;\n}\n\n/**\n * Elasticsearch responses.\n */\nexport interface ElasticsearchSearchResponseHit<T> {\n _source: T;\n sort: string;\n}\nexport interface ElasticsearchSearchResponseAggregationBucket<T> {\n key: T;\n doc_count: number;\n}\nexport interface ElasticsearchSearchResponse<T = any> {\n body: {\n hits: {\n hits: ElasticsearchSearchResponseHit<T>[];\n total: {\n value: number;\n };\n };\n aggregations: {\n [key: string]: {\n buckets: ElasticsearchSearchResponseAggregationBucket<T>[];\n };\n };\n };\n}\n\nexport interface ElasticsearchIndexRequestBodyMappingsDynamicTemplate {\n [key: string]: {\n path_match?: string;\n path_unmatch?: string;\n match_mapping_type?: string;\n match?: string;\n unmatch?: string;\n mapping?: {\n numeric_detection?: boolean;\n date_detection?: boolean;\n type?:\n | \"string\"\n | \"date\"\n | \"binary\"\n | \"boolean\"\n | \"object\"\n | \"ip\"\n | \"geo\"\n | \"long\"\n | \"integer\"\n | \"short\"\n | \"byte\"\n | \"double\"\n | \"float\"\n | \"half_float\"\n | \"scaled_float\"\n | \"unsigned_long\"\n | string;\n search_analyzer?: string;\n analyzer?: string;\n fields?: {\n [key: string]:\n | {\n type: string;\n search_analyzer?: string;\n analyzer?: string;\n ignore_above?: number;\n [key: string]: any;\n }\n | undefined;\n };\n [key: string]: any;\n };\n [key: string]: any;\n };\n}\n\ninterface ElasticsearchIndexRequestBodySettings {\n analysis?: {\n [key: string]: any;\n };\n number_of_shards?: number;\n number_of_routing_shards?: number;\n codec?: string;\n routing_partition_size?: number;\n soft_deletes?: {\n enabled?: boolean;\n retention_lease?: {\n period?: string;\n };\n };\n load_fixed_bitset_filters_eagerly?: boolean;\n shard?: {\n check_on_startup?: boolean | \"checksum\";\n };\n number_of_replicas?: number;\n auto_expand_replicas?: string | \"all\" | false;\n search?: {\n idle?: {\n after?: string;\n };\n };\n refresh_interval?: string;\n max_result_window?: number;\n max_inner_result_window?: number;\n max_rescore_window?: number;\n max_docvalue_fields_search?: number;\n max_script_fields?: number;\n max_ngram_diff?: number;\n max_shingle_diff?: number;\n max_refresh_listeners?: number;\n analyze?: {\n max_token_count?: number;\n };\n highlight?: {\n max_analyzed_offset?: number;\n };\n max_terms_count?: number;\n max_regex_length?: number;\n query?: {\n default_field?: string;\n };\n routing?: {\n allocation?: {\n enable?: \"all\" | \"primaries\" | \"new_primaries\" | \"none\";\n };\n rebalance?: {\n enable?: \"all\" | \"primaries\" | \"new_primaries\" | \"none\";\n };\n };\n gc_deletes?: string;\n default_pipeline?: string;\n final_pipeline?: string;\n hidden?: boolean;\n [key: string]: any;\n}\n\nexport interface ElasticsearchIndexRequestBody {\n settings?: {\n index?: Partial<ElasticsearchIndexRequestBodySettings>;\n };\n mappings: {\n numeric_detection?: boolean;\n dynamic_templates?: ElasticsearchIndexRequestBodyMappingsDynamicTemplate[];\n properties?: {\n [key: string]: {\n analyzer?: string;\n type?: string;\n normalizer?: string;\n index?: string;\n fields?: {\n [key: string]: {\n type: string;\n ignore_above?: number;\n search_analyzer?: string;\n analyzer?: string;\n [key: string]: any;\n };\n };\n [key: string]: any;\n };\n };\n [key: string]: any;\n };\n aliases?: {\n [key: string]: {\n filter?: {\n [key: string]: any;\n };\n index_routing?: string;\n is_hidden?: boolean;\n is_write_index?: boolean;\n routing?: string;\n search_routing?: string;\n };\n };\n}\n"],"mappings":";;;;;;;;;;;;;;AAAA;AAMA;AAAA;EAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA"}
package/where.js CHANGED
@@ -1,41 +1,30 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
-
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
7
  exports.parseWhereKey = exports.applyWhere = void 0;
9
-
10
8
  var _ElasticsearchFieldPlugin = require("./plugins/definition/ElasticsearchFieldPlugin");
11
-
12
9
  var _error = _interopRequireDefault(require("@webiny/error"));
13
-
14
10
  const parseWhereKeyRegExp = new RegExp(/^([a-zA-Z0-9]+)(_[a-zA-Z0-9_]+)?$/);
15
-
16
11
  const parseWhereKey = key => {
17
12
  const match = key.match(parseWhereKeyRegExp);
18
-
19
13
  if (!match) {
20
14
  throw new Error(`It is not possible to search by key "${key}"`);
21
15
  }
22
-
23
16
  const [, field, operation = "eq"] = match;
24
-
25
- if (!field.match(/^([a-zA-Z]+)$/)) {
17
+ if (!field.match(/^([a-zA-Z0-9]+)$/)) {
26
18
  throw new Error(`Cannot filter by "${field}".`);
27
19
  }
28
-
29
20
  const operator = operation.match(/^_/) ? operation.slice(1) : operation;
30
21
  return {
31
22
  field,
32
23
  operator
33
24
  };
34
25
  };
35
-
36
26
  exports.parseWhereKey = parseWhereKey;
37
27
  const ALL = _ElasticsearchFieldPlugin.ElasticsearchFieldPlugin.ALL;
38
-
39
28
  const applyWhere = params => {
40
29
  const {
41
30
  query,
@@ -43,52 +32,43 @@ const applyWhere = params => {
43
32
  fields,
44
33
  operators
45
34
  } = params;
46
-
47
35
  for (const key in where) {
48
36
  if (where.hasOwnProperty(key) === false) {
49
37
  continue;
50
38
  }
51
-
52
39
  const initialValue = where[key];
53
40
  /**
54
41
  * There is a possibility that undefined is sent as a value, so just skip it.
55
42
  */
56
-
57
43
  if (initialValue === undefined) {
58
44
  continue;
59
45
  }
60
-
61
46
  const {
62
47
  field,
63
48
  operator
64
49
  } = parseWhereKey(key);
65
50
  const fieldPlugin = fields[field] || fields[ALL];
66
-
67
51
  if (!fieldPlugin) {
68
52
  throw new _error.default(`Missing plugin for the field "${field}".`, "PLUGIN_WHERE_ERROR", {
69
53
  field
70
54
  });
71
55
  }
72
-
73
56
  const operatorPlugin = operators[operator];
74
-
75
57
  if (!operatorPlugin) {
76
58
  throw new _error.default(`Missing plugin for the operator "${operator}"`, "PLUGIN_WHERE_ERROR", {
77
59
  operator
78
60
  });
79
61
  }
62
+
80
63
  /**
81
64
  * Get the path but in the case of * (all fields, replace * with the field.
82
65
  * Custom path would return its own value anyways.
83
66
  */
84
-
85
-
86
67
  const path = fieldPlugin.getPath(field);
87
68
  const basePath = fieldPlugin.getBasePath(field);
88
69
  /**
89
70
  * Transform the value for the search.
90
71
  */
91
-
92
72
  const value = fieldPlugin.toSearchValue({
93
73
  value: initialValue,
94
74
  path,
@@ -103,5 +83,4 @@ const applyWhere = params => {
103
83
  });
104
84
  }
105
85
  };
106
-
107
86
  exports.applyWhere = applyWhere;
package/where.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"names":["parseWhereKeyRegExp","RegExp","parseWhereKey","key","match","Error","field","operation","operator","slice","ALL","ElasticsearchFieldPlugin","applyWhere","params","query","where","fields","operators","hasOwnProperty","initialValue","undefined","fieldPlugin","WebinyError","operatorPlugin","path","getPath","basePath","getBasePath","value","toSearchValue","apply","name","keyword"],"sources":["where.ts"],"sourcesContent":["import { ElasticsearchBoolQueryConfig } from \"~/types\";\nimport { ElasticsearchFieldPlugin } from \"~/plugins/definition/ElasticsearchFieldPlugin\";\nimport { ElasticsearchQueryBuilderOperatorPlugin } from \"~/plugins/definition/ElasticsearchQueryBuilderOperatorPlugin\";\nimport WebinyError from \"@webiny/error\";\n\ntype Records<T> = Record<string, T>;\n\nexport interface ApplyWhereParams {\n query: ElasticsearchBoolQueryConfig;\n where: Records<any>;\n fields: Records<ElasticsearchFieldPlugin>;\n operators: Records<ElasticsearchQueryBuilderOperatorPlugin>;\n}\n\nexport interface ParseWhereKeyResult {\n field: string;\n operator: string;\n}\n\nconst parseWhereKeyRegExp = new RegExp(/^([a-zA-Z0-9]+)(_[a-zA-Z0-9_]+)?$/);\n\nexport const parseWhereKey = (key: string): ParseWhereKeyResult => {\n const match = key.match(parseWhereKeyRegExp);\n\n if (!match) {\n throw new Error(`It is not possible to search by key \"${key}\"`);\n }\n\n const [, field, operation = \"eq\"] = match;\n\n if (!field.match(/^([a-zA-Z]+)$/)) {\n throw new Error(`Cannot filter by \"${field}\".`);\n }\n\n const operator = operation.match(/^_/) ? operation.slice(1) : operation;\n\n return { field, operator };\n};\n\nconst ALL = ElasticsearchFieldPlugin.ALL;\n\nexport const applyWhere = (params: ApplyWhereParams): void => {\n const { query, where, fields, operators } = params;\n\n for (const key in where) {\n if (where.hasOwnProperty(key) === false) {\n continue;\n }\n const initialValue = where[key];\n /**\n * There is a possibility that undefined is sent as a value, so just skip it.\n */\n if (initialValue === undefined) {\n continue;\n }\n const { field, operator } = parseWhereKey(key);\n const fieldPlugin: ElasticsearchFieldPlugin = fields[field] || fields[ALL];\n if (!fieldPlugin) {\n throw new WebinyError(\n `Missing plugin for the field \"${field}\".`,\n \"PLUGIN_WHERE_ERROR\",\n {\n field\n }\n );\n }\n const operatorPlugin = operators[operator];\n if (!operatorPlugin) {\n throw new WebinyError(\n `Missing plugin for the operator \"${operator}\"`,\n \"PLUGIN_WHERE_ERROR\",\n {\n operator\n }\n );\n }\n\n /**\n * Get the path but in the case of * (all fields, replace * with the field.\n * Custom path would return its own value anyways.\n */\n const path = fieldPlugin.getPath(field);\n const basePath = fieldPlugin.getBasePath(field);\n /**\n * Transform the value for the search.\n */\n const value = fieldPlugin.toSearchValue({\n value: initialValue,\n path,\n basePath\n });\n\n operatorPlugin.apply(query, {\n name: field,\n value,\n path,\n basePath,\n keyword: fieldPlugin.keyword\n });\n }\n};\n"],"mappings":";;;;;;;;;AACA;;AAEA;;AAgBA,MAAMA,mBAAmB,GAAG,IAAIC,MAAJ,CAAW,mCAAX,CAA5B;;AAEO,MAAMC,aAAa,GAAIC,GAAD,IAAsC;EAC/D,MAAMC,KAAK,GAAGD,GAAG,CAACC,KAAJ,CAAUJ,mBAAV,CAAd;;EAEA,IAAI,CAACI,KAAL,EAAY;IACR,MAAM,IAAIC,KAAJ,CAAW,wCAAuCF,GAAI,GAAtD,CAAN;EACH;;EAED,MAAM,GAAGG,KAAH,EAAUC,SAAS,GAAG,IAAtB,IAA8BH,KAApC;;EAEA,IAAI,CAACE,KAAK,CAACF,KAAN,CAAY,eAAZ,CAAL,EAAmC;IAC/B,MAAM,IAAIC,KAAJ,CAAW,qBAAoBC,KAAM,IAArC,CAAN;EACH;;EAED,MAAME,QAAQ,GAAGD,SAAS,CAACH,KAAV,CAAgB,IAAhB,IAAwBG,SAAS,CAACE,KAAV,CAAgB,CAAhB,CAAxB,GAA6CF,SAA9D;EAEA,OAAO;IAAED,KAAF;IAASE;EAAT,CAAP;AACH,CAhBM;;;AAkBP,MAAME,GAAG,GAAGC,kDAAA,CAAyBD,GAArC;;AAEO,MAAME,UAAU,GAAIC,MAAD,IAAoC;EAC1D,MAAM;IAAEC,KAAF;IAASC,KAAT;IAAgBC,MAAhB;IAAwBC;EAAxB,IAAsCJ,MAA5C;;EAEA,KAAK,MAAMV,GAAX,IAAkBY,KAAlB,EAAyB;IACrB,IAAIA,KAAK,CAACG,cAAN,CAAqBf,GAArB,MAA8B,KAAlC,EAAyC;MACrC;IACH;;IACD,MAAMgB,YAAY,GAAGJ,KAAK,CAACZ,GAAD,CAA1B;IACA;AACR;AACA;;IACQ,IAAIgB,YAAY,KAAKC,SAArB,EAAgC;MAC5B;IACH;;IACD,MAAM;MAAEd,KAAF;MAASE;IAAT,IAAsBN,aAAa,CAACC,GAAD,CAAzC;IACA,MAAMkB,WAAqC,GAAGL,MAAM,CAACV,KAAD,CAAN,IAAiBU,MAAM,CAACN,GAAD,CAArE;;IACA,IAAI,CAACW,WAAL,EAAkB;MACd,MAAM,IAAIC,cAAJ,CACD,iCAAgChB,KAAM,IADrC,EAEF,oBAFE,EAGF;QACIA;MADJ,CAHE,CAAN;IAOH;;IACD,MAAMiB,cAAc,GAAGN,SAAS,CAACT,QAAD,CAAhC;;IACA,IAAI,CAACe,cAAL,EAAqB;MACjB,MAAM,IAAID,cAAJ,CACD,oCAAmCd,QAAS,GAD3C,EAEF,oBAFE,EAGF;QACIA;MADJ,CAHE,CAAN;IAOH;IAED;AACR;AACA;AACA;;;IACQ,MAAMgB,IAAI,GAAGH,WAAW,CAACI,OAAZ,CAAoBnB,KAApB,CAAb;IACA,MAAMoB,QAAQ,GAAGL,WAAW,CAACM,WAAZ,CAAwBrB,KAAxB,CAAjB;IACA;AACR;AACA;;IACQ,MAAMsB,KAAK,GAAGP,WAAW,CAACQ,aAAZ,CAA0B;MACpCD,KAAK,EAAET,YAD6B;MAEpCK,IAFoC;MAGpCE;IAHoC,CAA1B,CAAd;IAMAH,cAAc,CAACO,KAAf,CAAqBhB,KAArB,EAA4B;MACxBiB,IAAI,EAAEzB,KADkB;MAExBsB,KAFwB;MAGxBJ,IAHwB;MAIxBE,QAJwB;MAKxBM,OAAO,EAAEX,WAAW,CAACW;IALG,CAA5B;EAOH;AACJ,CA3DM"}
1
+ {"version":3,"names":["parseWhereKeyRegExp","RegExp","parseWhereKey","key","match","Error","field","operation","operator","slice","ALL","ElasticsearchFieldPlugin","applyWhere","params","query","where","fields","operators","hasOwnProperty","initialValue","undefined","fieldPlugin","WebinyError","operatorPlugin","path","getPath","basePath","getBasePath","value","toSearchValue","apply","name","keyword"],"sources":["where.ts"],"sourcesContent":["import { ElasticsearchBoolQueryConfig } from \"~/types\";\nimport { ElasticsearchFieldPlugin } from \"~/plugins/definition/ElasticsearchFieldPlugin\";\nimport { ElasticsearchQueryBuilderOperatorPlugin } from \"~/plugins/definition/ElasticsearchQueryBuilderOperatorPlugin\";\nimport WebinyError from \"@webiny/error\";\n\ntype Records<T> = Record<string, T>;\n\nexport interface ApplyWhereParams {\n query: ElasticsearchBoolQueryConfig;\n where: Records<any>;\n fields: Records<ElasticsearchFieldPlugin>;\n operators: Records<ElasticsearchQueryBuilderOperatorPlugin>;\n}\n\nexport interface ParseWhereKeyResult {\n field: string;\n operator: string;\n}\n\nconst parseWhereKeyRegExp = new RegExp(/^([a-zA-Z0-9]+)(_[a-zA-Z0-9_]+)?$/);\n\nexport const parseWhereKey = (key: string): ParseWhereKeyResult => {\n const match = key.match(parseWhereKeyRegExp);\n\n if (!match) {\n throw new Error(`It is not possible to search by key \"${key}\"`);\n }\n\n const [, field, operation = \"eq\"] = match;\n\n if (!field.match(/^([a-zA-Z0-9]+)$/)) {\n throw new Error(`Cannot filter by \"${field}\".`);\n }\n\n const operator = operation.match(/^_/) ? operation.slice(1) : operation;\n\n return { field, operator };\n};\n\nconst ALL = ElasticsearchFieldPlugin.ALL;\n\nexport const applyWhere = (params: ApplyWhereParams): void => {\n const { query, where, fields, operators } = params;\n\n for (const key in where) {\n if (where.hasOwnProperty(key) === false) {\n continue;\n }\n const initialValue = where[key];\n /**\n * There is a possibility that undefined is sent as a value, so just skip it.\n */\n if (initialValue === undefined) {\n continue;\n }\n const { field, operator } = parseWhereKey(key);\n const fieldPlugin: ElasticsearchFieldPlugin = fields[field] || fields[ALL];\n if (!fieldPlugin) {\n throw new WebinyError(\n `Missing plugin for the field \"${field}\".`,\n \"PLUGIN_WHERE_ERROR\",\n {\n field\n }\n );\n }\n const operatorPlugin = operators[operator];\n if (!operatorPlugin) {\n throw new WebinyError(\n `Missing plugin for the operator \"${operator}\"`,\n \"PLUGIN_WHERE_ERROR\",\n {\n operator\n }\n );\n }\n\n /**\n * Get the path but in the case of * (all fields, replace * with the field.\n * Custom path would return its own value anyways.\n */\n const path = fieldPlugin.getPath(field);\n const basePath = fieldPlugin.getBasePath(field);\n /**\n * Transform the value for the search.\n */\n const value = fieldPlugin.toSearchValue({\n value: initialValue,\n path,\n basePath\n });\n\n operatorPlugin.apply(query, {\n name: field,\n value,\n path,\n basePath,\n keyword: fieldPlugin.keyword\n });\n }\n};\n"],"mappings":";;;;;;;AACA;AAEA;AAgBA,MAAMA,mBAAmB,GAAG,IAAIC,MAAM,CAAC,mCAAmC,CAAC;AAEpE,MAAMC,aAAa,GAAIC,GAAW,IAA0B;EAC/D,MAAMC,KAAK,GAAGD,GAAG,CAACC,KAAK,CAACJ,mBAAmB,CAAC;EAE5C,IAAI,CAACI,KAAK,EAAE;IACR,MAAM,IAAIC,KAAK,CAAE,wCAAuCF,GAAI,GAAE,CAAC;EACnE;EAEA,MAAM,GAAGG,KAAK,EAAEC,SAAS,GAAG,IAAI,CAAC,GAAGH,KAAK;EAEzC,IAAI,CAACE,KAAK,CAACF,KAAK,CAAC,kBAAkB,CAAC,EAAE;IAClC,MAAM,IAAIC,KAAK,CAAE,qBAAoBC,KAAM,IAAG,CAAC;EACnD;EAEA,MAAME,QAAQ,GAAGD,SAAS,CAACH,KAAK,CAAC,IAAI,CAAC,GAAGG,SAAS,CAACE,KAAK,CAAC,CAAC,CAAC,GAAGF,SAAS;EAEvE,OAAO;IAAED,KAAK;IAAEE;EAAS,CAAC;AAC9B,CAAC;AAAC;AAEF,MAAME,GAAG,GAAGC,kDAAwB,CAACD,GAAG;AAEjC,MAAME,UAAU,GAAIC,MAAwB,IAAW;EAC1D,MAAM;IAAEC,KAAK;IAAEC,KAAK;IAAEC,MAAM;IAAEC;EAAU,CAAC,GAAGJ,MAAM;EAElD,KAAK,MAAMV,GAAG,IAAIY,KAAK,EAAE;IACrB,IAAIA,KAAK,CAACG,cAAc,CAACf,GAAG,CAAC,KAAK,KAAK,EAAE;MACrC;IACJ;IACA,MAAMgB,YAAY,GAAGJ,KAAK,CAACZ,GAAG,CAAC;IAC/B;AACR;AACA;IACQ,IAAIgB,YAAY,KAAKC,SAAS,EAAE;MAC5B;IACJ;IACA,MAAM;MAAEd,KAAK;MAAEE;IAAS,CAAC,GAAGN,aAAa,CAACC,GAAG,CAAC;IAC9C,MAAMkB,WAAqC,GAAGL,MAAM,CAACV,KAAK,CAAC,IAAIU,MAAM,CAACN,GAAG,CAAC;IAC1E,IAAI,CAACW,WAAW,EAAE;MACd,MAAM,IAAIC,cAAW,CAChB,iCAAgChB,KAAM,IAAG,EAC1C,oBAAoB,EACpB;QACIA;MACJ,CAAC,CACJ;IACL;IACA,MAAMiB,cAAc,GAAGN,SAAS,CAACT,QAAQ,CAAC;IAC1C,IAAI,CAACe,cAAc,EAAE;MACjB,MAAM,IAAID,cAAW,CAChB,oCAAmCd,QAAS,GAAE,EAC/C,oBAAoB,EACpB;QACIA;MACJ,CAAC,CACJ;IACL;;IAEA;AACR;AACA;AACA;IACQ,MAAMgB,IAAI,GAAGH,WAAW,CAACI,OAAO,CAACnB,KAAK,CAAC;IACvC,MAAMoB,QAAQ,GAAGL,WAAW,CAACM,WAAW,CAACrB,KAAK,CAAC;IAC/C;AACR;AACA;IACQ,MAAMsB,KAAK,GAAGP,WAAW,CAACQ,aAAa,CAAC;MACpCD,KAAK,EAAET,YAAY;MACnBK,IAAI;MACJE;IACJ,CAAC,CAAC;IAEFH,cAAc,CAACO,KAAK,CAAChB,KAAK,EAAE;MACxBiB,IAAI,EAAEzB,KAAK;MACXsB,KAAK;MACLJ,IAAI;MACJE,QAAQ;MACRM,OAAO,EAAEX,WAAW,CAACW;IACzB,CAAC,CAAC;EACN;AACJ,CAAC;AAAC"}