@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.
Files changed (73) hide show
  1. package/configurations.d.ts +2 -2
  2. package/configurations.js +18 -7
  3. package/configurations.js.map +1 -1
  4. package/elasticsearch/createElasticsearchIndex.d.ts +9 -0
  5. package/elasticsearch/createElasticsearchIndex.js +60 -0
  6. package/elasticsearch/createElasticsearchIndex.js.map +1 -0
  7. package/elasticsearch/deleteElasticsearchIndex.d.ts +8 -0
  8. package/elasticsearch/deleteElasticsearchIndex.js +43 -0
  9. package/elasticsearch/deleteElasticsearchIndex.js.map +1 -0
  10. package/elasticsearch/indexing/dateTimeIndexing.js +1 -1
  11. package/elasticsearch/indexing/dateTimeIndexing.js.map +1 -1
  12. package/elasticsearch/indices/base.d.ts +2 -0
  13. package/elasticsearch/indices/base.js +23 -0
  14. package/elasticsearch/indices/base.js.map +1 -0
  15. package/elasticsearch/indices/index.d.ts +1 -0
  16. package/elasticsearch/indices/index.js +16 -0
  17. package/elasticsearch/indices/index.js.map +1 -0
  18. package/elasticsearch/indices/japanese.d.ts +2 -0
  19. package/elasticsearch/indices/japanese.js +24 -0
  20. package/elasticsearch/indices/japanese.js.map +1 -0
  21. package/helpers/createElasticsearchQueryBody.js +83 -28
  22. package/helpers/createElasticsearchQueryBody.js.map +1 -1
  23. package/index.js +49 -14
  24. package/index.js.map +1 -1
  25. package/operations/entry/index.js +37 -47
  26. package/operations/entry/index.js.map +1 -1
  27. package/operations/group/index.js +1 -3
  28. package/operations/group/index.js.map +1 -1
  29. package/operations/model/index.js +18 -36
  30. package/operations/model/index.js.map +1 -1
  31. package/operations/settings/index.js +1 -3
  32. package/operations/settings/index.js.map +1 -1
  33. package/operations/system/index.js +1 -3
  34. package/operations/system/index.js.map +1 -1
  35. package/package.json +15 -17
  36. package/plugins/CmsEntryElasticsearchIndexPlugin.d.ts +4 -0
  37. package/plugins/CmsEntryElasticsearchIndexPlugin.js +17 -0
  38. package/plugins/CmsEntryElasticsearchIndexPlugin.js.map +1 -0
  39. package/types.d.ts +2 -2
  40. package/types.js.map +1 -1
  41. package/upgrades/index.d.ts +1 -1
  42. package/upgrades/index.js +1 -7
  43. package/upgrades/index.js.map +1 -1
  44. package/helpers/operatorPluginsList.d.ts +0 -6
  45. package/helpers/operatorPluginsList.js +0 -30
  46. package/helpers/operatorPluginsList.js.map +0 -1
  47. package/operations/system/createElasticsearchTemplate.d.ts +0 -5
  48. package/operations/system/createElasticsearchTemplate.js +0 -62
  49. package/operations/system/createElasticsearchTemplate.js.map +0 -1
  50. package/upgrades/utils.d.ts +0 -4
  51. package/upgrades/utils.js +0 -20
  52. package/upgrades/utils.js.map +0 -1
  53. package/upgrades/v5.0.0/cleanDatabaseRecord.d.ts +0 -9
  54. package/upgrades/v5.0.0/cleanDatabaseRecord.js +0 -20
  55. package/upgrades/v5.0.0/cleanDatabaseRecord.js.map +0 -1
  56. package/upgrades/v5.0.0/createOldVersionIndiceName.d.ts +0 -2
  57. package/upgrades/v5.0.0/createOldVersionIndiceName.js +0 -12
  58. package/upgrades/v5.0.0/createOldVersionIndiceName.js.map +0 -1
  59. package/upgrades/v5.0.0/entryValueFixer.d.ts +0 -7
  60. package/upgrades/v5.0.0/entryValueFixer.js +0 -124
  61. package/upgrades/v5.0.0/entryValueFixer.js.map +0 -1
  62. package/upgrades/v5.0.0/fieldFinder.d.ts +0 -9
  63. package/upgrades/v5.0.0/fieldFinder.js +0 -46
  64. package/upgrades/v5.0.0/fieldFinder.js.map +0 -1
  65. package/upgrades/v5.0.0/helpers.d.ts +0 -4
  66. package/upgrades/v5.0.0/helpers.js +0 -57
  67. package/upgrades/v5.0.0/helpers.js.map +0 -1
  68. package/upgrades/v5.0.0/index.d.ts +0 -4
  69. package/upgrades/v5.0.0/index.js +0 -232
  70. package/upgrades/v5.0.0/index.js.map +0 -1
  71. package/upgrades/v5.8.0/index.d.ts +0 -7
  72. package/upgrades/v5.8.0/index.js +0 -426
  73. 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,4 +0,0 @@
1
- export * from "./cleanDatabaseRecord";
2
- export * from "./entryValueFixer";
3
- export * from "./fieldFinder";
4
- export * from "./createOldVersionIndiceName";
@@ -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"]}
@@ -1,4 +0,0 @@
1
- import { UpgradePlugin } from "@webiny/api-upgrade/types";
2
- import { CmsContext } from "@webiny/api-headless-cms/types";
3
- declare const plugin: () => UpgradePlugin<CmsContext>;
4
- export default plugin;
@@ -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"]}
@@ -1,7 +0,0 @@
1
- /**
2
- * File not used anymore.
3
- */
4
- import { UpgradePlugin } from "@webiny/api-upgrade/types";
5
- import { CmsContext } from "@webiny/api-headless-cms/types";
6
- declare const _default: () => UpgradePlugin<CmsContext>;
7
- export default _default;