@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.
- package/{operations/configurations.d.ts → configurations.d.ts} +2 -2
- package/{operations/configurations.js → configurations.js} +20 -8
- package/configurations.js.map +1 -0
- package/elasticsearch/createElasticsearchIndex.d.ts +9 -0
- package/elasticsearch/createElasticsearchIndex.js +60 -0
- package/elasticsearch/createElasticsearchIndex.js.map +1 -0
- package/elasticsearch/indices/base.d.ts +2 -0
- package/elasticsearch/indices/base.js +23 -0
- package/elasticsearch/indices/base.js.map +1 -0
- package/elasticsearch/indices/index.d.ts +1 -0
- package/elasticsearch/indices/index.js +16 -0
- package/elasticsearch/indices/index.js.map +1 -0
- package/elasticsearch/indices/japanese.d.ts +2 -0
- package/elasticsearch/indices/japanese.js +24 -0
- package/elasticsearch/indices/japanese.js.map +1 -0
- package/index.js +17 -9
- package/index.js.map +1 -1
- package/operations/pages/elasticsearchQueryBody.js +3 -6
- package/operations/pages/elasticsearchQueryBody.js.map +1 -1
- package/operations/pages/index.js +12 -12
- package/operations/pages/index.js.map +1 -1
- package/package.json +19 -20
- package/plugins/definitions/PageElasticsearchIndexPlugin.d.ts +4 -0
- package/plugins/definitions/PageElasticsearchIndexPlugin.js +17 -0
- package/plugins/definitions/PageElasticsearchIndexPlugin.js.map +1 -0
- package/types.d.ts +2 -2
- package/types.js.map +1 -1
- package/operations/configurations.js.map +0 -1
- package/operations/system/installation.d.ts +0 -6
- package/operations/system/installation.js +0 -64
- package/operations/system/installation.js.map +0 -1
|
@@ -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.
|
|
8
|
+
exports.configurations = void 0;
|
|
9
9
|
|
|
10
10
|
var _error = _interopRequireDefault(require("@webiny/error"));
|
|
11
11
|
|
|
12
|
-
|
|
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
|
|
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
|
|
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.
|
|
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,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,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
|
|
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:
|
|
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
|
-
...(
|
|
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.
|
|
153
|
+
context.i18n.locales.onBeforeCreate.subscribe(async ({
|
|
154
|
+
locale,
|
|
148
155
|
tenant
|
|
149
156
|
}) => {
|
|
150
|
-
await (0,
|
|
151
|
-
|
|
152
|
-
|
|
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 =
|
|
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 =
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
21
|
-
"@webiny/api-elasticsearch": "5.25.
|
|
22
|
-
"@webiny/api-page-builder": "5.25.
|
|
23
|
-
"@webiny/api-upgrade": "5.25.
|
|
24
|
-
"@webiny/db-dynamodb": "5.25.
|
|
25
|
-
"@webiny/error": "5.25.
|
|
26
|
-
"@webiny/handler-db": "5.25.
|
|
27
|
-
"@webiny/plugins": "5.25.
|
|
28
|
-
"@webiny/utils": "5.25.
|
|
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
|
-
"@
|
|
42
|
-
"@webiny/api-
|
|
43
|
-
"@webiny/api-
|
|
44
|
-
"@webiny/
|
|
45
|
-
"@webiny/
|
|
46
|
-
"@webiny/handler": "^5.25.
|
|
47
|
-
"@webiny/handler-
|
|
48
|
-
"@webiny/
|
|
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": "
|
|
64
|
+
"gitHead": "887c9678ec12921eb00edb033e9f2c1a13e35fa5"
|
|
66
65
|
}
|
|
@@ -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 {
|
|
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?:
|
|
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 {
|
|
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,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"]}
|