@webiny/api-headless-cms-ddb 0.0.0-unstable.611c5af35e → 0.0.0-unstable.615a930a68
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/definitions/entry.js +5 -0
- package/definitions/entry.js.map +1 -1
- package/definitions/group.js +5 -0
- package/definitions/group.js.map +1 -1
- package/definitions/model.js +5 -0
- package/definitions/model.js.map +1 -1
- package/definitions/settings.js +5 -0
- package/definitions/settings.js.map +1 -1
- package/definitions/system.js +5 -0
- package/definitions/system.js.map +1 -1
- package/definitions/table.js +3 -0
- package/definitions/table.js.map +1 -1
- package/dynamoDb/index.js +7 -0
- package/dynamoDb/index.js.map +1 -1
- package/dynamoDb/path/plainObject.js +8 -1
- package/dynamoDb/path/plainObject.js.map +1 -1
- package/dynamoDb/storage/date.js +29 -4
- package/dynamoDb/storage/date.js.map +1 -1
- package/dynamoDb/storage/longText.js +17 -1
- package/dynamoDb/storage/longText.js.map +1 -1
- package/dynamoDb/storage/richText.js +18 -0
- package/dynamoDb/storage/richText.js.map +1 -1
- package/dynamoDb/transformValue/datetime.js +8 -1
- package/dynamoDb/transformValue/datetime.js.map +1 -1
- package/index.js +32 -5
- package/index.js.map +1 -1
- package/operations/entry/dataLoaders.js +44 -1
- package/operations/entry/dataLoaders.js.map +1 -1
- package/operations/entry/filtering/createFields.d.ts +18 -0
- package/operations/entry/filtering/createFields.js +124 -0
- package/operations/entry/filtering/createFields.js.map +1 -0
- package/operations/entry/filtering/createFilters.d.ts +20 -0
- package/operations/entry/filtering/createFilters.js +155 -0
- package/operations/entry/filtering/createFilters.js.map +1 -0
- package/operations/entry/filtering/extractSort.d.ts +13 -0
- package/operations/entry/filtering/extractSort.js +55 -0
- package/operations/entry/filtering/extractSort.js.map +1 -0
- package/operations/entry/filtering/filter.d.ts +16 -0
- package/operations/entry/filtering/filter.js +137 -0
- package/operations/entry/filtering/filter.js.map +1 -0
- package/operations/entry/filtering/fullTextSearch.d.ts +18 -0
- package/operations/entry/filtering/fullTextSearch.js +64 -0
- package/operations/entry/filtering/fullTextSearch.js.map +1 -0
- package/operations/entry/filtering/getValue.d.ts +5 -0
- package/operations/entry/filtering/getValue.js +81 -0
- package/operations/entry/filtering/getValue.js.map +1 -0
- package/operations/entry/filtering/index.d.ts +2 -0
- package/operations/entry/filtering/index.js +21 -0
- package/operations/entry/filtering/index.js.map +1 -0
- package/operations/entry/filtering/mapPlugins.d.ts +8 -0
- package/operations/entry/filtering/mapPlugins.js +39 -0
- package/operations/entry/filtering/mapPlugins.js.map +1 -0
- package/operations/entry/filtering/plugins/defaultFilterCreate.d.ts +2 -0
- package/operations/entry/filtering/plugins/defaultFilterCreate.js +48 -0
- package/operations/entry/filtering/plugins/defaultFilterCreate.js.map +1 -0
- package/operations/entry/filtering/plugins/index.d.ts +1 -0
- package/operations/entry/filtering/plugins/index.js +18 -0
- package/operations/entry/filtering/plugins/index.js.map +1 -0
- package/operations/entry/filtering/plugins/objectFilterCreate.d.ts +2 -0
- package/operations/entry/filtering/plugins/objectFilterCreate.js +107 -0
- package/operations/entry/filtering/plugins/objectFilterCreate.js.map +1 -0
- package/operations/entry/filtering/plugins/refFilterCreate.d.ts +2 -0
- package/operations/entry/filtering/plugins/refFilterCreate.js +89 -0
- package/operations/entry/filtering/plugins/refFilterCreate.js.map +1 -0
- package/operations/entry/filtering/sort.d.ts +9 -0
- package/operations/entry/filtering/sort.js +80 -0
- package/operations/entry/filtering/sort.js.map +1 -0
- package/operations/entry/filtering/systemFields.d.ts +4 -0
- package/operations/entry/filtering/systemFields.js +72 -0
- package/operations/entry/filtering/systemFields.js.map +1 -0
- package/operations/entry/filtering/transform.d.ts +6 -0
- package/operations/entry/filtering/transform.js +19 -0
- package/operations/entry/filtering/transform.js.map +1 -0
- package/operations/entry/filtering/types.d.ts +40 -0
- package/operations/entry/filtering/types.js +5 -0
- package/operations/entry/filtering/types.js.map +1 -0
- package/operations/entry/filtering/where.d.ts +5 -0
- package/operations/entry/filtering/where.js +38 -0
- package/operations/entry/filtering/where.js.map +1 -0
- package/operations/entry/index.js +98 -13
- package/operations/entry/index.js.map +1 -1
- package/operations/entry/keys.js +18 -0
- package/operations/entry/keys.js.map +1 -1
- package/operations/entry/systemFields.js +2 -0
- package/operations/entry/systemFields.js.map +1 -1
- package/operations/entry/utils.js +121 -3
- package/operations/entry/utils.js.map +1 -1
- package/operations/group/index.js +32 -2
- package/operations/group/index.js.map +1 -1
- package/operations/model/index.js +25 -0
- package/operations/model/index.js.map +1 -1
- package/operations/settings/index.js +24 -0
- package/operations/settings/index.js.map +1 -1
- package/operations/system/index.js +17 -0
- package/operations/system/index.js.map +1 -1
- package/package.json +12 -12
- package/plugins/CmsEntryFieldFilterPathPlugin.d.ts +2 -2
- package/plugins/CmsEntryFieldFilterPathPlugin.js +14 -0
- package/plugins/CmsEntryFieldFilterPathPlugin.js.map +1 -1
- package/plugins/CmsEntryFieldFilterPlugin.d.ts +43 -0
- package/plugins/CmsEntryFieldFilterPlugin.js +31 -0
- package/plugins/CmsEntryFieldFilterPlugin.js.map +1 -0
- package/plugins/index.js +2 -0
- package/plugins/index.js.map +1 -1
- package/types.d.ts +1 -1
- package/types.js +1 -0
- package/types.js.map +1 -1
|
@@ -1,13 +1,18 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
|
+
|
|
4
5
|
Object.defineProperty(exports, "__esModule", {
|
|
5
6
|
value: true
|
|
6
7
|
});
|
|
7
8
|
exports.createRichTextStorageTransformPlugin = void 0;
|
|
9
|
+
|
|
8
10
|
var _jsonpack = _interopRequireDefault(require("jsonpack"));
|
|
11
|
+
|
|
9
12
|
var _error = _interopRequireDefault(require("@webiny/error"));
|
|
13
|
+
|
|
10
14
|
var _apiHeadlessCms = require("@webiny/api-headless-cms");
|
|
15
|
+
|
|
11
16
|
/**
|
|
12
17
|
* File is @internal
|
|
13
18
|
*/
|
|
@@ -22,19 +27,24 @@ const transformArray = value => {
|
|
|
22
27
|
if (!value) {
|
|
23
28
|
return value;
|
|
24
29
|
}
|
|
30
|
+
|
|
25
31
|
let isArray = Array.isArray(value);
|
|
26
32
|
const shouldBeArray = value instanceof Array === false && isArray;
|
|
33
|
+
|
|
27
34
|
if (shouldBeArray) {
|
|
28
35
|
value = Array.from(value);
|
|
29
36
|
isArray = true;
|
|
30
37
|
}
|
|
38
|
+
|
|
31
39
|
if (typeof value === "object" || isArray) {
|
|
32
40
|
for (const k in value) {
|
|
33
41
|
value[k] = transformArray(value[k]);
|
|
34
42
|
}
|
|
35
43
|
}
|
|
44
|
+
|
|
36
45
|
return value;
|
|
37
46
|
};
|
|
47
|
+
|
|
38
48
|
const createRichTextStorageTransformPlugin = () => {
|
|
39
49
|
return new _apiHeadlessCms.StorageTransformPlugin({
|
|
40
50
|
fieldType: "rich-text",
|
|
@@ -51,23 +61,29 @@ const createRichTextStorageTransformPlugin = () => {
|
|
|
51
61
|
* This is to circumvent a bug introduced with 5.8.0 storage operations.
|
|
52
62
|
* Do not remove.
|
|
53
63
|
*/
|
|
64
|
+
|
|
65
|
+
|
|
54
66
|
if (storageValue.hasOwnProperty("compression") === false) {
|
|
55
67
|
return storageValue;
|
|
56
68
|
}
|
|
69
|
+
|
|
57
70
|
const {
|
|
58
71
|
compression,
|
|
59
72
|
value
|
|
60
73
|
} = storageValue;
|
|
74
|
+
|
|
61
75
|
if (!compression) {
|
|
62
76
|
throw new _error.default(`Missing compression in "fromStorage" function in field "${field.fieldId}": ${JSON.stringify(storageValue)}.`, "MISSING_COMPRESSION", {
|
|
63
77
|
value: storageValue
|
|
64
78
|
});
|
|
65
79
|
}
|
|
80
|
+
|
|
66
81
|
if (compression !== "jsonpack") {
|
|
67
82
|
throw new _error.default(`This plugin cannot transform something not packed with "jsonpack".`, "WRONG_COMPRESSION", {
|
|
68
83
|
compression
|
|
69
84
|
});
|
|
70
85
|
}
|
|
86
|
+
|
|
71
87
|
try {
|
|
72
88
|
return _jsonpack.default.unpack(value);
|
|
73
89
|
} catch {
|
|
@@ -84,6 +100,7 @@ const createRichTextStorageTransformPlugin = () => {
|
|
|
84
100
|
if (value && value.hasOwnProperty("compression") === true) {
|
|
85
101
|
return value;
|
|
86
102
|
}
|
|
103
|
+
|
|
87
104
|
value = transformArray(value);
|
|
88
105
|
return {
|
|
89
106
|
compression: "jsonpack",
|
|
@@ -92,4 +109,5 @@ const createRichTextStorageTransformPlugin = () => {
|
|
|
92
109
|
}
|
|
93
110
|
});
|
|
94
111
|
};
|
|
112
|
+
|
|
95
113
|
exports.createRichTextStorageTransformPlugin = createRichTextStorageTransformPlugin;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["transformArray","value","isArray","Array","shouldBeArray","from","k","createRichTextStorageTransformPlugin","StorageTransformPlugin","fieldType","fromStorage","field","storageValue","WebinyError","storageId","fieldId","hasOwnProperty","compression","JSON","stringify","jsonpack","unpack","toStorage","pack"],"sources":["richText.ts"],"sourcesContent":["/**\n * File is @internal\n */\nimport jsonpack from \"jsonpack\";\nimport WebinyError from \"@webiny/error\";\nimport { StorageTransformPlugin } from \"@webiny/api-headless-cms\";\n\n/**\n * Remove when jsonpack gets PR with a fix merged\n * https://github.com/rgcl/jsonpack/pull/25/files\n * NOTE 2021-07-28: it seems PR is not going to be merged so keep this.\n */\n// TODO @ts-refactor figure better type\nconst transformArray = (value: any) => {\n if (!value) {\n return value;\n }\n let isArray = Array.isArray(value);\n const shouldBeArray = value instanceof Array === false && isArray;\n if (shouldBeArray) {\n value = Array.from(value as any);\n isArray = true;\n }\n if (typeof value === \"object\" || isArray) {\n for (const k in value) {\n value[k] = transformArray(value[k]);\n }\n }\n return value;\n};\n\nexport const createRichTextStorageTransformPlugin = () => {\n return new StorageTransformPlugin({\n fieldType: \"rich-text\",\n fromStorage: async ({ field, value: storageValue }) => {\n if (!storageValue) {\n return storageValue;\n } else if (typeof storageValue !== \"object\") {\n throw new WebinyError(\n `RichText value received in \"fromStorage\" function is not an object in field \"${field.storageId}\" - ${field.fieldId}.`\n );\n }\n /**\n * This is to circumvent a bug introduced with 5.8.0 storage operations.\n * Do not remove.\n */\n if (storageValue.hasOwnProperty(\"compression\") === false) {\n return storageValue;\n }\n const { compression, value } = storageValue;\n if (!compression) {\n throw new WebinyError(\n `Missing compression in \"fromStorage\" function in field \"${\n field.fieldId\n }\": ${JSON.stringify(storageValue)}.`,\n \"MISSING_COMPRESSION\",\n {\n value: storageValue\n }\n );\n }\n if (compression !== \"jsonpack\") {\n throw new WebinyError(\n `This plugin cannot transform something not packed with \"jsonpack\".`,\n \"WRONG_COMPRESSION\",\n {\n compression\n }\n );\n }\n try {\n return jsonpack.unpack(value);\n } catch {\n return null;\n }\n },\n toStorage: async ({ value }) => {\n /**\n * There is a possibility that we are trying to compress already compressed value.\n * Introduced a bug with 5.8.0 storage operations, so just return the value to correct it.\n */\n if (value && value.hasOwnProperty(\"compression\") === true) {\n return value as any;\n }\n value = transformArray(value);\n return {\n compression: \"jsonpack\",\n value: value ? jsonpack.pack(value) : value\n };\n }\n });\n};\n"],"mappings":"
|
|
1
|
+
{"version":3,"names":["transformArray","value","isArray","Array","shouldBeArray","from","k","createRichTextStorageTransformPlugin","StorageTransformPlugin","fieldType","fromStorage","field","storageValue","WebinyError","storageId","fieldId","hasOwnProperty","compression","JSON","stringify","jsonpack","unpack","toStorage","pack"],"sources":["richText.ts"],"sourcesContent":["/**\n * File is @internal\n */\nimport jsonpack from \"jsonpack\";\nimport WebinyError from \"@webiny/error\";\nimport { StorageTransformPlugin } from \"@webiny/api-headless-cms\";\n\n/**\n * Remove when jsonpack gets PR with a fix merged\n * https://github.com/rgcl/jsonpack/pull/25/files\n * NOTE 2021-07-28: it seems PR is not going to be merged so keep this.\n */\n// TODO @ts-refactor figure better type\nconst transformArray = (value: any) => {\n if (!value) {\n return value;\n }\n let isArray = Array.isArray(value);\n const shouldBeArray = value instanceof Array === false && isArray;\n if (shouldBeArray) {\n value = Array.from(value as any);\n isArray = true;\n }\n if (typeof value === \"object\" || isArray) {\n for (const k in value) {\n value[k] = transformArray(value[k]);\n }\n }\n return value;\n};\n\nexport const createRichTextStorageTransformPlugin = () => {\n return new StorageTransformPlugin({\n fieldType: \"rich-text\",\n fromStorage: async ({ field, value: storageValue }) => {\n if (!storageValue) {\n return storageValue;\n } else if (typeof storageValue !== \"object\") {\n throw new WebinyError(\n `RichText value received in \"fromStorage\" function is not an object in field \"${field.storageId}\" - ${field.fieldId}.`\n );\n }\n /**\n * This is to circumvent a bug introduced with 5.8.0 storage operations.\n * Do not remove.\n */\n if (storageValue.hasOwnProperty(\"compression\") === false) {\n return storageValue;\n }\n const { compression, value } = storageValue;\n if (!compression) {\n throw new WebinyError(\n `Missing compression in \"fromStorage\" function in field \"${\n field.fieldId\n }\": ${JSON.stringify(storageValue)}.`,\n \"MISSING_COMPRESSION\",\n {\n value: storageValue\n }\n );\n }\n if (compression !== \"jsonpack\") {\n throw new WebinyError(\n `This plugin cannot transform something not packed with \"jsonpack\".`,\n \"WRONG_COMPRESSION\",\n {\n compression\n }\n );\n }\n try {\n return jsonpack.unpack(value);\n } catch {\n return null;\n }\n },\n toStorage: async ({ value }) => {\n /**\n * There is a possibility that we are trying to compress already compressed value.\n * Introduced a bug with 5.8.0 storage operations, so just return the value to correct it.\n */\n if (value && value.hasOwnProperty(\"compression\") === true) {\n return value as any;\n }\n value = transformArray(value);\n return {\n compression: \"jsonpack\",\n value: value ? jsonpack.pack(value) : value\n };\n }\n });\n};\n"],"mappings":";;;;;;;;;AAGA;;AACA;;AACA;;AALA;AACA;AACA;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMA,cAAc,GAAIC,KAAD,IAAgB;EACnC,IAAI,CAACA,KAAL,EAAY;IACR,OAAOA,KAAP;EACH;;EACD,IAAIC,OAAO,GAAGC,KAAK,CAACD,OAAN,CAAcD,KAAd,CAAd;EACA,MAAMG,aAAa,GAAGH,KAAK,YAAYE,KAAjB,KAA2B,KAA3B,IAAoCD,OAA1D;;EACA,IAAIE,aAAJ,EAAmB;IACfH,KAAK,GAAGE,KAAK,CAACE,IAAN,CAAWJ,KAAX,CAAR;IACAC,OAAO,GAAG,IAAV;EACH;;EACD,IAAI,OAAOD,KAAP,KAAiB,QAAjB,IAA6BC,OAAjC,EAA0C;IACtC,KAAK,MAAMI,CAAX,IAAgBL,KAAhB,EAAuB;MACnBA,KAAK,CAACK,CAAD,CAAL,GAAWN,cAAc,CAACC,KAAK,CAACK,CAAD,CAAN,CAAzB;IACH;EACJ;;EACD,OAAOL,KAAP;AACH,CAhBD;;AAkBO,MAAMM,oCAAoC,GAAG,MAAM;EACtD,OAAO,IAAIC,sCAAJ,CAA2B;IAC9BC,SAAS,EAAE,WADmB;IAE9BC,WAAW,EAAE,OAAO;MAAEC,KAAF;MAASV,KAAK,EAAEW;IAAhB,CAAP,KAA0C;MACnD,IAAI,CAACA,YAAL,EAAmB;QACf,OAAOA,YAAP;MACH,CAFD,MAEO,IAAI,OAAOA,YAAP,KAAwB,QAA5B,EAAsC;QACzC,MAAM,IAAIC,cAAJ,CACD,gFAA+EF,KAAK,CAACG,SAAU,OAAMH,KAAK,CAACI,OAAQ,GADlH,CAAN;MAGH;MACD;AACZ;AACA;AACA;;;MACY,IAAIH,YAAY,CAACI,cAAb,CAA4B,aAA5B,MAA+C,KAAnD,EAA0D;QACtD,OAAOJ,YAAP;MACH;;MACD,MAAM;QAAEK,WAAF;QAAehB;MAAf,IAAyBW,YAA/B;;MACA,IAAI,CAACK,WAAL,EAAkB;QACd,MAAM,IAAIJ,cAAJ,CACD,2DACGF,KAAK,CAACI,OACT,MAAKG,IAAI,CAACC,SAAL,CAAeP,YAAf,CAA6B,GAHjC,EAIF,qBAJE,EAKF;UACIX,KAAK,EAAEW;QADX,CALE,CAAN;MASH;;MACD,IAAIK,WAAW,KAAK,UAApB,EAAgC;QAC5B,MAAM,IAAIJ,cAAJ,CACD,oEADC,EAEF,mBAFE,EAGF;UACII;QADJ,CAHE,CAAN;MAOH;;MACD,IAAI;QACA,OAAOG,iBAAA,CAASC,MAAT,CAAgBpB,KAAhB,CAAP;MACH,CAFD,CAEE,MAAM;QACJ,OAAO,IAAP;MACH;IACJ,CA3C6B;IA4C9BqB,SAAS,EAAE,OAAO;MAAErB;IAAF,CAAP,KAAqB;MAC5B;AACZ;AACA;AACA;MACY,IAAIA,KAAK,IAAIA,KAAK,CAACe,cAAN,CAAqB,aAArB,MAAwC,IAArD,EAA2D;QACvD,OAAOf,KAAP;MACH;;MACDA,KAAK,GAAGD,cAAc,CAACC,KAAD,CAAtB;MACA,OAAO;QACHgB,WAAW,EAAE,UADV;QAEHhB,KAAK,EAAEA,KAAK,GAAGmB,iBAAA,CAASG,IAAT,CAActB,KAAd,CAAH,GAA0BA;MAFnC,CAAP;IAIH;EAzD6B,CAA3B,CAAP;AA2DH,CA5DM"}
|
|
@@ -4,23 +4,27 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.createDatetimeTransformValuePlugin = void 0;
|
|
7
|
+
|
|
7
8
|
var _TimeTransformPlugin = require("@webiny/db-dynamodb/plugins/definitions/TimeTransformPlugin");
|
|
9
|
+
|
|
8
10
|
var _DateTimeTransformPlugin = require("@webiny/db-dynamodb/plugins/definitions/DateTimeTransformPlugin");
|
|
11
|
+
|
|
9
12
|
/**
|
|
10
13
|
* File is @internal
|
|
11
14
|
*/
|
|
12
|
-
|
|
13
15
|
const timeTransformer = new _TimeTransformPlugin.TimeTransformPlugin({
|
|
14
16
|
fields: ["*"]
|
|
15
17
|
});
|
|
16
18
|
const dateTimeTransformer = new _DateTimeTransformPlugin.DateTimeTransformPlugin({
|
|
17
19
|
fields: ["*"]
|
|
18
20
|
});
|
|
21
|
+
|
|
19
22
|
const createDatetimeTransformValuePlugin = () => {
|
|
20
23
|
return {
|
|
21
24
|
type: "cms-field-filter-value-transform",
|
|
22
25
|
name: "cms-field-value-filter-transform-datetime",
|
|
23
26
|
fieldType: "datetime",
|
|
27
|
+
|
|
24
28
|
/**
|
|
25
29
|
* Always transform into the milliseconds.
|
|
26
30
|
*/
|
|
@@ -31,15 +35,18 @@ const createDatetimeTransformValuePlugin = () => {
|
|
|
31
35
|
const {
|
|
32
36
|
type
|
|
33
37
|
} = field.settings || {};
|
|
38
|
+
|
|
34
39
|
if (type === "time") {
|
|
35
40
|
return timeTransformer.transform({
|
|
36
41
|
value
|
|
37
42
|
});
|
|
38
43
|
}
|
|
44
|
+
|
|
39
45
|
return dateTimeTransformer.transform({
|
|
40
46
|
value
|
|
41
47
|
});
|
|
42
48
|
}
|
|
43
49
|
};
|
|
44
50
|
};
|
|
51
|
+
|
|
45
52
|
exports.createDatetimeTransformValuePlugin = createDatetimeTransformValuePlugin;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["timeTransformer","TimeTransformPlugin","fields","dateTimeTransformer","DateTimeTransformPlugin","createDatetimeTransformValuePlugin","type","name","fieldType","transform","field","value","settings"],"sources":["datetime.ts"],"sourcesContent":["/**\n * File is @internal\n */\nimport { CmsFieldFilterValueTransformPlugin } from \"~/types\";\nimport { TimeTransformPlugin } from \"@webiny/db-dynamodb/plugins/definitions/TimeTransformPlugin\";\nimport { DateTimeTransformPlugin } from \"@webiny/db-dynamodb/plugins/definitions/DateTimeTransformPlugin\";\n\nconst timeTransformer = new TimeTransformPlugin({\n fields: [\"*\"]\n});\nconst dateTimeTransformer = new DateTimeTransformPlugin({\n fields: [\"*\"]\n});\n\nexport const createDatetimeTransformValuePlugin = (): CmsFieldFilterValueTransformPlugin => {\n return {\n type: \"cms-field-filter-value-transform\",\n name: \"cms-field-value-filter-transform-datetime\",\n fieldType: \"datetime\",\n /**\n * Always transform into the milliseconds.\n */\n transform: ({ field, value }) => {\n const { type } = field.settings || {};\n if (type === \"time\") {\n return timeTransformer.transform({\n value\n });\n }\n return dateTimeTransformer.transform({\n value\n });\n }\n };\n};\n"],"mappings":"
|
|
1
|
+
{"version":3,"names":["timeTransformer","TimeTransformPlugin","fields","dateTimeTransformer","DateTimeTransformPlugin","createDatetimeTransformValuePlugin","type","name","fieldType","transform","field","value","settings"],"sources":["datetime.ts"],"sourcesContent":["/**\n * File is @internal\n */\nimport { CmsFieldFilterValueTransformPlugin } from \"~/types\";\nimport { TimeTransformPlugin } from \"@webiny/db-dynamodb/plugins/definitions/TimeTransformPlugin\";\nimport { DateTimeTransformPlugin } from \"@webiny/db-dynamodb/plugins/definitions/DateTimeTransformPlugin\";\n\nconst timeTransformer = new TimeTransformPlugin({\n fields: [\"*\"]\n});\nconst dateTimeTransformer = new DateTimeTransformPlugin({\n fields: [\"*\"]\n});\n\nexport const createDatetimeTransformValuePlugin = (): CmsFieldFilterValueTransformPlugin => {\n return {\n type: \"cms-field-filter-value-transform\",\n name: \"cms-field-value-filter-transform-datetime\",\n fieldType: \"datetime\",\n /**\n * Always transform into the milliseconds.\n */\n transform: ({ field, value }) => {\n const { type } = field.settings || {};\n if (type === \"time\") {\n return timeTransformer.transform({\n value\n });\n }\n return dateTimeTransformer.transform({\n value\n });\n }\n };\n};\n"],"mappings":";;;;;;;AAIA;;AACA;;AALA;AACA;AACA;AAKA,MAAMA,eAAe,GAAG,IAAIC,wCAAJ,CAAwB;EAC5CC,MAAM,EAAE,CAAC,GAAD;AADoC,CAAxB,CAAxB;AAGA,MAAMC,mBAAmB,GAAG,IAAIC,gDAAJ,CAA4B;EACpDF,MAAM,EAAE,CAAC,GAAD;AAD4C,CAA5B,CAA5B;;AAIO,MAAMG,kCAAkC,GAAG,MAA0C;EACxF,OAAO;IACHC,IAAI,EAAE,kCADH;IAEHC,IAAI,EAAE,2CAFH;IAGHC,SAAS,EAAE,UAHR;;IAIH;AACR;AACA;IACQC,SAAS,EAAE,CAAC;MAAEC,KAAF;MAASC;IAAT,CAAD,KAAsB;MAC7B,MAAM;QAAEL;MAAF,IAAWI,KAAK,CAACE,QAAN,IAAkB,EAAnC;;MACA,IAAIN,IAAI,KAAK,MAAb,EAAqB;QACjB,OAAON,eAAe,CAACS,SAAhB,CAA0B;UAC7BE;QAD6B,CAA1B,CAAP;MAGH;;MACD,OAAOR,mBAAmB,CAACM,SAApB,CAA8B;QACjCE;MADiC,CAA9B,CAAP;IAGH;EAjBE,CAAP;AAmBH,CApBM"}
|
package/index.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
|
+
|
|
4
5
|
Object.defineProperty(exports, "__esModule", {
|
|
5
6
|
value: true
|
|
6
7
|
});
|
|
@@ -8,33 +9,53 @@ var _exportNames = {
|
|
|
8
9
|
createStorageOperations: true
|
|
9
10
|
};
|
|
10
11
|
exports.createStorageOperations = void 0;
|
|
12
|
+
|
|
11
13
|
var _filters = _interopRequireDefault(require("@webiny/db-dynamodb/plugins/filters"));
|
|
14
|
+
|
|
12
15
|
var _dynamoDb = _interopRequireDefault(require("./dynamoDb"));
|
|
16
|
+
|
|
13
17
|
var _types = require("./types");
|
|
18
|
+
|
|
14
19
|
var _table = require("./definitions/table");
|
|
20
|
+
|
|
15
21
|
var _settings = require("./definitions/settings");
|
|
22
|
+
|
|
16
23
|
var _system = require("./definitions/system");
|
|
24
|
+
|
|
17
25
|
var _group = require("./definitions/group");
|
|
26
|
+
|
|
18
27
|
var _model = require("./definitions/model");
|
|
28
|
+
|
|
19
29
|
var _entry = require("./definitions/entry");
|
|
30
|
+
|
|
20
31
|
var _plugins = require("@webiny/plugins");
|
|
32
|
+
|
|
21
33
|
var _system2 = require("./operations/system");
|
|
34
|
+
|
|
22
35
|
var _settings2 = require("./operations/settings");
|
|
36
|
+
|
|
23
37
|
var _group2 = require("./operations/group");
|
|
38
|
+
|
|
24
39
|
var _model2 = require("./operations/model");
|
|
40
|
+
|
|
25
41
|
var _entry2 = require("./operations/entry");
|
|
26
|
-
|
|
27
|
-
|
|
42
|
+
|
|
43
|
+
var _plugins2 = require("./operations/entry/filtering/plugins");
|
|
44
|
+
|
|
45
|
+
var _plugins3 = require("./plugins");
|
|
46
|
+
|
|
47
|
+
Object.keys(_plugins3).forEach(function (key) {
|
|
28
48
|
if (key === "default" || key === "__esModule") return;
|
|
29
49
|
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
|
30
|
-
if (key in exports && exports[key] ===
|
|
50
|
+
if (key in exports && exports[key] === _plugins3[key]) return;
|
|
31
51
|
Object.defineProperty(exports, key, {
|
|
32
52
|
enumerable: true,
|
|
33
53
|
get: function () {
|
|
34
|
-
return
|
|
54
|
+
return _plugins3[key];
|
|
35
55
|
}
|
|
36
56
|
});
|
|
37
57
|
});
|
|
58
|
+
|
|
38
59
|
const createStorageOperations = params => {
|
|
39
60
|
const {
|
|
40
61
|
attributes,
|
|
@@ -82,21 +103,26 @@ const createStorageOperations = params => {
|
|
|
82
103
|
* Field plugins for DynamoDB.
|
|
83
104
|
*/
|
|
84
105
|
(0, _dynamoDb.default)(),
|
|
106
|
+
/**
|
|
107
|
+
* Filter create plugins.
|
|
108
|
+
*/
|
|
109
|
+
(0, _plugins2.createFilterCreatePlugins)(),
|
|
85
110
|
/**
|
|
86
111
|
* User defined custom plugins.
|
|
87
112
|
*/
|
|
88
113
|
...(userPlugins || [])]);
|
|
89
114
|
return {
|
|
115
|
+
name: "dynamodb",
|
|
90
116
|
beforeInit: async context => {
|
|
91
117
|
/**
|
|
92
118
|
* Collect all required plugins from parent context.
|
|
93
119
|
*/
|
|
94
120
|
const fieldPlugins = context.plugins.byType("cms-model-field-to-graphql");
|
|
95
121
|
plugins.register(fieldPlugins);
|
|
96
|
-
|
|
97
122
|
/**
|
|
98
123
|
* Pass the plugins to the parent context.
|
|
99
124
|
*/
|
|
125
|
+
|
|
100
126
|
context.plugins.register([(0, _dynamoDb.default)()]);
|
|
101
127
|
},
|
|
102
128
|
getEntities: () => entities,
|
|
@@ -120,4 +146,5 @@ const createStorageOperations = params => {
|
|
|
120
146
|
})
|
|
121
147
|
};
|
|
122
148
|
};
|
|
149
|
+
|
|
123
150
|
exports.createStorageOperations = createStorageOperations;
|
package/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["createStorageOperations","params","attributes","table","documentClient","plugins","userPlugins","tableInstance","createTable","entities","settings","createSettingsEntity","entityName","ENTITIES","SETTINGS","system","createSystemEntity","SYSTEM","groups","createGroupEntity","GROUPS","models","createModelEntity","MODELS","entries","createEntryEntity","ENTRIES","PluginsContainer","dynamoDbValueFilters","dynamoDbPlugins","beforeInit","context","fieldPlugins","byType","register","getEntities","getTable","createSystemStorageOperations","entity","createSettingsStorageOperations","createGroupsStorageOperations","createModelsStorageOperations","createEntriesStorageOperations"],"sources":["index.ts"],"sourcesContent":["import dynamoDbValueFilters from \"@webiny/db-dynamodb/plugins/filters\";\nimport dynamoDbPlugins from \"./dynamoDb\";\nimport { ENTITIES, StorageOperationsFactory } from \"~/types\";\nimport { createTable } from \"~/definitions/table\";\nimport { createSettingsEntity } from \"~/definitions/settings\";\nimport { createSystemEntity } from \"~/definitions/system\";\nimport { createGroupEntity } from \"~/definitions/group\";\nimport { createModelEntity } from \"~/definitions/model\";\nimport { createEntryEntity } from \"~/definitions/entry\";\nimport { PluginsContainer } from \"@webiny/plugins\";\nimport { createSystemStorageOperations } from \"~/operations/system\";\nimport { createSettingsStorageOperations } from \"~/operations/settings\";\nimport { createGroupsStorageOperations } from \"~/operations/group\";\nimport { createModelsStorageOperations } from \"~/operations/model\";\nimport { createEntriesStorageOperations } from \"./operations/entry\";\nimport { CmsModelFieldToGraphQLPlugin } from \"@webiny/api-headless-cms/types\";\n\nexport * from \"./plugins\";\n\nexport const createStorageOperations: StorageOperationsFactory = params => {\n const { attributes, table, documentClient, plugins: userPlugins } = params;\n\n const tableInstance = createTable({\n table,\n documentClient\n });\n\n const entities = {\n settings: createSettingsEntity({\n entityName: ENTITIES.SETTINGS,\n table: tableInstance,\n attributes: attributes ? attributes[ENTITIES.SETTINGS] : {}\n }),\n system: createSystemEntity({\n entityName: ENTITIES.SYSTEM,\n table: tableInstance,\n attributes: attributes ? attributes[ENTITIES.SYSTEM] : {}\n }),\n groups: createGroupEntity({\n entityName: ENTITIES.GROUPS,\n table: tableInstance,\n attributes: attributes ? attributes[ENTITIES.GROUPS] : {}\n }),\n models: createModelEntity({\n entityName: ENTITIES.MODELS,\n table: tableInstance,\n attributes: attributes ? attributes[ENTITIES.MODELS] : {}\n }),\n entries: createEntryEntity({\n entityName: ENTITIES.ENTRIES,\n table: tableInstance,\n attributes: attributes ? attributes[ENTITIES.ENTRIES] : {}\n })\n };\n\n const plugins = new PluginsContainer([\n /**\n * DynamoDB filter plugins for the where conditions.\n */\n dynamoDbValueFilters(),\n /**\n * Field plugins for DynamoDB.\n */\n dynamoDbPlugins(),\n /**\n * User defined custom plugins.\n */\n ...(userPlugins || [])\n ]);\n\n return {\n beforeInit: async context => {\n /**\n * Collect all required plugins from parent context.\n */\n const fieldPlugins = context.plugins.byType<CmsModelFieldToGraphQLPlugin>(\n \"cms-model-field-to-graphql\"\n );\n plugins.register(fieldPlugins);\n\n /**\n * Pass the plugins to the parent context.\n */\n context.plugins.register([dynamoDbPlugins()]);\n },\n getEntities: () => entities,\n getTable: () => tableInstance,\n system: createSystemStorageOperations({\n entity: entities.system\n }),\n settings: createSettingsStorageOperations({\n entity: entities.settings\n }),\n groups: createGroupsStorageOperations({\n entity: entities.groups,\n plugins\n }),\n models: createModelsStorageOperations({\n entity: entities.models\n }),\n entries: createEntriesStorageOperations({\n entity: entities.entries,\n plugins\n })\n };\n};\n"],"mappings":"
|
|
1
|
+
{"version":3,"names":["createStorageOperations","params","attributes","table","documentClient","plugins","userPlugins","tableInstance","createTable","entities","settings","createSettingsEntity","entityName","ENTITIES","SETTINGS","system","createSystemEntity","SYSTEM","groups","createGroupEntity","GROUPS","models","createModelEntity","MODELS","entries","createEntryEntity","ENTRIES","PluginsContainer","dynamoDbValueFilters","dynamoDbPlugins","createFilterCreatePlugins","name","beforeInit","context","fieldPlugins","byType","register","getEntities","getTable","createSystemStorageOperations","entity","createSettingsStorageOperations","createGroupsStorageOperations","createModelsStorageOperations","createEntriesStorageOperations"],"sources":["index.ts"],"sourcesContent":["import dynamoDbValueFilters from \"@webiny/db-dynamodb/plugins/filters\";\nimport dynamoDbPlugins from \"./dynamoDb\";\nimport { ENTITIES, StorageOperationsFactory } from \"~/types\";\nimport { createTable } from \"~/definitions/table\";\nimport { createSettingsEntity } from \"~/definitions/settings\";\nimport { createSystemEntity } from \"~/definitions/system\";\nimport { createGroupEntity } from \"~/definitions/group\";\nimport { createModelEntity } from \"~/definitions/model\";\nimport { createEntryEntity } from \"~/definitions/entry\";\nimport { PluginsContainer } from \"@webiny/plugins\";\nimport { createSystemStorageOperations } from \"~/operations/system\";\nimport { createSettingsStorageOperations } from \"~/operations/settings\";\nimport { createGroupsStorageOperations } from \"~/operations/group\";\nimport { createModelsStorageOperations } from \"~/operations/model\";\nimport { createEntriesStorageOperations } from \"./operations/entry\";\nimport { CmsModelFieldToGraphQLPlugin } from \"@webiny/api-headless-cms/types\";\n\nimport { createFilterCreatePlugins } from \"~/operations/entry/filtering/plugins\";\n\nexport * from \"./plugins\";\n\nexport const createStorageOperations: StorageOperationsFactory = params => {\n const { attributes, table, documentClient, plugins: userPlugins } = params;\n\n const tableInstance = createTable({\n table,\n documentClient\n });\n\n const entities = {\n settings: createSettingsEntity({\n entityName: ENTITIES.SETTINGS,\n table: tableInstance,\n attributes: attributes ? attributes[ENTITIES.SETTINGS] : {}\n }),\n system: createSystemEntity({\n entityName: ENTITIES.SYSTEM,\n table: tableInstance,\n attributes: attributes ? attributes[ENTITIES.SYSTEM] : {}\n }),\n groups: createGroupEntity({\n entityName: ENTITIES.GROUPS,\n table: tableInstance,\n attributes: attributes ? attributes[ENTITIES.GROUPS] : {}\n }),\n models: createModelEntity({\n entityName: ENTITIES.MODELS,\n table: tableInstance,\n attributes: attributes ? attributes[ENTITIES.MODELS] : {}\n }),\n entries: createEntryEntity({\n entityName: ENTITIES.ENTRIES,\n table: tableInstance,\n attributes: attributes ? attributes[ENTITIES.ENTRIES] : {}\n })\n };\n\n const plugins = new PluginsContainer([\n /**\n * DynamoDB filter plugins for the where conditions.\n */\n dynamoDbValueFilters(),\n /**\n * Field plugins for DynamoDB.\n */\n dynamoDbPlugins(),\n /**\n * Filter create plugins.\n */\n createFilterCreatePlugins(),\n /**\n * User defined custom plugins.\n */\n ...(userPlugins || [])\n ]);\n\n return {\n name: \"dynamodb\",\n beforeInit: async context => {\n /**\n * Collect all required plugins from parent context.\n */\n const fieldPlugins = context.plugins.byType<CmsModelFieldToGraphQLPlugin>(\n \"cms-model-field-to-graphql\"\n );\n plugins.register(fieldPlugins);\n\n /**\n * Pass the plugins to the parent context.\n */\n context.plugins.register([dynamoDbPlugins()]);\n },\n getEntities: () => entities,\n getTable: () => tableInstance,\n system: createSystemStorageOperations({\n entity: entities.system\n }),\n settings: createSettingsStorageOperations({\n entity: entities.settings\n }),\n groups: createGroupsStorageOperations({\n entity: entities.groups,\n plugins\n }),\n models: createModelsStorageOperations({\n entity: entities.models\n }),\n entries: createEntriesStorageOperations({\n entity: entities.entries,\n plugins\n })\n };\n};\n"],"mappings":"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"}
|
|
@@ -1,19 +1,30 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
|
+
|
|
4
5
|
Object.defineProperty(exports, "__esModule", {
|
|
5
6
|
value: true
|
|
6
7
|
});
|
|
7
8
|
exports.DataLoadersHandler = void 0;
|
|
9
|
+
|
|
8
10
|
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
|
|
11
|
+
|
|
9
12
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
13
|
+
|
|
10
14
|
var _dataloader = _interopRequireDefault(require("dataloader"));
|
|
15
|
+
|
|
11
16
|
var _error = _interopRequireDefault(require("@webiny/error"));
|
|
17
|
+
|
|
12
18
|
var _query = require("@webiny/db-dynamodb/utils/query");
|
|
19
|
+
|
|
13
20
|
var _keys = require("./keys");
|
|
21
|
+
|
|
14
22
|
var _cleanup = require("@webiny/db-dynamodb/utils/cleanup");
|
|
23
|
+
|
|
15
24
|
var _utils = require("@webiny/utils");
|
|
25
|
+
|
|
16
26
|
var _batchRead = require("@webiny/db-dynamodb/utils/batchRead");
|
|
27
|
+
|
|
17
28
|
const getAllEntryRevisions = params => {
|
|
18
29
|
const {
|
|
19
30
|
entity,
|
|
@@ -25,6 +36,7 @@ const getAllEntryRevisions = params => {
|
|
|
25
36
|
} = model;
|
|
26
37
|
return new _dataloader.default(async ids => {
|
|
27
38
|
const results = {};
|
|
39
|
+
|
|
28
40
|
for (const id of ids) {
|
|
29
41
|
const queryAllParams = {
|
|
30
42
|
entity,
|
|
@@ -40,11 +52,13 @@ const getAllEntryRevisions = params => {
|
|
|
40
52
|
const items = await (0, _query.queryAll)(queryAllParams);
|
|
41
53
|
results[id] = (0, _cleanup.cleanupItems)(entity, items);
|
|
42
54
|
}
|
|
55
|
+
|
|
43
56
|
return ids.map(id => {
|
|
44
57
|
return results[id] || [];
|
|
45
58
|
});
|
|
46
59
|
});
|
|
47
60
|
};
|
|
61
|
+
|
|
48
62
|
const getRevisionById = params => {
|
|
49
63
|
const {
|
|
50
64
|
entity,
|
|
@@ -64,16 +78,20 @@ const getRevisionById = params => {
|
|
|
64
78
|
const {
|
|
65
79
|
version
|
|
66
80
|
} = (0, _utils.parseIdentifier)(id);
|
|
81
|
+
|
|
67
82
|
if (version === null) {
|
|
68
83
|
return collection;
|
|
69
84
|
}
|
|
85
|
+
|
|
70
86
|
const sortKey = (0, _keys.createRevisionSortKey)({
|
|
71
87
|
version
|
|
72
88
|
});
|
|
73
89
|
const keys = `${partitionKey}__${sortKey}`;
|
|
90
|
+
|
|
74
91
|
if (collection[keys]) {
|
|
75
92
|
return collection;
|
|
76
93
|
}
|
|
94
|
+
|
|
77
95
|
collection[keys] = entity.getBatch({
|
|
78
96
|
PK: partitionKey,
|
|
79
97
|
SK: sortKey
|
|
@@ -95,6 +113,7 @@ const getRevisionById = params => {
|
|
|
95
113
|
});
|
|
96
114
|
});
|
|
97
115
|
};
|
|
116
|
+
|
|
98
117
|
const getPublishedRevisionByEntryId = params => {
|
|
99
118
|
const {
|
|
100
119
|
entity,
|
|
@@ -112,9 +131,11 @@ const getPublishedRevisionByEntryId = params => {
|
|
|
112
131
|
locale,
|
|
113
132
|
id
|
|
114
133
|
});
|
|
134
|
+
|
|
115
135
|
if (collection[partitionKey]) {
|
|
116
136
|
return collection;
|
|
117
137
|
}
|
|
138
|
+
|
|
118
139
|
collection[partitionKey] = entity.getBatch({
|
|
119
140
|
PK: partitionKey,
|
|
120
141
|
SK: publishedKey
|
|
@@ -139,6 +160,7 @@ const getPublishedRevisionByEntryId = params => {
|
|
|
139
160
|
});
|
|
140
161
|
});
|
|
141
162
|
};
|
|
163
|
+
|
|
142
164
|
const getLatestRevisionByEntryId = params => {
|
|
143
165
|
const {
|
|
144
166
|
entity,
|
|
@@ -156,9 +178,11 @@ const getLatestRevisionByEntryId = params => {
|
|
|
156
178
|
locale,
|
|
157
179
|
id
|
|
158
180
|
});
|
|
181
|
+
|
|
159
182
|
if (collection[partitionKey]) {
|
|
160
183
|
return collection;
|
|
161
184
|
}
|
|
185
|
+
|
|
162
186
|
collection[partitionKey] = entity.getBatch({
|
|
163
187
|
PK: partitionKey,
|
|
164
188
|
SK: latestKey
|
|
@@ -183,6 +207,7 @@ const getLatestRevisionByEntryId = params => {
|
|
|
183
207
|
});
|
|
184
208
|
});
|
|
185
209
|
};
|
|
210
|
+
|
|
186
211
|
const dataLoaders = {
|
|
187
212
|
getAllEntryRevisions,
|
|
188
213
|
getRevisionById,
|
|
@@ -190,35 +215,42 @@ const dataLoaders = {
|
|
|
190
215
|
getLatestRevisionByEntryId
|
|
191
216
|
};
|
|
192
217
|
const loaderNames = Object.keys(dataLoaders);
|
|
218
|
+
|
|
193
219
|
class DataLoadersHandler {
|
|
194
220
|
constructor(params) {
|
|
195
221
|
(0, _defineProperty2.default)(this, "loaders", new Map());
|
|
196
222
|
(0, _defineProperty2.default)(this, "entity", void 0);
|
|
197
223
|
this.entity = params.entity;
|
|
198
224
|
}
|
|
225
|
+
|
|
199
226
|
async getAllEntryRevisions(params) {
|
|
200
227
|
return await this.loadMany("getAllEntryRevisions", params, params.ids);
|
|
201
228
|
}
|
|
229
|
+
|
|
202
230
|
async getRevisionById(params) {
|
|
203
231
|
return await this.loadMany("getRevisionById", params, params.ids);
|
|
204
232
|
}
|
|
233
|
+
|
|
205
234
|
async getPublishedRevisionByEntryId(params) {
|
|
206
235
|
return await this.loadMany("getPublishedRevisionByEntryId", params, params.ids);
|
|
207
236
|
}
|
|
237
|
+
|
|
208
238
|
async getLatestRevisionByEntryId(params) {
|
|
209
239
|
return await this.loadMany("getLatestRevisionByEntryId", params, params.ids);
|
|
210
240
|
}
|
|
211
|
-
|
|
212
241
|
/**
|
|
213
242
|
* TODO @ts-refactor
|
|
214
243
|
* Maybe pass on the generics to DataLoader definition?
|
|
215
244
|
*/
|
|
245
|
+
|
|
246
|
+
|
|
216
247
|
getLoader(name, params) {
|
|
217
248
|
if (!dataLoaders[name]) {
|
|
218
249
|
throw new _error.default("Unknown data loader.", "UNKNOWN_DATA_LOADER", {
|
|
219
250
|
name
|
|
220
251
|
});
|
|
221
252
|
}
|
|
253
|
+
|
|
222
254
|
const {
|
|
223
255
|
model
|
|
224
256
|
} = params;
|
|
@@ -227,17 +259,22 @@ class DataLoadersHandler {
|
|
|
227
259
|
locale
|
|
228
260
|
} = model;
|
|
229
261
|
const loaderKey = `${name}-${tenant}-${locale}-${model.modelId}`;
|
|
262
|
+
|
|
230
263
|
if (!this.loaders.has(loaderKey)) {
|
|
231
264
|
this.loaders.set(loaderKey, dataLoaders[name]((0, _objectSpread2.default)((0, _objectSpread2.default)({}, params), {}, {
|
|
232
265
|
entity: this.entity
|
|
233
266
|
})));
|
|
234
267
|
}
|
|
268
|
+
|
|
235
269
|
return this.loaders.get(loaderKey);
|
|
236
270
|
}
|
|
271
|
+
|
|
237
272
|
async loadMany(loader, params, ids) {
|
|
238
273
|
let results;
|
|
274
|
+
|
|
239
275
|
try {
|
|
240
276
|
results = await this.getLoader(loader, params).loadMany(ids);
|
|
277
|
+
|
|
241
278
|
if (Array.isArray(results) === true) {
|
|
242
279
|
return results.reduce((acc, res) => {
|
|
243
280
|
if (Array.isArray(res) === false) {
|
|
@@ -246,10 +283,12 @@ class DataLoadersHandler {
|
|
|
246
283
|
data: JSON.stringify(res.data || {})
|
|
247
284
|
}));
|
|
248
285
|
}
|
|
286
|
+
|
|
249
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), {}, {
|
|
250
288
|
loader
|
|
251
289
|
}));
|
|
252
290
|
}
|
|
291
|
+
|
|
253
292
|
acc.push(...res);
|
|
254
293
|
return acc;
|
|
255
294
|
}, []);
|
|
@@ -262,17 +301,21 @@ class DataLoadersHandler {
|
|
|
262
301
|
ids
|
|
263
302
|
}));
|
|
264
303
|
}
|
|
304
|
+
|
|
265
305
|
throw new _error.default(`Data loader did not return array of items or empty array.`, "INVALID_DATA_LOADER_RESULT", {
|
|
266
306
|
loader,
|
|
267
307
|
ids,
|
|
268
308
|
results
|
|
269
309
|
});
|
|
270
310
|
}
|
|
311
|
+
|
|
271
312
|
clearAll(params) {
|
|
272
313
|
for (const name of loaderNames) {
|
|
273
314
|
const loader = this.getLoader(name, params);
|
|
274
315
|
loader.clearAll();
|
|
275
316
|
}
|
|
276
317
|
}
|
|
318
|
+
|
|
277
319
|
}
|
|
320
|
+
|
|
278
321
|
exports.DataLoadersHandler = DataLoadersHandler;
|
|
@@ -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":["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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"}
|