@webiny/api-page-builder-so-ddb-es 5.25.0-beta.5 → 5.25.1-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 (31) hide show
  1. package/{operations/configurations.d.ts → configurations.d.ts} +2 -2
  2. package/{operations/configurations.js → configurations.js} +20 -8
  3. package/configurations.js.map +1 -0
  4. package/elasticsearch/createElasticsearchIndex.d.ts +9 -0
  5. package/elasticsearch/createElasticsearchIndex.js +60 -0
  6. package/elasticsearch/createElasticsearchIndex.js.map +1 -0
  7. package/elasticsearch/indices/base.d.ts +2 -0
  8. package/elasticsearch/indices/base.js +23 -0
  9. package/elasticsearch/indices/base.js.map +1 -0
  10. package/elasticsearch/indices/index.d.ts +1 -0
  11. package/elasticsearch/indices/index.js +16 -0
  12. package/elasticsearch/indices/index.js.map +1 -0
  13. package/elasticsearch/indices/japanese.d.ts +2 -0
  14. package/elasticsearch/indices/japanese.js +24 -0
  15. package/elasticsearch/indices/japanese.js.map +1 -0
  16. package/index.js +17 -9
  17. package/index.js.map +1 -1
  18. package/operations/pages/elasticsearchQueryBody.js +3 -6
  19. package/operations/pages/elasticsearchQueryBody.js.map +1 -1
  20. package/operations/pages/index.js +12 -12
  21. package/operations/pages/index.js.map +1 -1
  22. package/package.json +19 -20
  23. package/plugins/definitions/PageElasticsearchIndexPlugin.d.ts +4 -0
  24. package/plugins/definitions/PageElasticsearchIndexPlugin.js +17 -0
  25. package/plugins/definitions/PageElasticsearchIndexPlugin.js.map +1 -0
  26. package/types.d.ts +2 -2
  27. package/types.js.map +1 -1
  28. package/operations/configurations.js.map +0 -1
  29. package/operations/system/installation.d.ts +0 -6
  30. package/operations/system/installation.js +0 -64
  31. package/operations/system/installation.js.map +0 -1
@@ -1,9 +1,9 @@
1
1
  export interface ElasticsearchParams {
2
2
  tenant: string;
3
+ locale: string;
3
4
  }
4
- declare const _default: {
5
+ export declare const configurations: {
5
6
  es: (params: ElasticsearchParams) => {
6
7
  index: string;
7
8
  };
8
9
  };
9
- export default _default;
@@ -5,14 +5,15 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.default = void 0;
8
+ exports.configurations = void 0;
9
9
 
10
10
  var _error = _interopRequireDefault(require("@webiny/error"));
11
11
 
12
- var _default = {
12
+ const configurations = {
13
13
  es: params => {
14
14
  const {
15
- tenant
15
+ tenant,
16
+ locale
16
17
  } = params;
17
18
 
18
19
  if (!tenant) {
@@ -20,18 +21,29 @@ var _default = {
20
21
  }
21
22
 
22
23
  const sharedIndex = process.env.ELASTICSEARCH_SHARED_INDEXES === "true";
23
- const index = `${sharedIndex ? "root" : tenant}-page-builder`;
24
+ const tenantId = sharedIndex ? "root" : tenant;
25
+ let localeCode = null;
26
+
27
+ if (process.env.WEBINY_ELASTICSEARCH_INDEX_LOCALE === "true") {
28
+ if (!locale) {
29
+ throw new _error.default(`Missing "locale" parameter when trying to create Elasticsearch index name.`, "LOCALE_ERROR");
30
+ }
31
+
32
+ localeCode = locale;
33
+ }
34
+
35
+ const index = [tenantId, localeCode, "page-builder"].filter(Boolean).join("-").toLowerCase();
24
36
  const prefix = process.env.ELASTIC_SEARCH_INDEX_PREFIX;
25
37
 
26
- if (prefix) {
38
+ if (!prefix) {
27
39
  return {
28
- index: prefix + index
40
+ index
29
41
  };
30
42
  }
31
43
 
32
44
  return {
33
- index
45
+ index: prefix + index
34
46
  };
35
47
  }
36
48
  };
37
- exports.default = _default;
49
+ exports.configurations = configurations;
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["configurations.ts"],"names":["configurations","es","params","tenant","locale","WebinyError","sharedIndex","process","env","ELASTICSEARCH_SHARED_INDEXES","tenantId","localeCode","WEBINY_ELASTICSEARCH_INDEX_LOCALE","index","filter","Boolean","join","toLowerCase","prefix","ELASTIC_SEARCH_INDEX_PREFIX"],"mappings":";;;;;;;;;AAAA;;AAOO,MAAMA,cAAc,GAAG;AAC1BC,EAAAA,EAAE,EAAGC,MAAD,IAAiC;AACjC,UAAM;AAAEC,MAAAA,MAAF;AAAUC,MAAAA;AAAV,QAAqBF,MAA3B;;AACA,QAAI,CAACC,MAAL,EAAa;AACT,YAAM,IAAIE,cAAJ,CACD,4EADC,EAEF,cAFE,CAAN;AAIH;;AACD,UAAMC,WAAW,GAAGC,OAAO,CAACC,GAAR,CAAYC,4BAAZ,KAA6C,MAAjE;AAEA,UAAMC,QAAQ,GAAGJ,WAAW,GAAG,MAAH,GAAYH,MAAxC;AACA,QAAIQ,UAAyB,GAAG,IAAhC;;AACA,QAAIJ,OAAO,CAACC,GAAR,CAAYI,iCAAZ,KAAkD,MAAtD,EAA8D;AAC1D,UAAI,CAACR,MAAL,EAAa;AACT,cAAM,IAAIC,cAAJ,CACD,4EADC,EAEF,cAFE,CAAN;AAIH;;AACDM,MAAAA,UAAU,GAAGP,MAAb;AACH;;AAED,UAAMS,KAAK,GAAG,CAACH,QAAD,EAAWC,UAAX,EAAuB,cAAvB,EACTG,MADS,CACFC,OADE,EAETC,IAFS,CAEJ,GAFI,EAGTC,WAHS,EAAd;AAKA,UAAMC,MAAM,GAAGX,OAAO,CAACC,GAAR,CAAYW,2BAA3B;;AACA,QAAI,CAACD,MAAL,EAAa;AACT,aAAO;AACHL,QAAAA;AADG,OAAP;AAGH;;AACD,WAAO;AACHA,MAAAA,KAAK,EAAEK,MAAM,GAAGL;AADb,KAAP;AAGH;AArCyB,CAAvB","sourcesContent":["import WebinyError from \"@webiny/error\";\n\nexport interface ElasticsearchParams {\n tenant: string;\n locale: string;\n}\n\nexport const configurations = {\n es: (params: ElasticsearchParams) => {\n const { tenant, locale } = params;\n if (!tenant) {\n throw new WebinyError(\n `Missing \"tenant\" parameter when trying to create Elasticsearch index name.`,\n \"TENANT_ERROR\"\n );\n }\n const sharedIndex = process.env.ELASTICSEARCH_SHARED_INDEXES === \"true\";\n\n const tenantId = sharedIndex ? \"root\" : tenant;\n let localeCode: string | null = null;\n if (process.env.WEBINY_ELASTICSEARCH_INDEX_LOCALE === \"true\") {\n if (!locale) {\n throw new WebinyError(\n `Missing \"locale\" parameter when trying to create Elasticsearch index name.`,\n \"LOCALE_ERROR\"\n );\n }\n localeCode = locale;\n }\n\n const index = [tenantId, localeCode, \"page-builder\"]\n .filter(Boolean)\n .join(\"-\")\n .toLowerCase();\n\n const prefix = process.env.ELASTIC_SEARCH_INDEX_PREFIX;\n if (!prefix) {\n return {\n index\n };\n }\n return {\n index: prefix + index\n };\n }\n};\n"]}
@@ -0,0 +1,9 @@
1
+ import { Client } from "@elastic/elasticsearch";
2
+ import { PluginsContainer } from "@webiny/plugins";
3
+ export interface ExecOnBeforeInstallParams {
4
+ elasticsearch: Client;
5
+ plugins: PluginsContainer;
6
+ tenant: string;
7
+ locale: string;
8
+ }
9
+ export declare const createElasticsearchIndex: (params: ExecOnBeforeInstallParams) => Promise<void>;
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.createElasticsearchIndex = void 0;
9
+
10
+ var _error = _interopRequireDefault(require("@webiny/error"));
11
+
12
+ var _indices = require("@webiny/api-elasticsearch/indices");
13
+
14
+ var _PageElasticsearchIndexPlugin = require("../plugins/definitions/PageElasticsearchIndexPlugin");
15
+
16
+ var _configurations = require("../configurations");
17
+
18
+ const createElasticsearchIndex = async params => {
19
+ const {
20
+ elasticsearch,
21
+ plugins: container,
22
+ locale,
23
+ tenant
24
+ } = params;
25
+ const plugin = (0, _indices.getLastAddedIndexPlugin)({
26
+ container,
27
+ type: _PageElasticsearchIndexPlugin.PageElasticsearchIndexPlugin.type,
28
+ locale
29
+ });
30
+
31
+ const {
32
+ index
33
+ } = _configurations.configurations.es({
34
+ locale,
35
+ tenant
36
+ });
37
+
38
+ try {
39
+ const response = await elasticsearch.indices.exists({
40
+ index
41
+ });
42
+
43
+ if (response.body) {
44
+ return;
45
+ }
46
+
47
+ await elasticsearch.indices.create({
48
+ index,
49
+ body: plugin.body
50
+ });
51
+ } catch (ex) {
52
+ throw new _error.default(ex.message || "Could not create Elasticsearch index template for the Page Builder Pages.", ex.code || "PB_ELASTICSEARCH_TEMPLATE_ERROR", {
53
+ error: ex,
54
+ locale,
55
+ body: plugin.body
56
+ });
57
+ }
58
+ };
59
+
60
+ exports.createElasticsearchIndex = createElasticsearchIndex;
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["createElasticsearchIndex.ts"],"names":["createElasticsearchIndex","params","elasticsearch","plugins","container","locale","tenant","plugin","type","PageElasticsearchIndexPlugin","index","configurations","es","response","indices","exists","body","create","ex","WebinyError","message","code","error"],"mappings":";;;;;;;;;AAAA;;AAEA;;AAEA;;AACA;;AAQO,MAAMA,wBAAwB,GAAG,MACpCC,MADoC,IAEpB;AAChB,QAAM;AAAEC,IAAAA,aAAF;AAAiBC,IAAAA,OAAO,EAAEC,SAA1B;AAAqCC,IAAAA,MAArC;AAA6CC,IAAAA;AAA7C,MAAwDL,MAA9D;AAEA,QAAMM,MAAM,GAAG,sCAAsD;AACjEH,IAAAA,SADiE;AAEjEI,IAAAA,IAAI,EAAEC,2DAA6BD,IAF8B;AAGjEH,IAAAA;AAHiE,GAAtD,CAAf;;AAMA,QAAM;AAAEK,IAAAA;AAAF,MAAYC,+BAAeC,EAAf,CAAkB;AAChCP,IAAAA,MADgC;AAEhCC,IAAAA;AAFgC,GAAlB,CAAlB;;AAKA,MAAI;AACA,UAAMO,QAAQ,GAAG,MAAMX,aAAa,CAACY,OAAd,CAAsBC,MAAtB,CAA6B;AAChDL,MAAAA;AADgD,KAA7B,CAAvB;;AAGA,QAAIG,QAAQ,CAACG,IAAb,EAAmB;AACf;AACH;;AACD,UAAMd,aAAa,CAACY,OAAd,CAAsBG,MAAtB,CAA6B;AAC/BP,MAAAA,KAD+B;AAE/BM,MAAAA,IAAI,EAAET,MAAM,CAACS;AAFkB,KAA7B,CAAN;AAIH,GAXD,CAWE,OAAOE,EAAP,EAAW;AACT,UAAM,IAAIC,cAAJ,CACFD,EAAE,CAACE,OAAH,IACI,2EAFF,EAGFF,EAAE,CAACG,IAAH,IAAW,iCAHT,EAIF;AACIC,MAAAA,KAAK,EAAEJ,EADX;AAEIb,MAAAA,MAFJ;AAGIW,MAAAA,IAAI,EAAET,MAAM,CAACS;AAHjB,KAJE,CAAN;AAUH;AACJ,CAvCM","sourcesContent":["import WebinyError from \"@webiny/error\";\nimport { Client } from \"@elastic/elasticsearch\";\nimport { getLastAddedIndexPlugin } from \"@webiny/api-elasticsearch/indices\";\nimport { PluginsContainer } from \"@webiny/plugins\";\nimport { PageElasticsearchIndexPlugin } from \"~/plugins/definitions/PageElasticsearchIndexPlugin\";\nimport { configurations } from \"~/configurations\";\n\nexport interface ExecOnBeforeInstallParams {\n elasticsearch: Client;\n plugins: PluginsContainer;\n tenant: string;\n locale: string;\n}\nexport const createElasticsearchIndex = async (\n params: ExecOnBeforeInstallParams\n): Promise<void> => {\n const { elasticsearch, plugins: container, locale, tenant } = params;\n\n const plugin = getLastAddedIndexPlugin<PageElasticsearchIndexPlugin>({\n container,\n type: PageElasticsearchIndexPlugin.type,\n locale\n });\n\n const { index } = configurations.es({\n locale,\n tenant\n });\n\n try {\n const response = await elasticsearch.indices.exists({\n index\n });\n if (response.body) {\n return;\n }\n await elasticsearch.indices.create({\n index,\n body: plugin.body\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message ||\n \"Could not create Elasticsearch index template for the Page Builder Pages.\",\n ex.code || \"PB_ELASTICSEARCH_TEMPLATE_ERROR\",\n {\n error: ex,\n locale,\n body: plugin.body\n }\n );\n }\n};\n"]}
@@ -0,0 +1,2 @@
1
+ import { PageElasticsearchIndexPlugin } from "../../plugins/definitions/PageElasticsearchIndexPlugin";
2
+ export declare const base: PageElasticsearchIndexPlugin;
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.base = void 0;
9
+
10
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
+
12
+ var _base = require("@webiny/api-elasticsearch/indexConfiguration/base");
13
+
14
+ var _PageElasticsearchIndexPlugin = require("../../plugins/definitions/PageElasticsearchIndexPlugin");
15
+
16
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
17
+
18
+ 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; }
19
+
20
+ const base = new _PageElasticsearchIndexPlugin.PageElasticsearchIndexPlugin({
21
+ body: _objectSpread({}, _base.base)
22
+ });
23
+ exports.base = base;
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["base.ts"],"names":["base","PageElasticsearchIndexPlugin","body","baseConfiguration"],"mappings":";;;;;;;;;;;AAAA;;AACA;;;;;;AAEO,MAAMA,IAAI,GAAG,IAAIC,0DAAJ,CAAiC;AACjDC,EAAAA,IAAI,oBACGC,UADH;AAD6C,CAAjC,CAAb","sourcesContent":["import { base as baseConfiguration } from \"@webiny/api-elasticsearch/indexConfiguration/base\";\nimport { PageElasticsearchIndexPlugin } from \"~/plugins/definitions/PageElasticsearchIndexPlugin\";\n\nexport const base = new PageElasticsearchIndexPlugin({\n body: {\n ...baseConfiguration\n }\n});\n"]}
@@ -0,0 +1 @@
1
+ export declare const elasticsearchIndexPlugins: () => import("../../plugins/definitions/PageElasticsearchIndexPlugin").PageElasticsearchIndexPlugin[];
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.elasticsearchIndexPlugins = void 0;
7
+
8
+ var _base = require("./base");
9
+
10
+ var _japanese = require("./japanese");
11
+
12
+ const elasticsearchIndexPlugins = () => {
13
+ return [_base.base, _japanese.japanese];
14
+ };
15
+
16
+ exports.elasticsearchIndexPlugins = elasticsearchIndexPlugins;
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["index.ts"],"names":["elasticsearchIndexPlugins","base","japanese"],"mappings":";;;;;;;AAAA;;AACA;;AAEO,MAAMA,yBAAyB,GAAG,MAAM;AAC3C,SAAO,CAACC,UAAD,EAAOC,kBAAP,CAAP;AACH,CAFM","sourcesContent":["import { base } from \"./base\";\nimport { japanese } from \"./japanese\";\n\nexport const elasticsearchIndexPlugins = () => {\n return [base, japanese];\n};\n"]}
@@ -0,0 +1,2 @@
1
+ import { PageElasticsearchIndexPlugin } from "../../plugins/definitions/PageElasticsearchIndexPlugin";
2
+ export declare const japanese: PageElasticsearchIndexPlugin;
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.japanese = void 0;
9
+
10
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
+
12
+ var _japanese = require("@webiny/api-elasticsearch/indexConfiguration/japanese");
13
+
14
+ var _PageElasticsearchIndexPlugin = require("../../plugins/definitions/PageElasticsearchIndexPlugin");
15
+
16
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
17
+
18
+ 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; }
19
+
20
+ const japanese = new _PageElasticsearchIndexPlugin.PageElasticsearchIndexPlugin({
21
+ body: _objectSpread({}, _japanese.japanese),
22
+ locales: ["ja", "ja-jp"]
23
+ });
24
+ exports.japanese = japanese;
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["japanese.ts"],"names":["japanese","PageElasticsearchIndexPlugin","body","japaneseConfiguration","locales"],"mappings":";;;;;;;;;;;AAAA;;AACA;;;;;;AAEO,MAAMA,QAAQ,GAAG,IAAIC,0DAAJ,CAAiC;AACrDC,EAAAA,IAAI,oBACGC,kBADH,CADiD;AAIrDC,EAAAA,OAAO,EAAE,CAAC,IAAD,EAAO,OAAP;AAJ4C,CAAjC,CAAjB","sourcesContent":["import { japanese as japaneseConfiguration } from \"@webiny/api-elasticsearch/indexConfiguration/japanese\";\nimport { PageElasticsearchIndexPlugin } from \"~/plugins/definitions/PageElasticsearchIndexPlugin\";\n\nexport const japanese = new PageElasticsearchIndexPlugin({\n body: {\n ...japaneseConfiguration\n },\n locales: [\"ja\", \"ja-jp\"]\n});\n"]}
package/index.js CHANGED
@@ -35,7 +35,7 @@ var _plugins = require("@webiny/plugins");
35
35
 
