@webiny/api-headless-cms-ddb-es 5.43.2 → 5.43.3-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.
@@ -1,10 +1,10 @@
1
1
  import { PluginsContainer } from "@webiny/plugins";
2
- import { CmsEntryListParams, CmsEntryListWhere, CmsModel } from "@webiny/api-headless-cms/types";
2
+ import { CmsEntryListWhere, type CmsEntryStorageOperationsListParams, CmsModel } from "@webiny/api-headless-cms/types";
3
3
  import { PrimitiveValue, SearchBody } from "@webiny/api-elasticsearch/types";
4
4
  interface Params {
5
5
  plugins: PluginsContainer;
6
6
  model: CmsModel;
7
- params: Omit<CmsEntryListParams, "where" | "after"> & {
7
+ params: Omit<CmsEntryStorageOperationsListParams, "where" | "after"> & {
8
8
  where: CmsEntryListWhere;
9
9
  after?: PrimitiveValue[];
10
10
  };
@@ -5,7 +5,6 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.createElasticsearchBody = void 0;
7
7
  var _fields = require("./fields");
8
- var _fullTextSearchFields = require("./fullTextSearchFields");
9
8
  var _initialQuery = require("./initialQuery");
10
9
  var _fullTextSearch = require("./fullTextSearch");
11
10
  var _queryModifier = require("./plugins/queryModifier");
@@ -56,15 +55,7 @@ const createElasticsearchBody = ({
56
55
  plugins,
57
56
  model
58
57
  });
59
- /**
60
- * We need the fields which we can search through via the full text search.
61
- *
62
- */
63
- const fullTextSearchFields = (0, _fullTextSearchFields.createFullTextSearchFields)({
64
- model,
65
- term,
66
- fields
67
- });
58
+
68
59
  /**
69
60
  * The initial elasticsearch query where we attach some default conditions we always need.
70
61
  */
@@ -80,7 +71,7 @@ const createElasticsearchBody = ({
80
71
  plugins,
81
72
  query,
82
73
  term,
83
- fields: fullTextSearchFields
74
+ fields
84
75
  });
85
76
  const execFiltering = (0, _filtering.createExecFiltering)({
86
77
  model,
@@ -1 +1 @@
1
- {"version":3,"names":["_fields","require","_fullTextSearchFields","_initialQuery","_fullTextSearch","_queryModifier","_sortModifier","_bodyModifier","_sort","_filtering","_assignMinimumShouldMatchToQuery","createElasticsearchBody","plugins","model","params","fields","search","term","where","sort","initialSort","after","limit","modelFields","createModelFields","queryModifierPlugins","createQueryModifierPluginList","sortModifierPlugins","createSortModifierPluginList","bodyModifierPlugins","createBodyModifierPluginList","fullTextSearchFields","createFullTextSearchFields","query","createInitialQuery","applyFullTextSearch","execFiltering","createExecFiltering","pl","modifyQuery","createElasticsearchSort","modifySort","boolQuery","must","length","undefined","must_not","should","filter","assignMinimumShouldMatchToQuery","body","bool","size","search_after","track_total_hits","modifyBody","exports"],"sources":["body.ts"],"sourcesContent":["import { PluginsContainer } from \"@webiny/plugins\";\nimport { CmsEntryListParams, CmsEntryListWhere, CmsModel } from \"@webiny/api-headless-cms/types\";\nimport { createModelFields } from \"./fields\";\nimport { createFullTextSearchFields } from \"./fullTextSearchFields\";\nimport { createInitialQuery } from \"./initialQuery\";\nimport { applyFullTextSearch } from \"./fullTextSearch\";\nimport { createQueryModifierPluginList } from \"./plugins/queryModifier\";\nimport { createSortModifierPluginList } from \"./plugins/sortModifier\";\nimport { createBodyModifierPluginList } from \"./plugins/bodyModifier\";\nimport { createElasticsearchSort } from \"./sort\";\nimport { PrimitiveValue, SearchBody, BoolQueryConfig } from \"@webiny/api-elasticsearch/types\";\nimport { createExecFiltering } from \"./filtering\";\nimport { assignMinimumShouldMatchToQuery } from \"./assignMinimumShouldMatchToQuery\";\n\ninterface Params {\n plugins: PluginsContainer;\n model: CmsModel;\n params: Omit<CmsEntryListParams, \"where\" | \"after\"> & {\n where: CmsEntryListWhere;\n after?: PrimitiveValue[];\n };\n}\nexport const createElasticsearchBody = ({ plugins, model, params }: Params): SearchBody => {\n const { fields, search: term, where, sort: initialSort, after, limit } = params;\n /**\n * We need the model fields constructed as a key -> field value, so we do not need to iterate through array when we require some field.\n */\n const modelFields = createModelFields({\n plugins,\n model\n });\n\n /**\n * We need the query modifier plugins.\n */\n const queryModifierPlugins = createQueryModifierPluginList({\n plugins,\n model\n });\n /**\n * We need the sort modifier plugins.\n */\n const sortModifierPlugins = createSortModifierPluginList({\n plugins,\n model\n });\n /**\n * We need the body modifier plugins.\n */\n const bodyModifierPlugins = createBodyModifierPluginList({\n plugins,\n model\n });\n /**\n * We need the fields which we can search through via the full text search.\n *\n */\n const fullTextSearchFields = createFullTextSearchFields({\n model,\n term,\n fields\n });\n /**\n * The initial elasticsearch query where we attach some default conditions we always need.\n */\n const query = createInitialQuery({\n where,\n model\n });\n /**\n * Apply the full text search, if term is set.\n */\n applyFullTextSearch({\n model,\n plugins,\n query,\n term,\n fields: fullTextSearchFields\n });\n\n const execFiltering = createExecFiltering({\n model,\n fields: modelFields,\n plugins\n });\n\n execFiltering({\n where,\n query\n });\n\n for (const pl of queryModifierPlugins) {\n pl.modifyQuery({ query, model, where });\n }\n\n const sort = createElasticsearchSort({\n plugins,\n sort: initialSort,\n modelFields,\n model\n });\n\n for (const pl of sortModifierPlugins) {\n pl.modifySort({\n sort,\n model\n });\n }\n\n const boolQuery: BoolQueryConfig = {\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 assignMinimumShouldMatchToQuery({\n query: boolQuery\n });\n\n const body: SearchBody = {\n query: {\n bool: boolQuery\n },\n sort,\n size: (limit || 0) + 1,\n search_after: after,\n track_total_hits: true\n };\n\n for (const pl of bodyModifierPlugins) {\n pl.modifyBody({\n body,\n model,\n where\n });\n }\n\n return body;\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_fields","require","_initialQuery","_fullTextSearch","_queryModifier","_sortModifier","_bodyModifier","_sort","_filtering","_assignMinimumShouldMatchToQuery","createElasticsearchBody","plugins","model","params","fields","search","term","where","sort","initialSort","after","limit","modelFields","createModelFields","queryModifierPlugins","createQueryModifierPluginList","sortModifierPlugins","createSortModifierPluginList","bodyModifierPlugins","createBodyModifierPluginList","query","createInitialQuery","applyFullTextSearch","execFiltering","createExecFiltering","pl","modifyQuery","createElasticsearchSort","modifySort","boolQuery","must","length","undefined","must_not","should","filter","assignMinimumShouldMatchToQuery","body","bool","size","search_after","track_total_hits","modifyBody","exports"],"sources":["body.ts"],"sourcesContent":["import { PluginsContainer } from \"@webiny/plugins\";\nimport {\n CmsEntryListWhere,\n type CmsEntryStorageOperationsListParams,\n CmsModel\n} from \"@webiny/api-headless-cms/types\";\nimport { createModelFields } from \"./fields\";\nimport { createInitialQuery } from \"./initialQuery\";\nimport { applyFullTextSearch } from \"./fullTextSearch\";\nimport { createQueryModifierPluginList } from \"./plugins/queryModifier\";\nimport { createSortModifierPluginList } from \"./plugins/sortModifier\";\nimport { createBodyModifierPluginList } from \"./plugins/bodyModifier\";\nimport { createElasticsearchSort } from \"./sort\";\nimport { BoolQueryConfig, PrimitiveValue, SearchBody } from \"@webiny/api-elasticsearch/types\";\nimport { createExecFiltering } from \"./filtering\";\nimport { assignMinimumShouldMatchToQuery } from \"./assignMinimumShouldMatchToQuery\";\n\ninterface Params {\n plugins: PluginsContainer;\n model: CmsModel;\n params: Omit<CmsEntryStorageOperationsListParams, \"where\" | \"after\"> & {\n where: CmsEntryListWhere;\n after?: PrimitiveValue[];\n };\n}\nexport const createElasticsearchBody = ({ plugins, model, params }: Params): SearchBody => {\n const { fields, search: term, where, sort: initialSort, after, limit } = params;\n /**\n * We need the model fields constructed as a key -> field value, so we do not need to iterate through array when we require some field.\n */\n const modelFields = createModelFields({\n plugins,\n model\n });\n\n /**\n * We need the query modifier plugins.\n */\n const queryModifierPlugins = createQueryModifierPluginList({\n plugins,\n model\n });\n /**\n * We need the sort modifier plugins.\n */\n const sortModifierPlugins = createSortModifierPluginList({\n plugins,\n model\n });\n /**\n * We need the body modifier plugins.\n */\n const bodyModifierPlugins = createBodyModifierPluginList({\n plugins,\n model\n });\n\n /**\n * The initial elasticsearch query where we attach some default conditions we always need.\n */\n const query = createInitialQuery({\n where,\n model\n });\n /**\n * Apply the full text search, if term is set.\n */\n applyFullTextSearch({\n model,\n plugins,\n query,\n term,\n fields\n });\n\n const execFiltering = createExecFiltering({\n model,\n fields: modelFields,\n plugins\n });\n\n execFiltering({\n where,\n query\n });\n\n for (const pl of queryModifierPlugins) {\n pl.modifyQuery({ query, model, where });\n }\n\n const sort = createElasticsearchSort({\n plugins,\n sort: initialSort,\n modelFields,\n model\n });\n\n for (const pl of sortModifierPlugins) {\n pl.modifySort({\n sort,\n model\n });\n }\n\n const boolQuery: BoolQueryConfig = {\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 assignMinimumShouldMatchToQuery({\n query: boolQuery\n });\n\n const body: SearchBody = {\n query: {\n bool: boolQuery\n },\n sort,\n size: (limit || 0) + 1,\n search_after: after,\n track_total_hits: true\n };\n\n for (const pl of bodyModifierPlugins) {\n pl.modifyBody({\n body,\n model,\n where\n });\n }\n\n return body;\n};\n"],"mappings":"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","ignoreList":[]}
@@ -1,12 +1,12 @@
1
1
  import { ElasticsearchBoolQueryConfig } from "@webiny/api-elasticsearch/types";
2
- import { CmsModel, CmsModelField } from "@webiny/api-headless-cms/types";
2
+ import { CmsModel, type IFullTextSearchFields } from "@webiny/api-headless-cms/types";
3
3
  import { PluginsContainer } from "@webiny/plugins";
4
4
  interface Params {
5
5
  plugins: PluginsContainer;
6
6
  model: CmsModel;
7
7
  query: ElasticsearchBoolQueryConfig;
8
8
  term?: string;
9
- fields: CmsModelField[];
9
+ fields?: IFullTextSearchFields;
10
10
  }
11
11
  export declare const applyFullTextSearch: (params: Params) => void;
12
12
  export {};
@@ -15,13 +15,14 @@ const defaultPlugin = (0, _plugins.createCmsEntryElasticsearchFullTextSearchPlug
15
15
  query,
16
16
  term,
17
17
  fields,
18
- createFieldPath,
19
18
  prepareTerm
20
19
  } = params;
21
20
  query.must.push({
22
21
  query_string: {
23
22
  allow_leading_wildcard: true,
24
- fields: fields.map(createFieldPath),
23
+ fields: fields.getAllStoragePaths().map(field => {
24
+ return `values.${field}`;
25
+ }),
25
26
  query: `*${prepareTerm(term)}*`,
26
27
  default_operator: "and"
27
28
  }
@@ -70,7 +71,7 @@ const applyFullTextSearch = params => {
70
71
  fields,
71
72
  model
72
73
  } = params;
73
- if (!term || term.length === 0 || fields.length === 0) {
74
+ if (!term || term.length === 0 || !fields || fields.hasAny() === false) {
74
75
  return;
75
76
  }
76
77
  const plugin = getPlugin({
@@ -79,7 +80,6 @@ const applyFullTextSearch = params => {
79
80
  });
80
81
  plugin.apply({
81
82
  model,
82
- createFieldPath: field => `values.${field.storageId}`,
83
83
  fields,
84
84
  query,
85
85
  term,
@@ -1 +1 @@
1
- {"version":3,"names":["_apiElasticsearch","require","_plugins","defaultPlugin","createCmsEntryElasticsearchFullTextSearchPlugin","apply","params","query","term","fields","createFieldPath","prepareTerm","must","push","query_string","allow_leading_wildcard","map","default_operator","name","getPlugin","container","model","plugins","byType","CmsEntryElasticsearchFullTextSearchPlugin","type","reverse","plugin","pl","models","includes","modelId","length","applyFullTextSearch","field","storageId","normalizeValue","exports"],"sources":["fullTextSearch.ts"],"sourcesContent":["import { ElasticsearchBoolQueryConfig } from \"@webiny/api-elasticsearch/types\";\nimport { normalizeValue } from \"@webiny/api-elasticsearch\";\nimport { CmsModel, CmsModelField } from \"@webiny/api-headless-cms/types\";\nimport { PluginsContainer } from \"@webiny/plugins\";\nimport {\n CmsEntryElasticsearchFullTextSearchPlugin,\n createCmsEntryElasticsearchFullTextSearchPlugin\n} from \"~/plugins\";\n\n/**\n * Our default plugin is working with the AND operator for the multiple words query string.\n */\nconst defaultPlugin = createCmsEntryElasticsearchFullTextSearchPlugin({\n apply: params => {\n const { query, term, fields, createFieldPath, prepareTerm } = params;\n\n query.must.push({\n query_string: {\n allow_leading_wildcard: true,\n fields: fields.map(createFieldPath),\n query: `*${prepareTerm(term)}*`,\n default_operator: \"and\"\n }\n });\n }\n});\ndefaultPlugin.name = \"headless-cms.elasticsearch.entry.fullTextSearch.default\";\n\ninterface GetPluginParams {\n container: PluginsContainer;\n model: CmsModel;\n}\nconst getPlugin = (params: GetPluginParams): CmsEntryElasticsearchFullTextSearchPlugin => {\n const { container, model } = params;\n /**\n * We need to reverse the plugins, so we can take the last one first - possibility to override existing plugins.\n */\n const plugins = container\n .byType<CmsEntryElasticsearchFullTextSearchPlugin>(\n CmsEntryElasticsearchFullTextSearchPlugin.type\n )\n .reverse();\n /**\n * We need to find the most specific plugin for the given model.\n * Also, we need to use the first possible plugin if the specific one is not found.\n */\n let plugin: CmsEntryElasticsearchFullTextSearchPlugin | null = null;\n for (const pl of plugins) {\n const models = pl.models || [];\n /**\n * We take the first available plugin for the given model.\n */\n if (models.includes(model.modelId)) {\n return pl;\n }\n /**\n * Then we set the first possible plugin, which has no models defined, as the default one.\n * It is important not to set the plugin which has models defined as they are specifically for the targeted model.\n */\n //\n else if (!plugin && models.length === 0) {\n plugin = pl;\n }\n }\n\n return plugin || defaultPlugin;\n};\n\ninterface Params {\n plugins: PluginsContainer;\n model: CmsModel;\n query: ElasticsearchBoolQueryConfig;\n term?: string;\n fields: CmsModelField[];\n}\nexport const applyFullTextSearch = (params: Params): void => {\n const { plugins, query, term, fields, model } = params;\n if (!term || term.length === 0 || fields.length === 0) {\n return;\n }\n\n const plugin = getPlugin({\n container: plugins,\n model\n });\n\n plugin.apply({\n model,\n createFieldPath: field => `values.${field.storageId}`,\n fields,\n query,\n term,\n prepareTerm: normalizeValue\n });\n};\n"],"mappings":";;;;;;AACA,IAAAA,iBAAA,GAAAC,OAAA;AAGA,IAAAC,QAAA,GAAAD,OAAA;AAKA;AACA;AACA;AACA,MAAME,aAAa,GAAG,IAAAC,wDAA+C,EAAC;EAClEC,KAAK,EAAEC,MAAM,IAAI;IACb,MAAM;MAAEC,KAAK;MAAEC,IAAI;MAAEC,MAAM;MAAEC,eAAe;MAAEC;IAAY,CAAC,GAAGL,MAAM;IAEpEC,KAAK,CAACK,IAAI,CAACC,IAAI,CAAC;MACZC,YAAY,EAAE;QACVC,sBAAsB,EAAE,IAAI;QAC5BN,MAAM,EAAEA,MAAM,CAACO,GAAG,CAACN,eAAe,CAAC;QACnCH,KAAK,EAAE,IAAII,WAAW,CAACH,IAAI,CAAC,GAAG;QAC/BS,gBAAgB,EAAE;MACtB;IACJ,CAAC,CAAC;EACN;AACJ,CAAC,CAAC;AACFd,aAAa,CAACe,IAAI,GAAG,yDAAyD;AAM9E,MAAMC,SAAS,GAAIb,MAAuB,IAAgD;EACtF,MAAM;IAAEc,SAAS;IAAEC;EAAM,CAAC,GAAGf,MAAM;EACnC;AACJ;AACA;EACI,MAAMgB,OAAO,GAAGF,SAAS,CACpBG,MAAM,CACHC,kDAAyC,CAACC,IAC9C,CAAC,CACAC,OAAO,CAAC,CAAC;EACd;AACJ;AACA;AACA;EACI,IAAIC,MAAwD,GAAG,IAAI;EACnE,KAAK,MAAMC,EAAE,IAAIN,OAAO,EAAE;IACtB,MAAMO,MAAM,GAAGD,EAAE,CAACC,MAAM,IAAI,EAAE;IAC9B;AACR;AACA;IACQ,IAAIA,MAAM,CAACC,QAAQ,CAACT,KAAK,CAACU,OAAO,CAAC,EAAE;MAChC,OAAOH,EAAE;IACb;IACA;AACR;AACA;AACA;IACQ;IAAA,KACK,IAAI,CAACD,MAAM,IAAIE,MAAM,CAACG,MAAM,KAAK,CAAC,EAAE;MACrCL,MAAM,GAAGC,EAAE;IACf;EACJ;EAEA,OAAOD,MAAM,IAAIxB,aAAa;AAClC,CAAC;AASM,MAAM8B,mBAAmB,GAAI3B,MAAc,IAAW;EACzD,MAAM;IAAEgB,OAAO;IAAEf,KAAK;IAAEC,IAAI;IAAEC,MAAM;IAAEY;EAAM,CAAC,GAAGf,MAAM;EACtD,IAAI,CAACE,IAAI,IAAIA,IAAI,CAACwB,MAAM,KAAK,CAAC,IAAIvB,MAAM,CAACuB,MAAM,KAAK,CAAC,EAAE;IACnD;EACJ;EAEA,MAAML,MAAM,GAAGR,SAAS,CAAC;IACrBC,SAAS,EAAEE,OAAO;IAClBD;EACJ,CAAC,CAAC;EAEFM,MAAM,CAACtB,KAAK,CAAC;IACTgB,KAAK;IACLX,eAAe,EAAEwB,KAAK,IAAI,UAAUA,KAAK,CAACC,SAAS,EAAE;IACrD1B,MAAM;IACNF,KAAK;IACLC,IAAI;IACJG,WAAW,EAAEyB;EACjB,CAAC,CAAC;AACN,CAAC;AAACC,OAAA,CAAAJ,mBAAA,GAAAA,mBAAA","ignoreList":[]}
1
+ {"version":3,"names":["_apiElasticsearch","require","_plugins","defaultPlugin","createCmsEntryElasticsearchFullTextSearchPlugin","apply","params","query","term","fields","prepareTerm","must","push","query_string","allow_leading_wildcard","getAllStoragePaths","map","field","default_operator","name","getPlugin","container","model","plugins","byType","CmsEntryElasticsearchFullTextSearchPlugin","type","reverse","plugin","pl","models","includes","modelId","length","applyFullTextSearch","hasAny","normalizeValue","exports"],"sources":["fullTextSearch.ts"],"sourcesContent":["import { ElasticsearchBoolQueryConfig } from \"@webiny/api-elasticsearch/types\";\nimport { normalizeValue } from \"@webiny/api-elasticsearch\";\nimport { CmsModel, type IFullTextSearchFields } from \"@webiny/api-headless-cms/types\";\nimport { PluginsContainer } from \"@webiny/plugins\";\nimport {\n CmsEntryElasticsearchFullTextSearchPlugin,\n createCmsEntryElasticsearchFullTextSearchPlugin\n} from \"~/plugins\";\n\n/**\n * Our default plugin is working with the AND operator for the multiple words query string.\n */\nconst defaultPlugin = createCmsEntryElasticsearchFullTextSearchPlugin({\n apply: params => {\n const { query, term, fields, prepareTerm } = params;\n\n query.must.push({\n query_string: {\n allow_leading_wildcard: true,\n fields: fields.getAllStoragePaths().map(field => {\n return `values.${field}`;\n }),\n query: `*${prepareTerm(term)}*`,\n default_operator: \"and\"\n }\n });\n }\n});\ndefaultPlugin.name = \"headless-cms.elasticsearch.entry.fullTextSearch.default\";\n\ninterface GetPluginParams {\n container: PluginsContainer;\n model: CmsModel;\n}\nconst getPlugin = (params: GetPluginParams): CmsEntryElasticsearchFullTextSearchPlugin => {\n const { container, model } = params;\n /**\n * We need to reverse the plugins, so we can take the last one first - possibility to override existing plugins.\n */\n const plugins = container\n .byType<CmsEntryElasticsearchFullTextSearchPlugin>(\n CmsEntryElasticsearchFullTextSearchPlugin.type\n )\n .reverse();\n /**\n * We need to find the most specific plugin for the given model.\n * Also, we need to use the first possible plugin if the specific one is not found.\n */\n let plugin: CmsEntryElasticsearchFullTextSearchPlugin | null = null;\n for (const pl of plugins) {\n const models = pl.models || [];\n /**\n * We take the first available plugin for the given model.\n */\n if (models.includes(model.modelId)) {\n return pl;\n }\n /**\n * Then we set the first possible plugin, which has no models defined, as the default one.\n * It is important not to set the plugin which has models defined as they are specifically for the targeted model.\n */\n //\n else if (!plugin && models.length === 0) {\n plugin = pl;\n }\n }\n\n return plugin || defaultPlugin;\n};\n\ninterface Params {\n plugins: PluginsContainer;\n model: CmsModel;\n query: ElasticsearchBoolQueryConfig;\n term?: string;\n fields?: IFullTextSearchFields;\n}\nexport const applyFullTextSearch = (params: Params): void => {\n const { plugins, query, term, fields, model } = params;\n if (!term || term.length === 0 || !fields || fields.hasAny() === false) {\n return;\n }\n\n const plugin = getPlugin({\n container: plugins,\n model\n });\n\n plugin.apply({\n model,\n fields,\n query,\n term,\n prepareTerm: normalizeValue\n });\n};\n"],"mappings":";;;;;;AACA,IAAAA,iBAAA,GAAAC,OAAA;AAGA,IAAAC,QAAA,GAAAD,OAAA;AAKA;AACA;AACA;AACA,MAAME,aAAa,GAAG,IAAAC,wDAA+C,EAAC;EAClEC,KAAK,EAAEC,MAAM,IAAI;IACb,MAAM;MAAEC,KAAK;MAAEC,IAAI;MAAEC,MAAM;MAAEC;IAAY,CAAC,GAAGJ,MAAM;IAEnDC,KAAK,CAACI,IAAI,CAACC,IAAI,CAAC;MACZC,YAAY,EAAE;QACVC,sBAAsB,EAAE,IAAI;QAC5BL,MAAM,EAAEA,MAAM,CAACM,kBAAkB,CAAC,CAAC,CAACC,GAAG,CAACC,KAAK,IAAI;UAC7C,OAAO,UAAUA,KAAK,EAAE;QAC5B,CAAC,CAAC;QACFV,KAAK,EAAE,IAAIG,WAAW,CAACF,IAAI,CAAC,GAAG;QAC/BU,gBAAgB,EAAE;MACtB;IACJ,CAAC,CAAC;EACN;AACJ,CAAC,CAAC;AACFf,aAAa,CAACgB,IAAI,GAAG,yDAAyD;AAM9E,MAAMC,SAAS,GAAId,MAAuB,IAAgD;EACtF,MAAM;IAAEe,SAAS;IAAEC;EAAM,CAAC,GAAGhB,MAAM;EACnC;AACJ;AACA;EACI,MAAMiB,OAAO,GAAGF,SAAS,CACpBG,MAAM,CACHC,kDAAyC,CAACC,IAC9C,CAAC,CACAC,OAAO,CAAC,CAAC;EACd;AACJ;AACA;AACA;EACI,IAAIC,MAAwD,GAAG,IAAI;EACnE,KAAK,MAAMC,EAAE,IAAIN,OAAO,EAAE;IACtB,MAAMO,MAAM,GAAGD,EAAE,CAACC,MAAM,IAAI,EAAE;IAC9B;AACR;AACA;IACQ,IAAIA,MAAM,CAACC,QAAQ,CAACT,KAAK,CAACU,OAAO,CAAC,EAAE;MAChC,OAAOH,EAAE;IACb;IACA;AACR;AACA;AACA;IACQ;IAAA,KACK,IAAI,CAACD,MAAM,IAAIE,MAAM,CAACG,MAAM,KAAK,CAAC,EAAE;MACrCL,MAAM,GAAGC,EAAE;IACf;EACJ;EAEA,OAAOD,MAAM,IAAIzB,aAAa;AAClC,CAAC;AASM,MAAM+B,mBAAmB,GAAI5B,MAAc,IAAW;EACzD,MAAM;IAAEiB,OAAO;IAAEhB,KAAK;IAAEC,IAAI;IAAEC,MAAM;IAAEa;EAAM,CAAC,GAAGhB,MAAM;EACtD,IAAI,CAACE,IAAI,IAAIA,IAAI,CAACyB,MAAM,KAAK,CAAC,IAAI,CAACxB,MAAM,IAAIA,MAAM,CAAC0B,MAAM,CAAC,CAAC,KAAK,KAAK,EAAE;IACpE;EACJ;EAEA,MAAMP,MAAM,GAAGR,SAAS,CAAC;IACrBC,SAAS,EAAEE,OAAO;IAClBD;EACJ,CAAC,CAAC;EAEFM,MAAM,CAACvB,KAAK,CAAC;IACTiB,KAAK;IACLb,MAAM;IACNF,KAAK;IACLC,IAAI;IACJE,WAAW,EAAE0B;EACjB,CAAC,CAAC;AACN,CAAC;AAACC,OAAA,CAAAH,mBAAA,GAAAA,mBAAA","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webiny/api-headless-cms-ddb-es",
3
- "version": "5.43.2",
3
+ "version": "5.43.3-beta.0",
4
4
  "main": "index.js",
5
5
  "keywords": [
6
6
  "@webiny/api-headless-cms",
@@ -26,33 +26,33 @@
26
26
  ],
27
27
  "license": "MIT",
28
28
  "dependencies": {
29
- "@webiny/api": "5.43.2",
30
- "@webiny/api-elasticsearch": "5.43.2",
31
- "@webiny/api-elasticsearch-tasks": "5.43.2",
32
- "@webiny/api-headless-cms": "5.43.2",
33
- "@webiny/aws-sdk": "5.43.2",
34
- "@webiny/db-dynamodb": "5.43.2",
35
- "@webiny/error": "5.43.2",
36
- "@webiny/handler-db": "5.43.2",
37
- "@webiny/plugins": "5.43.2",
38
- "@webiny/utils": "5.43.2",
29
+ "@webiny/api": "5.43.3-beta.0",
30
+ "@webiny/api-elasticsearch": "5.43.3-beta.0",
31
+ "@webiny/api-elasticsearch-tasks": "5.43.3-beta.0",
32
+ "@webiny/api-headless-cms": "5.43.3-beta.0",
33
+ "@webiny/aws-sdk": "5.43.3-beta.0",
34
+ "@webiny/db-dynamodb": "5.43.3-beta.0",
35
+ "@webiny/error": "5.43.3-beta.0",
36
+ "@webiny/handler-db": "5.43.3-beta.0",
37
+ "@webiny/plugins": "5.43.3-beta.0",
38
+ "@webiny/utils": "5.43.3-beta.0",
39
39
  "dataloader": "2.2.3",
40
40
  "lodash": "4.17.21"
41
41
  },
42
42
  "devDependencies": {
43
43
  "@elastic/elasticsearch": "7.12.0",
44
44
  "@types/jsonpack": "1.1.6",
45
- "@webiny/api-dynamodb-to-elasticsearch": "5.43.2",
46
- "@webiny/api-i18n": "5.43.2",
47
- "@webiny/api-log": "5.43.2",
48
- "@webiny/api-security": "5.43.2",
49
- "@webiny/api-tenancy": "5.43.2",
50
- "@webiny/api-wcp": "5.43.2",
51
- "@webiny/handler": "5.43.2",
52
- "@webiny/handler-aws": "5.43.2",
53
- "@webiny/handler-graphql": "5.43.2",
54
- "@webiny/project-utils": "5.43.2",
55
- "@webiny/tasks": "5.43.2",
45
+ "@webiny/api-dynamodb-to-elasticsearch": "5.43.3-beta.0",
46
+ "@webiny/api-i18n": "5.43.3-beta.0",
47
+ "@webiny/api-log": "5.43.3-beta.0",
48
+ "@webiny/api-security": "5.43.3-beta.0",
49
+ "@webiny/api-tenancy": "5.43.3-beta.0",
50
+ "@webiny/api-wcp": "5.43.3-beta.0",
51
+ "@webiny/handler": "5.43.3-beta.0",
52
+ "@webiny/handler-aws": "5.43.3-beta.0",
53
+ "@webiny/handler-graphql": "5.43.3-beta.0",
54
+ "@webiny/project-utils": "5.43.3-beta.0",
55
+ "@webiny/tasks": "5.43.3-beta.0",
56
56
  "jest": "29.7.0",
57
57
  "jest-dynalite": "3.6.1",
58
58
  "prettier": "2.8.8",
@@ -67,5 +67,5 @@
67
67
  "build": "node ../cli/bin.js run build",
68
68
  "watch": "node ../cli/bin.js run watch"
69
69
  },
70
- "gitHead": "ec6176f001f6350221d992981e110a0351addbaf"
70
+ "gitHead": "8be69dcb27bf5f935eba7f14274092bc210c3bb9"
71
71
  }
@@ -1,12 +1,11 @@
1
1
  import { Plugin } from "@webiny/plugins";
2
2
  import { ElasticsearchBoolQueryConfig } from "@webiny/api-elasticsearch/types";
3
- import { CmsModel, CmsModelField } from "@webiny/api-headless-cms/types";
3
+ import { CmsModel, type IFullTextSearchFields } from "@webiny/api-headless-cms/types";
4
4
  export interface CmsEntryElasticsearchFullTextSearchPluginCbParams {
5
5
  model: CmsModel;
6
6
  query: ElasticsearchBoolQueryConfig;
7
7
  term: string;
8
- fields: CmsModelField[];
9
- createFieldPath: (field: CmsModelField) => string;
8
+ fields: IFullTextSearchFields;
10
9
  prepareTerm: (term: string) => string;
11
10
  }
12
11
  export interface CmsEntryElasticsearchFullTextSearchPluginParams {
@@ -1 +1 @@
1
- {"version":3,"names":["_plugins","require","CmsEntryElasticsearchFullTextSearchPlugin","Plugin","type","models","params","constructor","apply","exports","createCmsEntryElasticsearchFullTextSearchPlugin"],"sources":["CmsEntryElasticsearchFullTextSearchPlugin.ts"],"sourcesContent":["import { Plugin } from \"@webiny/plugins\";\nimport { ElasticsearchBoolQueryConfig } from \"@webiny/api-elasticsearch/types\";\nimport { CmsModel, CmsModelField } from \"@webiny/api-headless-cms/types\";\n\nexport interface CmsEntryElasticsearchFullTextSearchPluginCbParams {\n model: CmsModel;\n query: ElasticsearchBoolQueryConfig;\n term: string;\n fields: CmsModelField[];\n createFieldPath: (field: CmsModelField) => string;\n prepareTerm: (term: string) => string;\n}\nexport interface CmsEntryElasticsearchFullTextSearchPluginParams {\n models?: string[];\n apply: (params: CmsEntryElasticsearchFullTextSearchPluginCbParams) => void;\n}\nexport class CmsEntryElasticsearchFullTextSearchPlugin extends Plugin {\n public static override readonly type: string =\n \"headless-cms.elasticsearch.entry.fullTextSearch\";\n\n private readonly params: CmsEntryElasticsearchFullTextSearchPluginParams;\n\n public get models() {\n return this.params.models;\n }\n\n public constructor(params: CmsEntryElasticsearchFullTextSearchPluginParams) {\n super();\n this.params = params;\n }\n\n public apply(params: CmsEntryElasticsearchFullTextSearchPluginCbParams): void {\n return this.params.apply(params);\n }\n}\n\nexport const createCmsEntryElasticsearchFullTextSearchPlugin = (\n params: CmsEntryElasticsearchFullTextSearchPluginParams\n) => {\n return new CmsEntryElasticsearchFullTextSearchPlugin(params);\n};\n"],"mappings":";;;;;;AAAA,IAAAA,QAAA,GAAAC,OAAA;AAgBO,MAAMC,yCAAyC,SAASC,eAAM,CAAC;EAClE,OAAgCC,IAAI,GAChC,iDAAiD;EAIrD,IAAWC,MAAMA,CAAA,EAAG;IAChB,OAAO,IAAI,CAACC,MAAM,CAACD,MAAM;EAC7B;EAEOE,WAAWA,CAACD,MAAuD,EAAE;IACxE,KAAK,CAAC,CAAC;IACP,IAAI,CAACA,MAAM,GAAGA,MAAM;EACxB;EAEOE,KAAKA,CAACF,MAAyD,EAAQ;IAC1E,OAAO,IAAI,CAACA,MAAM,CAACE,KAAK,CAACF,MAAM,CAAC;EACpC;AACJ;AAACG,OAAA,CAAAP,yCAAA,GAAAA,yCAAA;AAEM,MAAMQ,+CAA+C,GACxDJ,MAAuD,IACtD;EACD,OAAO,IAAIJ,yCAAyC,CAACI,MAAM,CAAC;AAChE,CAAC;AAACG,OAAA,CAAAC,+CAAA,GAAAA,+CAAA","ignoreList":[]}
1
+ {"version":3,"names":["_plugins","require","CmsEntryElasticsearchFullTextSearchPlugin","Plugin","type","models","params","constructor","apply","exports","createCmsEntryElasticsearchFullTextSearchPlugin"],"sources":["CmsEntryElasticsearchFullTextSearchPlugin.ts"],"sourcesContent":["import { Plugin } from \"@webiny/plugins\";\nimport { ElasticsearchBoolQueryConfig } from \"@webiny/api-elasticsearch/types\";\nimport { CmsModel, type IFullTextSearchFields } from \"@webiny/api-headless-cms/types\";\n\nexport interface CmsEntryElasticsearchFullTextSearchPluginCbParams {\n model: CmsModel;\n query: ElasticsearchBoolQueryConfig;\n term: string;\n fields: IFullTextSearchFields;\n prepareTerm: (term: string) => string;\n}\nexport interface CmsEntryElasticsearchFullTextSearchPluginParams {\n models?: string[];\n apply: (params: CmsEntryElasticsearchFullTextSearchPluginCbParams) => void;\n}\nexport class CmsEntryElasticsearchFullTextSearchPlugin extends Plugin {\n public static override readonly type: string =\n \"headless-cms.elasticsearch.entry.fullTextSearch\";\n\n private readonly params: CmsEntryElasticsearchFullTextSearchPluginParams;\n\n public get models() {\n return this.params.models;\n }\n\n public constructor(params: CmsEntryElasticsearchFullTextSearchPluginParams) {\n super();\n this.params = params;\n }\n\n public apply(params: CmsEntryElasticsearchFullTextSearchPluginCbParams): void {\n return this.params.apply(params);\n }\n}\n\nexport const createCmsEntryElasticsearchFullTextSearchPlugin = (\n params: CmsEntryElasticsearchFullTextSearchPluginParams\n) => {\n return new CmsEntryElasticsearchFullTextSearchPlugin(params);\n};\n"],"mappings":";;;;;;AAAA,IAAAA,QAAA,GAAAC,OAAA;AAeO,MAAMC,yCAAyC,SAASC,eAAM,CAAC;EAClE,OAAgCC,IAAI,GAChC,iDAAiD;EAIrD,IAAWC,MAAMA,CAAA,EAAG;IAChB,OAAO,IAAI,CAACC,MAAM,CAACD,MAAM;EAC7B;EAEOE,WAAWA,CAACD,MAAuD,EAAE;IACxE,KAAK,CAAC,CAAC;IACP,IAAI,CAACA,MAAM,GAAGA,MAAM;EACxB;EAEOE,KAAKA,CAACF,MAAyD,EAAQ;IAC1E,OAAO,IAAI,CAACA,MAAM,CAACE,KAAK,CAACF,MAAM,CAAC;EACpC;AACJ;AAACG,OAAA,CAAAP,yCAAA,GAAAA,yCAAA;AAEM,MAAMQ,+CAA+C,GACxDJ,MAAuD,IACtD;EACD,OAAO,IAAIJ,yCAAyC,CAACI,MAAM,CAAC;AAChE,CAAC;AAACG,OAAA,CAAAC,+CAAA,GAAAA,+CAAA","ignoreList":[]}