@webiny/api-headless-cms-ddb 0.0.0-unstable.615a930a68 → 0.0.0-unstable.61c048f412

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 (177) hide show
  1. package/README.md +6 -20
  2. package/definitions/entry.d.ts +4 -5
  3. package/definitions/entry.js +6 -89
  4. package/definitions/entry.js.map +1 -1
  5. package/definitions/group.d.ts +4 -5
  6. package/definitions/group.js +6 -63
  7. package/definitions/group.js.map +1 -1
  8. package/definitions/model.d.ts +4 -5
  9. package/definitions/model.js +6 -85
  10. package/definitions/model.js.map +1 -1
  11. package/definitions/table.d.ts +4 -6
  12. package/definitions/table.js +7 -28
  13. package/definitions/table.js.map +1 -1
  14. package/definitions/types.d.ts +59 -0
  15. package/definitions/types.js +3 -0
  16. package/definitions/types.js.map +1 -0
  17. package/dynamoDb/index.d.ts +1 -1
  18. package/dynamoDb/index.js +8 -20
  19. package/dynamoDb/index.js.map +1 -1
  20. package/dynamoDb/path/locationFolderId.d.ts +2 -0
  21. package/dynamoDb/path/locationFolderId.js +34 -0
  22. package/dynamoDb/path/locationFolderId.js.map +1 -0
  23. package/dynamoDb/path/plainObject.d.ts +1 -1
  24. package/dynamoDb/path/plainObject.js +6 -20
  25. package/dynamoDb/path/plainObject.js.map +1 -1
  26. package/dynamoDb/storage/longText.d.ts +1 -1
  27. package/dynamoDb/storage/longText.js +19 -34
  28. package/dynamoDb/storage/longText.js.map +1 -1
  29. package/dynamoDb/storage/richText.d.ts +1 -1
  30. package/dynamoDb/storage/richText.js +27 -88
  31. package/dynamoDb/storage/richText.js.map +1 -1
  32. package/dynamoDb/transformValue/datetime.d.ts +1 -1
  33. package/dynamoDb/transformValue/datetime.js +7 -19
  34. package/dynamoDb/transformValue/datetime.js.map +1 -1
  35. package/index.d.ts +2 -2
  36. package/index.js +47 -105
  37. package/index.js.map +1 -1
  38. package/operations/entry/dataLoader/DataLoaderCache.d.ts +15 -0
  39. package/operations/entry/dataLoader/DataLoaderCache.js +34 -0
  40. package/operations/entry/dataLoader/DataLoaderCache.js.map +1 -0
  41. package/operations/entry/dataLoader/constants.d.ts +1 -0
  42. package/operations/entry/dataLoader/constants.js +4 -0
  43. package/operations/entry/dataLoader/constants.js.map +1 -0
  44. package/operations/entry/dataLoader/createBatchScheduleFn.d.ts +8 -0
  45. package/operations/entry/dataLoader/createBatchScheduleFn.js +19 -0
  46. package/operations/entry/dataLoader/createBatchScheduleFn.js.map +1 -0
  47. package/operations/entry/dataLoader/getAllEntryRevisions.d.ts +4 -0
  48. package/operations/entry/dataLoader/getAllEntryRevisions.js +32 -0
  49. package/operations/entry/dataLoader/getAllEntryRevisions.js.map +1 -0
  50. package/operations/entry/dataLoader/getLatestRevisionByEntryId.d.ts +4 -0
  51. package/operations/entry/dataLoader/getLatestRevisionByEntryId.js +46 -0
  52. package/operations/entry/dataLoader/getLatestRevisionByEntryId.js.map +1 -0
  53. package/operations/entry/dataLoader/getPublishedRevisionByEntryId.d.ts +4 -0
  54. package/operations/entry/dataLoader/getPublishedRevisionByEntryId.js +46 -0
  55. package/operations/entry/dataLoader/getPublishedRevisionByEntryId.js.map +1 -0
  56. package/operations/entry/dataLoader/getRevisionById.d.ts +4 -0
  57. package/operations/entry/dataLoader/getRevisionById.js +52 -0
  58. package/operations/entry/dataLoader/getRevisionById.js.map +1 -0
  59. package/operations/entry/dataLoader/index.d.ts +8 -0
  60. package/operations/entry/dataLoader/index.js +19 -0
  61. package/operations/entry/dataLoader/index.js.map +1 -0
  62. package/operations/entry/dataLoader/types.d.ts +5 -0
  63. package/operations/entry/dataLoader/types.js +3 -0
  64. package/operations/entry/dataLoader/types.js.map +1 -0
  65. package/operations/entry/dataLoaders.d.ts +14 -30
  66. package/operations/entry/dataLoaders.js +56 -271
  67. package/operations/entry/dataLoaders.js.map +1 -1
  68. package/operations/entry/filtering/createExpressions.d.ts +26 -0
  69. package/operations/entry/filtering/createExpressions.js +175 -0
  70. package/operations/entry/filtering/createExpressions.js.map +1 -0
  71. package/operations/entry/filtering/createFields.d.ts +7 -9
  72. package/operations/entry/filtering/createFields.js +87 -105
  73. package/operations/entry/filtering/createFields.js.map +1 -1
  74. package/operations/entry/filtering/extractSort.d.ts +8 -4
  75. package/operations/entry/filtering/extractSort.js +60 -31
  76. package/operations/entry/filtering/extractSort.js.map +1 -1
  77. package/operations/entry/filtering/filter.d.ts +6 -7
  78. package/operations/entry/filtering/filter.js +102 -89
  79. package/operations/entry/filtering/filter.js.map +1 -1
  80. package/operations/entry/filtering/fullTextSearch.d.ts +4 -8
  81. package/operations/entry/filtering/fullTextSearch.js +8 -30
  82. package/operations/entry/filtering/fullTextSearch.js.map +1 -1
  83. package/operations/entry/filtering/getValue.js +5 -27
  84. package/operations/entry/filtering/getValue.js.map +1 -1
  85. package/operations/entry/filtering/index.d.ts +2 -2
  86. package/operations/entry/filtering/index.js +3 -20
  87. package/operations/entry/filtering/index.js.map +1 -1
  88. package/operations/entry/filtering/mapPlugins.d.ts +2 -2
  89. package/operations/entry/filtering/mapPlugins.js +4 -18
  90. package/operations/entry/filtering/mapPlugins.js.map +1 -1
  91. package/operations/entry/filtering/plugins/defaultFilterCreate.d.ts +2 -2
  92. package/operations/entry/filtering/plugins/defaultFilterCreate.js +9 -20
  93. package/operations/entry/filtering/plugins/defaultFilterCreate.js.map +1 -1
  94. package/operations/entry/filtering/plugins/index.d.ts +1 -1
  95. package/operations/entry/filtering/plugins/index.js +7 -16
  96. package/operations/entry/filtering/plugins/index.js.map +1 -1
  97. package/operations/entry/filtering/plugins/objectFilterCreate.d.ts +2 -2
  98. package/operations/entry/filtering/plugins/objectFilterCreate.js +16 -39
  99. package/operations/entry/filtering/plugins/objectFilterCreate.js.map +1 -1
  100. package/operations/entry/filtering/plugins/refFilterCreate.d.ts +3 -2
  101. package/operations/entry/filtering/plugins/refFilterCreate.js +21 -36
  102. package/operations/entry/filtering/plugins/refFilterCreate.js.map +1 -1
  103. package/operations/entry/filtering/plugins/searchableJsonFilterCreate.d.ts +2 -0
  104. package/operations/entry/filtering/plugins/searchableJsonFilterCreate.js +57 -0
  105. package/operations/entry/filtering/plugins/searchableJsonFilterCreate.js.map +1 -0
  106. package/operations/entry/filtering/sort.d.ts +8 -5
  107. package/operations/entry/filtering/sort.js +23 -36
  108. package/operations/entry/filtering/sort.js.map +1 -1
  109. package/operations/entry/filtering/systemFields.d.ts +2 -4
  110. package/operations/entry/filtering/systemFields.js +87 -43
  111. package/operations/entry/filtering/systemFields.js.map +1 -1
  112. package/operations/entry/filtering/transform.d.ts +1 -1
  113. package/operations/entry/filtering/transform.js +2 -10
  114. package/operations/entry/filtering/transform.js.map +1 -1
  115. package/operations/entry/filtering/types.d.ts +2 -2
  116. package/operations/entry/filtering/types.js +2 -4
  117. package/operations/entry/filtering/types.js.map +1 -1
  118. package/operations/entry/filtering/values.d.ts +2 -0
  119. package/operations/entry/filtering/values.js +16 -0
  120. package/operations/entry/filtering/values.js.map +1 -0
  121. package/operations/entry/filtering/where.js +5 -15
  122. package/operations/entry/filtering/where.js.map +1 -1
  123. package/operations/entry/index.d.ts +3 -4
  124. package/operations/entry/index.js +751 -414
  125. package/operations/entry/index.js.map +1 -1
  126. package/operations/entry/keys.d.ts +40 -2
  127. package/operations/entry/keys.js +54 -47
  128. package/operations/entry/keys.js.map +1 -1
  129. package/operations/group/index.d.ts +4 -4
  130. package/operations/group/index.js +44 -91
  131. package/operations/group/index.js.map +1 -1
  132. package/operations/model/index.d.ts +3 -3
  133. package/operations/model/index.js +36 -70
  134. package/operations/model/index.js.map +1 -1
  135. package/package.json +22 -29
  136. package/plugins/CmsEntryFieldFilterPathPlugin.d.ts +4 -3
  137. package/plugins/CmsEntryFieldFilterPathPlugin.js +14 -29
  138. package/plugins/CmsEntryFieldFilterPathPlugin.js.map +1 -1
  139. package/plugins/CmsEntryFieldFilterPlugin.d.ts +10 -10
  140. package/plugins/CmsEntryFieldFilterPlugin.js +9 -19
  141. package/plugins/CmsEntryFieldFilterPlugin.js.map +1 -1
  142. package/plugins/CmsEntryFieldSortingPlugin.d.ts +42 -0
  143. package/plugins/CmsEntryFieldSortingPlugin.js +19 -0
  144. package/plugins/CmsEntryFieldSortingPlugin.js.map +1 -0
  145. package/plugins/CmsFieldFilterValueTransformPlugin.d.ts +11 -0
  146. package/plugins/CmsFieldFilterValueTransformPlugin.js +16 -0
  147. package/plugins/CmsFieldFilterValueTransformPlugin.js.map +1 -0
  148. package/plugins/index.d.ts +4 -1
  149. package/plugins/index.js +5 -17
  150. package/plugins/index.js.map +1 -1
  151. package/types.d.ts +24 -19
  152. package/types.js +5 -13
  153. package/types.js.map +1 -1
  154. package/definitions/settings.d.ts +0 -9
  155. package/definitions/settings.js +0 -58
  156. package/definitions/settings.js.map +0 -1
  157. package/definitions/system.d.ts +0 -9
  158. package/definitions/system.js +0 -46
  159. package/definitions/system.js.map +0 -1
  160. package/dynamoDb/storage/date.d.ts +0 -2
  161. package/dynamoDb/storage/date.js +0 -109
  162. package/dynamoDb/storage/date.js.map +0 -1
  163. package/operations/entry/filtering/createFilters.d.ts +0 -20
  164. package/operations/entry/filtering/createFilters.js +0 -155
  165. package/operations/entry/filtering/createFilters.js.map +0 -1
  166. package/operations/entry/systemFields.d.ts +0 -2
  167. package/operations/entry/systemFields.js +0 -74
  168. package/operations/entry/systemFields.js.map +0 -1
  169. package/operations/entry/utils.d.ts +0 -36
  170. package/operations/entry/utils.js +0 -684
  171. package/operations/entry/utils.js.map +0 -1
  172. package/operations/settings/index.d.ts +0 -7
  173. package/operations/settings/index.js +0 -135
  174. package/operations/settings/index.js.map +0 -1
  175. package/operations/system/index.d.ts +0 -7
  176. package/operations/system/index.js +0 -99
  177. package/operations/system/index.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"names":["createGetAllEntryRevisions","createGetLatestRevisionByEntryId","createGetPublishedRevisionByEntryId","createGetRevisionById","dataLoaders","getAllEntryRevisions","getLatestRevisionByEntryId","getPublishedRevisionByEntryId","getRevisionById","getDataLoaderFactory","name","Error"],"sources":["index.ts"],"sourcesContent":["import type DataLoader from \"dataloader\";\nimport type { IDataLoaderParams } from \"./types.js\";\nimport { createGetAllEntryRevisions } from \"./getAllEntryRevisions.js\";\nimport { createGetLatestRevisionByEntryId } from \"./getLatestRevisionByEntryId.js\";\nimport { createGetPublishedRevisionByEntryId } from \"./getPublishedRevisionByEntryId.js\";\nimport { createGetRevisionById } from \"./getRevisionById.js\";\n\nexport * from \"./DataLoaderCache.js\";\n\ninterface Callable {\n (params: IDataLoaderParams): DataLoader<any, any>;\n}\n\nconst dataLoaders: Record<string, Callable> = {\n getAllEntryRevisions: createGetAllEntryRevisions,\n getLatestRevisionByEntryId: createGetLatestRevisionByEntryId,\n getPublishedRevisionByEntryId: createGetPublishedRevisionByEntryId,\n getRevisionById: createGetRevisionById\n};\n\nexport type DataLoaders =\n | \"getAllEntryRevisions\"\n | \"getRevisionById\"\n | \"getPublishedRevisionByEntryId\"\n | \"getLatestRevisionByEntryId\";\n\nexport const getDataLoaderFactory = (name: string) => {\n if (!dataLoaders[name]) {\n throw new Error(`Missing data loader \"${name}\".`);\n }\n return dataLoaders[name];\n};\n"],"mappings":"AAEA,SAASA,0BAA0B;AACnC,SAASC,gCAAgC;AACzC,SAASC,mCAAmC;AAC5C,SAASC,qBAAqB;AAE9B;AAMA,MAAMC,WAAqC,GAAG;EAC1CC,oBAAoB,EAAEL,0BAA0B;EAChDM,0BAA0B,EAAEL,gCAAgC;EAC5DM,6BAA6B,EAAEL,mCAAmC;EAClEM,eAAe,EAAEL;AACrB,CAAC;AAQD,OAAO,MAAMM,oBAAoB,GAAIC,IAAY,IAAK;EAClD,IAAI,CAACN,WAAW,CAACM,IAAI,CAAC,EAAE;IACpB,MAAM,IAAIC,KAAK,CAAC,wBAAwBD,IAAI,IAAI,CAAC;EACrD;EACA,OAAON,WAAW,CAACM,IAAI,CAAC;AAC5B,CAAC","ignoreList":[]}
