@webiny/api-headless-cms-ddb-es 5.25.0 → 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/configurations.d.ts +2 -2
- package/configurations.js +18 -7
- package/configurations.js.map +1 -1
- package/elasticsearch/createElasticsearchIndex.d.ts +9 -0
- package/elasticsearch/createElasticsearchIndex.js +60 -0
- package/elasticsearch/createElasticsearchIndex.js.map +1 -0
- package/elasticsearch/deleteElasticsearchIndex.d.ts +8 -0
- package/elasticsearch/deleteElasticsearchIndex.js +43 -0
- package/elasticsearch/deleteElasticsearchIndex.js.map +1 -0
- package/elasticsearch/indexing/dateTimeIndexing.js +1 -1
- package/elasticsearch/indexing/dateTimeIndexing.js.map +1 -1
- 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/helpers/createElasticsearchQueryBody.js +83 -28
- package/helpers/createElasticsearchQueryBody.js.map +1 -1
- package/index.js +49 -14
- package/index.js.map +1 -1
- package/operations/entry/index.js +37 -47
- package/operations/entry/index.js.map +1 -1
- package/operations/group/index.js +1 -3
- package/operations/group/index.js.map +1 -1
- package/operations/model/index.js +18 -36
- package/operations/model/index.js.map +1 -1
- package/operations/settings/index.js +1 -3
- package/operations/settings/index.js.map +1 -1
- package/operations/system/index.js +1 -3
- package/operations/system/index.js.map +1 -1
- package/package.json +15 -17
- package/plugins/CmsEntryElasticsearchIndexPlugin.d.ts +4 -0
- package/plugins/CmsEntryElasticsearchIndexPlugin.js +17 -0
- package/plugins/CmsEntryElasticsearchIndexPlugin.js.map +1 -0
- package/types.d.ts +2 -2
- package/types.js.map +1 -1
- package/upgrades/index.d.ts +1 -1
- package/upgrades/index.js +1 -7
- package/upgrades/index.js.map +1 -1
- package/helpers/operatorPluginsList.d.ts +0 -6
- package/helpers/operatorPluginsList.js +0 -30
- package/helpers/operatorPluginsList.js.map +0 -1
- package/operations/system/createElasticsearchTemplate.d.ts +0 -5
- package/operations/system/createElasticsearchTemplate.js +0 -62
- package/operations/system/createElasticsearchTemplate.js.map +0 -1
- package/upgrades/utils.d.ts +0 -4
- package/upgrades/utils.js +0 -20
- package/upgrades/utils.js.map +0 -1
- package/upgrades/v5.0.0/cleanDatabaseRecord.d.ts +0 -9
- package/upgrades/v5.0.0/cleanDatabaseRecord.js +0 -20
- package/upgrades/v5.0.0/cleanDatabaseRecord.js.map +0 -1
- package/upgrades/v5.0.0/createOldVersionIndiceName.d.ts +0 -2
- package/upgrades/v5.0.0/createOldVersionIndiceName.js +0 -12
- package/upgrades/v5.0.0/createOldVersionIndiceName.js.map +0 -1
- package/upgrades/v5.0.0/entryValueFixer.d.ts +0 -7
- package/upgrades/v5.0.0/entryValueFixer.js +0 -124
- package/upgrades/v5.0.0/entryValueFixer.js.map +0 -1
- package/upgrades/v5.0.0/fieldFinder.d.ts +0 -9
- package/upgrades/v5.0.0/fieldFinder.js +0 -46
- package/upgrades/v5.0.0/fieldFinder.js.map +0 -1
- package/upgrades/v5.0.0/helpers.d.ts +0 -4
- package/upgrades/v5.0.0/helpers.js +0 -57
- package/upgrades/v5.0.0/helpers.js.map +0 -1
- package/upgrades/v5.0.0/index.d.ts +0 -4
- package/upgrades/v5.0.0/index.js +0 -232
- package/upgrades/v5.0.0/index.js.map +0 -1
- package/upgrades/v5.8.0/index.d.ts +0 -7
- package/upgrades/v5.8.0/index.js +0 -426
- package/upgrades/v5.8.0/index.js.map +0 -1
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.createFieldFinder = void 0;
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* File not used anymore.
|
|
10
|
-
*/
|
|
11
|
-
// @ts-nocheck
|
|
12
|
-
const createFieldFinder = models => {
|
|
13
|
-
const modelsList = {};
|
|
14
|
-
|
|
15
|
-
for (const model of models) {
|
|
16
|
-
const values = {
|
|
17
|
-
id: {},
|
|
18
|
-
type: {}
|
|
19
|
-
};
|
|
20
|
-
|
|
21
|
-
for (const field of model.fields) {
|
|
22
|
-
values.id[field.fieldId] = field;
|
|
23
|
-
|
|
24
|
-
if (!values.type[field.type]) {
|
|
25
|
-
values.type[field.type] = [];
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
values.type[field.type].push(field);
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
modelsList[model.modelId] = values;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
return {
|
|
35
|
-
findById: (model, fieldId) => {
|
|
36
|
-
const modelId = typeof model === "string" ? model : model.modelId;
|
|
37
|
-
return modelsList[modelId].id[fieldId];
|
|
38
|
-
},
|
|
39
|
-
findByType: (model, type) => {
|
|
40
|
-
const modelId = typeof model === "string" ? model : model.modelId;
|
|
41
|
-
return modelsList[modelId].type[type];
|
|
42
|
-
}
|
|
43
|
-
};
|
|
44
|
-
};
|
|
45
|
-
|
|
46
|
-
exports.createFieldFinder = createFieldFinder;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["fieldFinder.ts"],"names":["createFieldFinder","models","modelsList","model","values","id","type","field","fields","fieldId","push","modelId","findById","findByType"],"mappings":";;;;;;;AAAA;AACA;AACA;AACA;AAmBO,MAAMA,iBAAiB,GAAIC,MAAD,IAA0C;AACvE,QAAMC,UAAwB,GAAG,EAAjC;;AACA,OAAK,MAAMC,KAAX,IAAoBF,MAApB,EAA4B;AACxB,UAAMG,MAAM,GAAG;AACXC,MAAAA,EAAE,EAAE,EADO;AAEXC,MAAAA,IAAI,EAAE;AAFK,KAAf;;AAIA,SAAK,MAAMC,KAAX,IAAoBJ,KAAK,CAACK,MAA1B,EAAkC;AAC9BJ,MAAAA,MAAM,CAACC,EAAP,CAAUE,KAAK,CAACE,OAAhB,IAA2BF,KAA3B;;AACA,UAAI,CAACH,MAAM,CAACE,IAAP,CAAYC,KAAK,CAACD,IAAlB,CAAL,EAA8B;AAC1BF,QAAAA,MAAM,CAACE,IAAP,CAAYC,KAAK,CAACD,IAAlB,IAA0B,EAA1B;AACH;;AACDF,MAAAA,MAAM,CAACE,IAAP,CAAYC,KAAK,CAACD,IAAlB,EAAwBI,IAAxB,CAA6BH,KAA7B;AACH;;AAEDL,IAAAA,UAAU,CAACC,KAAK,CAACQ,OAAP,CAAV,GAA4BP,MAA5B;AACH;;AAED,SAAO;AACHQ,IAAAA,QAAQ,EAAE,CAACT,KAAD,EAAQM,OAAR,KAAoB;AAC1B,YAAME,OAAO,GAAG,OAAOR,KAAP,KAAiB,QAAjB,GAA4BA,KAA5B,GAAoCA,KAAK,CAACQ,OAA1D;AAEA,aAAOT,UAAU,CAACS,OAAD,CAAV,CAAoBN,EAApB,CAAuBI,OAAvB,CAAP;AACH,KALE;AAMHI,IAAAA,UAAU,EAAE,CAACV,KAAD,EAAQG,IAAR,KAAiB;AACzB,YAAMK,OAAO,GAAG,OAAOR,KAAP,KAAiB,QAAjB,GAA4BA,KAA5B,GAAoCA,KAAK,CAACQ,OAA1D;AAEA,aAAOT,UAAU,CAACS,OAAD,CAAV,CAAoBL,IAApB,CAAyBA,IAAzB,CAAP;AACH;AAVE,GAAP;AAYH,CA9BM","sourcesContent":["/**\n * File not used anymore.\n */\n// @ts-nocheck\nimport { CmsModel, CmsModelField } from \"@webiny/api-headless-cms/types\";\n\ninterface MappedModels {\n [modelId: string]: {\n id: {\n [fieldId: string]: CmsModelField;\n };\n type: {\n [fieldType: string]: CmsModelField[];\n };\n };\n}\n\nexport interface ModelFieldFinder {\n findById: (model: CmsModel | string, fieldId: string) => CmsModelField;\n findByType: (model: CmsModel | string, type: string) => CmsModelField[];\n}\n\nexport const createFieldFinder = (models: CmsModel[]): ModelFieldFinder => {\n const modelsList: MappedModels = {};\n for (const model of models) {\n const values = {\n id: {},\n type: {}\n };\n for (const field of model.fields) {\n values.id[field.fieldId] = field;\n if (!values.type[field.type]) {\n values.type[field.type] = [];\n }\n values.type[field.type].push(field);\n }\n\n modelsList[model.modelId] = values;\n }\n\n return {\n findById: (model, fieldId) => {\n const modelId = typeof model === \"string\" ? model : model.modelId;\n\n return modelsList[modelId].id[fieldId];\n },\n findByType: (model, type) => {\n const modelId = typeof model === \"string\" ? model : model.modelId;\n\n return modelsList[modelId].type[type];\n }\n };\n};\n"]}
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
|
|
7
|
-
var _cleanDatabaseRecord = require("./cleanDatabaseRecord");
|
|
8
|
-
|
|
9
|
-
Object.keys(_cleanDatabaseRecord).forEach(function (key) {
|
|
10
|
-
if (key === "default" || key === "__esModule") return;
|
|
11
|
-
if (key in exports && exports[key] === _cleanDatabaseRecord[key]) return;
|
|
12
|
-
Object.defineProperty(exports, key, {
|
|
13
|
-
enumerable: true,
|
|
14
|
-
get: function () {
|
|
15
|
-
return _cleanDatabaseRecord[key];
|
|
16
|
-
}
|
|
17
|
-
});
|
|
18
|
-
});
|
|
19
|
-
|
|
20
|
-
var _entryValueFixer = require("./entryValueFixer");
|
|
21
|
-
|
|
22
|
-
Object.keys(_entryValueFixer).forEach(function (key) {
|
|
23
|
-
if (key === "default" || key === "__esModule") return;
|
|
24
|
-
if (key in exports && exports[key] === _entryValueFixer[key]) return;
|
|
25
|
-
Object.defineProperty(exports, key, {
|
|
26
|
-
enumerable: true,
|
|
27
|
-
get: function () {
|
|
28
|
-
return _entryValueFixer[key];
|
|
29
|
-
}
|
|
30
|
-
});
|
|
31
|
-
});
|
|
32
|
-
|
|
33
|
-
var _fieldFinder = require("./fieldFinder");
|
|
34
|
-
|
|
35
|
-
Object.keys(_fieldFinder).forEach(function (key) {
|
|
36
|
-
if (key === "default" || key === "__esModule") return;
|
|
37
|
-
if (key in exports && exports[key] === _fieldFinder[key]) return;
|
|
38
|
-
Object.defineProperty(exports, key, {
|
|
39
|
-
enumerable: true,
|
|
40
|
-
get: function () {
|
|
41
|
-
return _fieldFinder[key];
|
|
42
|
-
}
|
|
43
|
-
});
|
|
44
|
-
});
|
|
45
|
-
|
|
46
|
-
var _createOldVersionIndiceName = require("./createOldVersionIndiceName");
|
|
47
|
-
|
|
48
|
-
Object.keys(_createOldVersionIndiceName).forEach(function (key) {
|
|
49
|
-
if (key === "default" || key === "__esModule") return;
|
|
50
|
-
if (key in exports && exports[key] === _createOldVersionIndiceName[key]) return;
|
|
51
|
-
Object.defineProperty(exports, key, {
|
|
52
|
-
enumerable: true,
|
|
53
|
-
get: function () {
|
|
54
|
-
return _createOldVersionIndiceName[key];
|
|
55
|
-
}
|
|
56
|
-
});
|
|
57
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["helpers.ts"],"names":[],"mappings":";;;;;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA","sourcesContent":["export * from \"./cleanDatabaseRecord\";\nexport * from \"./entryValueFixer\";\nexport * from \"./fieldFinder\";\nexport * from \"./createOldVersionIndiceName\";\n"]}
|
package/upgrades/v5.0.0/index.js
DELETED
|
@@ -1,232 +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.default = void 0;
|
|
9
|
-
|
|
10
|
-
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
11
|
-
|
|
12
|
-
var _error = _interopRequireDefault(require("@webiny/error"));
|
|
13
|
-
|
|
14
|
-
var _helpers = require("./helpers");
|
|
15
|
-
|
|
16
|
-
var _utils = require("../utils");
|
|
17
|
-
|
|
18
|
-
var _configurations = _interopRequireDefault(require("../../configurations"));
|
|
19
|
-
|
|
20
|
-
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; }
|
|
21
|
-
|
|
22
|
-
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; }
|
|
23
|
-
|
|
24
|
-
const plugin = () => ({
|
|
25
|
-
name: "api-upgrade-cms-5.0.0",
|
|
26
|
-
type: "api-upgrade",
|
|
27
|
-
app: "headless-cms",
|
|
28
|
-
version: "5.0.0",
|
|
29
|
-
|
|
30
|
-
async apply(context) {
|
|
31
|
-
const {
|
|
32
|
-
db,
|
|
33
|
-
fileManager
|
|
34
|
-
} = context;
|
|
35
|
-
const elasticsearch = context.elasticsearch;
|
|
36
|
-
|
|
37
|
-
if (!elasticsearch) {
|
|
38
|
-
throw new _error.default("Missing Elasticsearch client on the context.");
|
|
39
|
-
} // Check if we still have the old elasticsearch index
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
const esIndex = (0, _helpers.createOldVersionIndiceName)(context);
|
|
43
|
-
const {
|
|
44
|
-
body: exists
|
|
45
|
-
} = await elasticsearch.indices.exists({
|
|
46
|
-
index: esIndex
|
|
47
|
-
});
|
|
48
|
-
|
|
49
|
-
if (!exists) {
|
|
50
|
-
return;
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
try {
|
|
54
|
-
await elasticsearch.indices.putTemplate({
|
|
55
|
-
name: "headless-cms-entries-index",
|
|
56
|
-
body: {
|
|
57
|
-
index_patterns: ["*headless-cms*"],
|
|
58
|
-
settings: {
|
|
59
|
-
analysis: {
|
|
60
|
-
analyzer: {
|
|
61
|
-
lowercase_analyzer: {
|
|
62
|
-
type: "custom",
|
|
63
|
-
filter: ["lowercase", "trim"],
|
|
64
|
-
tokenizer: "keyword"
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
},
|
|
69
|
-
mappings: {
|
|
70
|
-
properties: {
|
|
71
|
-
property: {
|
|
72
|
-
type: "text",
|
|
73
|
-
fields: {
|
|
74
|
-
keyword: {
|
|
75
|
-
type: "keyword",
|
|
76
|
-
ignore_above: 256
|
|
77
|
-
}
|
|
78
|
-
},
|
|
79
|
-
analyzer: "lowercase_analyzer"
|
|
80
|
-
},
|
|
81
|
-
rawValues: {
|
|
82
|
-
type: "object",
|
|
83
|
-
enabled: false
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
});
|
|
89
|
-
} catch (err) {
|
|
90
|
-
console.log(err);
|
|
91
|
-
throw new _error.default("Put index template failed!");
|
|
92
|
-
} // Load existing ES items
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
let hasMoreItems = true;
|
|
96
|
-
let after = undefined;
|
|
97
|
-
const limit = 1000;
|
|
98
|
-
let esItems = []; // go through old index and load data in bulks of 1000
|
|
99
|
-
|
|
100
|
-
while (hasMoreItems) {
|
|
101
|
-
const response = await elasticsearch.search({
|
|
102
|
-
index: esIndex,
|
|
103
|
-
body: {
|
|
104
|
-
sort: {
|
|
105
|
-
createdOn: {
|
|
106
|
-
order: "asc",
|
|
107
|
-
// eslint-disable-next-line
|
|
108
|
-
unmapped_type: "date"
|
|
109
|
-
}
|
|
110
|
-
},
|
|
111
|
-
size: limit + 1,
|
|
112
|
-
after
|
|
113
|
-
}
|
|
114
|
-
});
|
|
115
|
-
const {
|
|
116
|
-
hits
|
|
117
|
-
} = response.body.hits;
|
|
118
|
-
hasMoreItems = hits.length > limit;
|
|
119
|
-
after = hasMoreItems ? hits[limit - 1].sort : undefined;
|
|
120
|
-
esItems = [...esItems, ...hits.filter(item => !item._id.includes("T#root#"))];
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
console.log(`Fetched ${esItems.length} items from Elasticsearch`);
|
|
124
|
-
|
|
125
|
-
if (esItems.length === 0) {
|
|
126
|
-
return;
|
|
127
|
-
} // Store a backup of old items
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
const esJSON = JSON.stringify(esItems);
|
|
131
|
-
const {
|
|
132
|
-
file
|
|
133
|
-
} = await fileManager.storage.storagePlugin.upload({
|
|
134
|
-
name: "upgrade-headless-cms-es-5.0.0.json",
|
|
135
|
-
type: "application/json",
|
|
136
|
-
size: esJSON.length,
|
|
137
|
-
buffer: Buffer.from(esJSON)
|
|
138
|
-
});
|
|
139
|
-
console.log(`Stored backup of Elasticsearch items to ${file.key}`); // Load models for each locale and distribute ES items to new per-model indexes
|
|
140
|
-
|
|
141
|
-
const locales = context.i18n.getLocales();
|
|
142
|
-
const esOperations = [];
|
|
143
|
-
|
|
144
|
-
for (const locale of locales) {
|
|
145
|
-
const [models] = await db.read(_objectSpread(_objectSpread({}, _configurations.default.db()), {}, {
|
|
146
|
-
query: {
|
|
147
|
-
PK: `T#root#L#${locale.code}#CMS#CM`,
|
|
148
|
-
SK: {
|
|
149
|
-
$gt: " "
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
})); // Sleep for 2 seconds
|
|
153
|
-
|
|
154
|
-
await new Promise(resolve => setTimeout(resolve, 2000));
|
|
155
|
-
const modelsById = models.reduce((acc, model) => {
|
|
156
|
-
acc[model.modelId] = model;
|
|
157
|
-
return acc;
|
|
158
|
-
}, {});
|
|
159
|
-
/**
|
|
160
|
-
* Build a list of items for ES DDB table
|
|
161
|
-
*/
|
|
162
|
-
|
|
163
|
-
const ddbItems = esItems.filter(hit => {
|
|
164
|
-
return hit._source.locale === locale.code;
|
|
165
|
-
}).map(hit => {
|
|
166
|
-
const entry = hit._source;
|
|
167
|
-
const model = modelsById[entry.modelId];
|
|
168
|
-
|
|
169
|
-
if (!model) {
|
|
170
|
-
return null;
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
const modelFieldFinder = (0, _helpers.createFieldFinder)(models);
|
|
174
|
-
const indexName = `root-headless-cms-${locale.code}-${model.modelId}`.toLowerCase();
|
|
175
|
-
const PK = `T#root#L#${locale.code}#CMS#CME#${entry.id.split("#")[0]}`;
|
|
176
|
-
const SK = entry.__type === "cms.entry.l" ? "L" : "P";
|
|
177
|
-
|
|
178
|
-
const esData = _objectSpread(_objectSpread({}, (0, _helpers.entryValueFixer)(model, modelFieldFinder, (0, _helpers.cleanDatabaseRecord)(entry))), {}, {
|
|
179
|
-
webinyVersion: "5.0.0"
|
|
180
|
-
});
|
|
181
|
-
|
|
182
|
-
esOperations.push({
|
|
183
|
-
index: {
|
|
184
|
-
_index: indexName,
|
|
185
|
-
_id: `${PK}:${SK}`
|
|
186
|
-
}
|
|
187
|
-
}, esData);
|
|
188
|
-
return {
|
|
189
|
-
PK,
|
|
190
|
-
SK,
|
|
191
|
-
index: indexName,
|
|
192
|
-
data: esData,
|
|
193
|
-
savedOn: new Date().toISOString(),
|
|
194
|
-
version: "5.0.0",
|
|
195
|
-
ignore: true
|
|
196
|
-
};
|
|
197
|
-
}).filter(Boolean);
|
|
198
|
-
console.log(`[${locale.code}] Prepared ${ddbItems.length} ES DDB items.`);
|
|
199
|
-
await (0, _utils.paginateBatch)(ddbItems, 25, async items => {
|
|
200
|
-
const batch = db.batch();
|
|
201
|
-
await batch.create(...items.map(item => {
|
|
202
|
-
return _objectSpread(_objectSpread({}, _configurations.default.esDb()), {}, {
|
|
203
|
-
data: item
|
|
204
|
-
});
|
|
205
|
-
})).execute();
|
|
206
|
-
});
|
|
207
|
-
console.log(`[${locale.code}] Inserted ES DDB items.`); // update all models to latest version
|
|
208
|
-
|
|
209
|
-
await (0, _utils.paginateBatch)(models, 25, async items => {
|
|
210
|
-
await db.batch().create(...items.map(model => {
|
|
211
|
-
return _objectSpread(_objectSpread({}, _configurations.default.db()), {}, {
|
|
212
|
-
data: _objectSpread(_objectSpread({}, model), {}, {
|
|
213
|
-
locale: locale.code,
|
|
214
|
-
webinyVersion: "5.0.0"
|
|
215
|
-
})
|
|
216
|
-
});
|
|
217
|
-
})).execute();
|
|
218
|
-
});
|
|
219
|
-
console.log(`[${locale.code}] Updated DDB model records with version number and locale code.`);
|
|
220
|
-
} // ES BULK INSERT
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
const bulkInsert = await elasticsearch.bulk({
|
|
224
|
-
body: esOperations
|
|
225
|
-
});
|
|
226
|
-
console.log("ES bulk index", bulkInsert);
|
|
227
|
-
}
|
|
228
|
-
|
|
229
|
-
});
|
|
230
|
-
|
|
231
|
-
var _default = plugin;
|
|
232
|
-
exports.default = _default;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["index.ts"],"names":["plugin","name","type","app","version","apply","context","db","fileManager","elasticsearch","WebinyError","esIndex","body","exists","indices","index","putTemplate","index_patterns","settings","analysis","analyzer","lowercase_analyzer","filter","tokenizer","mappings","properties","property","fields","keyword","ignore_above","rawValues","enabled","err","console","log","hasMoreItems","after","undefined","limit","esItems","response","search","sort","createdOn","order","unmapped_type","size","hits","length","item","_id","includes","esJSON","JSON","stringify","file","storage","storagePlugin","upload","buffer","Buffer","from","key","locales","i18n","getLocales","esOperations","locale","models","read","configurations","query","PK","code","SK","$gt","Promise","resolve","setTimeout","modelsById","reduce","acc","model","modelId","ddbItems","hit","_source","map","entry","modelFieldFinder","indexName","toLowerCase","id","split","__type","esData","webinyVersion","push","_index","data","savedOn","Date","toISOString","ignore","Boolean","items","batch","create","esDb","execute","bulkInsert","bulk"],"mappings":"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","sourcesContent":["/**\n * File not used anymore.\n */\n// @ts-nocheck\nimport WebinyError from \"@webiny/error\";\nimport { UpgradePlugin } from \"@webiny/api-upgrade/types\";\nimport {\n entryValueFixer,\n cleanDatabaseRecord,\n createFieldFinder,\n createOldVersionIndiceName\n} from \"./helpers\";\n\nimport { paginateBatch } from \"../utils\";\nimport { CmsIndexEntry } from \"../../types\";\nimport { CmsModel, CmsContext } from \"@webiny/api-headless-cms/types\";\nimport configurations from \"../../configurations\";\nimport { Client } from \"@elastic/elasticsearch\";\n\ninterface Hit {\n _id: string;\n _index: string;\n _source: CmsIndexEntry;\n}\n\nconst plugin = (): UpgradePlugin<CmsContext> => ({\n name: \"api-upgrade-cms-5.0.0\",\n type: \"api-upgrade\",\n app: \"headless-cms\",\n version: \"5.0.0\",\n async apply(context) {\n const { db, fileManager } = context;\n const elasticsearch: Client = (context as any).elasticsearch;\n if (!elasticsearch) {\n throw new WebinyError(\"Missing Elasticsearch client on the context.\");\n }\n\n // Check if we still have the old elasticsearch index\n const esIndex = createOldVersionIndiceName(context);\n const { body: exists } = await elasticsearch.indices.exists({\n index: esIndex\n });\n\n if (!exists) {\n return;\n }\n\n try {\n await elasticsearch.indices.putTemplate({\n name: \"headless-cms-entries-index\",\n body: {\n index_patterns: [\"*headless-cms*\"],\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 rawValues: {\n type: \"object\",\n enabled: false\n }\n }\n }\n }\n });\n } catch (err) {\n console.log(err);\n throw new WebinyError(\"Put index template failed!\");\n }\n\n // Load existing ES items\n let hasMoreItems = true;\n let after: string | undefined = undefined;\n const limit = 1000;\n let esItems = [];\n\n // go through old index and load data in bulks of 1000\n while (hasMoreItems) {\n const response = await elasticsearch.search({\n index: esIndex,\n body: {\n sort: {\n createdOn: {\n order: \"asc\",\n // eslint-disable-next-line\n unmapped_type: \"date\"\n }\n },\n size: limit + 1,\n after\n }\n });\n\n const { hits } = response.body.hits;\n\n hasMoreItems = hits.length > limit;\n after = hasMoreItems ? hits[limit - 1].sort : undefined;\n esItems = [...esItems, ...hits.filter(item => !item._id.includes(\"T#root#\"))];\n }\n\n console.log(`Fetched ${esItems.length} items from Elasticsearch`);\n if (esItems.length === 0) {\n return;\n }\n\n // Store a backup of old items\n const esJSON = JSON.stringify(esItems);\n\n const { file } = await fileManager.storage.storagePlugin.upload({\n name: \"upgrade-headless-cms-es-5.0.0.json\",\n type: \"application/json\",\n size: esJSON.length,\n buffer: Buffer.from(esJSON)\n });\n\n console.log(`Stored backup of Elasticsearch items to ${file.key}`);\n\n // Load models for each locale and distribute ES items to new per-model indexes\n const locales = context.i18n.getLocales();\n\n const esOperations = [];\n\n for (const locale of locales) {\n const [models] = await db.read<CmsModel>({\n // @ts-ignore\n ...configurations.db(),\n query: { PK: `T#root#L#${locale.code}#CMS#CM`, SK: { $gt: \" \" } }\n });\n\n // Sleep for 2 seconds\n await new Promise(resolve => setTimeout(resolve, 2000));\n\n const modelsById: Record<string, CmsModel> = models.reduce((acc, model) => {\n acc[model.modelId] = model;\n return acc;\n }, {});\n\n /**\n * Build a list of items for ES DDB table\n */\n const ddbItems = esItems\n .filter((hit: Hit) => {\n return hit._source.locale === locale.code;\n })\n .map((hit: Hit) => {\n const entry = hit._source;\n const model = modelsById[entry.modelId];\n if (!model) {\n return null;\n }\n\n const modelFieldFinder = createFieldFinder(models);\n\n const indexName =\n `root-headless-cms-${locale.code}-${model.modelId}`.toLowerCase();\n const PK = `T#root#L#${locale.code}#CMS#CME#${entry.id.split(\"#\")[0]}`;\n const SK = entry.__type === \"cms.entry.l\" ? \"L\" : \"P\";\n const esData = {\n ...entryValueFixer(model, modelFieldFinder, cleanDatabaseRecord(entry)),\n webinyVersion: \"5.0.0\"\n };\n\n esOperations.push({ index: { _index: indexName, _id: `${PK}:${SK}` } }, esData);\n\n return {\n PK,\n SK,\n index: indexName,\n data: esData,\n savedOn: new Date().toISOString(),\n version: \"5.0.0\",\n ignore: true\n };\n })\n .filter(Boolean);\n\n console.log(`[${locale.code}] Prepared ${ddbItems.length} ES DDB items.`);\n\n await paginateBatch(ddbItems, 25, async items => {\n const batch = db.batch();\n await batch\n .create(\n ...items.map(item => {\n return {\n // @ts-ignore\n ...configurations.esDb(),\n data: item\n };\n })\n )\n .execute();\n });\n\n console.log(`[${locale.code}] Inserted ES DDB items.`);\n\n // update all models to latest version\n await paginateBatch(models, 25, async items => {\n await db\n .batch()\n .create(\n ...items.map(model => {\n return {\n // @ts-ignore\n ...configurations.db(),\n data: {\n ...model,\n locale: locale.code,\n webinyVersion: \"5.0.0\"\n }\n };\n })\n )\n .execute();\n });\n\n console.log(\n `[${locale.code}] Updated DDB model records with version number and locale code.`\n );\n }\n\n // ES BULK INSERT\n const bulkInsert = await elasticsearch.bulk({\n body: esOperations\n });\n\n console.log(\"ES bulk index\", bulkInsert);\n }\n});\n\nexport default plugin;\n"]}
|