@webiny/api-page-builder-so-ddb-es 0.0.0-ee-vpcs.549378cf03

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 (186) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +30 -0
  3. package/configurations.d.ts +9 -0
  4. package/configurations.js +49 -0
  5. package/configurations.js.map +1 -0
  6. package/definitions/blockCategoryEntity.d.ts +9 -0
  7. package/definitions/blockCategoryEntity.js +61 -0
  8. package/definitions/blockCategoryEntity.js.map +1 -0
  9. package/definitions/categoryEntity.d.ts +9 -0
  10. package/definitions/categoryEntity.js +61 -0
  11. package/definitions/categoryEntity.js.map +1 -0
  12. package/definitions/menuEntity.d.ts +9 -0
  13. package/definitions/menuEntity.js +61 -0
  14. package/definitions/menuEntity.js.map +1 -0
  15. package/definitions/pageBlockEntity.d.ts +9 -0
  16. package/definitions/pageBlockEntity.js +64 -0
  17. package/definitions/pageBlockEntity.js.map +1 -0
  18. package/definitions/pageElasticsearchEntity.d.ts +9 -0
  19. package/definitions/pageElasticsearchEntity.js +40 -0
  20. package/definitions/pageElasticsearchEntity.js.map +1 -0
  21. package/definitions/pageElementEntity.d.ts +9 -0
  22. package/definitions/pageElementEntity.js +67 -0
  23. package/definitions/pageElementEntity.js.map +1 -0
  24. package/definitions/pageEntity.d.ts +9 -0
  25. package/definitions/pageEntity.js +97 -0
  26. package/definitions/pageEntity.js.map +1 -0
  27. package/definitions/settingsEntity.d.ts +9 -0
  28. package/definitions/settingsEntity.js +77 -0
  29. package/definitions/settingsEntity.js.map +1 -0
  30. package/definitions/systemEntity.d.ts +9 -0
  31. package/definitions/systemEntity.js +40 -0
  32. package/definitions/systemEntity.js.map +1 -0
  33. package/definitions/table.d.ts +9 -0
  34. package/definitions/table.js +24 -0
  35. package/definitions/table.js.map +1 -0
  36. package/definitions/tableElasticsearch.d.ts +9 -0
  37. package/definitions/tableElasticsearch.js +24 -0
  38. package/definitions/tableElasticsearch.js.map +1 -0
  39. package/elasticsearch/createElasticsearchIndex.d.ts +9 -0
  40. package/elasticsearch/createElasticsearchIndex.js +60 -0
  41. package/elasticsearch/createElasticsearchIndex.js.map +1 -0
  42. package/elasticsearch/indices/base.d.ts +2 -0
  43. package/elasticsearch/indices/base.js +15 -0
  44. package/elasticsearch/indices/base.js.map +1 -0
  45. package/elasticsearch/indices/index.d.ts +1 -0
  46. package/elasticsearch/indices/index.js +16 -0
  47. package/elasticsearch/indices/index.js.map +1 -0
  48. package/elasticsearch/indices/japanese.d.ts +2 -0
  49. package/elasticsearch/indices/japanese.js +16 -0
  50. package/elasticsearch/indices/japanese.js.map +1 -0
  51. package/index.d.ts +2 -0
  52. package/index.js +233 -0
  53. package/index.js.map +1 -0
  54. package/operations/blockCategory/dataLoader.d.ts +16 -0
  55. package/operations/blockCategory/dataLoader.js +79 -0
  56. package/operations/blockCategory/dataLoader.js.map +1 -0
  57. package/operations/blockCategory/fields.d.ts +2 -0
  58. package/operations/blockCategory/fields.js +28 -0
  59. package/operations/blockCategory/fields.js.map +1 -0
  60. package/operations/blockCategory/index.d.ts +8 -0
  61. package/operations/blockCategory/index.js +208 -0
  62. package/operations/blockCategory/index.js.map +1 -0
  63. package/operations/blockCategory/keys.d.ts +9 -0
  64. package/operations/blockCategory/keys.js +25 -0
  65. package/operations/blockCategory/keys.js.map +1 -0
  66. package/operations/category/dataLoader.d.ts +16 -0
  67. package/operations/category/dataLoader.js +79 -0
  68. package/operations/category/dataLoader.js.map +1 -0
  69. package/operations/category/fields.d.ts +2 -0
  70. package/operations/category/fields.js +28 -0
  71. package/operations/category/fields.js.map +1 -0
  72. package/operations/category/index.d.ts +8 -0
  73. package/operations/category/index.js +208 -0
  74. package/operations/category/index.js.map +1 -0
  75. package/operations/category/keys.d.ts +9 -0
  76. package/operations/category/keys.js +25 -0
  77. package/operations/category/keys.js.map +1 -0
  78. package/operations/menu/fields.d.ts +2 -0
  79. package/operations/menu/fields.js +27 -0
  80. package/operations/menu/fields.js.map +1 -0
  81. package/operations/menu/index.d.ts +8 -0
  82. package/operations/menu/index.js +217 -0
  83. package/operations/menu/index.js.map +1 -0
  84. package/operations/pageBlock/dataLoader.d.ts +16 -0
  85. package/operations/pageBlock/dataLoader.js +79 -0
  86. package/operations/pageBlock/dataLoader.js.map +1 -0
  87. package/operations/pageBlock/fields.d.ts +2 -0
  88. package/operations/pageBlock/fields.js +25 -0
  89. package/operations/pageBlock/fields.js.map +1 -0
  90. package/operations/pageBlock/index.d.ts +8 -0
  91. package/operations/pageBlock/index.js +208 -0
  92. package/operations/pageBlock/index.js.map +1 -0
  93. package/operations/pageBlock/keys.d.ts +9 -0
  94. package/operations/pageBlock/keys.js +25 -0
  95. package/operations/pageBlock/keys.js.map +1 -0
  96. package/operations/pageElement/fields.d.ts +2 -0
  97. package/operations/pageElement/fields.js +19 -0
  98. package/operations/pageElement/fields.js.map +1 -0
  99. package/operations/pageElement/index.d.ts +8 -0
  100. package/operations/pageElement/index.js +207 -0
  101. package/operations/pageElement/index.js.map +1 -0
  102. package/operations/pages/elasticsearchQueryBody.d.ts +12 -0
  103. package/operations/pages/elasticsearchQueryBody.js +237 -0
  104. package/operations/pages/elasticsearchQueryBody.js.map +1 -0
  105. package/operations/pages/fields.d.ts +4 -0
  106. package/operations/pages/fields.js +54 -0
  107. package/operations/pages/fields.js.map +1 -0
  108. package/operations/pages/helpers.d.ts +35 -0
  109. package/operations/pages/helpers.js +83 -0
  110. package/operations/pages/helpers.js.map +1 -0
  111. package/operations/pages/index.d.ts +11 -0
  112. package/operations/pages/index.js +829 -0
  113. package/operations/pages/index.js.map +1 -0
  114. package/operations/pages/keys.d.ts +24 -0
  115. package/operations/pages/keys.js +79 -0
  116. package/operations/pages/keys.js.map +1 -0
  117. package/operations/settings/index.d.ts +6 -0
  118. package/operations/settings/index.js +178 -0
  119. package/operations/settings/index.js.map +1 -0
  120. package/operations/system/index.d.ts +6 -0
  121. package/operations/system/index.js +104 -0
  122. package/operations/system/index.js.map +1 -0
  123. package/package.json +65 -0
  124. package/plugins/definitions/BlockCategoryDynamoDbElasticFieldPlugin.d.ts +4 -0
  125. package/plugins/definitions/BlockCategoryDynamoDbElasticFieldPlugin.js +17 -0
  126. package/plugins/definitions/BlockCategoryDynamoDbElasticFieldPlugin.js.map +1 -0
  127. package/plugins/definitions/CategoryDynamoDbElasticFieldPlugin.d.ts +4 -0
  128. package/plugins/definitions/CategoryDynamoDbElasticFieldPlugin.js +17 -0
  129. package/plugins/definitions/CategoryDynamoDbElasticFieldPlugin.js.map +1 -0
  130. package/plugins/definitions/IndexPageDataPlugin.d.ts +17 -0
  131. package/plugins/definitions/IndexPageDataPlugin.js +32 -0
  132. package/plugins/definitions/IndexPageDataPlugin.js.map +1 -0
  133. package/plugins/definitions/MenuDynamoDbElasticFieldPlugin.d.ts +4 -0
  134. package/plugins/definitions/MenuDynamoDbElasticFieldPlugin.js +17 -0
  135. package/plugins/definitions/MenuDynamoDbElasticFieldPlugin.js.map +1 -0
  136. package/plugins/definitions/PageBlockDynamoDbFieldPlugin.d.ts +4 -0
  137. package/plugins/definitions/PageBlockDynamoDbFieldPlugin.js +17 -0
  138. package/plugins/definitions/PageBlockDynamoDbFieldPlugin.js.map +1 -0
  139. package/plugins/definitions/PageDynamoDbElasticsearchFieldPlugin.d.ts +4 -0
  140. package/plugins/definitions/PageDynamoDbElasticsearchFieldPlugin.js +17 -0
  141. package/plugins/definitions/PageDynamoDbElasticsearchFieldPlugin.js.map +1 -0
  142. package/plugins/definitions/PageElasticsearchBodyModifierPlugin.d.ts +4 -0
  143. package/plugins/definitions/PageElasticsearchBodyModifierPlugin.js +17 -0
  144. package/plugins/definitions/PageElasticsearchBodyModifierPlugin.js.map +1 -0
  145. package/plugins/definitions/PageElasticsearchFieldPlugin.d.ts +4 -0
  146. package/plugins/definitions/PageElasticsearchFieldPlugin.js +17 -0
  147. package/plugins/definitions/PageElasticsearchFieldPlugin.js.map +1 -0
  148. package/plugins/definitions/PageElasticsearchIndexPlugin.d.ts +4 -0
  149. package/plugins/definitions/PageElasticsearchIndexPlugin.js +17 -0
  150. package/plugins/definitions/PageElasticsearchIndexPlugin.js.map +1 -0
  151. package/plugins/definitions/PageElasticsearchQueryModifierPlugin.d.ts +4 -0
  152. package/plugins/definitions/PageElasticsearchQueryModifierPlugin.js +17 -0
  153. package/plugins/definitions/PageElasticsearchQueryModifierPlugin.js.map +1 -0
  154. package/plugins/definitions/PageElasticsearchSortModifierPlugin.d.ts +4 -0
  155. package/plugins/definitions/PageElasticsearchSortModifierPlugin.js +17 -0
  156. package/plugins/definitions/PageElasticsearchSortModifierPlugin.js.map +1 -0
  157. package/plugins/definitions/PageElementDynamoDbElasticFieldPlugin.d.ts +4 -0
  158. package/plugins/definitions/PageElementDynamoDbElasticFieldPlugin.js +17 -0
  159. package/plugins/definitions/PageElementDynamoDbElasticFieldPlugin.js.map +1 -0
  160. package/plugins/definitions/SearchLatestPagesPlugin.d.ts +4 -0
  161. package/plugins/definitions/SearchLatestPagesPlugin.js +17 -0
  162. package/plugins/definitions/SearchLatestPagesPlugin.js.map +1 -0
  163. package/plugins/definitions/SearchPagesPlugin.d.ts +23 -0
  164. package/plugins/definitions/SearchPagesPlugin.js +39 -0
  165. package/plugins/definitions/SearchPagesPlugin.js.map +1 -0
  166. package/plugins/definitions/SearchPublishedPagesPlugin.d.ts +4 -0
  167. package/plugins/definitions/SearchPublishedPagesPlugin.js +17 -0
  168. package/plugins/definitions/SearchPublishedPagesPlugin.js.map +1 -0
  169. package/types.d.ts +39 -0
  170. package/types.js +20 -0
  171. package/types.js.map +1 -0
  172. package/upgrades/index.d.ts +2 -0
  173. package/upgrades/index.js +14 -0
  174. package/upgrades/index.js.map +1 -0
  175. package/upgrades/v5.15.0/category.d.ts +2 -0
  176. package/upgrades/v5.15.0/category.js +73 -0
  177. package/upgrades/v5.15.0/category.js.map +1 -0
  178. package/upgrades/v5.15.0/index.d.ts +4 -0
  179. package/upgrades/v5.15.0/index.js +52 -0
  180. package/upgrades/v5.15.0/index.js.map +1 -0
  181. package/upgrades/v5.15.0/menu.d.ts +2 -0
  182. package/upgrades/v5.15.0/menu.js +73 -0
  183. package/upgrades/v5.15.0/menu.js.map +1 -0
  184. package/upgrades/v5.15.0/pageElement.d.ts +2 -0
  185. package/upgrades/v5.15.0/pageElement.js +73 -0
  186. package/upgrades/v5.15.0/pageElement.js.map +1 -0
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.createPageElementDynamoDbFields = void 0;
7
+
8
+ var _PageElementDynamoDbElasticFieldPlugin = require("../../plugins/definitions/PageElementDynamoDbElasticFieldPlugin");
9
+
10
+ const createPageElementDynamoDbFields = () => [new _PageElementDynamoDbElasticFieldPlugin.PageElementDynamoDbElasticFieldPlugin({
11
+ field: "createdOn",
12
+ type: "date"
13
+ }), new _PageElementDynamoDbElasticFieldPlugin.PageElementDynamoDbElasticFieldPlugin({
14
+ field: "createdBy",
15
+ path: "createdBy.id",
16
+ sortable: false
17
+ })];
18
+
19
+ exports.createPageElementDynamoDbFields = createPageElementDynamoDbFields;
@@ -0,0 +1 @@
1
+ {"version":3,"names":["createPageElementDynamoDbFields","PageElementDynamoDbElasticFieldPlugin","field","type","path","sortable"],"sources":["fields.ts"],"sourcesContent":["import { PageElementDynamoDbElasticFieldPlugin } from \"~/plugins/definitions/PageElementDynamoDbElasticFieldPlugin\";\n\nexport const createPageElementDynamoDbFields = (): PageElementDynamoDbElasticFieldPlugin[] => [\n new PageElementDynamoDbElasticFieldPlugin({\n field: \"createdOn\",\n type: \"date\"\n }),\n new PageElementDynamoDbElasticFieldPlugin({\n field: \"createdBy\",\n path: \"createdBy.id\",\n sortable: false\n })\n];\n"],"mappings":";;;;;;;AAAA;;AAEO,MAAMA,+BAA+B,GAAG,MAA+C,CAC1F,IAAIC,4EAAJ,CAA0C;EACtCC,KAAK,EAAE,WAD+B;EAEtCC,IAAI,EAAE;AAFgC,CAA1C,CAD0F,EAK1F,IAAIF,4EAAJ,CAA0C;EACtCC,KAAK,EAAE,WAD+B;EAEtCE,IAAI,EAAE,cAFgC;EAGtCC,QAAQ,EAAE;AAH4B,CAA1C,CAL0F,CAAvF"}
@@ -0,0 +1,8 @@
1
+ import { PageElementStorageOperations } from "@webiny/api-page-builder/types";
2
+ import { Entity } from "dynamodb-toolbox";
3
+ import { PluginsContainer } from "@webiny/plugins";
4
+ export interface CreatePageElementStorageOperationsParams {
5
+ entity: Entity<any>;
6
+ plugins: PluginsContainer;
7
+ }
8
+ export declare const createPageElementStorageOperations: ({ entity, plugins }: CreatePageElementStorageOperationsParams) => PageElementStorageOperations;
@@ -0,0 +1,207 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.createPageElementStorageOperations = void 0;
9
+
10
+ var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
11
+
12
+ var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
13
+
14
+ var _cleanup = require("@webiny/db-dynamodb/utils/cleanup");
15
+
16
+ var _error = _interopRequireDefault(require("@webiny/error"));
17
+
18
+ var _query = require("@webiny/db-dynamodb/utils/query");
19
+
20
+ var _filter = require("@webiny/db-dynamodb/utils/filter");
21
+
22
+ var _sort = require("@webiny/db-dynamodb/utils/sort");
23
+
24
+ var _listResponse = require("@webiny/db-dynamodb/utils/listResponse");
25
+
26
+ var _PageElementDynamoDbElasticFieldPlugin = require("../../plugins/definitions/PageElementDynamoDbElasticFieldPlugin");
27
+
28
+ const _excluded = ["tenant", "locale"];
29
+
30
+ const createPartitionKey = params => {
31
+ const {
32
+ tenant,
33
+ locale
34
+ } = params;
35
+ return `T#${tenant}#L#${locale}#PB#PE`;
36
+ };
37
+
38
+ const createSortKey = params => {
39
+ const {
40
+ id
41
+ } = params;
42
+ return id;
43
+ };
44
+
45
+ const createType = () => {
46
+ return "pb.pageElement";
47
+ };
48
+
49
+ const createPageElementStorageOperations = ({
50
+ entity,
51
+ plugins
52
+ }) => {
53
+ const create = async params => {
54
+ const {
55
+ pageElement
56
+ } = params;
57
+ const keys = {
58
+ PK: createPartitionKey(pageElement),
59
+ SK: createSortKey(pageElement)
60
+ };
61
+
62
+ try {
63
+ await entity.put((0, _objectSpread2.default)((0, _objectSpread2.default)({}, pageElement), {}, {
64
+ TYPE: createType()
65
+ }, keys));
66
+ return pageElement;
67
+ } catch (ex) {
68
+ throw new _error.default(ex.message || "Could not create pageElement.", ex.code || "PAGE_ELEMENT_CREATE_ERROR", {
69
+ keys,
70
+ pageElement
71
+ });
72
+ }
73
+ };
74
+
75
+ const update = async params => {
76
+ const {
77
+ pageElement,
78
+ original
79
+ } = params;
80
+ const keys = {
81
+ PK: createPartitionKey(pageElement),
82
+ SK: createSortKey(pageElement)
83
+ };
84
+
85
+ try {
86
+ await entity.put((0, _objectSpread2.default)((0, _objectSpread2.default)({}, pageElement), {}, {
87
+ TYPE: createType()
88
+ }, keys));
89
+ return pageElement;
90
+ } catch (ex) {
91
+ throw new _error.default(ex.message || "Could not update pageElement.", ex.code || "PAGE_ELEMENT_UPDATE_ERROR", {
92
+ keys,
93
+ original,
94
+ pageElement
95
+ });
96
+ }
97
+ };
98
+
99
+ const deletePageElement = async params => {
100
+ const {
101
+ pageElement
102
+ } = params;
103
+ const keys = {
104
+ PK: createPartitionKey(pageElement),
105
+ SK: createSortKey(pageElement)
106
+ };
107
+
108
+ try {
109
+ await entity.delete(keys);
110
+ return pageElement;
111
+ } catch (ex) {
112
+ throw new _error.default(ex.message || "Could not delete pageElement.", ex.code || "PAGE_ELEMENT_DELETE_ERROR", {
113
+ keys,
114
+ pageElement
115
+ });
116
+ }
117
+ };
118
+
119
+ const get = async params => {
120
+ const {
121
+ where
122
+ } = params;
123
+ const keys = {
124
+ PK: createPartitionKey(where),
125
+ SK: createSortKey(where)
126
+ };
127
+
128
+ try {
129
+ const result = await entity.get(keys);
130
+
131
+ if (!result || !result.Item) {
132
+ return null;
133
+ }
134
+
135
+ return (0, _cleanup.cleanupItem)(entity, result.Item);
136
+ } catch (ex) {
137
+ throw new _error.default(ex.message || "Could not load page element by given parameters.", ex.code || "PAGE_ELEMENT_GET_ERROR", {
138
+ where
139
+ });
140
+ }
141
+ };
142
+
143
+ const list = async params => {
144
+ const {
145
+ where,
146
+ sort,
147
+ limit = 10
148
+ } = params;
149
+ const {
150
+ tenant,
151
+ locale
152
+ } = where,
153
+ restWhere = (0, _objectWithoutProperties2.default)(where, _excluded);
154
+ const queryAllParams = {
155
+ entity,
156
+ partitionKey: createPartitionKey({
157
+ tenant,
158
+ locale
159
+ }),
160
+ options: {
161
+ limit: limit || undefined,
162
+ gt: " "
163
+ }
164
+ };
165
+ let results = [];
166
+
167
+ try {
168
+ results = await (0, _query.queryAll)(queryAllParams);
169
+ } catch (ex) {
170
+ throw new _error.default(ex.message || "Could not list page elements by given parameters.", ex.code || "PAGE_ELEMENTS_LIST_ERROR", {
171
+ partitionKey: queryAllParams.partitionKey,
172
+ options: queryAllParams.options
173
+ });
174
+ }
175
+
176
+ const fields = plugins.byType(_PageElementDynamoDbElasticFieldPlugin.PageElementDynamoDbElasticFieldPlugin.type);
177
+ const filteredItems = (0, _filter.filterItems)({
178
+ plugins,
179
+ where: restWhere,
180
+ items: results,
181
+ fields
182
+ }).map(item => {
183
+ return (0, _cleanup.cleanupItem)(entity, item);
184
+ });
185
+ const sortedItems = (0, _sort.sortItems)({
186
+ items: filteredItems,
187
+ sort,
188
+ fields
189
+ });
190
+ return (0, _listResponse.createListResponse)({
191
+ items: sortedItems,
192
+ limit,
193
+ totalCount: filteredItems.length,
194
+ after: null
195
+ });
196
+ };
197
+
198
+ return {
199
+ get,
200
+ create,
201
+ update,
202
+ delete: deletePageElement,
203
+ list
204
+ };
205
+ };
206
+
207
+ exports.createPageElementStorageOperations = createPageElementStorageOperations;
@@ -0,0 +1 @@
1
+ {"version":3,"names":["createPartitionKey","params","tenant","locale","createSortKey","id","createType","createPageElementStorageOperations","entity","plugins","create","pageElement","keys","PK","SK","put","TYPE","ex","WebinyError","message","code","update","original","deletePageElement","delete","get","where","result","Item","cleanupItem","list","sort","limit","restWhere","queryAllParams","partitionKey","options","undefined","gt","results","queryAll","fields","byType","PageElementDynamoDbElasticFieldPlugin","type","filteredItems","filterItems","items","map","item","sortedItems","sortItems","createListResponse","totalCount","length","after"],"sources":["index.ts"],"sourcesContent":["import {\n PageElement,\n PageElementStorageOperations,\n PageElementStorageOperationsCreateParams,\n PageElementStorageOperationsDeleteParams,\n PageElementStorageOperationsGetParams,\n PageElementStorageOperationsListParams,\n PageElementStorageOperationsUpdateParams\n} from \"@webiny/api-page-builder/types\";\nimport { Entity } from \"dynamodb-toolbox\";\nimport { cleanupItem } from \"@webiny/db-dynamodb/utils/cleanup\";\nimport WebinyError from \"@webiny/error\";\nimport { queryAll, QueryAllParams } from \"@webiny/db-dynamodb/utils/query\";\nimport { filterItems } from \"@webiny/db-dynamodb/utils/filter\";\nimport { sortItems } from \"@webiny/db-dynamodb/utils/sort\";\nimport { createListResponse } from \"@webiny/db-dynamodb/utils/listResponse\";\nimport { PageElementDynamoDbElasticFieldPlugin } from \"~/plugins/definitions/PageElementDynamoDbElasticFieldPlugin\";\nimport { PluginsContainer } from \"@webiny/plugins\";\n\ninterface PartitionKeyParams {\n tenant: string;\n locale: string;\n}\nconst createPartitionKey = (params: PartitionKeyParams): string => {\n const { tenant, locale } = params;\n return `T#${tenant}#L#${locale}#PB#PE`;\n};\n\ninterface SortKeyParams {\n id: string;\n}\nconst createSortKey = (params: SortKeyParams): string => {\n const { id } = params;\n return id;\n};\n\nconst createType = (): string => {\n return \"pb.pageElement\";\n};\n\nexport interface CreatePageElementStorageOperationsParams {\n entity: Entity<any>;\n plugins: PluginsContainer;\n}\nexport const createPageElementStorageOperations = ({\n entity,\n plugins\n}: CreatePageElementStorageOperationsParams): PageElementStorageOperations => {\n const create = async (params: PageElementStorageOperationsCreateParams) => {\n const { pageElement } = params;\n const keys = {\n PK: createPartitionKey(pageElement),\n SK: createSortKey(pageElement)\n };\n\n try {\n await entity.put({\n ...pageElement,\n TYPE: createType(),\n ...keys\n });\n return pageElement;\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not create pageElement.\",\n ex.code || \"PAGE_ELEMENT_CREATE_ERROR\",\n {\n keys,\n pageElement\n }\n );\n }\n };\n\n const update = async (params: PageElementStorageOperationsUpdateParams) => {\n const { pageElement, original } = params;\n const keys = {\n PK: createPartitionKey(pageElement),\n SK: createSortKey(pageElement)\n };\n\n try {\n await entity.put({\n ...pageElement,\n TYPE: createType(),\n ...keys\n });\n return pageElement;\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not update pageElement.\",\n ex.code || \"PAGE_ELEMENT_UPDATE_ERROR\",\n {\n keys,\n original,\n pageElement\n }\n );\n }\n };\n\n const deletePageElement = async (params: PageElementStorageOperationsDeleteParams) => {\n const { pageElement } = params;\n const keys = {\n PK: createPartitionKey(pageElement),\n SK: createSortKey(pageElement)\n };\n\n try {\n await entity.delete(keys);\n return pageElement;\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not delete pageElement.\",\n ex.code || \"PAGE_ELEMENT_DELETE_ERROR\",\n {\n keys,\n pageElement\n }\n );\n }\n };\n\n const get = async (params: PageElementStorageOperationsGetParams) => {\n const { where } = params;\n\n const keys = {\n PK: createPartitionKey(where),\n SK: createSortKey(where)\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 element by given parameters.\",\n ex.code || \"PAGE_ELEMENT_GET_ERROR\",\n {\n where\n }\n );\n }\n };\n\n const list = async (params: PageElementStorageOperationsListParams) => {\n const { where, sort, limit = 10 } = params;\n\n const { tenant, locale, ...restWhere } = where;\n const queryAllParams: QueryAllParams = {\n entity,\n partitionKey: createPartitionKey({\n tenant,\n locale\n }),\n options: {\n limit: limit || undefined,\n gt: \" \"\n }\n };\n\n let results: PageElement[] = [];\n\n try {\n results = await queryAll<PageElement>(queryAllParams);\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not list page elements by given parameters.\",\n ex.code || \"PAGE_ELEMENTS_LIST_ERROR\",\n {\n partitionKey: queryAllParams.partitionKey,\n options: queryAllParams.options\n }\n );\n }\n\n const fields = plugins.byType<PageElementDynamoDbElasticFieldPlugin>(\n PageElementDynamoDbElasticFieldPlugin.type\n );\n\n const filteredItems = filterItems<PageElement>({\n plugins,\n where: restWhere,\n items: results,\n fields\n }).map(item => {\n return cleanupItem<PageElement>(entity, item);\n }) as PageElement[];\n\n const sortedItems = sortItems<PageElement>({\n items: filteredItems,\n sort,\n fields\n });\n\n return createListResponse({\n items: sortedItems,\n limit,\n totalCount: filteredItems.length,\n after: null\n });\n };\n\n return {\n get,\n create,\n update,\n delete: deletePageElement,\n list\n };\n};\n"],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { SearchBody as esSearchBody } from "elastic-ts";
2
+ import { PageStorageOperationsListWhere } from "@webiny/api-page-builder/types";
3
+ import { PluginsContainer } from "@webiny/plugins";
4
+ interface CreateElasticsearchBodyParams {
5
+ plugins: PluginsContainer;
6
+ where: PageStorageOperationsListWhere;
7
+ limit: number;
8
+ after: string | null;
9
+ sort: string[];
10
+ }
11
+ export declare const createElasticsearchQueryBody: (params: CreateElasticsearchBodyParams) => esSearchBody & Pick<Required<esSearchBody>, "sort">;
12
+ export {};
@@ -0,0 +1,237 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.createElasticsearchQueryBody = void 0;
9
+
10
+ var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
11
+
12
+ var _error = _interopRequireDefault(require("@webiny/error"));
13
+
14
+ var _apiElasticsearch = require("@webiny/api-elasticsearch");
15
+
16
+ var _PageElasticsearchFieldPlugin = require("../../plugins/definitions/PageElasticsearchFieldPlugin");
17
+
18
+ var _PageElasticsearchSortModifierPlugin = require("../../plugins/definitions/PageElasticsearchSortModifierPlugin");
19
+
20
+ var _PageElasticsearchQueryModifierPlugin = require("../../plugins/definitions/PageElasticsearchQueryModifierPlugin");
21
+
22
+ var _PageElasticsearchBodyModifierPlugin = require("../../plugins/definitions/PageElasticsearchBodyModifierPlugin");
23
+
24
+ /**
25
+ * Latest and published are specific in Elasticsearch to that extend that they are tagged in the published or latest property.
26
+ * We allow either published or either latest.
27
+ * Latest is used in the manage API and published in the read API.
28
+ */
29
+ const createInitialQueryValue = args => {
30
+ const {
31
+ where
32
+ } = args;
33
+ const query = {
34
+ must: [],
35
+ must_not: [],
36
+ should: [],
37
+ filter: []
38
+ };
39
+ /**
40
+ * We must transform published and latest where args into something that is understandable by our Elasticsearch
41
+ */
42
+
43
+ if (where.published === true) {
44
+ query.must.push({
45
+ term: {
46
+ published: true
47
+ }
48
+ });
49
+ } else if (where.latest === true) {
50
+ query.must.push({
51
+ term: {
52
+ latest: true
53
+ }
54
+ });
55
+ } // we do not allow not published and not latest
56
+ else if (where.published === false) {
57
+ throw new _error.default(`Cannot call Elasticsearch query with "published" set at false.`, "ELASTICSEARCH_UNSUPPORTED_QUERY", {
58
+ where
59
+ });
60
+ } else if (where.latest === false) {
61
+ throw new _error.default(`Cannot call Elasticsearch query with "latest" set at false.`, "ELASTICSEARCH_UNSUPPORTED_QUERY", {
62
+ where
63
+ });
64
+ }
65
+
66
+ delete where.published;
67
+ delete where.latest; //
68
+
69
+ return query;
70
+ };
71
+
72
+ const createElasticsearchQuery = params => {
73
+ const {
74
+ plugins,
75
+ where: initialWhere,
76
+ fieldPlugins
77
+ } = params;
78
+ const query = createInitialQueryValue({
79
+ where: initialWhere
80
+ });
81
+ /**
82
+ * Be aware that, if having more registered operator plugins of same type, the last one will be used.
83
+ */
84
+
85
+ const operatorPlugins = (0, _apiElasticsearch.getElasticsearchOperatorPluginsByLocale)(plugins, initialWhere.locale);
86
+ const where = (0, _objectSpread2.default)({}, initialWhere);
87
+ /**
88
+ * Tags are specific so extract them and remove from where.
89
+ */
90
+
91
+ const {
92
+ tags_in: tags,
93
+ tags_rule: tagsRule
94
+ } = initialWhere;
95
+ delete where["tags_in"];
96
+ delete where["tags_rule"];
97
+
98
+ if (tags && Array.isArray(tags) === true && tags.length > 0) {
99
+ if (tagsRule === "any") {
100
+ query.filter.push({
101
+ terms: {
102
+ "tags.keyword": tags
103
+ }
104
+ });
105
+ } else {
106
+ query.filter.push({
107
+ bool: {
108
+ must: tags.map(tag => {
109
+ return {
110
+ term: {
111
+ "tags.keyword": tag
112
+ }
113
+ };
114
+ })
115
+ }
116
+ });
117
+ }
118
+ }
119
+ /**
120
+ * Specific search parameter
121
+ */
122
+
123
+
124
+ if (where.search) {
125
+ query.must.push({
126
+ query_string: {
127
+ query: `*${where.search}*`,
128
+ allow_leading_wildcard: true,
129
+ fields: ["titleLC", "snippet"]
130
+ }
131
+ });
132
+ }
133
+
134
+ delete where.search;
135
+ /**
136
+ * !!! IMPORTANT !!! There are few specific cases where we hardcode the query conditions.
137
+ *
138
+ * When ES index is shared between tenants, we need to filter records by tenant ID.
139
+ */
140
+
141
+ const sharedIndex = process.env.ELASTICSEARCH_SHARED_INDEXES === "true";
142
+
143
+ if (sharedIndex) {
144
+ const tenant = initialWhere.tenant;
145
+ query.must.push({
146
+ term: {
147
+ "tenant.keyword": tenant
148
+ }
149
+ });
150
+ /**
151
+ * Remove so it is not applied again later.
152
+ * Possibly tenant is not defined, but just in case, remove it.
153
+ */
154
+
155
+ delete where["tenant"];
156
+ }
157
+ /**
158
+ * We apply other conditions as they are passed via the where value.
159
+ */
160
+
161
+
162
+ (0, _apiElasticsearch.applyWhere)({
163
+ query,
164
+ where,
165
+ fields: fieldPlugins,
166
+ operators: operatorPlugins
167
+ });
168
+ return query;
169
+ };
170
+
171
+ const createElasticsearchQueryBody = params => {
172
+ const {
173
+ plugins,
174
+ where,
175
+ limit: initialLimit,
176
+ sort: initialSort,
177
+ after
178
+ } = params;
179
+ const fieldPlugins = plugins.byType(_PageElasticsearchFieldPlugin.PageElasticsearchFieldPlugin.type).reduce((acc, plugin) => {
180
+ acc[plugin.field] = plugin;
181
+ return acc;
182
+ }, {});
183
+ const limit = (0, _apiElasticsearch.createLimit)(initialLimit, 100);
184
+ const query = createElasticsearchQuery((0, _objectSpread2.default)((0, _objectSpread2.default)({}, params), {}, {
185
+ fieldPlugins
186
+ }));
187
+ const sort = (0, _apiElasticsearch.createSort)({
188
+ sort: initialSort,
189
+ fieldPlugins
190
+ });
191
+ const queryModifiers = plugins.byType(_PageElasticsearchQueryModifierPlugin.PageElasticsearchQueryModifierPlugin.type);
192
+
193
+ for (const plugin of queryModifiers) {
194
+ plugin.modifyQuery({
195
+ query,
196
+ where
197
+ });
198
+ }
199
+
200
+ const sortModifiers = plugins.byType(_PageElasticsearchSortModifierPlugin.PageElasticsearchSortModifierPlugin.type);
201
+
202
+ for (const plugin of sortModifiers) {
203
+ plugin.modifySort({
204
+ sort
205
+ });
206
+ }
207
+
208
+ const body = {
209
+ query: {
210
+ constant_score: {
211
+ filter: {
212
+ bool: (0, _objectSpread2.default)({}, query)
213
+ }
214
+ }
215
+ },
216
+ size: limit + 1,
217
+
218
+ /**
219
+ * Casting as any is required due to search_after is accepting an array of values.
220
+ * Which is correct in some cases. In our case, it is not.
221
+ * https://www.elastic.co/guide/en/elasticsearch/reference/7.13/paginate-search-results.html
222
+ */
223
+ search_after: (0, _apiElasticsearch.decodeCursor)(after),
224
+ sort
225
+ };
226
+ const bodyModifiers = plugins.byType(_PageElasticsearchBodyModifierPlugin.PageElasticsearchBodyModifierPlugin.type);
227
+
228
+ for (const plugin of bodyModifiers) {
229
+ plugin.modifyBody({
230
+ body
231
+ });
232
+ }
233
+
234
+ return body;
235
+ };
236
+
237
+ exports.createElasticsearchQueryBody = createElasticsearchQueryBody;
@@ -0,0 +1 @@
1
+ {"version":3,"names":["createInitialQueryValue","args","where","query","must","must_not","should","filter","published","push","term","latest","WebinyError","createElasticsearchQuery","params","plugins","initialWhere","fieldPlugins","operatorPlugins","getElasticsearchOperatorPluginsByLocale","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","applyWhere","operators","createElasticsearchQueryBody","limit","initialLimit","sort","initialSort","after","byType","PageElasticsearchFieldPlugin","type","reduce","acc","plugin","field","createLimit","createSort","queryModifiers","PageElasticsearchQueryModifierPlugin","modifyQuery","sortModifiers","PageElasticsearchSortModifierPlugin","modifySort","body","constant_score","size","search_after","decodeCursor","bodyModifiers","PageElasticsearchBodyModifierPlugin","modifyBody"],"sources":["elasticsearchQueryBody.ts"],"sourcesContent":["import WebinyError from \"@webiny/error\";\nimport { SearchBody as esSearchBody } from \"elastic-ts\";\nimport {\n applyWhere,\n createLimit,\n createSort,\n decodeCursor,\n ElasticsearchFieldPlugin,\n getElasticsearchOperatorPluginsByLocale\n} from \"@webiny/api-elasticsearch\";\nimport { ElasticsearchBoolQueryConfig } from \"@webiny/api-elasticsearch/types\";\nimport { PageStorageOperationsListWhere } from \"@webiny/api-page-builder/types\";\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 { 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 = 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"],"mappings":";;;;;;;;;;;AAAA;;AAEA;;AAUA;;AACA;;AACA;;AACA;;AAOA;AACA;AACA;AACA;AACA;AACA,MAAMA,uBAAuB,GACzBC,IAD4B,IAEG;EAC/B,MAAM;IAAEC;EAAF,IAAYD,IAAlB;EAEA,MAAME,KAAmC,GAAG;IACxCC,IAAI,EAAE,EADkC;IAExCC,QAAQ,EAAE,EAF8B;IAGxCC,MAAM,EAAE,EAHgC;IAIxCC,MAAM,EAAE;EAJgC,CAA5C;EAOA;AACJ;AACA;;EACI,IAAIL,KAAK,CAACM,SAAN,KAAoB,IAAxB,EAA8B;IAC1BL,KAAK,CAACC,IAAN,CAAWK,IAAX,CAAgB;MACZC,IAAI,EAAE;QACFF,SAAS,EAAE;MADT;IADM,CAAhB;EAKH,CAND,MAMO,IAAIN,KAAK,CAACS,MAAN,KAAiB,IAArB,EAA2B;IAC9BR,KAAK,CAACC,IAAN,CAAWK,IAAX,CAAgB;MACZC,IAAI,EAAE;QACFC,MAAM,EAAE;MADN;IADM,CAAhB;EAKH,CANM,CAOP;EAPO,KAQF,IAAIT,KAAK,CAACM,SAAN,KAAoB,KAAxB,EAA+B;IAChC,MAAM,IAAII,cAAJ,CACD,gEADC,EAEF,iCAFE,EAGF;MACIV;IADJ,CAHE,CAAN;EAOH,CARI,MAQE,IAAIA,KAAK,CAACS,MAAN,KAAiB,KAArB,EAA4B;IAC/B,MAAM,IAAIC,cAAJ,CACD,6DADC,EAEF,iCAFE,EAGF;MACIV;IADJ,CAHE,CAAN;EAOH;;EACD,OAAOA,KAAK,CAACM,SAAb;EACA,OAAON,KAAK,CAACS,MAAb,CA7C+B,CA8C/B;;EACA,OAAOR,KAAP;AACH,CAlDD;;AA4DA,MAAMU,wBAAwB,GAC1BC,MAD6B,IAI5B;EACD,MAAM;IAAEC,OAAF;IAAWb,KAAK,EAAEc,YAAlB;IAAgCC;EAAhC,IAAiDH,MAAvD;EACA,MAAMX,KAAK,GAAGH,uBAAuB,CAAC;IAClCE,KAAK,EAAEc;EAD2B,CAAD,CAArC;EAGA;AACJ;AACA;;EACI,MAAME,eAAe,GAAG,IAAAC,yDAAA,EAAwCJ,OAAxC,EAAiDC,YAAY,CAACI,MAA9D,CAAxB;EAEA,MAAMlB,KAA8C,mCAC7Cc,YAD6C,CAApD;EAGA;AACJ;AACA;;EACI,MAAM;IAAEK,OAAO,EAAEC,IAAX;IAAiBC,SAAS,EAAEC;EAA5B,IAAyCR,YAA/C;EACA,OAAOd,KAAK,CAAC,SAAD,CAAZ;EACA,OAAOA,KAAK,CAAC,WAAD,CAAZ;;EACA,IAAIoB,IAAI,IAAIG,KAAK,CAACC,OAAN,CAAcJ,IAAd,MAAwB,IAAhC,IAAwCA,IAAI,CAACK,MAAL,GAAc,CAA1D,EAA6D;IACzD,IAAIH,QAAQ,KAAK,KAAjB,EAAwB;MACpBrB,KAAK,CAACI,MAAN,CAAaE,IAAb,CAAkB;QACdmB,KAAK,EAAE;UACH,gBAAgBN;QADb;MADO,CAAlB;IAKH,CAND,MAMO;MACHnB,KAAK,CAACI,MAAN,CAAaE,IAAb,CAAkB;QACdoB,IAAI,EAAE;UACFzB,IAAI,EAAEkB,IAAI,CAACQ,GAAL,CAASC,GAAG,IAAI;YAClB,OAAO;cACHrB,IAAI,EAAE;gBACF,gBAAgBqB;cADd;YADH,CAAP;UAKH,CANK;QADJ;MADQ,CAAlB;IAWH;EACJ;EACD;AACJ;AACA;;;EACI,IAAI7B,KAAK,CAAC8B,MAAV,EAAkB;IACd7B,KAAK,CAACC,IAAN,CAAWK,IAAX,CAAgB;MACZwB,YAAY,EAAE;QACV9B,KAAK,EAAG,IAAGD,KAAK,CAAC8B,MAAO,GADd;QAEVE,sBAAsB,EAAE,IAFd;QAGVC,MAAM,EAAE,CAAC,SAAD,EAAY,SAAZ;MAHE;IADF,CAAhB;EAOH;;EACD,OAAOjC,KAAK,CAAC8B,MAAb;EAEA;AACJ;AACA;AACA;AACA;;EACI,MAAMI,WAAW,GAAGC,OAAO,CAACC,GAAR,CAAYC,4BAAZ,KAA6C,MAAjE;;EACA,IAAIH,WAAJ,EAAiB;IACb,MAAMI,MAAM,GAAGxB,YAAY,CAACwB,MAA5B;IACArC,KAAK,CAACC,IAAN,CAAWK,IAAX,CAAgB;MAAEC,IAAI,EAAE;QAAE,kBAAkB8B;MAApB;IAAR,CAAhB;IACA;AACR;AACA;AACA;;IACQ,OAAOtC,KAAK,CAAC,QAAD,CAAZ;EACH;EACD;AACJ;AACA;;;EACI,IAAAuC,4BAAA,EAAW;IACPtC,KADO;IAEPD,KAFO;IAGPiC,MAAM,EAAElB,YAHD;IAIPyB,SAAS,EAAExB;EAJJ,CAAX;EAOA,OAAOf,KAAP;AACH,CApFD;;AAsFO,MAAMwC,4BAA4B,GACrC7B,MADwC,IAEc;EACtD,MAAM;IAAEC,OAAF;IAAWb,KAAX;IAAkB0C,KAAK,EAAEC,YAAzB;IAAuCC,IAAI,EAAEC,WAA7C;IAA0DC;EAA1D,IAAoElC,MAA1E;EAEA,MAAMG,YAAY,GAAGF,OAAO,CACvBkC,MADgB,CACqBC,0DAAA,CAA6BC,IADlD,EAEhBC,MAFgB,CAET,CAACC,GAAD,EAAMC,MAAN,KAAiB;IACrBD,GAAG,CAACC,MAAM,CAACC,KAAR,CAAH,GAAoBD,MAApB;IACA,OAAOD,GAAP;EACH,CALgB,EAKd,EALc,CAArB;EAOA,MAAMT,KAAK,GAAG,IAAAY,6BAAA,EAAYX,YAAZ,EAA0B,GAA1B,CAAd;EAEA,MAAM1C,KAAK,GAAGU,wBAAwB,6DAC/BC,MAD+B;IAElCG;EAFkC,GAAtC;EAKA,MAAM6B,IAAI,GAAG,IAAAW,4BAAA,EAAW;IACpBX,IAAI,EAAEC,WADc;IAEpB9B;EAFoB,CAAX,CAAb;EAKA,MAAMyC,cAAc,GAAG3C,OAAO,CAACkC,MAAR,CACnBU,0EAAA,CAAqCR,IADlB,CAAvB;;EAGA,KAAK,MAAMG,MAAX,IAAqBI,cAArB,EAAqC;IACjCJ,MAAM,CAACM,WAAP,CAAmB;MACfzD,KADe;MAEfD;IAFe,CAAnB;EAIH;;EAED,MAAM2D,aAAa,GAAG9C,OAAO,CAACkC,MAAR,CAClBa,wEAAA,CAAoCX,IADlB,CAAtB;;EAGA,KAAK,MAAMG,MAAX,IAAqBO,aAArB,EAAoC;IAChCP,MAAM,CAACS,UAAP,CAAkB;MACdjB;IADc,CAAlB;EAGH;;EAED,MAAMkB,IAAI,GAAG;IACT7D,KAAK,EAAE;MACH8D,cAAc,EAAE;QACZ1D,MAAM,EAAE;UACJsB,IAAI,kCACG1B,KADH;QADA;MADI;IADb,CADE;IAUT+D,IAAI,EAAEtB,KAAK,GAAG,CAVL;;IAWT;AACR;AACA;AACA;AACA;IACQuB,YAAY,EAAE,IAAAC,8BAAA,EAAapB,KAAb,CAhBL;IAiBTF;EAjBS,CAAb;EAoBA,MAAMuB,aAAa,GAAGtD,OAAO,CAACkC,MAAR,CAClBqB,wEAAA,CAAoCnB,IADlB,CAAtB;;EAGA,KAAK,MAAMG,MAAX,IAAqBe,aAArB,EAAoC;IAChCf,MAAM,CAACiB,UAAP,CAAkB;MACdP;IADc,CAAlB;EAGH;;EAED,OAAOA,IAAP;AACH,CAzEM"}
@@ -0,0 +1,4 @@
1
+ import { PageElasticsearchFieldPlugin } from "../../plugins/definitions/PageElasticsearchFieldPlugin";
2
+ import { PageDynamoDbElasticsearchFieldPlugin } from "../../plugins/definitions/PageDynamoDbElasticsearchFieldPlugin";
3
+ export declare const createPagesElasticsearchFields: () => PageElasticsearchFieldPlugin[];
4
+ export declare const createPagesDynamoDbFields: () => PageDynamoDbElasticsearchFieldPlugin[];
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.createPagesElasticsearchFields = exports.createPagesDynamoDbFields = void 0;
7
+
8
+ var _PageElasticsearchFieldPlugin = require("../../plugins/definitions/PageElasticsearchFieldPlugin");
9
+
10
+ var _PageDynamoDbElasticsearchFieldPlugin = require("../../plugins/definitions/PageDynamoDbElasticsearchFieldPlugin");
11
+
12
+ const createPagesElasticsearchFields = () => [new _PageElasticsearchFieldPlugin.PageElasticsearchFieldPlugin({
13
+ field: "createdOn",
14
+ unmappedType: "date",
15
+ keyword: false
16
+ }), new _PageElasticsearchFieldPlugin.PageElasticsearchFieldPlugin({
17
+ field: "savedOn",
18
+ unmappedType: "date",
19
+ keyword: false
20
+ }), new _PageElasticsearchFieldPlugin.PageElasticsearchFieldPlugin({
21
+ field: "publishedOn",
22
+ unmappedType: "date",
23
+ keyword: false
24
+ }), new _PageElasticsearchFieldPlugin.PageElasticsearchFieldPlugin({
25
+ field: "createdBy",
26
+ path: "createdBy.id"
27
+ }), new _PageElasticsearchFieldPlugin.PageElasticsearchFieldPlugin({
28
+ field: "ownedBy",
29
+ path: "ownedBy.id"
30
+ }), new _PageElasticsearchFieldPlugin.PageElasticsearchFieldPlugin({
31
+ field: "title",
32
+ path: "titleLC",
33
+ unmappedType: "text",
34
+ keyword: true,
35
+ searchable: true
36
+ }),
37
+ /**
38
+ * Defines all fields that are not strictly defined.
39
+ */
40
+ new _PageElasticsearchFieldPlugin.PageElasticsearchFieldPlugin({
41
+ field: "*"
42
+ })];
43
+
44
+ exports.createPagesElasticsearchFields = createPagesElasticsearchFields;
45
+
46
+ const createPagesDynamoDbFields = () => {
47
+ return [new _PageDynamoDbElasticsearchFieldPlugin.PageDynamoDbElasticsearchFieldPlugin({
48
+ field: "version",
49
+ type: "number",
50
+ sortable: true
51
+ })];
52
+ };
53
+
54
+ exports.createPagesDynamoDbFields = createPagesDynamoDbFields;
@@ -0,0 +1 @@
1
+ {"version":3,"names":["createPagesElasticsearchFields","PageElasticsearchFieldPlugin","field","unmappedType","keyword","path","searchable","createPagesDynamoDbFields","PageDynamoDbElasticsearchFieldPlugin","type","sortable"],"sources":["fields.ts"],"sourcesContent":["import { PageElasticsearchFieldPlugin } from \"~/plugins/definitions/PageElasticsearchFieldPlugin\";\nimport { PageDynamoDbElasticsearchFieldPlugin } from \"~/plugins/definitions/PageDynamoDbElasticsearchFieldPlugin\";\n\nexport const createPagesElasticsearchFields = (): PageElasticsearchFieldPlugin[] => [\n new PageElasticsearchFieldPlugin({\n field: \"createdOn\",\n unmappedType: \"date\",\n keyword: false\n }),\n new PageElasticsearchFieldPlugin({\n field: \"savedOn\",\n unmappedType: \"date\",\n keyword: false\n }),\n new PageElasticsearchFieldPlugin({\n field: \"publishedOn\",\n unmappedType: \"date\",\n keyword: false\n }),\n new PageElasticsearchFieldPlugin({\n field: \"createdBy\",\n path: \"createdBy.id\"\n }),\n new PageElasticsearchFieldPlugin({\n field: \"ownedBy\",\n path: \"ownedBy.id\"\n }),\n new PageElasticsearchFieldPlugin({\n field: \"title\",\n path: \"titleLC\",\n unmappedType: \"text\",\n keyword: true,\n searchable: true\n }),\n /**\n * Defines all fields that are not strictly defined.\n */\n new PageElasticsearchFieldPlugin({\n field: \"*\"\n })\n];\n\nexport const createPagesDynamoDbFields = (): PageDynamoDbElasticsearchFieldPlugin[] => {\n return [\n new PageDynamoDbElasticsearchFieldPlugin({\n field: \"version\",\n type: \"number\",\n sortable: true\n })\n ];\n};\n"],"mappings":";;;;;;;AAAA;;AACA;;AAEO,MAAMA,8BAA8B,GAAG,MAAsC,CAChF,IAAIC,0DAAJ,CAAiC;EAC7BC,KAAK,EAAE,WADsB;EAE7BC,YAAY,EAAE,MAFe;EAG7BC,OAAO,EAAE;AAHoB,CAAjC,CADgF,EAMhF,IAAIH,0DAAJ,CAAiC;EAC7BC,KAAK,EAAE,SADsB;EAE7BC,YAAY,EAAE,MAFe;EAG7BC,OAAO,EAAE;AAHoB,CAAjC,CANgF,EAWhF,IAAIH,0DAAJ,CAAiC;EAC7BC,KAAK,EAAE,aADsB;EAE7BC,YAAY,EAAE,MAFe;EAG7BC,OAAO,EAAE;AAHoB,CAAjC,CAXgF,EAgBhF,IAAIH,0DAAJ,CAAiC;EAC7BC,KAAK,EAAE,WADsB;EAE7BG,IAAI,EAAE;AAFuB,CAAjC,CAhBgF,EAoBhF,IAAIJ,0DAAJ,CAAiC;EAC7BC,KAAK,EAAE,SADsB;EAE7BG,IAAI,EAAE;AAFuB,CAAjC,CApBgF,EAwBhF,IAAIJ,0DAAJ,CAAiC;EAC7BC,KAAK,EAAE,OADsB;EAE7BG,IAAI,EAAE,SAFuB;EAG7BF,YAAY,EAAE,MAHe;EAI7BC,OAAO,EAAE,IAJoB;EAK7BE,UAAU,EAAE;AALiB,CAAjC,CAxBgF;AA+BhF;AACJ;AACA;AACI,IAAIL,0DAAJ,CAAiC;EAC7BC,KAAK,EAAE;AADsB,CAAjC,CAlCgF,CAA7E;;;;AAuCA,MAAMK,yBAAyB,GAAG,MAA8C;EACnF,OAAO,CACH,IAAIC,0EAAJ,CAAyC;IACrCN,KAAK,EAAE,SAD8B;IAErCO,IAAI,EAAE,QAF+B;IAGrCC,QAAQ,EAAE;EAH2B,CAAzC,CADG,CAAP;AAOH,CARM"}
@@ -0,0 +1,35 @@
1
+ /// <reference types="lodash" />
2
+ import { Page } from "@webiny/api-page-builder/types";
3
+ import { PluginsContainer } from "@webiny/plugins";
4
+ /**
5
+ * Map our system fields to the Elasticsearch data.
6
+ * We need to add new fields if we add them into our system.
7
+ */
8
+ export declare const getESPageData: (page: Page) => {
9
+ __type: string;
10
+ tenant: string;
11
+ webinyVersion: string;
12
+ id: string;
13
+ pid: string;
14
+ editor: string;
15
+ locale: string;
16
+ createdOn: string;
17
+ savedOn: string;
18
+ createdBy: import("@webiny/api-page-builder/types").CreatedBy;
19
+ ownedBy: import("@webiny/api-page-builder/types").CreatedBy;
20
+ category: string;
21
+ version: number;
22
+ title: string;
23
+ titleLC: string;
24
+ path: string;
25
+ status: import("@webiny/api-page-builder/types").PageStatus;
26
+ locked: boolean;
27
+ publishedOn: string | null;
28
+ tags: string[];
29
+ snippet: string | null;
30
+ images: {
31
+ general: import("lodash").FieldWithPossiblyUndefined<import("@webiny/api-page-builder/types").PageSettings | undefined, "general.image">;
32
+ };
33
+ };
34
+ export declare const getESLatestPageData: (plugins: PluginsContainer, page: Page) => Record<string, any>;
35
+ export declare const getESPublishedPageData: (plugins: PluginsContainer, page: Page) => Record<string, any>;