@@ -0,0 +1,5 @@
1
+ import type { IEntryEntity } from "../../../definitions/types.js";
2
+ export interface IDataLoaderParams {
3
+ entity: IEntryEntity;
4
+ tenant: string;
5
+ }
@@ -0,0 +1,3 @@
1
+ export {};
2
+
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["import type { IEntryEntity } from \"~/definitions/types.js\";\n\nexport interface IDataLoaderParams {\n entity: IEntryEntity;\n tenant: string;\n}\n"],"mappings":"","ignoreList":[]}
@@ -1,42 +1,26 @@
1
- import { CmsStorageEntry, CmsModel } from "@webiny/api-headless-cms/types";
2
- import { Entity } from "dynamodb-toolbox";
3
- export interface GetAllEntryRevisionsParams {
1
+ import type { CmsEntryValues, CmsModel, CmsStorageEntry } from "@webiny/api-headless-cms/types/index.js";
2
+ import type { DataLoadersHandlerInterfaceClearAllParams, IDataLoadersHandler, IEntryEntity } from "../../types.js";
3
+ interface DataLoaderParams {
4
+ model: Pick<CmsModel, "tenant" | "modelId">;
4
5
  ids: readonly string[];
5
- model: CmsModel;
6
6
  }
7
- export interface GetRevisionByIdParams {
8
- ids: readonly string[];
9
- model: CmsModel;
10
- }
11
- export interface GetPublishedRevisionByEntryIdParams {
12
- ids: readonly string[];
13
- model: CmsModel;
14
- }
15
- export interface GetLatestRevisionByEntryIdParams {
16
- ids: readonly string[];
17
- model: CmsModel;
18
- }
19
- interface ClearLoaderParams {
20
- model: CmsModel;
21
- entry?: CmsStorageEntry;
22
- }
23
- interface DataLoadersHandlerParams {
24
- entity: Entity<any>;
7
+ interface IDataLoadersHandlerParams {
8
+ entity: IEntryEntity;
25
9
  }
26
- export declare class DataLoadersHandler {
27
- private readonly loaders;
10
+ export declare class DataLoadersHandler implements IDataLoadersHandler {
28
11
  private readonly entity;
29
- constructor(params: DataLoadersHandlerParams);
30
- getAllEntryRevisions(params: GetAllEntryRevisionsParams): Promise<CmsStorageEntry[]>;
31
- getRevisionById(params: GetRevisionByIdParams): Promise<CmsStorageEntry[]>;
32
- getPublishedRevisionByEntryId(params: GetPublishedRevisionByEntryIdParams): Promise<CmsStorageEntry[]>;
33
- getLatestRevisionByEntryId(params: GetLatestRevisionByEntryIdParams): Promise<CmsStorageEntry[]>;
12
+ private readonly cache;
13
+ constructor(params: IDataLoadersHandlerParams);
14
+ getAllEntryRevisions<T extends CmsEntryValues = CmsEntryValues>(params: DataLoaderParams): Promise<CmsStorageEntry<T>[]>;
15
+ getRevisionById<T extends CmsEntryValues = CmsEntryValues>(params: DataLoaderParams): Promise<CmsStorageEntry<T>[]>;
16
+ getPublishedRevisionByEntryId<T extends CmsEntryValues = CmsEntryValues>(params: DataLoaderParams): Promise<CmsStorageEntry<T>[]>;
17
+ getLatestRevisionByEntryId<T extends CmsEntryValues = CmsEntryValues>(params: DataLoaderParams): Promise<CmsStorageEntry<T>[]>;
34
18
  /**
35
19
  * TODO @ts-refactor
36
20
  * Maybe pass on the generics to DataLoader definition?
37
21
  */
38
22
  private getLoader;
39
23
  private loadMany;
40
- clearAll(params: Omit<ClearLoaderParams, "entry">): void;
24
+ clearAll(params?: DataLoadersHandlerInterfaceClearAllParams): void;
41
25
  }
42
26
  export {};
@@ -1,321 +1,106 @@
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.DataLoadersHandler = void 0;
9
-
10
- var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
11
-
12
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
13
-
14
- var _dataloader = _interopRequireDefault(require("dataloader"));
15
-
16
- var _error = _interopRequireDefault(require("@webiny/error"));
17
-
18
- var _query = require("@webiny/db-dynamodb/utils/query");
19
-
20
- var _keys = require("./keys");
21
-
22
- var _cleanup = require("@webiny/db-dynamodb/utils/cleanup");
23
-
24
- var _utils = require("@webiny/utils");
25
-
26
- var _batchRead = require("@webiny/db-dynamodb/utils/batchRead");
27
-
28
- const getAllEntryRevisions = params => {
29
- const {
30
- entity,
31
- model
32
- } = params;
33
- const {
34
- tenant,
35
- locale
36
- } = model;
37
- return new _dataloader.default(async ids => {
38
- const results = {};
39
-
40
- for (const id of ids) {
41
- const queryAllParams = {
42
- entity,
43
- partitionKey: (0, _keys.createPartitionKey)({
44
- tenant,
45
- locale,
46
- id
47
- }),
48
- options: {
49
- beginsWith: "REV#"
50
- }
51
- };
52
- const items = await (0, _query.queryAll)(queryAllParams);
53
- results[id] = (0, _cleanup.cleanupItems)(entity, items);
54
- }
55
-
56
- return ids.map(id => {
57
- return results[id] || [];
58
- });
59
- });
60
- };
61
-
62
- const getRevisionById = params => {
63
- const {
64
- entity,
65
- model
66
- } = params;
67
- const {
68
- locale,
69
- tenant
70
- } = model;
71
- return new _dataloader.default(async ids => {
72
- const queries = ids.reduce((collection, id) => {
73
- const partitionKey = (0, _keys.createPartitionKey)({
74
- tenant,
75
- locale,
76
- id
77
- });
78
- const {
79
- version
80
- } = (0, _utils.parseIdentifier)(id);
81
-
82
- if (version === null) {
83
- return collection;
84
- }
85
-
86
- const sortKey = (0, _keys.createRevisionSortKey)({
87
- version
88
- });
89
- const keys = `${partitionKey}__${sortKey}`;
90
-
91
- if (collection[keys]) {
92
- return collection;
93
- }
94
-
95
- collection[keys] = entity.getBatch({
96
- PK: partitionKey,
97
- SK: sortKey
98
- });
99
- return collection;
100
- /**
101
- * We cast as any because there is no return type defined.
102
- */
103
- }, {});
104
- const records = await (0, _batchRead.batchReadAll)({
105
- table: entity.table,
106
- items: Object.values(queries)
107
- });
108
- const items = (0, _cleanup.cleanupItems)(entity, records);
109
- return ids.map(id => {
110
- return items.filter(item => {
111
- return id === item.id;
112
- });
113
- });
114
- });
115
- };
116
-
117
- const getPublishedRevisionByEntryId = params => {
118
- const {
119
- entity,
120
- model
121
- } = params;
122
- const {
123
- locale,
124
- tenant
125
- } = model;
126
- const publishedKey = (0, _keys.createPublishedSortKey)();
127
- return new _dataloader.default(async ids => {
128
- const queries = ids.reduce((collection, id) => {
129
- const partitionKey = (0, _keys.createPartitionKey)({
130
- tenant,
131
- locale,
132
- id
133
- });
134
-
135
- if (collection[partitionKey]) {
136
- return collection;
137
- }
138
-
139
- collection[partitionKey] = entity.getBatch({
140
- PK: partitionKey,
141
- SK: publishedKey
142
- });
143
- return collection;
144
- /**
145
- * We cast as any because there is no return type defined.
146
- */
147
- }, {});
148
- const records = await (0, _batchRead.batchReadAll)({
149
- table: entity.table,
150
- items: Object.values(queries)
151
- });
152
- const items = (0, _cleanup.cleanupItems)(entity, records);
153
- return ids.map(id => {
154
- const {
155
- id: entryId
156
- } = (0, _utils.parseIdentifier)(id);
157
- return items.filter(item => {
158
- return entryId === item.entryId;
159
- });
160
- });
161
- });
162
- };
163
-
164
- const getLatestRevisionByEntryId = params => {
165
- const {
166
- entity,
167
- model
168
- } = params;
169
- const {
170
- locale,
171
- tenant
172
- } = model;
173
- const latestKey = (0, _keys.createLatestSortKey)();
174
- return new _dataloader.default(async ids => {
175
- const queries = ids.reduce((collection, id) => {
176
- const partitionKey = (0, _keys.createPartitionKey)({
177
- tenant,
178
- locale,
179
- id
180
- });
181
-
182
- if (collection[partitionKey]) {
183
- return collection;
184
- }
185
-
186
- collection[partitionKey] = entity.getBatch({
187
- PK: partitionKey,
188
- SK: latestKey
189
- });
190
- return collection;
191
- /**
192
- * We cast as any because there is no return type defined.
193
- */
194
- }, {});
195
- const records = await (0, _batchRead.batchReadAll)({
196
- table: entity.table,
197
- items: Object.values(queries)
198
- });
199
- const items = (0, _cleanup.cleanupItems)(entity, records);
200
- return ids.map(id => {
201
- const {
202
- id: entryId
203
- } = (0, _utils.parseIdentifier)(id);
204
- return items.filter(item => {
205
- return entryId === item.entryId;
206
- });
207
- });
208
- });
209
- };
210
-
211
- const dataLoaders = {
212
- getAllEntryRevisions,
213
- getRevisionById,
214
- getPublishedRevisionByEntryId,
215
- getLatestRevisionByEntryId
216
- };
217
- const loaderNames = Object.keys(dataLoaders);
218
-
219
- class DataLoadersHandler {
1
+ import WebinyError from "@webiny/error";
2
+ import { DataLoaderCache } from "./dataLoader/DataLoaderCache.js";
3
+ import { getDataLoaderFactory } from "./dataLoader/index.js";
4
+ import { parseIdentifier } from "@webiny/utils";
5
+ export class DataLoadersHandler {
6
+ cache = new DataLoaderCache();
220
7
  constructor(params) {
221
- (0, _defineProperty2.default)(this, "loaders", new Map());
222
- (0, _defineProperty2.default)(this, "entity", void 0);
223
8
  this.entity = params.entity;
224
9
  }
225
-
226
10
  async getAllEntryRevisions(params) {
227
- return await this.loadMany("getAllEntryRevisions", params, params.ids);
11
+ const ids = params.ids.map(id => {
12
+ const {
13
+ id: entryId
14
+ } = parseIdentifier(id);
15
+ return entryId;
16
+ });
17
+ return await this.loadMany("getAllEntryRevisions", params, ids);
228
18
  }
229
-
230
19
  async getRevisionById(params) {
231
20
  return await this.loadMany("getRevisionById", params, params.ids);
232
21
  }
233
-
234
22
  async getPublishedRevisionByEntryId(params) {
235
- return await this.loadMany("getPublishedRevisionByEntryId", params, params.ids);
23
+ const ids = params.ids.map(id => {
24
+ const {
25
+ id: entryId
26
+ } = parseIdentifier(id);
27
+ return entryId;
28
+ });
29
+ return await this.loadMany("getPublishedRevisionByEntryId", params, ids);
236
30
  }
237
-
238
31
  async getLatestRevisionByEntryId(params) {
239
- return await this.loadMany("getLatestRevisionByEntryId", params, params.ids);
32
+ const ids = params.ids.map(id => {
33
+ const {
34
+ id: entryId
35
+ } = parseIdentifier(id);
36
+ return entryId;
37
+ });
38
+ return await this.loadMany("getLatestRevisionByEntryId", params, ids);
240
39
  }
40
+
241
41
  /**
242
42
  * TODO @ts-refactor
243
43
  * Maybe pass on the generics to DataLoader definition?
244
44
  */
245
-
246
-
247
45
  getLoader(name, params) {
248
- if (!dataLoaders[name]) {
249
- throw new _error.default("Unknown data loader.", "UNKNOWN_DATA_LOADER", {
250
- name
251
- });
252
- }
253
-
254
46
  const {
255
47
  model
256
48
  } = params;
257
- const {
258
- tenant,
259
- locale
260
- } = model;
261
- const loaderKey = `${name}-${tenant}-${locale}-${model.modelId}`;
262
-
263
- if (!this.loaders.has(loaderKey)) {
264
- this.loaders.set(loaderKey, dataLoaders[name]((0, _objectSpread2.default)((0, _objectSpread2.default)({}, params), {}, {
265
- entity: this.entity
266
- })));
49
+ const cacheParams = {
50
+ tenant: model.tenant,
51
+ name
52
+ };
53
+ let loader = this.cache.getDataLoader(cacheParams);
54
+ if (loader) {
55
+ return loader;
267
56
  }
268
-
269
- return this.loaders.get(loaderKey);
57
+ const factory = getDataLoaderFactory(name);
58
+ loader = factory({
59
+ entity: this.entity,
60
+ tenant: model.tenant
61
+ });
62
+ this.cache.setDataLoader(cacheParams, loader);
63
+ return loader;
270
64
  }
271
-
272
65
  async loadMany(loader, params, ids) {
273
- let results;
274
-
66
+ let results = [];
275
67
  try {
276
68
  results = await this.getLoader(loader, params).loadMany(ids);
277
-
278
69
  if (Array.isArray(results) === true) {
279
70
  return results.reduce((acc, res) => {
280
71
  if (Array.isArray(res) === false) {
281
72
  if (res && res.message) {
282
- throw new _error.default(res.message, res.code, (0, _objectSpread2.default)((0, _objectSpread2.default)({}, res), {}, {
73
+ throw new WebinyError(res.message, res.code, {
74
+ ...res,
283
75
  data: JSON.stringify(res.data || {})
284
- }));
76
+ });
285
77
  }
286
-
287
- throw new _error.default("Result from the data loader must be an array of arrays which contain requested items.", "DATA_LOADER_RESULTS_ERROR", (0, _objectSpread2.default)((0, _objectSpread2.default)({}, params), {}, {
78
+ throw new WebinyError("Result from the data loader must be an array of arrays which contain requested items.", "DATA_LOADER_RESULTS_ERROR", {
79
+ ...params,
288
80
  loader
289
- }));
81
+ });
290
82
  }
291
-
292
83
  acc.push(...res);
293
84
  return acc;
294
85
  }, []);
295
86
  }
296
87
  } catch (ex) {
297
- throw new _error.default(ex.message || "Data loader error.", ex.code || "DATA_LOADER_ERROR", (0, _objectSpread2.default)((0, _objectSpread2.default)({
298
- error: ex
299
- }, params), {}, {
88
+ throw new WebinyError(ex.message || "Data loader error.", ex.code || "DATA_LOADER_ERROR", {
89
+ error: ex,
90
+ ...params,
300
91
  loader,
301
92
  ids
302
- }));
93
+ });
303
94
  }
304
-
305
- throw new _error.default(`Data loader did not return array of items or empty array.`, "INVALID_DATA_LOADER_RESULT", {
95
+ throw new WebinyError(`Data loader did not return array of items or empty array.`, "INVALID_DATA_LOADER_RESULT", {
306
96
  loader,
307
97
  ids,
308
98
  results
309
99
  });
310
100
  }
311
-
312
101
  clearAll(params) {
313
- for (const name of loaderNames) {
314
- const loader = this.getLoader(name, params);
315
- loader.clearAll();
316
- }
102
+ this.cache.clearAll(params?.model);
317
103
  }
318
-
319
104
  }
320
105
 
321
- exports.DataLoadersHandler = DataLoadersHandler;
106
+ //# sourceMappingURL=dataLoaders.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["getAllEntryRevisions","params","entity","model","tenant","locale","DataLoader","ids","results","id","queryAllParams","partitionKey","createPartitionKey","options","beginsWith","items","queryAll","cleanupItems","map","getRevisionById","queries","reduce","collection","version","parseIdentifier","sortKey","createRevisionSortKey","keys","getBatch","PK","SK","records","batchReadAll","table","Object","values","filter","item","getPublishedRevisionByEntryId","publishedKey","createPublishedSortKey","entryId","getLatestRevisionByEntryId","latestKey","createLatestSortKey","dataLoaders","loaderNames","DataLoadersHandler","constructor","Map","loadMany","getLoader","name","WebinyError","loaderKey","modelId","loaders","has","set","get","loader","Array","isArray","acc","res","message","code","data","JSON","stringify","push","ex","error","clearAll"],"sources":["dataLoaders.ts"],"sourcesContent":["import DataLoader from \"dataloader\";\nimport { CmsStorageEntry, CmsModel } from \"@webiny/api-headless-cms/types\";\nimport WebinyError from \"@webiny/error\";\nimport { Entity } from \"dynamodb-toolbox\";\nimport { queryAll, QueryAllParams } from \"@webiny/db-dynamodb/utils/query\";\nimport {\n createLatestSortKey,\n createPartitionKey,\n createPublishedSortKey,\n createRevisionSortKey\n} from \"./keys\";\nimport { cleanupItems } from \"@webiny/db-dynamodb/utils/cleanup\";\nimport { parseIdentifier } from \"@webiny/utils\";\nimport { batchReadAll } from \"@webiny/db-dynamodb/utils/batchRead\";\n\nconst getAllEntryRevisions = (params: LoaderParams) => {\n const { entity, model } = params;\n const { tenant, locale } = model;\n return new DataLoader<string, CmsStorageEntry[]>(async (ids: readonly string[]) => {\n const results: Record<string, CmsStorageEntry[]> = {};\n for (const id of ids) {\n const queryAllParams: QueryAllParams = {\n entity,\n partitionKey: createPartitionKey({\n tenant,\n locale,\n id\n }),\n options: {\n beginsWith: \"REV#\"\n }\n };\n const items = await queryAll<CmsStorageEntry>(queryAllParams);\n results[id] = cleanupItems(entity, items);\n }\n\n return ids.map(id => {\n return results[id] || [];\n });\n });\n};\n\nconst getRevisionById = (params: LoaderParams) => {\n const { entity, model } = params;\n const { locale, tenant } = model;\n\n return new DataLoader<string, CmsStorageEntry[]>(async (ids: readonly string[]) => {\n const queries = ids.reduce((collection, id) => {\n const partitionKey = createPartitionKey({\n tenant,\n locale,\n id\n });\n const { version } = parseIdentifier(id);\n if (version === null) {\n return collection;\n }\n const sortKey = createRevisionSortKey({\n version\n });\n const keys = `${partitionKey}__${sortKey}`;\n if (collection[keys]) {\n return collection;\n }\n\n collection[keys] = entity.getBatch({\n PK: partitionKey,\n SK: sortKey\n });\n\n return collection;\n /**\n * We cast as any because there is no return type defined.\n */\n }, {} as Record<string, any>);\n\n const records = await batchReadAll<CmsStorageEntry>({\n table: entity.table,\n items: Object.values(queries)\n });\n const items = cleanupItems(entity, records);\n\n return ids.map(id => {\n return items.filter(item => {\n return id === item.id;\n });\n });\n });\n};\n\nconst getPublishedRevisionByEntryId = (params: LoaderParams) => {\n const { entity, model } = params;\n const { locale, tenant } = model;\n\n const publishedKey = createPublishedSortKey();\n\n return new DataLoader<string, CmsStorageEntry[]>(async (ids: readonly string[]) => {\n const queries = ids.reduce((collection, id) => {\n const partitionKey = createPartitionKey({\n tenant,\n locale,\n id\n });\n if (collection[partitionKey]) {\n return collection;\n }\n collection[partitionKey] = entity.getBatch({\n PK: partitionKey,\n SK: publishedKey\n });\n return collection;\n /**\n * We cast as any because there is no return type defined.\n */\n }, {} as Record<string, any>);\n\n const records = await batchReadAll<CmsStorageEntry>({\n table: entity.table,\n items: Object.values(queries)\n });\n const items = cleanupItems(entity, records);\n\n return ids.map(id => {\n const { id: entryId } = parseIdentifier(id);\n return items.filter(item => {\n return entryId === item.entryId;\n });\n });\n });\n};\n\nconst getLatestRevisionByEntryId = (params: LoaderParams) => {\n const { entity, model } = params;\n const { locale, tenant } = model;\n\n const latestKey = createLatestSortKey();\n\n return new DataLoader<string, CmsStorageEntry[]>(async (ids: readonly string[]) => {\n const queries = ids.reduce((collection, id) => {\n const partitionKey = createPartitionKey({\n tenant,\n locale,\n id\n });\n if (collection[partitionKey]) {\n return collection;\n }\n collection[partitionKey] = entity.getBatch({\n PK: partitionKey,\n SK: latestKey\n });\n return collection;\n /**\n * We cast as any because there is no return type defined.\n */\n }, {} as Record<string, any>);\n\n const records = await batchReadAll<CmsStorageEntry>({\n table: entity.table,\n items: Object.values(queries)\n });\n const items = cleanupItems(entity, records);\n\n return ids.map(id => {\n const { id: entryId } = parseIdentifier(id);\n return items.filter(item => {\n return entryId === item.entryId;\n });\n });\n });\n};\n\nconst dataLoaders: Record<Loaders, any> = {\n getAllEntryRevisions,\n getRevisionById,\n getPublishedRevisionByEntryId,\n getLatestRevisionByEntryId\n};\n\nexport interface GetAllEntryRevisionsParams {\n ids: readonly string[];\n model: CmsModel;\n}\n\nexport interface GetRevisionByIdParams {\n ids: readonly string[];\n model: CmsModel;\n}\n\nexport interface GetPublishedRevisionByEntryIdParams {\n ids: readonly string[];\n model: CmsModel;\n}\n\nexport interface GetLatestRevisionByEntryIdParams {\n ids: readonly string[];\n model: CmsModel;\n}\n\ninterface LoaderParams {\n entity: Entity<any>;\n model: CmsModel;\n}\n\ninterface GetLoaderParams {\n model: CmsModel;\n}\n\ninterface ClearLoaderParams {\n model: CmsModel;\n entry?: CmsStorageEntry;\n}\n\ntype Loaders =\n | \"getAllEntryRevisions\"\n | \"getRevisionById\"\n | \"getPublishedRevisionByEntryId\"\n | \"getLatestRevisionByEntryId\";\n\nconst loaderNames = Object.keys(dataLoaders) as Loaders[];\n\ninterface DataLoadersHandlerParams {\n entity: Entity<any>;\n}\nexport class DataLoadersHandler {\n private readonly loaders: Map<string, DataLoader<any, any>> = new Map();\n private readonly entity: Entity<any>;\n\n public constructor(params: DataLoadersHandlerParams) {\n this.entity = params.entity;\n }\n\n public async getAllEntryRevisions(\n params: GetAllEntryRevisionsParams\n ): Promise<CmsStorageEntry[]> {\n return await this.loadMany(\"getAllEntryRevisions\", params, params.ids);\n }\n\n public async getRevisionById(params: GetRevisionByIdParams): Promise<CmsStorageEntry[]> {\n return await this.loadMany(\"getRevisionById\", params, params.ids);\n }\n\n public async getPublishedRevisionByEntryId(\n params: GetPublishedRevisionByEntryIdParams\n ): Promise<CmsStorageEntry[]> {\n return await this.loadMany(\"getPublishedRevisionByEntryId\", params, params.ids);\n }\n\n public async getLatestRevisionByEntryId(\n params: GetLatestRevisionByEntryIdParams\n ): Promise<CmsStorageEntry[]> {\n return await this.loadMany(\"getLatestRevisionByEntryId\", params, params.ids);\n }\n\n /**\n * TODO @ts-refactor\n * Maybe pass on the generics to DataLoader definition?\n */\n private getLoader(name: Loaders, params: GetLoaderParams): DataLoader<any, any> {\n if (!dataLoaders[name]) {\n throw new WebinyError(\"Unknown data loader.\", \"UNKNOWN_DATA_LOADER\", {\n name\n });\n }\n const { model } = params;\n const { tenant, locale } = model;\n const loaderKey = `${name}-${tenant}-${locale}-${model.modelId}`;\n if (!this.loaders.has(loaderKey)) {\n this.loaders.set(\n loaderKey,\n dataLoaders[name]({\n ...params,\n entity: this.entity\n })\n );\n }\n return this.loaders.get(loaderKey) as DataLoader<any, any>;\n }\n\n private async loadMany(\n loader: Loaders,\n params: GetLoaderParams,\n ids: readonly string[]\n ): Promise<CmsStorageEntry[]> {\n let results;\n try {\n results = await this.getLoader(loader, params).loadMany(ids);\n if (Array.isArray(results) === true) {\n return results.reduce((acc, res) => {\n if (Array.isArray(res) === false) {\n if (res && res.message) {\n throw new WebinyError(res.message, res.code, {\n ...res,\n data: JSON.stringify(res.data || {})\n });\n }\n throw new WebinyError(\n \"Result from the data loader must be an array of arrays which contain requested items.\",\n \"DATA_LOADER_RESULTS_ERROR\",\n {\n ...params,\n loader\n }\n );\n }\n acc.push(...res);\n return acc;\n }, []);\n }\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Data loader error.\",\n ex.code || \"DATA_LOADER_ERROR\",\n {\n error: ex,\n ...params,\n loader,\n ids\n }\n );\n }\n throw new WebinyError(\n `Data loader did not return array of items or empty array.`,\n \"INVALID_DATA_LOADER_RESULT\",\n {\n loader,\n ids,\n results\n }\n );\n }\n\n public clearAll(params: Omit<ClearLoaderParams, \"entry\">): void {\n for (const name of loaderNames) {\n const loader = this.getLoader(name, params);\n loader.clearAll();\n }\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["WebinyError","DataLoaderCache","getDataLoaderFactory","parseIdentifier","DataLoadersHandler","cache","constructor","params","entity","getAllEntryRevisions","ids","map","id","entryId","loadMany","getRevisionById","getPublishedRevisionByEntryId","getLatestRevisionByEntryId","getLoader","name","model","cacheParams","tenant","loader","getDataLoader","factory","setDataLoader","results","Array","isArray","reduce","acc","res","message","code","data","JSON","stringify","push","ex","error","clearAll"],"sources":["dataLoaders.ts"],"sourcesContent":["import type DataLoader from \"dataloader\";\nimport WebinyError from \"@webiny/error\";\nimport type {\n CmsEntryValues,\n CmsModel,\n CmsStorageEntry\n} from \"@webiny/api-headless-cms/types/index.js\";\nimport type { CacheKeyParams } from \"~/operations/entry/dataLoader/DataLoaderCache.js\";\nimport { DataLoaderCache } from \"~/operations/entry/dataLoader/DataLoaderCache.js\";\nimport type { DataLoaders } from \"~/operations/entry/dataLoader/index.js\";\nimport { getDataLoaderFactory } from \"~/operations/entry/dataLoader/index.js\";\nimport { parseIdentifier } from \"@webiny/utils\";\nimport type {\n DataLoadersHandlerInterfaceClearAllParams,\n IDataLoadersHandler,\n IEntryEntity\n} from \"~/types.js\";\n\ninterface DataLoaderParams {\n model: Pick<CmsModel, \"tenant\" | \"modelId\">;\n ids: readonly string[];\n}\n\ninterface GetLoaderParams {\n model: Pick<CmsModel, \"tenant\" | \"modelId\">;\n}\n\ninterface IDataLoadersHandlerParams {\n entity: IEntryEntity;\n}\n\nexport class DataLoadersHandler implements IDataLoadersHandler {\n private readonly entity;\n private readonly cache = new DataLoaderCache();\n\n public constructor(params: IDataLoadersHandlerParams) {\n this.entity = params.entity;\n }\n\n public async getAllEntryRevisions<T extends CmsEntryValues = CmsEntryValues>(\n params: DataLoaderParams\n ): Promise<CmsStorageEntry<T>[]> {\n const ids = params.ids.map(id => {\n const { id: entryId } = parseIdentifier(id);\n return entryId;\n });\n return await this.loadMany<T>(\"getAllEntryRevisions\", params, ids);\n }\n\n public async getRevisionById<T extends CmsEntryValues = CmsEntryValues>(\n params: DataLoaderParams\n ): Promise<CmsStorageEntry<T>[]> {\n return await this.loadMany<T>(\"getRevisionById\", params, params.ids);\n }\n\n public async getPublishedRevisionByEntryId<T extends CmsEntryValues = CmsEntryValues>(\n params: DataLoaderParams\n ): Promise<CmsStorageEntry<T>[]> {\n const ids = params.ids.map(id => {\n const { id: entryId } = parseIdentifier(id);\n return entryId;\n });\n return await this.loadMany<T>(\"getPublishedRevisionByEntryId\", params, ids);\n }\n\n public async getLatestRevisionByEntryId<T extends CmsEntryValues = CmsEntryValues>(\n params: DataLoaderParams\n ): Promise<CmsStorageEntry<T>[]> {\n const ids = params.ids.map(id => {\n const { id: entryId } = parseIdentifier(id);\n return entryId;\n });\n return await this.loadMany<T>(\"getLatestRevisionByEntryId\", params, ids);\n }\n\n /**\n * TODO @ts-refactor\n * Maybe pass on the generics to DataLoader definition?\n */\n private getLoader(name: DataLoaders, params: GetLoaderParams): DataLoader<any, any> {\n const { model } = params;\n const cacheParams: CacheKeyParams = {\n tenant: model.tenant,\n name\n };\n let loader = this.cache.getDataLoader(cacheParams);\n if (loader) {\n return loader;\n }\n const factory = getDataLoaderFactory(name);\n loader = factory({\n entity: this.entity,\n tenant: model.tenant\n });\n this.cache.setDataLoader(cacheParams, loader);\n return loader;\n }\n\n private async loadMany<T extends CmsEntryValues = CmsEntryValues>(\n loader: DataLoaders,\n params: GetLoaderParams,\n ids: readonly string[]\n ): Promise<CmsStorageEntry<T>[]> {\n let results: any[] = [];\n try {\n results = await this.getLoader(loader, params).loadMany(ids);\n if (Array.isArray(results) === true) {\n return results.reduce((acc, res) => {\n if (Array.isArray(res) === false) {\n if (res && res.message) {\n throw new WebinyError(res.message, res.code, {\n ...res,\n data: JSON.stringify(res.data || {})\n });\n }\n throw new WebinyError(\n \"Result from the data loader must be an array of arrays which contain requested items.\",\n \"DATA_LOADER_RESULTS_ERROR\",\n {\n ...params,\n loader\n }\n );\n }\n acc.push(...res);\n return acc;\n }, []);\n }\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Data loader error.\",\n ex.code || \"DATA_LOADER_ERROR\",\n {\n error: ex,\n ...params,\n loader,\n ids\n }\n );\n }\n throw new WebinyError(\n `Data loader did not return array of items or empty array.`,\n \"INVALID_DATA_LOADER_RESULT\",\n {\n loader,\n ids,\n results\n }\n );\n }\n\n public clearAll(params?: DataLoadersHandlerInterfaceClearAllParams): void {\n this.cache.clearAll(params?.model);\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,26 @@
1
+ import type { CmsEntryListWhere } from "@webiny/api-headless-cms/types/index.js";
2
+ import { ValueFilterPlugin } from "@webiny/db-dynamodb/plugins/definitions/ValueFilterPlugin.js";
3
+ import type { PluginsContainer } from "@webiny/plugins";
4
+ import type { Field } from "./types.js";
5
+ interface Params {
6
+ plugins: PluginsContainer;
7
+ where: Partial<CmsEntryListWhere>;
8
+ fields: Record<string, Field>;
9
+ }
10
+ export type ExpressionCondition = "AND" | "OR";
11
+ export interface Expression {
12
+ expressions: Expression[];
13
+ filters: Filter[];
14
+ condition: ExpressionCondition;
15
+ }
16
+ export interface Filter {
17
+ field: Field;
18
+ path: string;
19
+ fieldPathId: string;
20
+ plugin: ValueFilterPlugin;
21
+ negate: boolean;
22
+ compareValue: any;
23
+ transformValue: <I = any, O = any>(value: I) => O;
24
+ }
25
+ export declare const createExpressions: (params: Params) => Expression;
26
+ export {};