36
36
  var _operators = require("@webiny/api-elasticsearch/operators");
37
37
 
38
- var _installation = require("./operations/system/installation");
38
+ var _createElasticsearchIndex = require("./elasticsearch/createElasticsearchIndex");
39
39
 
40
40
  var _settings = require("./operations/settings");
41
41
 
@@ -55,6 +55,8 @@ var _fields4 = require("./operations/pages/fields");
55
55
 
56
56
  var _pages = require("./operations/pages");
57
57
 
58
+ var _indices = require("./elasticsearch/indices");
59
+
58
60
  const createStorageOperations = params => {
59
61
  const {
60
62
  documentClient,
@@ -62,7 +64,7 @@ const createStorageOperations = params => {
62
64
  table,
63
65
  esTable,
64
66
  attributes,
65
- plugins: customPlugins
67
+ plugins: userPlugins
66
68
  } = params;
67
69
  const tableInstance = (0, _table.createTable)({
68
70
  table,
@@ -76,7 +78,7 @@ const createStorageOperations = params => {
76
78
  /**
77
79
  * User defined custom plugins.
78
80
  */
79
- ...(customPlugins || []),
81
+ ...(userPlugins || []),
80
82
  /**
81
83
  * DynamoDB filter plugins for the where conditions.
82
84
  */
@@ -104,7 +106,11 @@ const createStorageOperations = params => {
104
106
  /**
105
107
  * Page fields required for filtering/sorting when using dynamodb.
106
108
  */
107
- (0, _fields4.createPagesDynamoDbFields)()]);
109
+ (0, _fields4.createPagesDynamoDbFields)(),
110
+ /**
111
+ * Built-in Elasticsearch index templates
112
+ */
113
+ (0, _indices.elasticsearchIndexPlugins)()]);
108
114
  const entities = {
109
115
  settings: (0, _settingsEntity.createSettingsEntity)({
110
116
  entityName: _types.ENTITIES.SETTINGS,
@@ -144,16 +150,18 @@ const createStorageOperations = params => {
144
150
  };
145
151
  return {
146
152
  init: async context => {
147
- context.pageBuilder.onBeforeInstall.subscribe(async ({
153
+ context.i18n.locales.onBeforeCreate.subscribe(async ({
154
+ locale,
148
155
  tenant
149
156
  }) => {
150
- await (0, _installation.execOnBeforeInstall)({
151
- tenant,
152
- elasticsearch
157
+ await (0, _createElasticsearchIndex.createElasticsearchIndex)({
158
+ elasticsearch,
159
+ plugins,
160
+ locale: locale.code,
161
+ tenant
153
162
  });
154
163
  });
155
164
  },
156
- plugins: [],
157
165
  getEntities: () => entities,
158
166
  getTable: () => tableInstance,
159
167
  getEsTable: () => tableElasticsearchInstance,
package/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["index.ts"],"names":["createStorageOperations","params","documentClient","elasticsearch","table","esTable","attributes","plugins","customPlugins","tableInstance","tableElasticsearchInstance","PluginsContainer","entities","settings","entityName","ENTITIES","SETTINGS","system","SYSTEM","categories","CATEGORIES","menus","MENUS","pageElements","PAGE_ELEMENTS","pages","PAGES","pagesEs","PAGES_ES","init","context","pageBuilder","onBeforeInstall","subscribe","tenant","getEntities","getTable","getEsTable","entity","esEntity"],"mappings":"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","sourcesContent":["import dynamoDbValueFilters from \"@webiny/db-dynamodb/plugins/filters\";\nimport { createSystemStorageOperations } from \"~/operations/system\";\nimport { ENTITIES, StorageOperationsFactory } from \"~/types\";\nimport { createTable } from \"~/definitions/table\";\nimport { createElasticsearchTable } from \"~/definitions/tableElasticsearch\";\nimport { createSettingsEntity } from \"~/definitions/settingsEntity\";\nimport { createSystemEntity } from \"./definitions/systemEntity\";\nimport { createCategoryEntity } from \"~/definitions/categoryEntity\";\nimport { createMenuEntity } from \"~/definitions/menuEntity\";\nimport { createPageElementEntity } from \"~/definitions/pageElementEntity\";\nimport { createPageEntity } from \"~/definitions/pageEntity\";\nimport { createPageElasticsearchEntity } from \"~/definitions/pageElasticsearchEntity\";\nimport { PluginsContainer } from \"@webiny/plugins\";\nimport { getElasticsearchOperators } from \"@webiny/api-elasticsearch/operators\";\nimport { execOnBeforeInstall } from \"~/operations/system/installation\";\nimport { createSettingsStorageOperations } from \"~/operations/settings\";\nimport { createCategoryDynamoDbFields } from \"~/operations/category/fields\";\nimport { createCategoryStorageOperations } from \"~/operations/category\";\nimport { createMenuDynamoDbFields } from \"~/operations/menu/fields\";\nimport { createMenuStorageOperations } from \"~/operations/menu\";\nimport { createPageElementDynamoDbFields } from \"~/operations/pageElement/fields\";\nimport { createPageElementStorageOperations } from \"~/operations/pageElement\";\nimport {\n createPagesElasticsearchFields,\n createPagesDynamoDbFields\n} from \"~/operations/pages/fields\";\nimport { createPageStorageOperations } from \"~/operations/pages\";\n\nexport const createStorageOperations: StorageOperationsFactory = params => {\n const {\n documentClient,\n elasticsearch,\n table,\n esTable,\n attributes,\n plugins: customPlugins\n } = params;\n\n const tableInstance = createTable({\n table,\n documentClient\n });\n const tableElasticsearchInstance = createElasticsearchTable({\n table: esTable,\n documentClient\n });\n\n const plugins = new PluginsContainer([\n /**\n * User defined custom plugins.\n */\n ...(customPlugins || []),\n /**\n * DynamoDB filter plugins for the where conditions.\n */\n dynamoDbValueFilters(),\n /**\n * Elasticsearch operators.\n */\n getElasticsearchOperators(),\n /**\n * Category fields required for filtering/sorting.\n */\n createCategoryDynamoDbFields(),\n /**\n * Menu fields required for filtering/sorting.\n */\n createMenuDynamoDbFields(),\n /**\n * Page element fields required for filtering/sorting.\n */\n createPageElementDynamoDbFields(),\n /**\n * Page fields required for filtering/sorting.\n */\n createPagesElasticsearchFields(),\n /**\n * Page fields required for filtering/sorting when using dynamodb.\n */\n createPagesDynamoDbFields()\n ]);\n\n const entities = {\n settings: createSettingsEntity({\n entityName: ENTITIES.SETTINGS,\n table: tableInstance,\n attributes: attributes ? attributes[ENTITIES.SETTINGS] : {}\n }),\n system: createSystemEntity({\n entityName: ENTITIES.SYSTEM,\n table: tableInstance,\n attributes: attributes ? attributes[ENTITIES.SYSTEM] : {}\n }),\n categories: createCategoryEntity({\n entityName: ENTITIES.CATEGORIES,\n table: tableInstance,\n attributes: attributes ? attributes[ENTITIES.CATEGORIES] : {}\n }),\n menus: createMenuEntity({\n entityName: ENTITIES.MENUS,\n table: tableInstance,\n attributes: attributes ? attributes[ENTITIES.MENUS] : {}\n }),\n pageElements: createPageElementEntity({\n entityName: ENTITIES.PAGE_ELEMENTS,\n table: tableInstance,\n attributes: attributes ? attributes[ENTITIES.PAGE_ELEMENTS] : {}\n }),\n pages: createPageEntity({\n entityName: ENTITIES.PAGES,\n table: tableInstance,\n attributes: attributes ? attributes[ENTITIES.PAGES] : {}\n }),\n pagesEs: createPageElasticsearchEntity({\n entityName: ENTITIES.PAGES_ES,\n table: tableElasticsearchInstance,\n attributes: attributes ? attributes[ENTITIES.PAGES_ES] : {}\n })\n };\n\n return {\n init: async context => {\n context.pageBuilder.onBeforeInstall.subscribe(async ({ tenant }) => {\n await execOnBeforeInstall({\n tenant,\n elasticsearch\n });\n });\n },\n plugins: [],\n getEntities: () => entities,\n getTable: () => tableInstance,\n getEsTable: () => tableElasticsearchInstance,\n system: createSystemStorageOperations({\n entity: entities.system\n }),\n settings: createSettingsStorageOperations({\n entity: entities.settings\n }),\n categories: createCategoryStorageOperations({\n entity: entities.categories,\n plugins\n }),\n menus: createMenuStorageOperations({\n entity: entities.menus,\n plugins\n }),\n pageElements: createPageElementStorageOperations({\n entity: entities.pageElements,\n plugins\n }),\n pages: createPageStorageOperations({\n entity: entities.pages,\n esEntity: entities.pagesEs,\n elasticsearch,\n plugins\n })\n };\n};\n"]}
1
+ {"version":3,"sources":["index.ts"],"names":["createStorageOperations","params","documentClient","elasticsearch","table","esTable","attributes","plugins","userPlugins","tableInstance","tableElasticsearchInstance","PluginsContainer","entities","settings","entityName","ENTITIES","SETTINGS","system","SYSTEM","categories","CATEGORIES","menus","MENUS","pageElements","PAGE_ELEMENTS","pages","PAGES","pagesEs","PAGES_ES","init","context","i18n","locales","onBeforeCreate","subscribe","locale","tenant","code","getEntities","getTable","getEsTable","entity","esEntity"],"mappings":"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","sourcesContent":["import dynamoDbValueFilters from \"@webiny/db-dynamodb/plugins/filters\";\nimport { createSystemStorageOperations } from \"~/operations/system\";\nimport { ENTITIES, StorageOperationsFactory } from \"~/types\";\nimport { createTable } from \"~/definitions/table\";\nimport { createElasticsearchTable } from \"~/definitions/tableElasticsearch\";\nimport { createSettingsEntity } from \"~/definitions/settingsEntity\";\nimport { createSystemEntity } from \"./definitions/systemEntity\";\nimport { createCategoryEntity } from \"~/definitions/categoryEntity\";\nimport { createMenuEntity } from \"~/definitions/menuEntity\";\nimport { createPageElementEntity } from \"~/definitions/pageElementEntity\";\nimport { createPageEntity } from \"~/definitions/pageEntity\";\nimport { createPageElasticsearchEntity } from \"~/definitions/pageElasticsearchEntity\";\nimport { PluginsContainer } from \"@webiny/plugins\";\nimport { getElasticsearchOperators } from \"@webiny/api-elasticsearch/operators\";\nimport { createElasticsearchIndex } from \"~/elasticsearch/createElasticsearchIndex\";\nimport { createSettingsStorageOperations } from \"~/operations/settings\";\nimport { createCategoryDynamoDbFields } from \"~/operations/category/fields\";\nimport { createCategoryStorageOperations } from \"~/operations/category\";\nimport { createMenuDynamoDbFields } from \"~/operations/menu/fields\";\nimport { createMenuStorageOperations } from \"~/operations/menu\";\nimport { createPageElementDynamoDbFields } from \"~/operations/pageElement/fields\";\nimport { createPageElementStorageOperations } from \"~/operations/pageElement\";\nimport {\n createPagesElasticsearchFields,\n createPagesDynamoDbFields\n} from \"~/operations/pages/fields\";\nimport { createPageStorageOperations } from \"~/operations/pages\";\nimport { elasticsearchIndexPlugins } from \"~/elasticsearch/indices\";\n\nexport const createStorageOperations: StorageOperationsFactory = params => {\n const {\n documentClient,\n elasticsearch,\n table,\n esTable,\n attributes,\n plugins: userPlugins\n } = params;\n\n const tableInstance = createTable({\n table,\n documentClient\n });\n const tableElasticsearchInstance = createElasticsearchTable({\n table: esTable,\n documentClient\n });\n\n const plugins = new PluginsContainer([\n /**\n * User defined custom plugins.\n */\n ...(userPlugins || []),\n /**\n * DynamoDB filter plugins for the where conditions.\n */\n dynamoDbValueFilters(),\n /**\n * Elasticsearch operators.\n */\n getElasticsearchOperators(),\n /**\n * Category fields required for filtering/sorting.\n */\n createCategoryDynamoDbFields(),\n /**\n * Menu fields required for filtering/sorting.\n */\n createMenuDynamoDbFields(),\n /**\n * Page element fields required for filtering/sorting.\n */\n createPageElementDynamoDbFields(),\n /**\n * Page fields required for filtering/sorting.\n */\n createPagesElasticsearchFields(),\n /**\n * Page fields required for filtering/sorting when using dynamodb.\n */\n createPagesDynamoDbFields(),\n /**\n * Built-in Elasticsearch index templates\n */\n elasticsearchIndexPlugins()\n ]);\n\n const entities = {\n settings: createSettingsEntity({\n entityName: ENTITIES.SETTINGS,\n table: tableInstance,\n attributes: attributes ? attributes[ENTITIES.SETTINGS] : {}\n }),\n system: createSystemEntity({\n entityName: ENTITIES.SYSTEM,\n table: tableInstance,\n attributes: attributes ? attributes[ENTITIES.SYSTEM] : {}\n }),\n categories: createCategoryEntity({\n entityName: ENTITIES.CATEGORIES,\n table: tableInstance,\n attributes: attributes ? attributes[ENTITIES.CATEGORIES] : {}\n }),\n menus: createMenuEntity({\n entityName: ENTITIES.MENUS,\n table: tableInstance,\n attributes: attributes ? attributes[ENTITIES.MENUS] : {}\n }),\n pageElements: createPageElementEntity({\n entityName: ENTITIES.PAGE_ELEMENTS,\n table: tableInstance,\n attributes: attributes ? attributes[ENTITIES.PAGE_ELEMENTS] : {}\n }),\n pages: createPageEntity({\n entityName: ENTITIES.PAGES,\n table: tableInstance,\n attributes: attributes ? attributes[ENTITIES.PAGES] : {}\n }),\n pagesEs: createPageElasticsearchEntity({\n entityName: ENTITIES.PAGES_ES,\n table: tableElasticsearchInstance,\n attributes: attributes ? attributes[ENTITIES.PAGES_ES] : {}\n })\n };\n\n return {\n init: async context => {\n context.i18n.locales.onBeforeCreate.subscribe(async ({ locale, tenant }) => {\n await createElasticsearchIndex({\n elasticsearch,\n plugins,\n locale: locale.code,\n tenant\n });\n });\n },\n getEntities: () => entities,\n getTable: () => tableInstance,\n getEsTable: () => tableElasticsearchInstance,\n system: createSystemStorageOperations({\n entity: entities.system\n }),\n settings: createSettingsStorageOperations({\n entity: entities.settings\n }),\n categories: createCategoryStorageOperations({\n entity: entities.categories,\n plugins\n }),\n menus: createMenuStorageOperations({\n entity: entities.menus,\n plugins\n }),\n pageElements: createPageElementStorageOperations({\n entity: entities.pageElements,\n plugins\n }),\n pages: createPageStorageOperations({\n entity: entities.pages,\n esEntity: entities.pagesEs,\n elasticsearch,\n plugins\n })\n };\n};\n"]}
@@ -17,8 +17,6 @@ var _sort = require("@webiny/api-elasticsearch/sort");
17
17
 
18
18
  var _limit = require("@webiny/api-elasticsearch/limit");
19
19
 
20
- var _ElasticsearchQueryBuilderOperatorPlugin = require("@webiny/api-elasticsearch/plugins/definition/ElasticsearchQueryBuilderOperatorPlugin");
21
-
22
20
  var _PageElasticsearchFieldPlugin = require("../../plugins/definitions/PageElasticsearchFieldPlugin");
23
21
 
24
22
  var _PageElasticsearchSortModifierPlugin = require("../../plugins/definitions/PageElasticsearchSortModifierPlugin");
@@ -29,6 +27,8 @@ var _PageElasticsearchBodyModifierPlugin = require("../../plugins/definitions/Pa
29
27
 
30
28
  var _where = require("@webiny/api-elasticsearch/where");
31
29
 
30
+ var _operators = require("@webiny/api-elasticsearch/operators");
31
+
32
32
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
33
33
 
34
34
  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; }
@@ -94,10 +94,7 @@ const createElasticsearchQuery = params => {
94
94
  * Be aware that, if having more registered operator plugins of same type, the last one will be used.
95
95
  */
96
96
 
97
- const operatorPlugins = plugins.byType(_ElasticsearchQueryBuilderOperatorPlugin.ElasticsearchQueryBuilderOperatorPlugin.type).reduce((acc, plugin) => {
98
- acc[plugin.getOperator()] = plugin;
99
- return acc;
100
- }, {});
97
+ const operatorPlugins = (0, _operators.getElasticsearchOperatorPluginsByLocale)(plugins, initialWhere.locale);
101
98
 
102
99
  const where = _objectSpread({}, initialWhere);
103
100
  /**
@@ -1 +1 @@
1
- {"version":3,"sources":["elasticsearchQueryBody.ts"],"names":["createInitialQueryValue","args","where","query","must","must_not","should","filter","published","push","term","latest","WebinyError","createElasticsearchQuery","params","plugins","initialWhere","fieldPlugins","operatorPlugins","byType","ElasticsearchQueryBuilderOperatorPlugin","type","reduce","acc","plugin","getOperator","tags_in","tags","tags_rule","tagsRule","Array","isArray","length","terms","bool","map","tag","search","query_string","allow_leading_wildcard","fields","sharedIndex","process","env","ELASTICSEARCH_SHARED_INDEXES","tenant","operators","createElasticsearchQueryBody","limit","initialLimit","sort","initialSort","after","PageElasticsearchFieldPlugin","field","queryModifiers","PageElasticsearchQueryModifierPlugin","modifyQuery","sortModifiers","PageElasticsearchSortModifierPlugin","modifySort","body","constant_score","size","search_after","bodyModifiers","PageElasticsearchBodyModifierPlugin","modifyBody"],"mappings":"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","sourcesContent":["import WebinyError from \"@webiny/error\";\nimport { SearchBody as esSearchBody } from \"elastic-ts\";\nimport { decodeCursor } from \"@webiny/api-elasticsearch/cursors\";\nimport { ElasticsearchBoolQueryConfig } from \"@webiny/api-elasticsearch/types\";\nimport { PageStorageOperationsListWhere } from \"@webiny/api-page-builder/types\";\nimport { createSort } from \"@webiny/api-elasticsearch/sort\";\nimport { createLimit } from \"@webiny/api-elasticsearch/limit\";\nimport { ElasticsearchFieldPlugin } from \"@webiny/api-elasticsearch/plugins/definition/ElasticsearchFieldPlugin\";\nimport { ElasticsearchQueryBuilderOperatorPlugin } from \"@webiny/api-elasticsearch/plugins/definition/ElasticsearchQueryBuilderOperatorPlugin\";\nimport { PageElasticsearchFieldPlugin } from \"~/plugins/definitions/PageElasticsearchFieldPlugin\";\nimport { PageElasticsearchSortModifierPlugin } from \"~/plugins/definitions/PageElasticsearchSortModifierPlugin\";\nimport { PageElasticsearchQueryModifierPlugin } from \"~/plugins/definitions/PageElasticsearchQueryModifierPlugin\";\nimport { PageElasticsearchBodyModifierPlugin } from \"~/plugins/definitions/PageElasticsearchBodyModifierPlugin\";\nimport { applyWhere } from \"@webiny/api-elasticsearch/where\";\nimport { PluginsContainer } from \"@webiny/plugins\";\n\ninterface CreateElasticsearchQueryArgs {\n where: PageStorageOperationsListWhere;\n}\n\n/**\n * Latest and published are specific in Elasticsearch to that extend that they are tagged in the published or latest 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 args: CreateElasticsearchQueryArgs\n): ElasticsearchBoolQueryConfig => {\n const { where } = args;\n\n const query: ElasticsearchBoolQueryConfig = {\n must: [],\n must_not: [],\n should: [],\n filter: []\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 published: true\n }\n });\n } else if (where.latest === true) {\n query.must.push({\n term: {\n latest: true\n }\n });\n }\n // we do not allow not published and not latest\n else if (where.published === false) {\n throw new WebinyError(\n `Cannot call Elasticsearch query with \"published\" set at false.`,\n \"ELASTICSEARCH_UNSUPPORTED_QUERY\",\n {\n where\n }\n );\n } else if (where.latest === false) {\n throw new WebinyError(\n `Cannot call Elasticsearch query with \"latest\" set at false.`,\n \"ELASTICSEARCH_UNSUPPORTED_QUERY\",\n {\n where\n }\n );\n }\n delete where.published;\n delete where.latest;\n //\n return query;\n};\n\ninterface CreateElasticsearchBodyParams {\n plugins: PluginsContainer;\n where: PageStorageOperationsListWhere;\n limit: number;\n after: string | null;\n sort: string[];\n}\n\nconst createElasticsearchQuery = (\n params: CreateElasticsearchBodyParams & {\n fieldPlugins: Record<string, ElasticsearchFieldPlugin>;\n }\n) => {\n const { plugins, where: initialWhere, fieldPlugins } = params;\n const query = createInitialQueryValue({\n where: initialWhere\n });\n /**\n * Be aware that, if having more registered operator plugins of same type, the last one will be used.\n */\n const operatorPlugins = plugins\n .byType<ElasticsearchQueryBuilderOperatorPlugin>(\n ElasticsearchQueryBuilderOperatorPlugin.type\n )\n .reduce((acc, plugin) => {\n acc[plugin.getOperator()] = plugin;\n return acc;\n }, {} as Record<string, ElasticsearchQueryBuilderOperatorPlugin>);\n\n const where: Partial<PageStorageOperationsListWhere> = {\n ...initialWhere\n };\n /**\n * Tags are specific so extract them and remove from where.\n */\n const { tags_in: tags, tags_rule: tagsRule } = initialWhere;\n delete where[\"tags_in\"];\n delete where[\"tags_rule\"];\n if (tags && Array.isArray(tags) === true && tags.length > 0) {\n if (tagsRule === \"any\") {\n query.filter.push({\n terms: {\n \"tags.keyword\": tags\n }\n });\n } else {\n query.filter.push({\n bool: {\n must: tags.map(tag => {\n return {\n term: {\n \"tags.keyword\": tag\n }\n };\n })\n }\n });\n }\n }\n /**\n * Specific search parameter\n */\n if (where.search) {\n query.must.push({\n query_string: {\n query: `*${where.search}*`,\n allow_leading_wildcard: true,\n fields: [\"titleLC\", \"snippet\"]\n }\n });\n }\n delete where.search;\n\n /**\n * !!! IMPORTANT !!! There are few specific cases where we hardcode the query conditions.\n *\n * When ES index is shared between tenants, we need to filter records by tenant ID.\n */\n const sharedIndex = process.env.ELASTICSEARCH_SHARED_INDEXES === \"true\";\n if (sharedIndex) {\n const tenant = initialWhere.tenant;\n query.must.push({ term: { \"tenant.keyword\": tenant } });\n /**\n * Remove so it is not applied again later.\n * Possibly tenant is not defined, but just in case, remove it.\n */\n delete where[\"tenant\"];\n }\n /**\n * We apply other conditions as they are passed via the where value.\n */\n applyWhere({\n query,\n where,\n fields: fieldPlugins,\n operators: operatorPlugins\n });\n\n return query;\n};\n\nexport const createElasticsearchQueryBody = (\n params: CreateElasticsearchBodyParams\n): esSearchBody & Pick<Required<esSearchBody>, \"sort\"> => {\n const { plugins, where, limit: initialLimit, sort: initialSort, after } = params;\n\n const fieldPlugins = plugins\n .byType<PageElasticsearchFieldPlugin>(PageElasticsearchFieldPlugin.type)\n .reduce((acc, plugin) => {\n acc[plugin.field] = plugin;\n return acc;\n }, {} as Record<string, PageElasticsearchFieldPlugin>);\n\n const limit = createLimit(initialLimit, 100);\n\n const query = createElasticsearchQuery({\n ...params,\n fieldPlugins\n });\n\n const sort = createSort({\n sort: initialSort,\n fieldPlugins\n });\n\n const queryModifiers = plugins.byType<PageElasticsearchQueryModifierPlugin>(\n PageElasticsearchQueryModifierPlugin.type\n );\n for (const plugin of queryModifiers) {\n plugin.modifyQuery({\n query,\n where\n });\n }\n\n const sortModifiers = plugins.byType<PageElasticsearchSortModifierPlugin>(\n PageElasticsearchSortModifierPlugin.type\n );\n for (const plugin of sortModifiers) {\n plugin.modifySort({\n sort\n });\n }\n\n const body = {\n query: {\n constant_score: {\n filter: {\n bool: {\n ...query\n }\n }\n }\n },\n size: limit + 1,\n /**\n * Casting as any is required due to search_after is accepting an array of values.\n * Which is correct in some cases. In our case, it is not.\n * https://www.elastic.co/guide/en/elasticsearch/reference/7.13/paginate-search-results.html\n */\n search_after: decodeCursor(after) as any,\n sort\n };\n\n const bodyModifiers = plugins.byType<PageElasticsearchBodyModifierPlugin>(\n PageElasticsearchBodyModifierPlugin.type\n );\n for (const plugin of bodyModifiers) {\n plugin.modifyBody({\n body\n });\n }\n\n return body;\n};\n"]}
1
+ {"version":3,"sources":["elasticsearchQueryBody.ts"],"names":["createInitialQueryValue","args","where","query","must","must_not","should","filter","published","push","term","latest","WebinyError","createElasticsearchQuery","params","plugins","initialWhere","fieldPlugins","operatorPlugins","locale","tags_in","tags","tags_rule","tagsRule","Array","isArray","length","terms","bool","map","tag","search","query_string","allow_leading_wildcard","fields","sharedIndex","process","env","ELASTICSEARCH_SHARED_INDEXES","tenant","operators","createElasticsearchQueryBody","limit","initialLimit","sort","initialSort","after","byType","PageElasticsearchFieldPlugin","type","reduce","acc","plugin","field","queryModifiers","PageElasticsearchQueryModifierPlugin","modifyQuery","sortModifiers","PageElasticsearchSortModifierPlugin","modifySort","body","constant_score","size","search_after","bodyModifiers","PageElasticsearchBodyModifierPlugin","modifyBody"],"mappings":"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","sourcesContent":["import WebinyError from \"@webiny/error\";\nimport { SearchBody as esSearchBody } from \"elastic-ts\";\nimport { decodeCursor } from \"@webiny/api-elasticsearch/cursors\";\nimport { ElasticsearchBoolQueryConfig } from \"@webiny/api-elasticsearch/types\";\nimport { PageStorageOperationsListWhere } from \"@webiny/api-page-builder/types\";\nimport { createSort } from \"@webiny/api-elasticsearch/sort\";\nimport { createLimit } from \"@webiny/api-elasticsearch/limit\";\nimport { ElasticsearchFieldPlugin } from \"@webiny/api-elasticsearch/plugins/definition/ElasticsearchFieldPlugin\";\nimport { PageElasticsearchFieldPlugin } from \"~/plugins/definitions/PageElasticsearchFieldPlugin\";\nimport { PageElasticsearchSortModifierPlugin } from \"~/plugins/definitions/PageElasticsearchSortModifierPlugin\";\nimport { PageElasticsearchQueryModifierPlugin } from \"~/plugins/definitions/PageElasticsearchQueryModifierPlugin\";\nimport { PageElasticsearchBodyModifierPlugin } from \"~/plugins/definitions/PageElasticsearchBodyModifierPlugin\";\nimport { applyWhere } from \"@webiny/api-elasticsearch/where\";\nimport { PluginsContainer } from \"@webiny/plugins\";\nimport { getElasticsearchOperatorPluginsByLocale } from \"@webiny/api-elasticsearch/operators\";\n\ninterface CreateElasticsearchQueryArgs {\n where: PageStorageOperationsListWhere;\n}\n\n/**\n * Latest and published are specific in Elasticsearch to that extend that they are tagged in the published or latest 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 args: CreateElasticsearchQueryArgs\n): ElasticsearchBoolQueryConfig => {\n const { where } = args;\n\n const query: ElasticsearchBoolQueryConfig = {\n must: [],\n must_not: [],\n should: [],\n filter: []\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 published: true\n }\n });\n } else if (where.latest === true) {\n query.must.push({\n term: {\n latest: true\n }\n });\n }\n // we do not allow not published and not latest\n else if (where.published === false) {\n throw new WebinyError(\n `Cannot call Elasticsearch query with \"published\" set at false.`,\n \"ELASTICSEARCH_UNSUPPORTED_QUERY\",\n {\n where\n }\n );\n } else if (where.latest === false) {\n throw new WebinyError(\n `Cannot call Elasticsearch query with \"latest\" set at false.`,\n \"ELASTICSEARCH_UNSUPPORTED_QUERY\",\n {\n where\n }\n );\n }\n delete where.published;\n delete where.latest;\n //\n return query;\n};\n\ninterface CreateElasticsearchBodyParams {\n plugins: PluginsContainer;\n where: PageStorageOperationsListWhere;\n limit: number;\n after: string | null;\n sort: string[];\n}\n\nconst createElasticsearchQuery = (\n params: CreateElasticsearchBodyParams & {\n fieldPlugins: Record<string, ElasticsearchFieldPlugin>;\n }\n) => {\n const { plugins, where: initialWhere, fieldPlugins } = params;\n const query = createInitialQueryValue({\n where: initialWhere\n });\n /**\n * Be aware that, if having more registered operator plugins of same type, the last one will be used.\n */\n const operatorPlugins = getElasticsearchOperatorPluginsByLocale(plugins, initialWhere.locale);\n\n const where: Partial<PageStorageOperationsListWhere> = {\n ...initialWhere\n };\n /**\n * Tags are specific so extract them and remove from where.\n */\n const { tags_in: tags, tags_rule: tagsRule } = initialWhere;\n delete where[\"tags_in\"];\n delete where[\"tags_rule\"];\n if (tags && Array.isArray(tags) === true && tags.length > 0) {\n if (tagsRule === \"any\") {\n query.filter.push({\n terms: {\n \"tags.keyword\": tags\n }\n });\n } else {\n query.filter.push({\n bool: {\n must: tags.map(tag => {\n return {\n term: {\n \"tags.keyword\": tag\n }\n };\n })\n }\n });\n }\n }\n /**\n * Specific search parameter\n */\n if (where.search) {\n query.must.push({\n query_string: {\n query: `*${where.search}*`,\n allow_leading_wildcard: true,\n fields: [\"titleLC\", \"snippet\"]\n }\n });\n }\n delete where.search;\n\n /**\n * !!! IMPORTANT !!! There are few specific cases where we hardcode the query conditions.\n *\n * When ES index is shared between tenants, we need to filter records by tenant ID.\n */\n const sharedIndex = process.env.ELASTICSEARCH_SHARED_INDEXES === \"true\";\n if (sharedIndex) {\n const tenant = initialWhere.tenant;\n query.must.push({ term: { \"tenant.keyword\": tenant } });\n /**\n * Remove so it is not applied again later.\n * Possibly tenant is not defined, but just in case, remove it.\n */\n delete where[\"tenant\"];\n }\n /**\n * We apply other conditions as they are passed via the where value.\n */\n applyWhere({\n query,\n where,\n fields: fieldPlugins,\n operators: operatorPlugins\n });\n\n return query;\n};\n\nexport const createElasticsearchQueryBody = (\n params: CreateElasticsearchBodyParams\n): esSearchBody & Pick<Required<esSearchBody>, \"sort\"> => {\n const { plugins, where, limit: initialLimit, sort: initialSort, after } = params;\n\n const fieldPlugins = plugins\n .byType<PageElasticsearchFieldPlugin>(PageElasticsearchFieldPlugin.type)\n .reduce((acc, plugin) => {\n acc[plugin.field] = plugin;\n return acc;\n }, {} as Record<string, PageElasticsearchFieldPlugin>);\n\n const limit = createLimit(initialLimit, 100);\n\n const query = createElasticsearchQuery({\n ...params,\n fieldPlugins\n });\n\n const sort = createSort({\n sort: initialSort,\n fieldPlugins\n });\n\n const queryModifiers = plugins.byType<PageElasticsearchQueryModifierPlugin>(\n PageElasticsearchQueryModifierPlugin.type\n );\n for (const plugin of queryModifiers) {\n plugin.modifyQuery({\n query,\n where\n });\n }\n\n const sortModifiers = plugins.byType<PageElasticsearchSortModifierPlugin>(\n PageElasticsearchSortModifierPlugin.type\n );\n for (const plugin of sortModifiers) {\n plugin.modifySort({\n sort\n });\n }\n\n const body = {\n query: {\n constant_score: {\n filter: {\n bool: {\n ...query\n }\n }\n }\n },\n size: limit + 1,\n /**\n * Casting as any is required due to search_after is accepting an array of values.\n * Which is correct in some cases. In our case, it is not.\n * https://www.elastic.co/guide/en/elasticsearch/reference/7.13/paginate-search-results.html\n */\n search_after: decodeCursor(after) as any,\n sort\n };\n\n const bodyModifiers = plugins.byType<PageElasticsearchBodyModifierPlugin>(\n PageElasticsearchBodyModifierPlugin.type\n );\n for (const plugin of bodyModifiers) {\n plugin.modifyBody({\n body\n });\n }\n\n return body;\n};\n"]}
@@ -13,7 +13,7 @@ var _error = _interopRequireDefault(require("@webiny/error"));
13
13
 
14
14
  var _cleanup = require("@webiny/db-dynamodb/utils/cleanup");
15
15
 
16
- var _configurations = _interopRequireDefault(require("../configurations"));
16
+ var _configurations = require("../../configurations");
17
17
 
18
18
  var _cursors = require("@webiny/api-elasticsearch/cursors");
19
19
 
@@ -79,7 +79,7 @@ const createPageStorageOperations = params => {
79
79
  items: items
80
80
  });
81
81
  await esEntity.put(_objectSpread({
82
- index: _configurations.default.es(page).index,
82
+ index: _configurations.configurations.es(page).index,
83
83
  data: esData
84
84
  }, latestKeys));
85
85
  return page;
@@ -131,7 +131,7 @@ const createPageStorageOperations = params => {
131
131
 
132
132
  if (esData) {
133
133
  await esEntity.put(_objectSpread({
134
- index: _configurations.default.es(page).index,
134
+ index: _configurations.configurations.es(page).index,
135
135
  data: esData
136
136
  }, latestKeys));
137
137
  }
@@ -207,7 +207,7 @@ const createPageStorageOperations = params => {
207
207
  await esEntity.delete(_objectSpread({}, latestKeys));
208
208
  } else if (esData) {
209
209
  await esEntity.put(_objectSpread({
210
- index: _configurations.default.es(page).index,
210
+ index: _configurations.configurations.es(page).index,
211
211
  data: esData
212
212
  }, latestKeys));
213
213
  }
@@ -281,7 +281,7 @@ const createPageStorageOperations = params => {
281
281
  esItems.push(esEntity.putBatch({
282
282
  PK: partitionKey,
283
283
  SK: (0, _keys.createLatestSortKey)(),
284
- index: _configurations.default.es(page).index,
284
+ index: _configurations.configurations.es(page).index,
285
285
  data: (0, _helpers.getESLatestPageData)(plugins, previousLatestRecord)
286
286
  }));
287
287
  previousLatestPage = (0, _cleanup.cleanupItem)(entity, previousLatestRecord);
@@ -437,7 +437,7 @@ const createPageStorageOperations = params => {
437
437
  esItems.push(esEntity.putBatch({
438
438
  PK: (0, _keys.createPartitionKey)(page),
439
439
  SK: (0, _keys.createLatestSortKey)(),
440
- index: _configurations.default.es(page).index,
440
+ index: _configurations.configurations.es(page).index,
441
441
  data: (0, _helpers.getESLatestPageData)(plugins, page)
442
442
  }));
443
443
  }
@@ -476,7 +476,7 @@ const createPageStorageOperations = params => {
476
476
  esItems.push(esEntity.putBatch({
477
477
  PK: (0, _keys.createPartitionKey)(page),
478
478
  SK: (0, _keys.createPublishedSortKey)(),
479
- index: _configurations.default.es(page).index,
479
+ index: _configurations.configurations.es(page).index,
480
480
  data: (0, _helpers.getESPublishedPageData)(plugins, page)
481
481
  }));
482
482
  } else {
@@ -583,7 +583,7 @@ const createPageStorageOperations = params => {
583
583
  esItems.push(esEntity.putBatch({
584
584
  PK: (0, _keys.createPartitionKey)(page),
585
585
  SK: (0, _keys.createLatestSortKey)(),
586
- index: _configurations.default.es(page).index,
586
+ index: _configurations.configurations.es(page).index,
587
587
  data: (0, _helpers.getESLatestPageData)(plugins, page)
588
588
  }));
589
589
  }
@@ -671,7 +671,7 @@ const createPageStorageOperations = params => {
671
671
  await esEntity.put({
672
672
  PK: (0, _keys.createPartitionKey)(page),
673
673
  SK: (0, _keys.createLatestSortKey)(),
674
- index: _configurations.default.es(page).index,
674
+ index: _configurations.configurations.es(page).index,
675
675
  data: esData
676
676
  });
677
677
  } catch (ex) {
@@ -732,7 +732,7 @@ const createPageStorageOperations = params => {
732
732
  await esEntity.put({
733
733
  PK: (0, _keys.createPartitionKey)(page),
734
734
  SK: (0, _keys.createLatestSortKey)(),
735
- index: _configurations.default.es(page).index,
735
+ index: _configurations.configurations.es(page).index,
736
736
  data: esData
737
737
  });
738
738
  } catch (ex) {
@@ -870,7 +870,7 @@ const createPageStorageOperations = params => {
870
870
 
871
871
  let response;
872
872
 
873
- const esConfig = _configurations.default.es(params.where);
873
+ const esConfig = _configurations.configurations.es(params.where);
874
874
 
875
875
  try {
876
876
  response = await elasticsearch.search(_objectSpread(_objectSpread({}, esConfig), {}, {
@@ -944,7 +944,7 @@ const createPageStorageOperations = params => {
944
944
  plugins
945
945
  }));
946
946
 
947
- const esConfig = _configurations.default.es(where);
947
+ const esConfig = _configurations.configurations.es(where);
948
948
 
949
949
  try {
950
950
  const response = await elasticsearch.search(_objectSpread(_objectSpread({}, esConfig), {}, {
@@ -1 +1 @@
1
- {"version":3,"sources":["index.ts"],"names":["createPageStorageOperations","params","entity","esEntity","elasticsearch","plugins","create","page","versionKeys","PK","SK","latestKeys","items","putBatch","TYPE","esData","table","put","index","configurations","es","data","ex","WebinyError","message","code","createFrom","latestPage","original","undefined","update","keys","latestPageResult","get","Item","deleteEsRecord","id","push","delete","deleteOne","publishedPage","partitionKey","deleteBatch","esItems","previousLatestPage","previousLatestRecord","options","lt","reverse","length","deleteAll","queryAllParams","gte","revisions","publishedPathEntryDeleted","revision","status","path","publish","esRecord","unpublish","requestReview","requestChanges","where","pid","published","version","includes","Number","split","pop","sortKey","result","list","latest","after","previousCursor","limit","initialLimit","body","searchPlugins","byType","SearchPublishedPagesPlugin","type","SearchLatestPagesPlugin","plugin","modifyQuery","query","args","modifySort","sort","response","esConfig","search","meta","hasMoreItems","totalCount","cursor","hits","total","map","item","_source","value","listTags","tenant","locale","size","aggs","tags","terms","field","include","aggregations","Array","isArray","buckets","key","listRevisions","beginsWith","fields","PageDynamoDbElasticsearchFieldPlugin"],"mappings":"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","sourcesContent":["import {\n Page,\n PageStorageOperations,\n PageStorageOperationsCreateFromParams,\n PageStorageOperationsCreateParams,\n PageStorageOperationsDeleteAllParams,\n PageStorageOperationsDeleteParams,\n PageStorageOperationsGetParams,\n PageStorageOperationsListParams,\n PageStorageOperationsListResponse,\n PageStorageOperationsListRevisionsParams,\n PageStorageOperationsListTagsParams,\n PageStorageOperationsPublishParams,\n PageStorageOperationsRequestChangesParams,\n PageStorageOperationsRequestReviewParams,\n PageStorageOperationsUnpublishParams,\n PageStorageOperationsUpdateParams\n} from \"@webiny/api-page-builder/types\";\nimport { Entity } from \"dynamodb-toolbox\";\nimport WebinyError from \"@webiny/error\";\nimport { cleanupItem } from \"@webiny/db-dynamodb/utils/cleanup\";\nimport { Client } from \"@elastic/elasticsearch\";\nimport {\n ElasticsearchBoolQueryConfig,\n ElasticsearchSearchResponse\n} from \"@webiny/api-elasticsearch/types\";\nimport configurations from \"~/operations/configurations\";\nimport { encodeCursor } from \"@webiny/api-elasticsearch/cursors\";\nimport { createLimit } from \"@webiny/api-elasticsearch/limit\";\nimport { createElasticsearchQueryBody } from \"./elasticsearchQueryBody\";\nimport { SearchLatestPagesPlugin } from \"~/plugins/definitions/SearchLatestPagesPlugin\";\nimport { SearchPublishedPagesPlugin } from \"~/plugins/definitions/SearchPublishedPagesPlugin\";\nimport { DbItem, queryAll, QueryAllParams, queryOne } from \"@webiny/db-dynamodb/utils/query\";\nimport { SearchPagesPlugin } from \"~/plugins/definitions/SearchPagesPlugin\";\nimport { batchWriteAll } from \"@webiny/db-dynamodb/utils/batchWrite\";\nimport { getESLatestPageData, getESPublishedPageData } from \"./helpers\";\nimport lodashGet from \"lodash/get\";\nimport { get as entityGet } from \"@webiny/db-dynamodb/utils/get\";\nimport { PluginsContainer } from \"@webiny/plugins\";\nimport {\n createBasicType,\n createLatestSortKey,\n createLatestType,\n createPartitionKey,\n createPathPartitionKey,\n createPathSortKey,\n createPublishedPathType,\n createPublishedSortKey,\n createPublishedType,\n createSortKey\n} from \"./keys\";\nimport { sortItems } from \"@webiny/db-dynamodb/utils/sort\";\nimport { PageDynamoDbElasticsearchFieldPlugin } from \"~/plugins/definitions/PageDynamoDbElasticsearchFieldPlugin\";\n\nexport interface CreatePageStorageOperationsParams {\n entity: Entity<any>;\n esEntity: Entity<any>;\n elasticsearch: Client;\n plugins: PluginsContainer;\n}\nexport const createPageStorageOperations = (\n params: CreatePageStorageOperationsParams\n): PageStorageOperations => {\n const { entity, esEntity, elasticsearch, plugins } = params;\n\n const create = async (params: PageStorageOperationsCreateParams): Promise<Page> => {\n const { page } = params;\n\n const versionKeys = {\n PK: createPartitionKey(page),\n SK: createSortKey(page)\n };\n const latestKeys = {\n ...versionKeys,\n SK: createLatestSortKey()\n };\n\n const items = [\n entity.putBatch({\n ...page,\n ...versionKeys,\n TYPE: createBasicType()\n }),\n entity.putBatch({\n ...page,\n ...latestKeys,\n TYPE: createLatestType()\n })\n ];\n const esData = getESLatestPageData(plugins, page);\n try {\n await batchWriteAll({\n table: entity.table,\n items: items\n });\n await esEntity.put({\n index: configurations.es(page).index,\n data: esData,\n ...latestKeys\n });\n return page;\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not create new page.\",\n ex.code || \"CREATE_PAGE_ERROR\",\n {\n versionKeys,\n latestKeys,\n page\n }\n );\n }\n };\n\n const createFrom = async (params: PageStorageOperationsCreateFromParams): Promise<Page> => {\n const { page, latestPage, original } = params;\n\n const versionKeys = {\n PK: createPartitionKey(page),\n SK: createSortKey(page)\n };\n const latestKeys = {\n ...versionKeys,\n SK: createLatestSortKey()\n };\n\n const items = [\n entity.putBatch({\n ...page,\n TYPE: createBasicType(),\n ...versionKeys\n }),\n entity.putBatch({\n ...page,\n TYPE: createLatestType(),\n ...latestKeys\n })\n ];\n /**\n * Specifically for the Elasticsearch.\n * If visibility on the latest list is not false, push it into the ES.\n */\n let esData: any = undefined;\n if (lodashGet(page, \"visibility.list.latest\") !== false) {\n esData = getESLatestPageData(plugins, page);\n }\n\n try {\n await batchWriteAll({\n table: entity.table,\n items\n });\n if (esData) {\n await esEntity.put({\n index: configurations.es(page).index,\n data: esData,\n ...latestKeys\n });\n }\n return page;\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not create new page from existing page.\",\n ex.code || \"CREATE_PAGE_FROM_ERROR\",\n {\n versionKeys,\n latestKeys,\n latestPage,\n original,\n page\n }\n );\n }\n };\n\n const update = async (params: PageStorageOperationsUpdateParams): Promise<Page> => {\n const { original, page } = params;\n\n const keys = {\n PK: createPartitionKey(page),\n SK: createSortKey(page)\n };\n\n const latestKeys = {\n ...keys,\n SK: createLatestSortKey()\n };\n const latestPageResult = await entity.get(latestKeys);\n const latestPage = cleanupItem(entity, latestPageResult ? latestPageResult.Item : null);\n\n const items = [\n entity.putBatch({\n ...page,\n TYPE: createBasicType(),\n ...keys\n })\n ];\n /**\n * In the case the latest page is the page we are currently updating\n * check for the visibility in the list.\n * If visibility is set to false - delete the record\n * Otherwise update it.\n */\n let esData: Record<string, any> | null = null;\n let deleteEsRecord = false;\n if (latestPage && latestPage.id === page.id) {\n if (lodashGet(page, \"visibility.list.latest\") === false) {\n deleteEsRecord = true;\n } else {\n esData = getESLatestPageData(plugins, page);\n }\n /**\n * We also update the regular record.\n */\n items.push(\n entity.putBatch({\n ...page,\n TYPE: createLatestType(),\n ...latestKeys\n })\n );\n }\n /**\n * Unfortunately we cannot push regular and es record in the batch write because they are two separate tables.\n */\n try {\n await batchWriteAll({\n table: entity.table,\n items\n });\n\n if (deleteEsRecord) {\n await esEntity.delete({\n ...latestKeys\n });\n } else if (esData) {\n await esEntity.put({\n index: configurations.es(page).index,\n data: esData,\n ...latestKeys\n });\n }\n\n return page;\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not update existing page.\",\n ex.code || \"UPDATE_PAGE_ERROR\",\n {\n original,\n page,\n latestPage,\n latestKeys,\n keys\n }\n );\n }\n };\n\n /**\n * In case of delete, we must delete records:\n * - revision\n * - path if published\n * Update:\n * - latest\n */\n const deleteOne = async (\n params: PageStorageOperationsDeleteParams\n ): Promise<[Page, Page | null]> => {\n const { page, latestPage, publishedPage } = params;\n\n const partitionKey = createPartitionKey(page);\n\n const items = [\n entity.deleteBatch({\n PK: partitionKey,\n SK: createSortKey(page)\n })\n ];\n const esItems = [];\n if (publishedPage && publishedPage.id === page.id) {\n items.push(\n entity.deleteBatch({\n PK: partitionKey,\n SK: createPublishedSortKey()\n })\n );\n items.push(\n entity.deleteBatch({\n PK: createPathPartitionKey(page),\n SK: createPathSortKey(page)\n })\n );\n esItems.push(\n esEntity.deleteBatch({\n PK: partitionKey,\n SK: createPublishedSortKey()\n })\n );\n }\n let previousLatestPage: Page | null = null;\n if (latestPage && latestPage.id === page.id) {\n const previousLatestRecord = await queryOne<Page>({\n entity,\n partitionKey,\n options: {\n lt: createSortKey(latestPage),\n reverse: true\n }\n });\n if (previousLatestRecord) {\n items.push(\n entity.putBatch({\n ...previousLatestRecord,\n TYPE: createLatestType(),\n PK: partitionKey,\n SK: createLatestSortKey()\n })\n );\n esItems.push(\n esEntity.putBatch({\n PK: partitionKey,\n SK: createLatestSortKey(),\n index: configurations.es(page).index,\n data: getESLatestPageData(plugins, previousLatestRecord)\n })\n );\n previousLatestPage = cleanupItem(entity, previousLatestRecord);\n }\n }\n try {\n await batchWriteAll({\n table: entity.table,\n items\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not batch write all the page records.\",\n ex.code || \"BATCH_WRITE_RECORDS_ERROR\"\n );\n }\n if (esItems.length === 0) {\n return [page, previousLatestPage];\n }\n try {\n await batchWriteAll({\n table: entity.table,\n items: esItems\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not batch write all the page Elasticsearch records.\",\n ex.code || \"BATCH_WRITE_ELASTICSEARCH_RECORDS_ERROR\"\n );\n }\n return [page, previousLatestPage];\n };\n\n /**\n * In case of deleteAll, we must delete records:\n * - latest\n * - published\n * - path if published\n * - revision\n * - es latest\n * - es published\n */\n const deleteAll = async (params: PageStorageOperationsDeleteAllParams): Promise<[Page]> => {\n const { page } = params;\n\n const partitionKey = createPartitionKey(page);\n const queryAllParams = {\n entity,\n partitionKey,\n options: {\n gte: \" \"\n }\n };\n let revisions: DbItem<Page>[];\n try {\n revisions = await queryAll<Page>(queryAllParams);\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not query for all revisions of the page.\",\n ex.code || \"LIST_REVISIONS_ERROR\",\n {\n params: queryAllParams\n }\n );\n }\n\n /**\n * We need to go through all possible entries and delete them.\n * Also, delete the published entry path record.\n */\n const items = [];\n let publishedPathEntryDeleted = false;\n for (const revision of revisions) {\n if (revision.status === \"published\" && !publishedPathEntryDeleted) {\n publishedPathEntryDeleted = true;\n items.push(\n entity.deleteBatch({\n PK: createPathPartitionKey(page),\n SK: revision.path\n })\n );\n }\n items.push(\n entity.deleteBatch({\n PK: revision.PK,\n SK: revision.SK\n })\n );\n }\n const esItems = [\n esEntity.deleteBatch({\n PK: partitionKey,\n SK: createLatestSortKey()\n })\n ];\n /**\n * Delete published record if it is published.\n */\n if (publishedPathEntryDeleted) {\n esItems.push(\n esEntity.deleteBatch({\n PK: partitionKey,\n SK: createPublishedSortKey()\n })\n );\n }\n\n try {\n await batchWriteAll({\n table: entity.table,\n items\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not delete all the page records.\",\n ex.code || \"DELETE_RECORDS_ERROR\"\n );\n }\n try {\n await batchWriteAll({\n table: entity.table,\n items: esItems\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not delete all the page Elasticsearch records.\",\n ex.code || \"DELETE_ELASTICSEARCH_RECORDS_ERROR\"\n );\n }\n return [page];\n };\n\n const publish = async (params: PageStorageOperationsPublishParams): Promise<Page> => {\n const { page, latestPage, publishedPage } = params;\n\n /**\n * Update the given revision of the page.\n */\n const items = [\n entity.putBatch({\n ...page,\n TYPE: createBasicType(),\n PK: createPartitionKey(page),\n SK: createSortKey(page)\n })\n ];\n const esItems = [];\n /**\n * If we are publishing the latest revision, let's also update the latest revision entry's\n * status in ES. Also, if we are publishing the latest revision and the \"LATEST page lists\n * visibility\" is not false, then we need to update the latest page revision entry in ES.\n */\n if (latestPage.id === page.id) {\n items.push(\n entity.putBatch({\n ...page,\n TYPE: createLatestType(),\n PK: createPartitionKey(page),\n SK: createLatestSortKey()\n })\n );\n if (lodashGet(page, \"visibility.list.latest\") !== false) {\n esItems.push(\n esEntity.putBatch({\n PK: createPartitionKey(page),\n SK: createLatestSortKey(),\n index: configurations.es(page).index,\n data: getESLatestPageData(plugins, page)\n })\n );\n }\n }\n /**\n * If we have already published revision of this page:\n * - set existing published page revision to unpublished\n * - remove old published path if paths are different\n */\n if (publishedPage) {\n items.push(\n entity.putBatch({\n ...publishedPage,\n status: \"unpublished\",\n PK: createPartitionKey(publishedPage),\n SK: createSortKey(publishedPage)\n })\n );\n /**\n * Remove old published path if required.\n */\n if (publishedPage.path !== page.path) {\n items.push(\n entity.deleteBatch({\n PK: createPathPartitionKey(page),\n SK: publishedPage.path\n })\n );\n }\n }\n /**\n * If we need to display the published page in the list.\n * Check only if it's not false, because only that should stop the propagation.\n */\n if (lodashGet(page, \"visibility.list.published\") !== false) {\n esItems.push(\n esEntity.putBatch({\n PK: createPartitionKey(page),\n SK: createPublishedSortKey(),\n index: configurations.es(page).index,\n data: getESPublishedPageData(plugins, page)\n })\n );\n } else {\n /**\n * We need to check if record is in the Elasticsearch table.\n */\n const keys = {\n PK: createPartitionKey(page),\n SK: createPublishedSortKey()\n };\n const esRecord = await entityGet({\n entity: esEntity,\n keys\n });\n /**\n * And if it is, delete it.\n */\n if (esRecord) {\n /**\n * Delete published record if not visible\n */\n esItems.push(esEntity.deleteBatch(keys));\n }\n }\n /**\n * Update or insert published path.\n */\n items.push(\n entity.putBatch({\n ...page,\n TYPE: createPublishedPathType(),\n PK: createPathPartitionKey(page),\n SK: createPathSortKey(page)\n })\n );\n /**\n * Update or insert published page.\n */\n items.push(\n entity.putBatch({\n ...page,\n TYPE: createPublishedType(),\n PK: createPartitionKey(page),\n SK: createPublishedSortKey()\n })\n );\n\n try {\n await batchWriteAll({\n table: entity.table,\n items\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not update all the page records when publishing.\",\n ex.code || \"UPDATE_RECORDS_ERROR\"\n );\n }\n /**\n * No point in continuing if there are no items in Elasticsearch data\n */\n if (esItems.length === 0) {\n return page;\n }\n try {\n await batchWriteAll({\n table: esEntity.table,\n items: esItems\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message ||\n \"Could not update all the page Elasticsearch records when publishing.\",\n ex.code || \"UPDATE_ELASTICSEARCH_RECORDS_ERROR\"\n );\n }\n return page;\n };\n\n const unpublish = async (params: PageStorageOperationsUnpublishParams): Promise<Page> => {\n const { page, latestPage } = params;\n\n const items = [\n entity.deleteBatch({\n PK: createPartitionKey(page),\n SK: createPublishedSortKey()\n }),\n entity.deleteBatch({\n PK: createPathPartitionKey(page),\n SK: createPathSortKey(page)\n }),\n entity.putBatch({\n ...page,\n TYPE: createBasicType(),\n PK: createPartitionKey(page),\n SK: createSortKey(page)\n })\n ];\n const esItems = [];\n /*\n * If we are unpublishing the latest revision, let's also update the latest revision entry's\n * status in ES. We can only do that if the entry actually exists, or in other words, if the\n * published page's \"LATEST pages lists visibility\" setting is not set to false.\n */\n if (latestPage.id === page.id && lodashGet(page, \"visibility.list.latest\") !== false) {\n items.push(\n entity.putBatch({\n ...page,\n TYPE: createLatestType(),\n PK: createPartitionKey(page),\n SK: createLatestSortKey()\n })\n );\n esItems.push(\n esEntity.putBatch({\n PK: createPartitionKey(page),\n SK: createLatestSortKey(),\n index: configurations.es(page).index,\n data: getESLatestPageData(plugins, page)\n })\n );\n }\n if (lodashGet(page, \"visibility.list.published\") !== false) {\n esItems.push(\n esEntity.deleteBatch({\n PK: createPartitionKey(page),\n SK: createPublishedSortKey()\n })\n );\n }\n\n try {\n await batchWriteAll({\n table: entity.table,\n items\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not update all the page records when unpublishing.\",\n ex.code || \"UPDATE_RECORDS_ERROR\"\n );\n }\n /**\n * No need to go further if no Elasticsearch items to be applied.\n */\n if (esItems.length === 0) {\n return page;\n }\n try {\n await batchWriteAll({\n table: esEntity.table,\n items: esItems\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message ||\n \"Could not update all the page Elasticsearch records when unpublishing.\",\n ex.code || \"UPDATE_ELASTICSEARCH_RECORDS_ERROR\"\n );\n }\n return page;\n };\n\n const requestReview = async (\n params: PageStorageOperationsRequestReviewParams\n ): Promise<Page> => {\n const { original, page, latestPage } = params;\n\n const items = [\n entity.putBatch({\n ...page,\n TYPE: createBasicType(),\n PK: createPartitionKey(page),\n SK: createSortKey(page)\n })\n ];\n let esData = undefined;\n if (latestPage.id === page.id && lodashGet(page, \"visibility.list.latest\") !== false) {\n items.push(\n entity.putBatch({\n ...page,\n TYPE: createLatestType(),\n PK: createPartitionKey(page),\n SK: createLatestSortKey()\n })\n );\n esData = getESLatestPageData(plugins, page);\n }\n try {\n await batchWriteAll({\n table: entity.table,\n items\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not request review on page record.\",\n ex.code || \"REQUEST_REVIEW_ERROR\",\n {\n original,\n page,\n latestPage\n }\n );\n }\n /**\n * Just return if we do not need to update the Elasticsearch.\n */\n if (!esData) {\n return page;\n }\n\n try {\n await esEntity.put({\n PK: createPartitionKey(page),\n SK: createLatestSortKey(),\n index: configurations.es(page).index,\n data: esData\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not request review on page Elasticsearch record.\",\n ex.code || \"REQUEST_REVIEW_ES_ERROR\",\n {\n original,\n page,\n latestPage\n }\n );\n }\n\n return page;\n };\n\n const requestChanges = async (\n params: PageStorageOperationsRequestChangesParams\n ): Promise<Page> => {\n const { original, page, latestPage } = params;\n\n const items = [\n entity.putBatch({\n ...page,\n TYPE: createBasicType(),\n PK: createPartitionKey(page),\n SK: createSortKey(page)\n })\n ];\n let esData = undefined;\n if (latestPage.id === page.id && lodashGet(page, \"visibility.list.latest\") !== false) {\n items.push(\n entity.putBatch({\n ...page,\n TYPE: createLatestType(),\n PK: createPartitionKey(page),\n SK: createLatestSortKey()\n })\n );\n esData = getESLatestPageData(plugins, page);\n }\n\n try {\n await batchWriteAll({\n table: entity.table,\n items\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not request changes on page record.\",\n ex.code || \"REQUEST_CHANGES_ERROR\",\n {\n original,\n page,\n latestPage\n }\n );\n }\n /**\n * Just return if we do not need to update the Elasticsearch.\n */\n if (!esData) {\n return page;\n }\n\n try {\n await esEntity.put({\n PK: createPartitionKey(page),\n SK: createLatestSortKey(),\n index: configurations.es(page).index,\n data: esData\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not request changes on page Elasticsearch record.\",\n ex.code || \"REQUEST_CHANGES_ES_ERROR\",\n {\n original,\n page,\n latestPage\n }\n );\n }\n\n return page;\n };\n\n const get = async (params: PageStorageOperationsGetParams): Promise<Page | null> => {\n const { where } = params;\n const { pid, id, path, published } = where;\n let { version } = where;\n /**\n * In case of having full ID and not having version we can take the version from the id.\n */\n if (id && id.includes(\"#\") && !version) {\n version = Number(id.split(\"#\").pop());\n }\n let partitionKey: string | null = null;\n let sortKey: string;\n if (path) {\n partitionKey = createPathPartitionKey(where);\n sortKey = path;\n } else if (published) {\n sortKey = createPublishedSortKey();\n } else if (version) {\n sortKey = createSortKey({\n version\n });\n } else {\n sortKey = createLatestSortKey();\n }\n /**\n * If partition key is still undefined, create one with id or pid\n */\n if (!partitionKey) {\n partitionKey = createPartitionKey({\n ...where,\n id: pid || (id as string)\n });\n }\n const keys = {\n PK: partitionKey,\n SK: sortKey\n };\n try {\n const result = await entity.get(keys);\n if (!result || !result.Item) {\n return null;\n }\n return cleanupItem(entity, result.Item);\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not load page by given params.\",\n ex.code || \"GET_PAGE_ERROR\",\n {\n where,\n keys\n }\n );\n }\n };\n\n const list = async (\n params: PageStorageOperationsListParams\n ): Promise<PageStorageOperationsListResponse> => {\n /**\n * We do not allow loading both published and latest at the same time.\n * @see PageStorageOperationsListWhere\n */\n if (params.where.published && params.where.latest) {\n throw new WebinyError(\n \"Both published and latest cannot be defined at the same time.\",\n \"MALFORMED_WHERE_ERROR\",\n {\n where: params.where\n }\n );\n }\n\n const { after: previousCursor = null, limit: initialLimit } = params;\n\n const limit = createLimit(initialLimit, 50);\n const body = createElasticsearchQueryBody({\n ...params,\n where: {\n ...params.where\n },\n limit,\n after: previousCursor,\n plugins\n });\n\n let searchPlugins: SearchPagesPlugin[] = [];\n if (params.where.published) {\n searchPlugins = plugins.byType<SearchPublishedPagesPlugin>(\n SearchPublishedPagesPlugin.type\n );\n } else if (params.where.latest) {\n searchPlugins = plugins.byType<SearchLatestPagesPlugin>(SearchLatestPagesPlugin.type);\n } else {\n throw new WebinyError(\n \"Only published or latest can be listed. Missing where condition.\",\n \"MALFORMED_WHERE_ERROR\",\n {\n where: params.where\n }\n );\n }\n\n for (const plugin of searchPlugins) {\n /**\n * Apply query modifications\n */\n plugin.modifyQuery({\n query: body.query as unknown as ElasticsearchBoolQueryConfig,\n args: params,\n plugins\n });\n\n /**\n * Apply sort modifications\n */\n plugin.modifySort({\n sort: body.sort,\n args: params,\n plugins\n });\n }\n\n let response: ElasticsearchSearchResponse<Page>;\n const esConfig = configurations.es(params.where);\n try {\n response = await elasticsearch.search({\n ...esConfig,\n body\n });\n } catch (ex) {\n /**\n * Do not throw the error if Elasticsearch index does not exist.\n * In some CRUDs we try to get list of pages but index was not created yet.\n */\n if (ex.message === \"index_not_found_exception\") {\n return {\n items: [],\n meta: {\n hasMoreItems: false,\n totalCount: 0,\n cursor: null\n }\n };\n }\n throw new WebinyError(\n ex.message || \"Could not load pages by given Elasticsearch body.\",\n ex.code || \"LIST_PAGES_ERROR\",\n {\n body\n }\n );\n }\n const { hits, total } = response.body.hits;\n const items = hits.map(item => item._source);\n\n const hasMoreItems = items.length > limit;\n if (hasMoreItems) {\n /**\n * Remove the last item from results, we don't want to include it.\n */\n items.pop();\n }\n /**\n * Cursor is the `sort` value of the last item in the array.\n * https://www.elastic.co/guide/en/elasticsearch/reference/current/paginate-search-results.html#search-after\n */\n const cursor =\n items.length > 0 && hasMoreItems\n ? encodeCursor(hits[items.length - 1].sort) || null\n : null;\n return {\n items,\n meta: {\n hasMoreItems,\n totalCount: total.value,\n cursor\n }\n };\n };\n\n const listTags = async (params: PageStorageOperationsListTagsParams): Promise<string[]> => {\n const { where } = params;\n\n const tenant: string = where.tenant;\n const body = createElasticsearchQueryBody({\n ...params,\n where: {\n locale: where.locale,\n search: undefined,\n tenant\n },\n sort: [],\n after: null,\n limit: 100000,\n plugins\n });\n\n const esConfig = configurations.es(where);\n\n try {\n const response: ElasticsearchSearchResponse<string> = await elasticsearch.search({\n ...esConfig,\n body: {\n ...body,\n sort: undefined,\n limit: undefined,\n size: 0,\n aggs: {\n tags: {\n terms: {\n field: \"tags.keyword\",\n include: `.*${where.search}.*`,\n size: 10\n }\n }\n }\n }\n });\n\n const tags = response.body.aggregations[\"tags\"];\n if (!tags || Array.isArray(tags.buckets) === false) {\n return [];\n }\n return tags.buckets.map(item => item.key);\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not list tags by given parameters.\",\n ex.code || \"LIST_TAGS_ERROR\",\n {\n body,\n where\n }\n );\n }\n };\n\n const listRevisions = async (\n params: PageStorageOperationsListRevisionsParams\n ): Promise<Page[]> => {\n const { where, sort } = params;\n\n const queryAllParams: QueryAllParams = {\n entity,\n partitionKey: createPartitionKey({\n ...where,\n id: where.pid\n }),\n options: {\n beginsWith: \"REV#\",\n reverse: false\n }\n };\n\n let items: Page[] = [];\n try {\n items = await queryAll<Page>(queryAllParams);\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not load all the revisions from requested page.\",\n ex.code || \"LOAD_PAGE_REVISIONS_ERROR\",\n {\n params\n }\n );\n }\n\n const fields = plugins.byType<PageDynamoDbElasticsearchFieldPlugin>(\n PageDynamoDbElasticsearchFieldPlugin.type\n );\n\n return sortItems({\n items,\n fields,\n sort\n });\n };\n\n return {\n create,\n createFrom,\n update,\n delete: deleteOne,\n deleteAll: deleteAll,\n publish,\n unpublish,\n requestReview,\n requestChanges,\n get,\n list,\n listRevisions,\n listTags\n };\n};\n"]}
1
+ {"version":3,"sources":["index.ts"],"names":["createPageStorageOperations","params","entity","esEntity","elasticsearch","plugins","create","page","versionKeys","PK","SK","latestKeys","items","putBatch","TYPE","esData","table","put","index","configurations","es","data","ex","WebinyError","message","code","createFrom","latestPage","original","undefined","update","keys","latestPageResult","get","Item","deleteEsRecord","id","push","delete","deleteOne","publishedPage","partitionKey","deleteBatch","esItems","previousLatestPage","previousLatestRecord","options","lt","reverse","length","deleteAll","queryAllParams","gte","revisions","publishedPathEntryDeleted","revision","status","path","publish","esRecord","unpublish","requestReview","requestChanges","where","pid","published","version","includes","Number","split","pop","sortKey","result","list","latest","after","previousCursor","limit","initialLimit","body","searchPlugins","byType","SearchPublishedPagesPlugin","type","SearchLatestPagesPlugin","plugin","modifyQuery","query","args","modifySort","sort","response","esConfig","search","meta","hasMoreItems","totalCount","cursor","hits","total","map","item","_source","value","listTags","tenant","locale","size","aggs","tags","terms","field","include","aggregations","Array","isArray","buckets","key","listRevisions","beginsWith","fields","PageDynamoDbElasticsearchFieldPlugin"],"mappings":"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","sourcesContent":["import {\n Page,\n PageStorageOperations,\n PageStorageOperationsCreateFromParams,\n PageStorageOperationsCreateParams,\n PageStorageOperationsDeleteAllParams,\n PageStorageOperationsDeleteParams,\n PageStorageOperationsGetParams,\n PageStorageOperationsListParams,\n PageStorageOperationsListResponse,\n PageStorageOperationsListRevisionsParams,\n PageStorageOperationsListTagsParams,\n PageStorageOperationsPublishParams,\n PageStorageOperationsRequestChangesParams,\n PageStorageOperationsRequestReviewParams,\n PageStorageOperationsUnpublishParams,\n PageStorageOperationsUpdateParams\n} from \"@webiny/api-page-builder/types\";\nimport { Entity } from \"dynamodb-toolbox\";\nimport WebinyError from \"@webiny/error\";\nimport { cleanupItem } from \"@webiny/db-dynamodb/utils/cleanup\";\nimport { Client } from \"@elastic/elasticsearch\";\nimport {\n ElasticsearchBoolQueryConfig,\n ElasticsearchSearchResponse\n} from \"@webiny/api-elasticsearch/types\";\nimport { configurations } from \"~/configurations\";\nimport { encodeCursor } from \"@webiny/api-elasticsearch/cursors\";\nimport { createLimit } from \"@webiny/api-elasticsearch/limit\";\nimport { createElasticsearchQueryBody } from \"./elasticsearchQueryBody\";\nimport { SearchLatestPagesPlugin } from \"~/plugins/definitions/SearchLatestPagesPlugin\";\nimport { SearchPublishedPagesPlugin } from \"~/plugins/definitions/SearchPublishedPagesPlugin\";\nimport { DbItem, queryAll, QueryAllParams, queryOne } from \"@webiny/db-dynamodb/utils/query\";\nimport { SearchPagesPlugin } from \"~/plugins/definitions/SearchPagesPlugin\";\nimport { batchWriteAll } from \"@webiny/db-dynamodb/utils/batchWrite\";\nimport { getESLatestPageData, getESPublishedPageData } from \"./helpers\";\nimport lodashGet from \"lodash/get\";\nimport { get as entityGet } from \"@webiny/db-dynamodb/utils/get\";\nimport { PluginsContainer } from \"@webiny/plugins\";\nimport {\n createBasicType,\n createLatestSortKey,\n createLatestType,\n createPartitionKey,\n createPathPartitionKey,\n createPathSortKey,\n createPublishedPathType,\n createPublishedSortKey,\n createPublishedType,\n createSortKey\n} from \"./keys\";\nimport { sortItems } from \"@webiny/db-dynamodb/utils/sort\";\nimport { PageDynamoDbElasticsearchFieldPlugin } from \"~/plugins/definitions/PageDynamoDbElasticsearchFieldPlugin\";\n\nexport interface CreatePageStorageOperationsParams {\n entity: Entity<any>;\n esEntity: Entity<any>;\n elasticsearch: Client;\n plugins: PluginsContainer;\n}\nexport const createPageStorageOperations = (\n params: CreatePageStorageOperationsParams\n): PageStorageOperations => {\n const { entity, esEntity, elasticsearch, plugins } = params;\n\n const create = async (params: PageStorageOperationsCreateParams): Promise<Page> => {\n const { page } = params;\n\n const versionKeys = {\n PK: createPartitionKey(page),\n SK: createSortKey(page)\n };\n const latestKeys = {\n ...versionKeys,\n SK: createLatestSortKey()\n };\n\n const items = [\n entity.putBatch({\n ...page,\n ...versionKeys,\n TYPE: createBasicType()\n }),\n entity.putBatch({\n ...page,\n ...latestKeys,\n TYPE: createLatestType()\n })\n ];\n const esData = getESLatestPageData(plugins, page);\n try {\n await batchWriteAll({\n table: entity.table,\n items: items\n });\n await esEntity.put({\n index: configurations.es(page).index,\n data: esData,\n ...latestKeys\n });\n return page;\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not create new page.\",\n ex.code || \"CREATE_PAGE_ERROR\",\n {\n versionKeys,\n latestKeys,\n page\n }\n );\n }\n };\n\n const createFrom = async (params: PageStorageOperationsCreateFromParams): Promise<Page> => {\n const { page, latestPage, original } = params;\n\n const versionKeys = {\n PK: createPartitionKey(page),\n SK: createSortKey(page)\n };\n const latestKeys = {\n ...versionKeys,\n SK: createLatestSortKey()\n };\n\n const items = [\n entity.putBatch({\n ...page,\n TYPE: createBasicType(),\n ...versionKeys\n }),\n entity.putBatch({\n ...page,\n TYPE: createLatestType(),\n ...latestKeys\n })\n ];\n /**\n * Specifically for the Elasticsearch.\n * If visibility on the latest list is not false, push it into the ES.\n */\n let esData: any = undefined;\n if (lodashGet(page, \"visibility.list.latest\") !== false) {\n esData = getESLatestPageData(plugins, page);\n }\n\n try {\n await batchWriteAll({\n table: entity.table,\n items\n });\n if (esData) {\n await esEntity.put({\n index: configurations.es(page).index,\n data: esData,\n ...latestKeys\n });\n }\n return page;\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not create new page from existing page.\",\n ex.code || \"CREATE_PAGE_FROM_ERROR\",\n {\n versionKeys,\n latestKeys,\n latestPage,\n original,\n page\n }\n );\n }\n };\n\n const update = async (params: PageStorageOperationsUpdateParams): Promise<Page> => {\n const { original, page } = params;\n\n const keys = {\n PK: createPartitionKey(page),\n SK: createSortKey(page)\n };\n\n const latestKeys = {\n ...keys,\n SK: createLatestSortKey()\n };\n const latestPageResult = await entity.get(latestKeys);\n const latestPage = cleanupItem(entity, latestPageResult ? latestPageResult.Item : null);\n\n const items = [\n entity.putBatch({\n ...page,\n TYPE: createBasicType(),\n ...keys\n })\n ];\n /**\n * In the case the latest page is the page we are currently updating\n * check for the visibility in the list.\n * If visibility is set to false - delete the record\n * Otherwise update it.\n */\n let esData: Record<string, any> | null = null;\n let deleteEsRecord = false;\n if (latestPage && latestPage.id === page.id) {\n if (lodashGet(page, \"visibility.list.latest\") === false) {\n deleteEsRecord = true;\n } else {\n esData = getESLatestPageData(plugins, page);\n }\n /**\n * We also update the regular record.\n */\n items.push(\n entity.putBatch({\n ...page,\n TYPE: createLatestType(),\n ...latestKeys\n })\n );\n }\n /**\n * Unfortunately we cannot push regular and es record in the batch write because they are two separate tables.\n */\n try {\n await batchWriteAll({\n table: entity.table,\n items\n });\n\n if (deleteEsRecord) {\n await esEntity.delete({\n ...latestKeys\n });\n } else if (esData) {\n await esEntity.put({\n index: configurations.es(page).index,\n data: esData,\n ...latestKeys\n });\n }\n\n return page;\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not update existing page.\",\n ex.code || \"UPDATE_PAGE_ERROR\",\n {\n original,\n page,\n latestPage,\n latestKeys,\n keys\n }\n );\n }\n };\n\n /**\n * In case of delete, we must delete records:\n * - revision\n * - path if published\n * Update:\n * - latest\n */\n const deleteOne = async (\n params: PageStorageOperationsDeleteParams\n ): Promise<[Page, Page | null]> => {\n const { page, latestPage, publishedPage } = params;\n\n const partitionKey = createPartitionKey(page);\n\n const items = [\n entity.deleteBatch({\n PK: partitionKey,\n SK: createSortKey(page)\n })\n ];\n const esItems = [];\n if (publishedPage && publishedPage.id === page.id) {\n items.push(\n entity.deleteBatch({\n PK: partitionKey,\n SK: createPublishedSortKey()\n })\n );\n items.push(\n entity.deleteBatch({\n PK: createPathPartitionKey(page),\n SK: createPathSortKey(page)\n })\n );\n esItems.push(\n esEntity.deleteBatch({\n PK: partitionKey,\n SK: createPublishedSortKey()\n })\n );\n }\n let previousLatestPage: Page | null = null;\n if (latestPage && latestPage.id === page.id) {\n const previousLatestRecord = await queryOne<Page>({\n entity,\n partitionKey,\n options: {\n lt: createSortKey(latestPage),\n reverse: true\n }\n });\n if (previousLatestRecord) {\n items.push(\n entity.putBatch({\n ...previousLatestRecord,\n TYPE: createLatestType(),\n PK: partitionKey,\n SK: createLatestSortKey()\n })\n );\n esItems.push(\n esEntity.putBatch({\n PK: partitionKey,\n SK: createLatestSortKey(),\n index: configurations.es(page).index,\n data: getESLatestPageData(plugins, previousLatestRecord)\n })\n );\n previousLatestPage = cleanupItem(entity, previousLatestRecord);\n }\n }\n try {\n await batchWriteAll({\n table: entity.table,\n items\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not batch write all the page records.\",\n ex.code || \"BATCH_WRITE_RECORDS_ERROR\"\n );\n }\n if (esItems.length === 0) {\n return [page, previousLatestPage];\n }\n try {\n await batchWriteAll({\n table: entity.table,\n items: esItems\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not batch write all the page Elasticsearch records.\",\n ex.code || \"BATCH_WRITE_ELASTICSEARCH_RECORDS_ERROR\"\n );\n }\n return [page, previousLatestPage];\n };\n\n /**\n * In case of deleteAll, we must delete records:\n * - latest\n * - published\n * - path if published\n * - revision\n * - es latest\n * - es published\n */\n const deleteAll = async (params: PageStorageOperationsDeleteAllParams): Promise<[Page]> => {\n const { page } = params;\n\n const partitionKey = createPartitionKey(page);\n const queryAllParams = {\n entity,\n partitionKey,\n options: {\n gte: \" \"\n }\n };\n let revisions: DbItem<Page>[];\n try {\n revisions = await queryAll<Page>(queryAllParams);\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not query for all revisions of the page.\",\n ex.code || \"LIST_REVISIONS_ERROR\",\n {\n params: queryAllParams\n }\n );\n }\n\n /**\n * We need to go through all possible entries and delete them.\n * Also, delete the published entry path record.\n */\n const items = [];\n let publishedPathEntryDeleted = false;\n for (const revision of revisions) {\n if (revision.status === \"published\" && !publishedPathEntryDeleted) {\n publishedPathEntryDeleted = true;\n items.push(\n entity.deleteBatch({\n PK: createPathPartitionKey(page),\n SK: revision.path\n })\n );\n }\n items.push(\n entity.deleteBatch({\n PK: revision.PK,\n SK: revision.SK\n })\n );\n }\n const esItems = [\n esEntity.deleteBatch({\n PK: partitionKey,\n SK: createLatestSortKey()\n })\n ];\n /**\n * Delete published record if it is published.\n */\n if (publishedPathEntryDeleted) {\n esItems.push(\n esEntity.deleteBatch({\n PK: partitionKey,\n SK: createPublishedSortKey()\n })\n );\n }\n\n try {\n await batchWriteAll({\n table: entity.table,\n items\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not delete all the page records.\",\n ex.code || \"DELETE_RECORDS_ERROR\"\n );\n }\n try {\n await batchWriteAll({\n table: entity.table,\n items: esItems\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not delete all the page Elasticsearch records.\",\n ex.code || \"DELETE_ELASTICSEARCH_RECORDS_ERROR\"\n );\n }\n return [page];\n };\n\n const publish = async (params: PageStorageOperationsPublishParams): Promise<Page> => {\n const { page, latestPage, publishedPage } = params;\n\n /**\n * Update the given revision of the page.\n */\n const items = [\n entity.putBatch({\n ...page,\n TYPE: createBasicType(),\n PK: createPartitionKey(page),\n SK: createSortKey(page)\n })\n ];\n const esItems = [];\n /**\n * If we are publishing the latest revision, let's also update the latest revision entry's\n * status in ES. Also, if we are publishing the latest revision and the \"LATEST page lists\n * visibility\" is not false, then we need to update the latest page revision entry in ES.\n */\n if (latestPage.id === page.id) {\n items.push(\n entity.putBatch({\n ...page,\n TYPE: createLatestType(),\n PK: createPartitionKey(page),\n SK: createLatestSortKey()\n })\n );\n if (lodashGet(page, \"visibility.list.latest\") !== false) {\n esItems.push(\n esEntity.putBatch({\n PK: createPartitionKey(page),\n SK: createLatestSortKey(),\n index: configurations.es(page).index,\n data: getESLatestPageData(plugins, page)\n })\n );\n }\n }\n /**\n * If we have already published revision of this page:\n * - set existing published page revision to unpublished\n * - remove old published path if paths are different\n */\n if (publishedPage) {\n items.push(\n entity.putBatch({\n ...publishedPage,\n status: \"unpublished\",\n PK: createPartitionKey(publishedPage),\n SK: createSortKey(publishedPage)\n })\n );\n /**\n * Remove old published path if required.\n */\n if (publishedPage.path !== page.path) {\n items.push(\n entity.deleteBatch({\n PK: createPathPartitionKey(page),\n SK: publishedPage.path\n })\n );\n }\n }\n /**\n * If we need to display the published page in the list.\n * Check only if it's not false, because only that should stop the propagation.\n */\n if (lodashGet(page, \"visibility.list.published\") !== false) {\n esItems.push(\n esEntity.putBatch({\n PK: createPartitionKey(page),\n SK: createPublishedSortKey(),\n index: configurations.es(page).index,\n data: getESPublishedPageData(plugins, page)\n })\n );\n } else {\n /**\n * We need to check if record is in the Elasticsearch table.\n */\n const keys = {\n PK: createPartitionKey(page),\n SK: createPublishedSortKey()\n };\n const esRecord = await entityGet({\n entity: esEntity,\n keys\n });\n /**\n * And if it is, delete it.\n */\n if (esRecord) {\n /**\n * Delete published record if not visible\n */\n esItems.push(esEntity.deleteBatch(keys));\n }\n }\n /**\n * Update or insert published path.\n */\n items.push(\n entity.putBatch({\n ...page,\n TYPE: createPublishedPathType(),\n PK: createPathPartitionKey(page),\n SK: createPathSortKey(page)\n })\n );\n /**\n * Update or insert published page.\n */\n items.push(\n entity.putBatch({\n ...page,\n TYPE: createPublishedType(),\n PK: createPartitionKey(page),\n SK: createPublishedSortKey()\n })\n );\n\n try {\n await batchWriteAll({\n table: entity.table,\n items\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not update all the page records when publishing.\",\n ex.code || \"UPDATE_RECORDS_ERROR\"\n );\n }\n /**\n * No point in continuing if there are no items in Elasticsearch data\n */\n if (esItems.length === 0) {\n return page;\n }\n try {\n await batchWriteAll({\n table: esEntity.table,\n items: esItems\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message ||\n \"Could not update all the page Elasticsearch records when publishing.\",\n ex.code || \"UPDATE_ELASTICSEARCH_RECORDS_ERROR\"\n );\n }\n return page;\n };\n\n const unpublish = async (params: PageStorageOperationsUnpublishParams): Promise<Page> => {\n const { page, latestPage } = params;\n\n const items = [\n entity.deleteBatch({\n PK: createPartitionKey(page),\n SK: createPublishedSortKey()\n }),\n entity.deleteBatch({\n PK: createPathPartitionKey(page),\n SK: createPathSortKey(page)\n }),\n entity.putBatch({\n ...page,\n TYPE: createBasicType(),\n PK: createPartitionKey(page),\n SK: createSortKey(page)\n })\n ];\n const esItems = [];\n /*\n * If we are unpublishing the latest revision, let's also update the latest revision entry's\n * status in ES. We can only do that if the entry actually exists, or in other words, if the\n * published page's \"LATEST pages lists visibility\" setting is not set to false.\n */\n if (latestPage.id === page.id && lodashGet(page, \"visibility.list.latest\") !== false) {\n items.push(\n entity.putBatch({\n ...page,\n TYPE: createLatestType(),\n PK: createPartitionKey(page),\n SK: createLatestSortKey()\n })\n );\n esItems.push(\n esEntity.putBatch({\n PK: createPartitionKey(page),\n SK: createLatestSortKey(),\n index: configurations.es(page).index,\n data: getESLatestPageData(plugins, page)\n })\n );\n }\n if (lodashGet(page, \"visibility.list.published\") !== false) {\n esItems.push(\n esEntity.deleteBatch({\n PK: createPartitionKey(page),\n SK: createPublishedSortKey()\n })\n );\n }\n\n try {\n await batchWriteAll({\n table: entity.table,\n items\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not update all the page records when unpublishing.\",\n ex.code || \"UPDATE_RECORDS_ERROR\"\n );\n }\n /**\n * No need to go further if no Elasticsearch items to be applied.\n */\n if (esItems.length === 0) {\n return page;\n }\n try {\n await batchWriteAll({\n table: esEntity.table,\n items: esItems\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message ||\n \"Could not update all the page Elasticsearch records when unpublishing.\",\n ex.code || \"UPDATE_ELASTICSEARCH_RECORDS_ERROR\"\n );\n }\n return page;\n };\n\n const requestReview = async (\n params: PageStorageOperationsRequestReviewParams\n ): Promise<Page> => {\n const { original, page, latestPage } = params;\n\n const items = [\n entity.putBatch({\n ...page,\n TYPE: createBasicType(),\n PK: createPartitionKey(page),\n SK: createSortKey(page)\n })\n ];\n let esData = undefined;\n if (latestPage.id === page.id && lodashGet(page, \"visibility.list.latest\") !== false) {\n items.push(\n entity.putBatch({\n ...page,\n TYPE: createLatestType(),\n PK: createPartitionKey(page),\n SK: createLatestSortKey()\n })\n );\n esData = getESLatestPageData(plugins, page);\n }\n try {\n await batchWriteAll({\n table: entity.table,\n items\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not request review on page record.\",\n ex.code || \"REQUEST_REVIEW_ERROR\",\n {\n original,\n page,\n latestPage\n }\n );\n }\n /**\n * Just return if we do not need to update the Elasticsearch.\n */\n if (!esData) {\n return page;\n }\n\n try {\n await esEntity.put({\n PK: createPartitionKey(page),\n SK: createLatestSortKey(),\n index: configurations.es(page).index,\n data: esData\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not request review on page Elasticsearch record.\",\n ex.code || \"REQUEST_REVIEW_ES_ERROR\",\n {\n original,\n page,\n latestPage\n }\n );\n }\n\n return page;\n };\n\n const requestChanges = async (\n params: PageStorageOperationsRequestChangesParams\n ): Promise<Page> => {\n const { original, page, latestPage } = params;\n\n const items = [\n entity.putBatch({\n ...page,\n TYPE: createBasicType(),\n PK: createPartitionKey(page),\n SK: createSortKey(page)\n })\n ];\n let esData = undefined;\n if (latestPage.id === page.id && lodashGet(page, \"visibility.list.latest\") !== false) {\n items.push(\n entity.putBatch({\n ...page,\n TYPE: createLatestType(),\n PK: createPartitionKey(page),\n SK: createLatestSortKey()\n })\n );\n esData = getESLatestPageData(plugins, page);\n }\n\n try {\n await batchWriteAll({\n table: entity.table,\n items\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not request changes on page record.\",\n ex.code || \"REQUEST_CHANGES_ERROR\",\n {\n original,\n page,\n latestPage\n }\n );\n }\n /**\n * Just return if we do not need to update the Elasticsearch.\n */\n if (!esData) {\n return page;\n }\n\n try {\n await esEntity.put({\n PK: createPartitionKey(page),\n SK: createLatestSortKey(),\n index: configurations.es(page).index,\n data: esData\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not request changes on page Elasticsearch record.\",\n ex.code || \"REQUEST_CHANGES_ES_ERROR\",\n {\n original,\n page,\n latestPage\n }\n );\n }\n\n return page;\n };\n\n const get = async (params: PageStorageOperationsGetParams): Promise<Page | null> => {\n const { where } = params;\n const { pid, id, path, published } = where;\n let { version } = where;\n /**\n * In case of having full ID and not having version we can take the version from the id.\n */\n if (id && id.includes(\"#\") && !version) {\n version = Number(id.split(\"#\").pop());\n }\n let partitionKey: string | null = null;\n let sortKey: string;\n if (path) {\n partitionKey = createPathPartitionKey(where);\n sortKey = path;\n } else if (published) {\n sortKey = createPublishedSortKey();\n } else if (version) {\n sortKey = createSortKey({\n version\n });\n } else {\n sortKey = createLatestSortKey();\n }\n /**\n * If partition key is still undefined, create one with id or pid\n */\n if (!partitionKey) {\n partitionKey = createPartitionKey({\n ...where,\n id: pid || (id as string)\n });\n }\n const keys = {\n PK: partitionKey,\n SK: sortKey\n };\n try {\n const result = await entity.get(keys);\n if (!result || !result.Item) {\n return null;\n }\n return cleanupItem(entity, result.Item);\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not load page by given params.\",\n ex.code || \"GET_PAGE_ERROR\",\n {\n where,\n keys\n }\n );\n }\n };\n\n const list = async (\n params: PageStorageOperationsListParams\n ): Promise<PageStorageOperationsListResponse> => {\n /**\n * We do not allow loading both published and latest at the same time.\n * @see PageStorageOperationsListWhere\n */\n if (params.where.published && params.where.latest) {\n throw new WebinyError(\n \"Both published and latest cannot be defined at the same time.\",\n \"MALFORMED_WHERE_ERROR\",\n {\n where: params.where\n }\n );\n }\n\n const { after: previousCursor = null, limit: initialLimit } = params;\n\n const limit = createLimit(initialLimit, 50);\n const body = createElasticsearchQueryBody({\n ...params,\n where: {\n ...params.where\n },\n limit,\n after: previousCursor,\n plugins\n });\n\n let searchPlugins: SearchPagesPlugin[] = [];\n if (params.where.published) {\n searchPlugins = plugins.byType<SearchPublishedPagesPlugin>(\n SearchPublishedPagesPlugin.type\n );\n } else if (params.where.latest) {\n searchPlugins = plugins.byType<SearchLatestPagesPlugin>(SearchLatestPagesPlugin.type);\n } else {\n throw new WebinyError(\n \"Only published or latest can be listed. Missing where condition.\",\n \"MALFORMED_WHERE_ERROR\",\n {\n where: params.where\n }\n );\n }\n\n for (const plugin of searchPlugins) {\n /**\n * Apply query modifications\n */\n plugin.modifyQuery({\n query: body.query as unknown as ElasticsearchBoolQueryConfig,\n args: params,\n plugins\n });\n\n /**\n * Apply sort modifications\n */\n plugin.modifySort({\n sort: body.sort,\n args: params,\n plugins\n });\n }\n\n let response: ElasticsearchSearchResponse<Page>;\n const esConfig = configurations.es(params.where);\n try {\n response = await elasticsearch.search({\n ...esConfig,\n body\n });\n } catch (ex) {\n /**\n * Do not throw the error if Elasticsearch index does not exist.\n * In some CRUDs we try to get list of pages but index was not created yet.\n */\n if (ex.message === \"index_not_found_exception\") {\n return {\n items: [],\n meta: {\n hasMoreItems: false,\n totalCount: 0,\n cursor: null\n }\n };\n }\n throw new WebinyError(\n ex.message || \"Could not load pages by given Elasticsearch body.\",\n ex.code || \"LIST_PAGES_ERROR\",\n {\n body\n }\n );\n }\n const { hits, total } = response.body.hits;\n const items = hits.map(item => item._source);\n\n const hasMoreItems = items.length > limit;\n if (hasMoreItems) {\n /**\n * Remove the last item from results, we don't want to include it.\n */\n items.pop();\n }\n /**\n * Cursor is the `sort` value of the last item in the array.\n * https://www.elastic.co/guide/en/elasticsearch/reference/current/paginate-search-results.html#search-after\n */\n const cursor =\n items.length > 0 && hasMoreItems\n ? encodeCursor(hits[items.length - 1].sort) || null\n : null;\n return {\n items,\n meta: {\n hasMoreItems,\n totalCount: total.value,\n cursor\n }\n };\n };\n\n const listTags = async (params: PageStorageOperationsListTagsParams): Promise<string[]> => {\n const { where } = params;\n\n const tenant: string = where.tenant;\n const body = createElasticsearchQueryBody({\n ...params,\n where: {\n locale: where.locale,\n search: undefined,\n tenant\n },\n sort: [],\n after: null,\n limit: 100000,\n plugins\n });\n\n const esConfig = configurations.es(where);\n\n try {\n const response: ElasticsearchSearchResponse<string> = await elasticsearch.search({\n ...esConfig,\n body: {\n ...body,\n sort: undefined,\n limit: undefined,\n size: 0,\n aggs: {\n tags: {\n terms: {\n field: \"tags.keyword\",\n include: `.*${where.search}.*`,\n size: 10\n }\n }\n }\n }\n });\n\n const tags = response.body.aggregations[\"tags\"];\n if (!tags || Array.isArray(tags.buckets) === false) {\n return [];\n }\n return tags.buckets.map(item => item.key);\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not list tags by given parameters.\",\n ex.code || \"LIST_TAGS_ERROR\",\n {\n body,\n where\n }\n );\n }\n };\n\n const listRevisions = async (\n params: PageStorageOperationsListRevisionsParams\n ): Promise<Page[]> => {\n const { where, sort } = params;\n\n const queryAllParams: QueryAllParams = {\n entity,\n partitionKey: createPartitionKey({\n ...where,\n id: where.pid\n }),\n options: {\n beginsWith: \"REV#\",\n reverse: false\n }\n };\n\n let items: Page[] = [];\n try {\n items = await queryAll<Page>(queryAllParams);\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not load all the revisions from requested page.\",\n ex.code || \"LOAD_PAGE_REVISIONS_ERROR\",\n {\n params\n }\n );\n }\n\n const fields = plugins.byType<PageDynamoDbElasticsearchFieldPlugin>(\n PageDynamoDbElasticsearchFieldPlugin.type\n );\n\n return sortItems({\n items,\n fields,\n sort\n });\n };\n\n return {\n create,\n createFrom,\n update,\n delete: deleteOne,\n deleteAll: deleteAll,\n publish,\n unpublish,\n requestReview,\n requestChanges,\n get,\n list,\n listRevisions,\n listTags\n };\n};\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webiny/api-page-builder-so-ddb-es",
3
- "version": "5.25.0-beta.5",
3
+ "version": "5.25.1-beta.0",
4
4
  "main": "index.js",
5
5
  "keywords": [
6
6
  "@webiny/api-page-builder",
@@ -17,15 +17,15 @@
17
17
  "description": "The DynamoDB + Elasticsearch storage operations Webiny Page Builder API.",
18
18
  "license": "MIT",
19
19
  "dependencies": {
20
- "@babel/runtime": "7.17.7",
21
- "@webiny/api-elasticsearch": "5.25.0-beta.5",
22
- "@webiny/api-page-builder": "5.25.0-beta.5",
23
- "@webiny/api-upgrade": "5.25.0-beta.5",
24
- "@webiny/db-dynamodb": "5.25.0-beta.5",
25
- "@webiny/error": "5.25.0-beta.5",
26
- "@webiny/handler-db": "5.25.0-beta.5",
27
- "@webiny/plugins": "5.25.0-beta.5",
28
- "@webiny/utils": "5.25.0-beta.5",
20
+ "@babel/runtime": "7.16.7",
21
+ "@webiny/api-elasticsearch": "5.25.1-beta.0",
22
+ "@webiny/api-page-builder": "5.25.1-beta.0",
23
+ "@webiny/api-upgrade": "5.25.1-beta.0",
24
+ "@webiny/db-dynamodb": "5.25.1-beta.0",
25
+ "@webiny/error": "5.25.1-beta.0",
26
+ "@webiny/handler-db": "5.25.1-beta.0",
27
+ "@webiny/plugins": "5.25.1-beta.0",
28
+ "@webiny/utils": "5.25.1-beta.0",
29
29
  "dataloader": "2.0.0",
30
30
  "dynamodb-toolbox": "0.3.5",
31
31
  "elastic-ts": "0.7.0",
@@ -38,15 +38,14 @@
38
38
  "@babel/preset-typescript": "^7.16.0",
39
39
  "@elastic/elasticsearch": "7.12.0",
40
40
  "@elastic/elasticsearch-mock": "0.3.0",
41
- "@shelf/jest-elasticsearch": "^1.0.0",
42
- "@webiny/api-dynamodb-to-elasticsearch": "^5.25.0-beta.5",
43
- "@webiny/api-security": "^5.25.0-beta.5",
44
- "@webiny/api-tenancy": "^5.25.0-beta.5",
45
- "@webiny/cli": "^5.25.0-beta.5",
46
- "@webiny/handler": "^5.25.0-beta.5",
47
- "@webiny/handler-aws": "^5.25.0-beta.5",
48
- "@webiny/handler-graphql": "^5.25.0-beta.5",
49
- "@webiny/project-utils": "^5.25.0-beta.5",
41
+ "@webiny/api-dynamodb-to-elasticsearch": "^5.25.1-beta.0",
42
+ "@webiny/api-security": "^5.25.1-beta.0",
43
+ "@webiny/api-tenancy": "^5.25.1-beta.0",
44
+ "@webiny/cli": "^5.25.1-beta.0",
45
+ "@webiny/handler": "^5.25.1-beta.0",
46
+ "@webiny/handler-aws": "^5.25.1-beta.0",
47
+ "@webiny/handler-graphql": "^5.25.1-beta.0",
48
+ "@webiny/project-utils": "^5.25.1-beta.0",
50
49
  "jest": "^26.6.3",
51
50
  "jest-dynalite": "^3.2.0",
52
51
  "jest-environment-node": "^27.0.6",
@@ -62,5 +61,5 @@
62
61
  "build": "yarn webiny run build",
63
62
  "watch": "yarn webiny run watch"
64
63
  },
65
- "gitHead": "570eec807bad353e4485b9bfc7ed5a341ce20ae3"
64
+ "gitHead": "887c9678ec12921eb00edb033e9f2c1a13e35fa5"
66
65
  }
@@ -0,0 +1,4 @@
1
+ import { ElasticsearchIndexPlugin } from "@webiny/api-elasticsearch/plugins/definition/ElasticsearchIndexPlugin";
2
+ export declare class PageElasticsearchIndexPlugin extends ElasticsearchIndexPlugin {
3
+ static readonly type: string;
4
+ }
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.PageElasticsearchIndexPlugin = void 0;
9
+
10
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
+
12
+ var _ElasticsearchIndexPlugin = require("@webiny/api-elasticsearch/plugins/definition/ElasticsearchIndexPlugin");
13
+
14
+ class PageElasticsearchIndexPlugin extends _ElasticsearchIndexPlugin.ElasticsearchIndexPlugin {}
15
+
16
+ exports.PageElasticsearchIndexPlugin = PageElasticsearchIndexPlugin;
17
+ (0, _defineProperty2.default)(PageElasticsearchIndexPlugin, "type", "pageBuilder.page.elasticsearch.index");
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["PageElasticsearchIndexPlugin.ts"],"names":["PageElasticsearchIndexPlugin","ElasticsearchIndexPlugin"],"mappings":";;;;;;;;;;;AAAA;;AAEO,MAAMA,4BAAN,SAA2CC,kDAA3C,CAAoE;;;8BAA9DD,4B,UACsC,sC","sourcesContent":["import { ElasticsearchIndexPlugin } from \"@webiny/api-elasticsearch/plugins/definition/ElasticsearchIndexPlugin\";\n\nexport class PageElasticsearchIndexPlugin extends ElasticsearchIndexPlugin {\n public static override readonly type: string = \"pageBuilder.page.elasticsearch.index\";\n}\n"]}
package/types.d.ts CHANGED
@@ -2,7 +2,7 @@ import { PageBuilderStorageOperations as BasePageBuilderStorageOperations } from
2
2
  import { Entity, Table } from "dynamodb-toolbox";
3
3
  import { DocumentClient } from "aws-sdk/clients/dynamodb";
4
4
  import { Client } from "@elastic/elasticsearch";
5
- import { Plugin } from "@webiny/plugins/types";
5
+ import { PluginCollection } from "@webiny/plugins/types";
6
6
  import { DynamoDBTypes, TableConstructor } from "dynamodb-toolbox/dist/classes/Table";
7
7
  import { EntityAttributeConfig, EntityCompositeAttributes } from "dynamodb-toolbox/dist/classes/Entity";
8
8
  export declare type AttributeDefinition = DynamoDBTypes | EntityAttributeConfig | EntityCompositeAttributes;
@@ -30,7 +30,7 @@ export interface StorageOperationsFactoryParams {
30
30
  table?: TableModifier;
31
31
  esTable?: TableModifier;
32
32
  attributes?: Record<ENTITIES, Attributes>;
33
- plugins?: Plugin[] | Plugin[][];
33
+ plugins?: PluginCollection;
34
34
  }
35
35
  export interface StorageOperationsFactory {
36
36
  (params: StorageOperationsFactoryParams): PageBuilderStorageOperations;
package/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["types.ts"],"names":["ENTITIES"],"mappings":";;;;;;IAeYA,Q;;;WAAAA,Q;AAAAA,EAAAA,Q;AAAAA,EAAAA,Q;AAAAA,EAAAA,Q;AAAAA,EAAAA,Q;AAAAA,EAAAA,Q;AAAAA,EAAAA,Q;AAAAA,EAAAA,Q;GAAAA,Q,wBAAAA,Q","sourcesContent":["import { PageBuilderStorageOperations as BasePageBuilderStorageOperations } from \"@webiny/api-page-builder/types\";\nimport { Entity, Table } from \"dynamodb-toolbox\";\nimport { DocumentClient } from \"aws-sdk/clients/dynamodb\";\nimport { Client } from \"@elastic/elasticsearch\";\nimport { Plugin } from \"@webiny/plugins/types\";\nimport { DynamoDBTypes, TableConstructor } from \"dynamodb-toolbox/dist/classes/Table\";\nimport {\n EntityAttributeConfig,\n EntityCompositeAttributes\n} from \"dynamodb-toolbox/dist/classes/Entity\";\n\nexport type AttributeDefinition = DynamoDBTypes | EntityAttributeConfig | EntityCompositeAttributes;\n\nexport type Attributes = Record<string, AttributeDefinition>;\n\nexport enum ENTITIES {\n SYSTEM = \"PbSystem\",\n SETTINGS = \"PbSettings\",\n CATEGORIES = \"PbCategories\",\n MENUS = \"PbMenus\",\n PAGE_ELEMENTS = \"PbPageElements\",\n PAGES = \"PbPages\",\n PAGES_ES = \"PbPagesEs\"\n}\n\nexport interface TableModifier {\n (table: TableConstructor): TableConstructor;\n}\n\nexport interface PageBuilderStorageOperations extends BasePageBuilderStorageOperations {\n getTable: () => Table;\n getEsTable: () => Table;\n getEntities: () => Record<\n \"system\" | \"settings\" | \"categories\" | \"menus\" | \"pageElements\" | \"pages\" | \"pagesEs\",\n Entity<any>\n >;\n}\n\nexport interface StorageOperationsFactoryParams {\n documentClient: DocumentClient;\n elasticsearch: Client;\n table?: TableModifier;\n esTable?: TableModifier;\n attributes?: Record<ENTITIES, Attributes>;\n plugins?: Plugin[] | Plugin[][];\n}\n\nexport interface StorageOperationsFactory {\n (params: StorageOperationsFactoryParams): PageBuilderStorageOperations;\n}\n"]}
1
+ {"version":3,"sources":["types.ts"],"names":["ENTITIES"],"mappings":";;;;;;IAeYA,Q;;;WAAAA,Q;AAAAA,EAAAA,Q;AAAAA,EAAAA,Q;AAAAA,EAAAA,Q;AAAAA,EAAAA,Q;AAAAA,EAAAA,Q;AAAAA,EAAAA,Q;AAAAA,EAAAA,Q;GAAAA,Q,wBAAAA,Q","sourcesContent":["import { PageBuilderStorageOperations as BasePageBuilderStorageOperations } from \"@webiny/api-page-builder/types\";\nimport { Entity, Table } from \"dynamodb-toolbox\";\nimport { DocumentClient } from \"aws-sdk/clients/dynamodb\";\nimport { Client } from \"@elastic/elasticsearch\";\nimport { PluginCollection } from \"@webiny/plugins/types\";\nimport { DynamoDBTypes, TableConstructor } from \"dynamodb-toolbox/dist/classes/Table\";\nimport {\n EntityAttributeConfig,\n EntityCompositeAttributes\n} from \"dynamodb-toolbox/dist/classes/Entity\";\n\nexport type AttributeDefinition = DynamoDBTypes | EntityAttributeConfig | EntityCompositeAttributes;\n\nexport type Attributes = Record<string, AttributeDefinition>;\n\nexport enum ENTITIES {\n SYSTEM = \"PbSystem\",\n SETTINGS = \"PbSettings\",\n CATEGORIES = \"PbCategories\",\n MENUS = \"PbMenus\",\n PAGE_ELEMENTS = \"PbPageElements\",\n PAGES = \"PbPages\",\n PAGES_ES = \"PbPagesEs\"\n}\n\nexport interface TableModifier {\n (table: TableConstructor): TableConstructor;\n}\n\nexport interface PageBuilderStorageOperations extends BasePageBuilderStorageOperations {\n getTable: () => Table;\n getEsTable: () => Table;\n getEntities: () => Record<\n \"system\" | \"settings\" | \"categories\" | \"menus\" | \"pageElements\" | \"pages\" | \"pagesEs\",\n Entity<any>\n >;\n}\n\nexport interface StorageOperationsFactoryParams {\n documentClient: DocumentClient;\n elasticsearch: Client;\n table?: TableModifier;\n esTable?: TableModifier;\n attributes?: Record<ENTITIES, Attributes>;\n plugins?: PluginCollection;\n}\n\nexport interface StorageOperationsFactory {\n (params: StorageOperationsFactoryParams): PageBuilderStorageOperations;\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["configurations.ts"],"names":["es","params","tenant","WebinyError","sharedIndex","process","env","ELASTICSEARCH_SHARED_INDEXES","index","prefix","ELASTIC_SEARCH_INDEX_PREFIX"],"mappings":";;;;;;;;;AAAA;;eAMe;AACXA,EAAAA,EAAE,EAAGC,MAAD,IAAiC;AACjC,UAAM;AAAEC,MAAAA;AAAF,QAAaD,MAAnB;;AACA,QAAI,CAACC,MAAL,EAAa;AACT,YAAM,IAAIC,cAAJ,CACD,4EADC,EAEF,cAFE,CAAN;AAIH;;AAED,UAAMC,WAAW,GAAGC,OAAO,CAACC,GAAR,CAAYC,4BAAZ,KAA6C,MAAjE;AACA,UAAMC,KAAK,GAAI,GAAEJ,WAAW,GAAG,MAAH,GAAYF,MAAO,eAA/C;AAEA,UAAMO,MAAM,GAAGJ,OAAO,CAACC,GAAR,CAAYI,2BAA3B;;AACA,QAAID,MAAJ,EAAY;AACR,aAAO;AAAED,QAAAA,KAAK,EAAEC,MAAM,GAAGD;AAAlB,OAAP;AACH;;AACD,WAAO;AAAEA,MAAAA;AAAF,KAAP;AACH;AAlBU,C","sourcesContent":["import WebinyError from \"@webiny/error\";\n\nexport interface ElasticsearchParams {\n tenant: string;\n}\n\nexport default {\n es: (params: ElasticsearchParams) => {\n const { tenant } = params;\n if (!tenant) {\n throw new WebinyError(\n `Missing \"tenant\" parameter when trying to create Elasticsearch index name.`,\n \"TENANT_ERROR\"\n );\n }\n\n const sharedIndex = process.env.ELASTICSEARCH_SHARED_INDEXES === \"true\";\n const index = `${sharedIndex ? \"root\" : tenant}-page-builder`;\n\n const prefix = process.env.ELASTIC_SEARCH_INDEX_PREFIX;\n if (prefix) {\n return { index: prefix + index };\n }\n return { index };\n }\n};\n"]}
@@ -1,6 +0,0 @@
1
- import { Client } from "@elastic/elasticsearch";
2
- export interface ExecOnBeforeInstallParams {
3
- elasticsearch: Client;
4
- tenant: string;
5
- }
6
- export declare const execOnBeforeInstall: (params: ExecOnBeforeInstallParams) => Promise<void>;
@@ -1,64 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- exports.execOnBeforeInstall = void 0;
9
-
10
- var _configurations = _interopRequireDefault(require("../configurations"));
11
-
12
- const execOnBeforeInstall = async params => {
13
- const {
14
- elasticsearch
15
- } = params;
16
-
17
- const {
18
- index
19
- } = _configurations.default.es(params);
20
-
21
- const {
22
- body: exists
23
- } = await elasticsearch.indices.exists({
24
- index
25
- });
26
-
27
- if (exists) {
28
- return;
29
- }
30
-
31
- await elasticsearch.indices.create({
32
- index,
33
- body: {
34
- // need this part for sorting to work on text fields
35
- settings: {
36
- analysis: {
37
- analyzer: {
38
- lowercase_analyzer: {
39
- type: "custom",
40
- filter: ["lowercase", "trim"],
41
- tokenizer: "keyword"
42
- }
43
- }
44
- }
45
- },
46
- mappings: {
47
- properties: {
48
- property: {
49
- type: "text",
50
- fields: {
51
- keyword: {
52
- type: "keyword",
53
- ignore_above: 256
54
- }
55
- },
56
- analyzer: "lowercase_analyzer"
57
- }
58
- }
59
- }
60
- }
61
- });
62
- };
63
-
64
- exports.execOnBeforeInstall = execOnBeforeInstall;
@@ -1 +0,0 @@
1
- {"version":3,"sources":["installation.ts"],"names":["execOnBeforeInstall","params","elasticsearch","index","configurations","es","body","exists","indices","create","settings","analysis","analyzer","lowercase_analyzer","type","filter","tokenizer","mappings","properties","property","fields","keyword","ignore_above"],"mappings":";;;;;;;;;AAAA;;AAOO,MAAMA,mBAAmB,GAAG,MAAOC,MAAP,IAA4D;AAC3F,QAAM;AAAEC,IAAAA;AAAF,MAAoBD,MAA1B;;AAEA,QAAM;AAAEE,IAAAA;AAAF,MAAYC,wBAAeC,EAAf,CAAkBJ,MAAlB,CAAlB;;AAEA,QAAM;AAAEK,IAAAA,IAAI,EAAEC;AAAR,MAAmB,MAAML,aAAa,CAACM,OAAd,CAAsBD,MAAtB,CAA6B;AAAEJ,IAAAA;AAAF,GAA7B,CAA/B;;AACA,MAAII,MAAJ,EAAY;AACR;AACH;;AAED,QAAML,aAAa,CAACM,OAAd,CAAsBC,MAAtB,CAA6B;AAC/BN,IAAAA,KAD+B;AAE/BG,IAAAA,IAAI,EAAE;AACF;AACAI,MAAAA,QAAQ,EAAE;AACNC,QAAAA,QAAQ,EAAE;AACNC,UAAAA,QAAQ,EAAE;AACNC,YAAAA,kBAAkB,EAAE;AAChBC,cAAAA,IAAI,EAAE,QADU;AAEhBC,cAAAA,MAAM,EAAE,CAAC,WAAD,EAAc,MAAd,CAFQ;AAGhBC,cAAAA,SAAS,EAAE;AAHK;AADd;AADJ;AADJ,OAFR;AAaFC,MAAAA,QAAQ,EAAE;AACNC,QAAAA,UAAU,EAAE;AACRC,UAAAA,QAAQ,EAAE;AACNL,YAAAA,IAAI,EAAE,MADA;AAENM,YAAAA,MAAM,EAAE;AACJC,cAAAA,OAAO,EAAE;AACLP,gBAAAA,IAAI,EAAE,SADD;AAELQ,gBAAAA,YAAY,EAAE;AAFT;AADL,aAFF;AAQNV,YAAAA,QAAQ,EAAE;AARJ;AADF;AADN;AAbR;AAFyB,GAA7B,CAAN;AA+BH,CAzCM","sourcesContent":["import configurations from \"~/operations/configurations\";\nimport { Client } from \"@elastic/elasticsearch\";\n\nexport interface ExecOnBeforeInstallParams {\n elasticsearch: Client;\n tenant: string;\n}\nexport const execOnBeforeInstall = async (params: ExecOnBeforeInstallParams): Promise<void> => {\n const { elasticsearch } = params;\n\n const { index } = configurations.es(params);\n\n const { body: exists } = await elasticsearch.indices.exists({ index });\n if (exists) {\n return;\n }\n\n await elasticsearch.indices.create({\n index,\n body: {\n // need this part for sorting to work on text fields\n settings: {\n analysis: {\n analyzer: {\n lowercase_analyzer: {\n type: \"custom\",\n filter: [\"lowercase\", \"trim\"],\n tokenizer: \"keyword\"\n }\n }\n }\n },\n mappings: {\n properties: {\n property: {\n type: \"text\",\n fields: {\n keyword: {\n type: \"keyword\",\n ignore_above: 256\n }\n },\n analyzer: \"lowercase_analyzer\"\n }\n }\n }\n }\n });\n};\n"]}