@webiny/api-headless-cms-ddb-es 0.0.0-unstable.9e825fd5fb → 0.0.0-unstable.aa00eecd97
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/elasticsearch/indexing/objectIndexing.js +16 -7
- package/elasticsearch/indexing/objectIndexing.js.map +1 -1
- package/helpers/entryIndexHelpers.js +17 -8
- package/helpers/entryIndexHelpers.js.map +1 -1
- package/helpers/fieldIdentifier.d.ts +6 -0
- package/helpers/fieldIdentifier.js +39 -0
- package/helpers/fieldIdentifier.js.map +1 -0
- package/helpers/index.d.ts +1 -0
- package/helpers/index.js +11 -0
- package/helpers/index.js.map +1 -1
- package/index.js +10 -7
- package/index.js.map +1 -1
- package/operations/entry/dataLoader/DataLoaderCache.d.ts +17 -0
- package/operations/entry/dataLoader/DataLoaderCache.js +43 -0
- package/operations/entry/dataLoader/DataLoaderCache.js.map +1 -0
- package/operations/entry/dataLoader/constants.d.ts +1 -0
- package/operations/entry/dataLoader/constants.js +9 -0
- package/operations/entry/dataLoader/constants.js.map +1 -0
- package/operations/entry/dataLoader/createBatchScheduleFn.d.ts +8 -0
- package/operations/entry/dataLoader/createBatchScheduleFn.js +23 -0
- package/operations/entry/dataLoader/createBatchScheduleFn.js.map +1 -0
- package/operations/entry/dataLoader/getAllEntryRevisions.d.ts +4 -0
- package/operations/entry/dataLoader/getAllEntryRevisions.js +43 -0
- package/operations/entry/dataLoader/getAllEntryRevisions.js.map +1 -0
- package/operations/entry/dataLoader/getLatestRevisionByEntryId.d.ts +4 -0
- package/operations/entry/dataLoader/getLatestRevisionByEntryId.js +53 -0
- package/operations/entry/dataLoader/getLatestRevisionByEntryId.js.map +1 -0
- package/operations/entry/dataLoader/getPublishedRevisionByEntryId.d.ts +4 -0
- package/operations/entry/dataLoader/getPublishedRevisionByEntryId.js +53 -0
- package/operations/entry/dataLoader/getPublishedRevisionByEntryId.js.map +1 -0
- package/operations/entry/dataLoader/getRevisionById.d.ts +4 -0
- package/operations/entry/dataLoader/getRevisionById.js +63 -0
- package/operations/entry/dataLoader/getRevisionById.js.map +1 -0
- package/operations/entry/dataLoader/index.d.ts +8 -0
- package/operations/entry/dataLoader/index.js +38 -0
- package/operations/entry/dataLoader/index.js.map +1 -0
- package/operations/entry/dataLoader/types.d.ts +6 -0
- package/operations/entry/dataLoader/types.js +5 -0
- package/operations/entry/dataLoader/types.js.map +1 -0
- package/operations/entry/dataLoaders.d.ts +15 -36
- package/operations/entry/dataLoaders.js +43 -241
- package/operations/entry/dataLoaders.js.map +1 -1
- package/operations/entry/elasticsearch/body.js +1 -1
- package/operations/entry/elasticsearch/body.js.map +1 -1
- package/operations/entry/elasticsearch/fields.d.ts +5 -4
- package/operations/entry/elasticsearch/fields.js +73 -41
- package/operations/entry/elasticsearch/fields.js.map +1 -1
- package/operations/entry/elasticsearch/filtering/exec.js +1 -1
- package/operations/entry/elasticsearch/filtering/exec.js.map +1 -1
- package/operations/entry/elasticsearch/filtering/path.js +1 -1
- package/operations/entry/elasticsearch/filtering/path.js.map +1 -1
- package/operations/entry/elasticsearch/filtering/plugins/defaultFilterPlugin.js +1 -1
- package/operations/entry/elasticsearch/filtering/plugins/defaultFilterPlugin.js.map +1 -1
- package/operations/entry/elasticsearch/sort.js +5 -6
- package/operations/entry/elasticsearch/sort.js.map +1 -1
- package/operations/entry/elasticsearch/types.d.ts +3 -3
- package/operations/entry/elasticsearch/types.js.map +1 -1
- package/operations/entry/index.d.ts +1 -1
- package/operations/entry/index.js +206 -21
- package/operations/entry/index.js.map +1 -1
- package/package.json +32 -33
- package/plugins/CmsElasticsearchModelFieldPlugin.d.ts +69 -0
- package/plugins/CmsElasticsearchModelFieldPlugin.js +48 -0
- package/plugins/CmsElasticsearchModelFieldPlugin.js.map +1 -0
- package/plugins/index.d.ts +1 -1
- package/plugins/index.js +11 -11
- package/plugins/index.js.map +1 -1
- package/types.d.ts +11 -2
- package/types.js.map +1 -1
- package/plugins/CmsEntryElasticsearchFieldPlugin.d.ts +0 -12
- package/plugins/CmsEntryElasticsearchFieldPlugin.js +0 -18
- package/plugins/CmsEntryElasticsearchFieldPlugin.js.map +0 -1
|
@@ -4,6 +4,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
|
+
var _helpers = require("../../helpers");
|
|
7
8
|
/**
|
|
8
9
|
* TODO remove rawValue when field aliases and field types targeting will be active.
|
|
9
10
|
*
|
|
@@ -28,23 +29,27 @@ const processToIndex = ({
|
|
|
28
29
|
if (!plugin || !plugin.toIndex) {
|
|
29
30
|
return values;
|
|
30
31
|
}
|
|
32
|
+
const identifiers = (0, _helpers.getFieldIdentifiers)(sourceValue, sourceRawValue, field);
|
|
33
|
+
if (!identifiers) {
|
|
34
|
+
return values;
|
|
35
|
+
}
|
|
31
36
|
const {
|
|
32
37
|
value,
|
|
33
38
|
rawValue
|
|
34
39
|
} = plugin.toIndex({
|
|
35
40
|
model,
|
|
36
41
|
field,
|
|
37
|
-
value: sourceValue[
|
|
38
|
-
rawValue: sourceRawValue[
|
|
42
|
+
value: sourceValue[identifiers.valueIdentifier || identifiers.rawValueIdentifier],
|
|
43
|
+
rawValue: sourceRawValue[identifiers.rawValueIdentifier || identifiers.valueIdentifier],
|
|
39
44
|
getFieldIndexPlugin,
|
|
40
45
|
getFieldTypePlugin,
|
|
41
46
|
plugins
|
|
42
47
|
});
|
|
43
48
|
if (value !== undefined) {
|
|
44
|
-
values.value[
|
|
49
|
+
values.value[identifiers.valueIdentifier || identifiers.rawValueIdentifier] = value;
|
|
45
50
|
}
|
|
46
51
|
if (rawValue !== undefined) {
|
|
47
|
-
values.rawValue[
|
|
52
|
+
values.rawValue[identifiers.rawValueIdentifier || identifiers.valueIdentifier] = rawValue;
|
|
48
53
|
}
|
|
49
54
|
return values;
|
|
50
55
|
};
|
|
@@ -67,17 +72,21 @@ const processFromIndex = ({
|
|
|
67
72
|
if (!plugin || !plugin.fromIndex) {
|
|
68
73
|
return values;
|
|
69
74
|
}
|
|
75
|
+
const identifiers = (0, _helpers.getFieldIdentifiers)(sourceValue, sourceRawValue, field);
|
|
76
|
+
if (!identifiers) {
|
|
77
|
+
return values;
|
|
78
|
+
}
|
|
70
79
|
const value = plugin.fromIndex({
|
|
71
80
|
plugins,
|
|
72
81
|
model,
|
|
73
82
|
field,
|
|
74
|
-
value: sourceValue[
|
|
75
|
-
rawValue: sourceRawValue[
|
|
83
|
+
value: sourceValue[identifiers.valueIdentifier || identifiers.rawValueIdentifier],
|
|
84
|
+
rawValue: sourceRawValue[identifiers.rawValueIdentifier || identifiers.valueIdentifier],
|
|
76
85
|
getFieldIndexPlugin,
|
|
77
86
|
getFieldTypePlugin
|
|
78
87
|
});
|
|
79
88
|
if (value !== undefined) {
|
|
80
|
-
values[
|
|
89
|
+
values[identifiers.valueIdentifier || identifiers.rawValueIdentifier] = value;
|
|
81
90
|
}
|
|
82
91
|
return values;
|
|
83
92
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["processToIndex","fields","value","sourceValue","rawValue","sourceRawValue","getFieldIndexPlugin","getFieldTypePlugin","plugins","model","reducer","values","field","plugin","type","toIndex","storageId","undefined","reduce","processFromIndex","fromIndex","name","fieldType","initialValue","initialRawValue","settings","multipleValues","result","key","Object","keys","length","push","source","map","_","index"],"sources":["objectIndexing.ts"],"sourcesContent":["/**\n * TODO remove rawValue when field aliases and field types targeting will be active.\n *\n * Currently we use rawValue for the values that we do not want to be indexed.\n * When field aliases and types in the value path will be active, we can target the keys directly.\n *\n * This change will be incompatible with the current systems so we will need to release a major version.\n *\n */\n\nimport { CmsModelFieldToElasticsearchPlugin } from \"~/types\";\nimport {\n CmsModel,\n CmsModelField,\n CmsModelFieldToGraphQLPlugin\n} from \"@webiny/api-headless-cms/types\";\nimport { PluginsContainer } from \"@webiny/plugins\";\n\ninterface ProcessToIndex {\n (params: {\n fields: CmsModelField[];\n value: Record<string, any>;\n rawValue: Record<string, any>;\n getFieldIndexPlugin: (fieldType: string) => CmsModelFieldToElasticsearchPlugin;\n getFieldTypePlugin: (fieldType: string) => CmsModelFieldToGraphQLPlugin;\n plugins: PluginsContainer;\n model: CmsModel;\n }): Record<\"value\" | \"rawValue\", Record<string, any>>;\n}\n\ninterface ProcessFromIndex {\n (params: {\n fields: CmsModelField[];\n value: Record<string, any>;\n rawValue: Record<string, any>;\n getFieldIndexPlugin: (fieldType: string) => CmsModelFieldToElasticsearchPlugin;\n getFieldTypePlugin: (fieldType: string) => CmsModelFieldToGraphQLPlugin;\n plugins: PluginsContainer;\n model: CmsModel;\n }): Record<string, any>;\n}\n\ninterface ReducerValue {\n value: {\n [key: string]: string;\n };\n rawValue: {\n [key: string]: string;\n };\n}\n\nconst processToIndex: ProcessToIndex = ({\n fields,\n value: sourceValue,\n rawValue: sourceRawValue,\n getFieldIndexPlugin,\n getFieldTypePlugin,\n plugins,\n model\n}) => {\n const reducer = (values: ReducerValue, field: CmsModelField) => {\n const plugin = getFieldIndexPlugin(field.type);\n if (!plugin || !plugin.toIndex) {\n return values;\n }\n const { value, rawValue } = plugin.toIndex({\n model,\n field,\n value: sourceValue[field.storageId],\n rawValue: sourceRawValue[field.storageId],\n getFieldIndexPlugin,\n getFieldTypePlugin,\n plugins\n });\n\n if (value !== undefined) {\n values.value[field.storageId] = value;\n }\n if (rawValue !== undefined) {\n values.rawValue[field.storageId] = rawValue;\n }\n\n return values;\n };\n\n return fields.reduce(reducer, { value: {}, rawValue: {} });\n};\nconst processFromIndex: ProcessFromIndex = ({\n fields,\n value: sourceValue,\n rawValue: sourceRawValue,\n getFieldIndexPlugin,\n getFieldTypePlugin,\n plugins,\n model\n}) => {\n const reducer = (values: Record<string, string>, field: CmsModelField) => {\n const plugin = getFieldIndexPlugin(field.type);\n if (!plugin || !plugin.fromIndex) {\n return values;\n }\n const value = plugin.fromIndex({\n plugins,\n model,\n field,\n value: sourceValue[field.storageId],\n rawValue: sourceRawValue[field.storageId],\n getFieldIndexPlugin,\n getFieldTypePlugin\n });\n\n if (value !== undefined) {\n values[field.storageId] = value;\n }\n\n return values;\n };\n\n return fields.reduce(reducer, {});\n};\n\ninterface ToIndexMultipleFieldValue {\n value: Record<string, string>[];\n rawValue: Record<string, string>[];\n}\n\nexport default (): CmsModelFieldToElasticsearchPlugin => ({\n type: \"cms-model-field-to-elastic-search\",\n name: \"cms-model-field-to-elastic-search-object\",\n fieldType: \"object\",\n toIndex({\n plugins,\n model,\n field,\n value: initialValue,\n rawValue: initialRawValue,\n getFieldIndexPlugin,\n getFieldTypePlugin\n }) {\n if (!initialValue) {\n return { value: null };\n }\n\n const fields = (field.settings?.fields || []) as CmsModelField[];\n\n /**\n * In \"object\" field, value is either an object or an array of objects.\n */\n if (field.multipleValues) {\n const result: ToIndexMultipleFieldValue = {\n value: [],\n rawValue: []\n };\n for (const key in initialValue) {\n const { value, rawValue } = processToIndex({\n value: initialValue[key],\n rawValue: initialRawValue[key],\n getFieldIndexPlugin,\n getFieldTypePlugin,\n model,\n plugins,\n fields\n });\n if (Object.keys(value).length > 0) {\n result.value.push(value);\n }\n\n if (Object.keys(rawValue).length > 0) {\n result.rawValue.push(rawValue);\n }\n }\n\n return {\n value: result.value.length > 0 ? result.value : undefined,\n rawValue: result.rawValue.length > 0 ? result.rawValue : undefined\n };\n }\n\n return processToIndex({\n value: initialValue,\n rawValue: initialRawValue,\n getFieldIndexPlugin,\n getFieldTypePlugin,\n model,\n plugins,\n fields\n });\n },\n fromIndex({ field, value, rawValue, model, plugins, getFieldIndexPlugin, getFieldTypePlugin }) {\n if (!value) {\n return null;\n }\n\n const fields = field.settings?.fields || [];\n\n /**\n * In \"object\" field, value is either an object or an array of objects.\n */\n if (field.multipleValues) {\n /**\n * Why this `value || rawValue || []`?\n * It's possible that an object contains all non-indexable fields, or vice-versa, and so\n * we can never be sure which array we can reliably use as a source of values.\n */\n const source = value || rawValue || [];\n\n return source.map((_: any, index: number) =>\n processFromIndex({\n value: value ? value[index] || {} : {},\n rawValue: rawValue ? rawValue[index] || {} : {},\n getFieldIndexPlugin,\n getFieldTypePlugin,\n model,\n plugins,\n fields\n })\n );\n }\n\n return processFromIndex({\n value,\n rawValue,\n getFieldIndexPlugin,\n getFieldTypePlugin,\n model,\n plugins,\n fields\n });\n }\n});\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["processToIndex","fields","value","sourceValue","rawValue","sourceRawValue","getFieldIndexPlugin","getFieldTypePlugin","plugins","model","reducer","values","field","plugin","type","toIndex","identifiers","getFieldIdentifiers","valueIdentifier","rawValueIdentifier","undefined","reduce","processFromIndex","fromIndex","name","fieldType","initialValue","initialRawValue","settings","multipleValues","result","key","Object","keys","length","push","source","map","_","index"],"sources":["objectIndexing.ts"],"sourcesContent":["/**\n * TODO remove rawValue when field aliases and field types targeting will be active.\n *\n * Currently we use rawValue for the values that we do not want to be indexed.\n * When field aliases and types in the value path will be active, we can target the keys directly.\n *\n * This change will be incompatible with the current systems so we will need to release a major version.\n *\n */\n\nimport { CmsModelFieldToElasticsearchPlugin } from \"~/types\";\nimport {\n CmsModel,\n CmsModelField,\n CmsModelFieldToGraphQLPlugin\n} from \"@webiny/api-headless-cms/types\";\nimport { PluginsContainer } from \"@webiny/plugins\";\nimport { getFieldIdentifiers } from \"~/helpers\";\n\ninterface ProcessToIndex {\n (params: {\n fields: CmsModelField[];\n value: Record<string, any>;\n rawValue: Record<string, any>;\n getFieldIndexPlugin: (fieldType: string) => CmsModelFieldToElasticsearchPlugin;\n getFieldTypePlugin: (fieldType: string) => CmsModelFieldToGraphQLPlugin;\n plugins: PluginsContainer;\n model: CmsModel;\n }): Record<\"value\" | \"rawValue\", Record<string, any>>;\n}\n\ninterface ProcessFromIndex {\n (params: {\n fields: CmsModelField[];\n value: Record<string, any>;\n rawValue: Record<string, any>;\n getFieldIndexPlugin: (fieldType: string) => CmsModelFieldToElasticsearchPlugin;\n getFieldTypePlugin: (fieldType: string) => CmsModelFieldToGraphQLPlugin;\n plugins: PluginsContainer;\n model: CmsModel;\n }): Record<string, any>;\n}\n\ninterface ReducerValue {\n value: {\n [key: string]: string;\n };\n rawValue: {\n [key: string]: string;\n };\n}\n\nconst processToIndex: ProcessToIndex = ({\n fields,\n value: sourceValue,\n rawValue: sourceRawValue,\n getFieldIndexPlugin,\n getFieldTypePlugin,\n plugins,\n model\n}) => {\n const reducer = (values: ReducerValue, field: CmsModelField) => {\n const plugin = getFieldIndexPlugin(field.type);\n if (!plugin || !plugin.toIndex) {\n return values;\n }\n\n const identifiers = getFieldIdentifiers(sourceValue, sourceRawValue, field);\n if (!identifiers) {\n return values;\n }\n\n const { value, rawValue } = plugin.toIndex({\n model,\n field,\n value: sourceValue[identifiers.valueIdentifier || identifiers.rawValueIdentifier],\n rawValue: sourceRawValue[identifiers.rawValueIdentifier || identifiers.valueIdentifier],\n getFieldIndexPlugin,\n getFieldTypePlugin,\n plugins\n });\n\n if (value !== undefined) {\n values.value[identifiers.valueIdentifier || identifiers.rawValueIdentifier] = value;\n }\n if (rawValue !== undefined) {\n values.rawValue[identifiers.rawValueIdentifier || identifiers.valueIdentifier] =\n rawValue;\n }\n\n return values;\n };\n\n return fields.reduce(reducer, { value: {}, rawValue: {} });\n};\nconst processFromIndex: ProcessFromIndex = ({\n fields,\n value: sourceValue,\n rawValue: sourceRawValue,\n getFieldIndexPlugin,\n getFieldTypePlugin,\n plugins,\n model\n}) => {\n const reducer = (values: Record<string, string>, field: CmsModelField) => {\n const plugin = getFieldIndexPlugin(field.type);\n if (!plugin || !plugin.fromIndex) {\n return values;\n }\n const identifiers = getFieldIdentifiers(sourceValue, sourceRawValue, field);\n if (!identifiers) {\n return values;\n }\n\n const value = plugin.fromIndex({\n plugins,\n model,\n field,\n value: sourceValue[identifiers.valueIdentifier || identifiers.rawValueIdentifier],\n rawValue: sourceRawValue[identifiers.rawValueIdentifier || identifiers.valueIdentifier],\n getFieldIndexPlugin,\n getFieldTypePlugin\n });\n\n if (value !== undefined) {\n values[identifiers.valueIdentifier || identifiers.rawValueIdentifier] = value;\n }\n\n return values;\n };\n\n return fields.reduce(reducer, {});\n};\n\ninterface ToIndexMultipleFieldValue {\n value: Record<string, string>[];\n rawValue: Record<string, string>[];\n}\n\nexport default (): CmsModelFieldToElasticsearchPlugin => ({\n type: \"cms-model-field-to-elastic-search\",\n name: \"cms-model-field-to-elastic-search-object\",\n fieldType: \"object\",\n toIndex({\n plugins,\n model,\n field,\n value: initialValue,\n rawValue: initialRawValue,\n getFieldIndexPlugin,\n getFieldTypePlugin\n }) {\n if (!initialValue) {\n return {\n value: null\n };\n }\n\n const fields = (field.settings?.fields || []) as CmsModelField[];\n\n /**\n * In \"object\" field, value is either an object or an array of objects.\n */\n if (field.multipleValues) {\n const result: ToIndexMultipleFieldValue = {\n value: [],\n rawValue: []\n };\n for (const key in initialValue) {\n const { value, rawValue } = processToIndex({\n value: initialValue[key],\n rawValue: initialRawValue[key],\n getFieldIndexPlugin,\n getFieldTypePlugin,\n model,\n plugins,\n fields\n });\n if (Object.keys(value).length > 0) {\n result.value.push(value);\n }\n\n if (Object.keys(rawValue).length > 0) {\n result.rawValue.push(rawValue);\n }\n }\n\n return {\n value: result.value.length > 0 ? result.value : undefined,\n rawValue: result.rawValue.length > 0 ? result.rawValue : undefined\n };\n }\n\n return processToIndex({\n value: initialValue,\n rawValue: initialRawValue,\n getFieldIndexPlugin,\n getFieldTypePlugin,\n model,\n plugins,\n fields\n });\n },\n fromIndex({ field, value, rawValue, model, plugins, getFieldIndexPlugin, getFieldTypePlugin }) {\n if (!value) {\n return null;\n }\n\n const fields = field.settings?.fields || [];\n\n /**\n * In \"object\" field, value is either an object or an array of objects.\n */\n if (field.multipleValues) {\n /**\n * Why this `value || rawValue || []`?\n * It's possible that an object contains all non-indexable fields, or vice-versa, and so\n * we can never be sure which array we can reliably use as a source of values.\n */\n const source = value || rawValue || [];\n\n return source.map((_: any, index: number) =>\n processFromIndex({\n value: value ? value[index] || {} : {},\n rawValue: rawValue ? rawValue[index] || {} : {},\n getFieldIndexPlugin,\n getFieldTypePlugin,\n model,\n plugins,\n fields\n })\n );\n }\n\n return processFromIndex({\n value,\n rawValue,\n getFieldIndexPlugin,\n getFieldTypePlugin,\n model,\n plugins,\n fields\n });\n }\n});\n"],"mappings":"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"}
|
|
@@ -7,6 +7,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
7
7
|
exports.prepareEntryToIndex = exports.extractEntriesFromIndex = void 0;
|
|
8
8
|
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
|
|
9
9
|
var _error = _interopRequireDefault(require("@webiny/error"));
|
|
10
|
+
var _fieldIdentifier = require("./fieldIdentifier");
|
|
10
11
|
const prepareEntryToIndex = params => {
|
|
11
12
|
const {
|
|
12
13
|
plugins,
|
|
@@ -38,7 +39,8 @@ const prepareEntryToIndex = params => {
|
|
|
38
39
|
|
|
39
40
|
// We're only interested in current model fields.
|
|
40
41
|
for (const field of model.fields) {
|
|
41
|
-
|
|
42
|
+
const identifier = (0, _fieldIdentifier.getFieldIdentifier)(storageEntry.values, field);
|
|
43
|
+
if (!identifier) {
|
|
42
44
|
continue;
|
|
43
45
|
}
|
|
44
46
|
const targetFieldPlugin = getFieldIndexPlugin(field.type);
|
|
@@ -54,16 +56,16 @@ const prepareEntryToIndex = params => {
|
|
|
54
56
|
plugins,
|
|
55
57
|
model,
|
|
56
58
|
field,
|
|
57
|
-
rawValue: entry.values[
|
|
58
|
-
value: storageEntry.values[
|
|
59
|
+
rawValue: entry.values[identifier],
|
|
60
|
+
value: storageEntry.values[identifier],
|
|
59
61
|
getFieldIndexPlugin,
|
|
60
62
|
getFieldTypePlugin
|
|
61
63
|
});
|
|
62
64
|
if (typeof value !== "undefined") {
|
|
63
|
-
values[
|
|
65
|
+
values[identifier] = value;
|
|
64
66
|
}
|
|
65
67
|
if (typeof rawValue !== "undefined") {
|
|
66
|
-
rawValues[
|
|
68
|
+
rawValues[identifier] = rawValue;
|
|
67
69
|
}
|
|
68
70
|
}
|
|
69
71
|
return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, storageEntry), {}, {
|
|
@@ -129,18 +131,25 @@ const extractEntriesFromIndex = ({
|
|
|
129
131
|
if (!targetFieldPlugin || !targetFieldPlugin.fromIndex) {
|
|
130
132
|
continue;
|
|
131
133
|
}
|
|
134
|
+
/**
|
|
135
|
+
* We can safely cast as the code will not continue in case of no identifiers.
|
|
136
|
+
*/
|
|
137
|
+
const identifiers = (0, _fieldIdentifier.getFieldIdentifiers)(entry.values, entry.rawValues, field);
|
|
138
|
+
if (!identifiers) {
|
|
139
|
+
continue;
|
|
140
|
+
}
|
|
132
141
|
try {
|
|
133
|
-
indexValues[
|
|
142
|
+
indexValues[identifiers.valueIdentifier] = targetFieldPlugin.fromIndex({
|
|
134
143
|
plugins,
|
|
135
144
|
model,
|
|
136
145
|
field,
|
|
137
146
|
getFieldIndexPlugin,
|
|
138
147
|
getFieldTypePlugin,
|
|
139
|
-
value: entry.values[
|
|
148
|
+
value: entry.values[identifiers.valueIdentifier || identifiers.rawValueIdentifier],
|
|
140
149
|
/**
|
|
141
150
|
* Possibly no rawValues so we must check for the existence of the field.
|
|
142
151
|
*/
|
|
143
|
-
rawValue: entry.rawValues ? entry.rawValues[
|
|
152
|
+
rawValue: entry.rawValues ? entry.rawValues[identifiers.rawValueIdentifier || identifiers.valueIdentifier] : null
|
|
144
153
|
});
|
|
145
154
|
} catch (ex) {
|
|
146
155
|
throw new _error.default(ex.message || "Could not transform entry field from index.", ex.code || "FIELD_FROM_INDEX_ERROR", {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["prepareEntryToIndex","params","plugins","storageEntry","entry","model","fieldIndexPlugins","defaultIndexFieldPlugin","fieldTypePlugins","setupEntriesIndexHelpers","getFieldIndexPlugin","fieldType","getFieldTypePlugin","pl","WebinyError","values","rawValues","field","fields","hasOwnProperty","storageId","targetFieldPlugin","type","toIndex","value","rawValue","pluginsContainer","byType","plugin","reverse","find","reduce","extractEntriesFromIndex","entries","list","indexValues","fieldTypePlugin","fromIndex","ex","message","code","newEntry","push"],"sources":["entryIndexHelpers.ts"],"sourcesContent":["import WebinyError from \"@webiny/error\";\nimport { CmsEntry, CmsModel, CmsModelFieldToGraphQLPlugin } from \"@webiny/api-headless-cms/types\";\nimport { CmsIndexEntry, CmsModelFieldToElasticsearchPlugin } from \"~/types\";\nimport { PluginsContainer } from \"@webiny/plugins\";\n\ninterface SetupEntriesIndexHelpersParams {\n plugins: PluginsContainer;\n}\n\ninterface ExtractEntriesFromIndexParams extends SetupEntriesIndexHelpersParams {\n model: CmsModel;\n entries: CmsIndexEntry[];\n}\n\ninterface PrepareElasticsearchDataParams extends SetupEntriesIndexHelpersParams {\n model: CmsModel;\n entry: CmsEntry;\n storageEntry: CmsEntry;\n}\n\nexport const prepareEntryToIndex = (params: PrepareElasticsearchDataParams): CmsIndexEntry => {\n const { plugins, storageEntry, entry, model } = params;\n const { fieldIndexPlugins, defaultIndexFieldPlugin, fieldTypePlugins } =\n setupEntriesIndexHelpers({ plugins });\n\n function getFieldIndexPlugin(fieldType: string) {\n return fieldIndexPlugins[fieldType] || defaultIndexFieldPlugin;\n }\n\n function getFieldTypePlugin(fieldType: string) {\n const pl = fieldTypePlugins[fieldType];\n if (pl) {\n return pl;\n }\n throw new WebinyError(`Missing field type plugin \"${fieldType}\". Prepare entry for index.`);\n }\n\n // These objects will contain values processed by field index plugins\n const values: Record<string, string> = {};\n const rawValues: Record<string, string> = {};\n\n // We're only interested in current model fields.\n for (const field of model.fields) {\n if (storageEntry.values.hasOwnProperty(field.storageId) === false) {\n continue;\n }\n\n const targetFieldPlugin = getFieldIndexPlugin(field.type);\n\n // TODO: remove this `if` once we convert this plugin to proper plugin class\n if (!targetFieldPlugin || !targetFieldPlugin.toIndex) {\n continue;\n }\n\n const { value, rawValue } = targetFieldPlugin.toIndex({\n plugins,\n model,\n field,\n rawValue: entry.values[field.storageId],\n value: storageEntry.values[field.storageId],\n getFieldIndexPlugin,\n getFieldTypePlugin\n });\n\n if (typeof value !== \"undefined\") {\n values[field.storageId] = value;\n }\n\n if (typeof rawValue !== \"undefined\") {\n rawValues[field.storageId] = rawValue;\n }\n }\n return {\n ...storageEntry,\n values,\n rawValues\n } as CmsIndexEntry;\n};\n\nconst setupEntriesIndexHelpers = ({\n plugins: pluginsContainer\n}: SetupEntriesIndexHelpersParams) => {\n const plugins = pluginsContainer.byType<CmsModelFieldToElasticsearchPlugin>(\n \"cms-model-field-to-elastic-search\"\n );\n\n const fieldIndexPlugins: Record<string, CmsModelFieldToElasticsearchPlugin> = {};\n for (const plugin of plugins.reverse()) {\n if (fieldIndexPlugins[plugin.fieldType]) {\n continue;\n }\n fieldIndexPlugins[plugin.fieldType] = plugin;\n }\n // we will use this plugin if no targeted plugin found\n const defaultIndexFieldPlugin = plugins.find(plugin => plugin.fieldType === \"*\");\n\n // CmsModelFieldToGraphQLPlugin plugins\n const fieldTypePlugins: Record<string, CmsModelFieldToGraphQLPlugin> = pluginsContainer\n .byType<CmsModelFieldToGraphQLPlugin>(\"cms-model-field-to-graphql\")\n .reduce((plugins, plugin) => ({ ...plugins, [plugin.fieldType]: plugin }), {});\n\n return {\n fieldIndexPlugins,\n defaultIndexFieldPlugin,\n fieldTypePlugins\n };\n};\n\nexport const extractEntriesFromIndex = ({\n plugins,\n entries,\n model\n}: ExtractEntriesFromIndexParams): CmsEntry[] => {\n const { fieldIndexPlugins, defaultIndexFieldPlugin, fieldTypePlugins } =\n setupEntriesIndexHelpers({ plugins });\n\n function getFieldIndexPlugin(fieldType: string) {\n return fieldIndexPlugins[fieldType] || defaultIndexFieldPlugin;\n }\n\n function getFieldTypePlugin(fieldType: string) {\n return fieldTypePlugins[fieldType];\n }\n\n const list: CmsEntry[] = [];\n\n for (const entry of entries) {\n // This object will contain values processed by field index plugins\n const indexValues: Record<string, string> = {};\n\n // We only consider fields that are present in the model\n for (const field of model.fields) {\n const fieldTypePlugin = fieldTypePlugins[field.type];\n if (!fieldTypePlugin) {\n throw new WebinyError(\n `Missing field type plugin \"${field.type}\". Extract entries from index.`\n );\n }\n\n const targetFieldPlugin = getFieldIndexPlugin(field.type);\n if (!targetFieldPlugin || !targetFieldPlugin.fromIndex) {\n continue;\n }\n try {\n indexValues[field.storageId] = targetFieldPlugin.fromIndex({\n plugins,\n model,\n field,\n getFieldIndexPlugin,\n getFieldTypePlugin,\n value: entry.values[field.storageId],\n /**\n * Possibly no rawValues so we must check for the existence of the field.\n */\n rawValue: entry.rawValues ? entry.rawValues[field.storageId] : null\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not transform entry field from index.\",\n ex.code || \"FIELD_FROM_INDEX_ERROR\",\n {\n field,\n entry\n }\n );\n }\n }\n /**\n * Let's have a new entry so we do not modify the original one.\n */\n const newEntry: CmsEntry = {\n ...entry,\n values: indexValues\n };\n /**\n * If we want to remove the rawValues, TYPE, latest, published and __type, we must make them optional or ignore them.\n */\n // @ts-ignore\n delete newEntry[\"rawValues\"];\n // @ts-ignore\n delete newEntry[\"TYPE\"];\n // @ts-ignore\n delete newEntry[\"__type\"];\n // @ts-ignore\n delete newEntry[\"latest\"];\n // @ts-ignore\n delete newEntry[\"published\"];\n list.push({ ...newEntry });\n }\n\n return list;\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["prepareEntryToIndex","params","plugins","storageEntry","entry","model","fieldIndexPlugins","defaultIndexFieldPlugin","fieldTypePlugins","setupEntriesIndexHelpers","getFieldIndexPlugin","fieldType","getFieldTypePlugin","pl","WebinyError","values","rawValues","field","fields","identifier","getFieldIdentifier","targetFieldPlugin","type","toIndex","value","rawValue","pluginsContainer","byType","plugin","reverse","find","reduce","extractEntriesFromIndex","entries","list","indexValues","fieldTypePlugin","fromIndex","identifiers","getFieldIdentifiers","valueIdentifier","rawValueIdentifier","ex","message","code","newEntry","push"],"sources":["entryIndexHelpers.ts"],"sourcesContent":["import WebinyError from \"@webiny/error\";\nimport { CmsEntry, CmsModel, CmsModelFieldToGraphQLPlugin } from \"@webiny/api-headless-cms/types\";\nimport { CmsIndexEntry, CmsModelFieldToElasticsearchPlugin } from \"~/types\";\nimport { PluginsContainer } from \"@webiny/plugins\";\nimport { getFieldIdentifier, getFieldIdentifiers } from \"~/helpers/fieldIdentifier\";\n\ninterface SetupEntriesIndexHelpersParams {\n plugins: PluginsContainer;\n}\n\ninterface ExtractEntriesFromIndexParams extends SetupEntriesIndexHelpersParams {\n model: CmsModel;\n entries: CmsIndexEntry[];\n}\n\ninterface PrepareElasticsearchDataParams extends SetupEntriesIndexHelpersParams {\n model: CmsModel;\n entry: CmsEntry;\n storageEntry: CmsEntry;\n}\n\nexport const prepareEntryToIndex = (params: PrepareElasticsearchDataParams): CmsIndexEntry => {\n const { plugins, storageEntry, entry, model } = params;\n const { fieldIndexPlugins, defaultIndexFieldPlugin, fieldTypePlugins } =\n setupEntriesIndexHelpers({ plugins });\n\n function getFieldIndexPlugin(fieldType: string) {\n return fieldIndexPlugins[fieldType] || defaultIndexFieldPlugin;\n }\n\n function getFieldTypePlugin(fieldType: string) {\n const pl = fieldTypePlugins[fieldType];\n if (pl) {\n return pl;\n }\n throw new WebinyError(`Missing field type plugin \"${fieldType}\". Prepare entry for index.`);\n }\n\n // These objects will contain values processed by field index plugins\n const values: Record<string, string> = {};\n const rawValues: Record<string, string> = {};\n\n // We're only interested in current model fields.\n for (const field of model.fields) {\n const identifier = getFieldIdentifier(storageEntry.values, field);\n if (!identifier) {\n continue;\n }\n\n const targetFieldPlugin = getFieldIndexPlugin(field.type);\n\n // TODO: remove this `if` once we convert this plugin to proper plugin class\n if (!targetFieldPlugin || !targetFieldPlugin.toIndex) {\n continue;\n }\n\n const { value, rawValue } = targetFieldPlugin.toIndex({\n plugins,\n model,\n field,\n rawValue: entry.values[identifier],\n value: storageEntry.values[identifier],\n getFieldIndexPlugin,\n getFieldTypePlugin\n });\n\n if (typeof value !== \"undefined\") {\n values[identifier] = value;\n }\n\n if (typeof rawValue !== \"undefined\") {\n rawValues[identifier] = rawValue;\n }\n }\n return {\n ...storageEntry,\n values,\n rawValues\n } as CmsIndexEntry;\n};\n\nconst setupEntriesIndexHelpers = ({\n plugins: pluginsContainer\n}: SetupEntriesIndexHelpersParams) => {\n const plugins = pluginsContainer.byType<CmsModelFieldToElasticsearchPlugin>(\n \"cms-model-field-to-elastic-search\"\n );\n\n const fieldIndexPlugins: Record<string, CmsModelFieldToElasticsearchPlugin> = {};\n for (const plugin of plugins.reverse()) {\n if (fieldIndexPlugins[plugin.fieldType]) {\n continue;\n }\n fieldIndexPlugins[plugin.fieldType] = plugin;\n }\n // we will use this plugin if no targeted plugin found\n const defaultIndexFieldPlugin = plugins.find(plugin => plugin.fieldType === \"*\");\n\n // CmsModelFieldToGraphQLPlugin plugins\n const fieldTypePlugins: Record<string, CmsModelFieldToGraphQLPlugin> = pluginsContainer\n .byType<CmsModelFieldToGraphQLPlugin>(\"cms-model-field-to-graphql\")\n .reduce((plugins, plugin) => ({ ...plugins, [plugin.fieldType]: plugin }), {});\n\n return {\n fieldIndexPlugins,\n defaultIndexFieldPlugin,\n fieldTypePlugins\n };\n};\n\nexport const extractEntriesFromIndex = ({\n plugins,\n entries,\n model\n}: ExtractEntriesFromIndexParams): CmsEntry[] => {\n const { fieldIndexPlugins, defaultIndexFieldPlugin, fieldTypePlugins } =\n setupEntriesIndexHelpers({ plugins });\n\n function getFieldIndexPlugin(fieldType: string) {\n return fieldIndexPlugins[fieldType] || defaultIndexFieldPlugin;\n }\n\n function getFieldTypePlugin(fieldType: string) {\n return fieldTypePlugins[fieldType];\n }\n\n const list: CmsEntry[] = [];\n\n for (const entry of entries) {\n // This object will contain values processed by field index plugins\n const indexValues: Record<string, string> = {};\n\n // We only consider fields that are present in the model\n for (const field of model.fields) {\n const fieldTypePlugin = fieldTypePlugins[field.type];\n if (!fieldTypePlugin) {\n throw new WebinyError(\n `Missing field type plugin \"${field.type}\". Extract entries from index.`\n );\n }\n\n const targetFieldPlugin = getFieldIndexPlugin(field.type);\n if (!targetFieldPlugin || !targetFieldPlugin.fromIndex) {\n continue;\n }\n /**\n * We can safely cast as the code will not continue in case of no identifiers.\n */\n const identifiers = getFieldIdentifiers(entry.values, entry.rawValues, field);\n if (!identifiers) {\n continue;\n }\n\n try {\n indexValues[identifiers.valueIdentifier] = targetFieldPlugin.fromIndex({\n plugins,\n model,\n field,\n getFieldIndexPlugin,\n getFieldTypePlugin,\n value: entry.values[\n identifiers.valueIdentifier || identifiers.rawValueIdentifier\n ],\n /**\n * Possibly no rawValues so we must check for the existence of the field.\n */\n rawValue: entry.rawValues\n ? entry.rawValues[\n identifiers.rawValueIdentifier || identifiers.valueIdentifier\n ]\n : null\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not transform entry field from index.\",\n ex.code || \"FIELD_FROM_INDEX_ERROR\",\n {\n field,\n entry\n }\n );\n }\n }\n /**\n * Let's have a new entry so we do not modify the original one.\n */\n const newEntry: CmsEntry = {\n ...entry,\n values: indexValues\n };\n /**\n * If we want to remove the rawValues, TYPE, latest, published and __type, we must make them optional or ignore them.\n */\n // @ts-ignore\n delete newEntry[\"rawValues\"];\n // @ts-ignore\n delete newEntry[\"TYPE\"];\n // @ts-ignore\n delete newEntry[\"__type\"];\n // @ts-ignore\n delete newEntry[\"latest\"];\n // @ts-ignore\n delete newEntry[\"published\"];\n list.push({ ...newEntry });\n }\n\n return list;\n};\n"],"mappings":";;;;;;;;AAAA;AAIA;AAiBO,MAAMA,mBAAmB,GAAIC,MAAsC,IAAoB;EAC1F,MAAM;IAAEC,OAAO;IAAEC,YAAY;IAAEC,KAAK;IAAEC;EAAM,CAAC,GAAGJ,MAAM;EACtD,MAAM;IAAEK,iBAAiB;IAAEC,uBAAuB;IAAEC;EAAiB,CAAC,GAClEC,wBAAwB,CAAC;IAAEP;EAAQ,CAAC,CAAC;EAEzC,SAASQ,mBAAmB,CAACC,SAAiB,EAAE;IAC5C,OAAOL,iBAAiB,CAACK,SAAS,CAAC,IAAIJ,uBAAuB;EAClE;EAEA,SAASK,kBAAkB,CAACD,SAAiB,EAAE;IAC3C,MAAME,EAAE,GAAGL,gBAAgB,CAACG,SAAS,CAAC;IACtC,IAAIE,EAAE,EAAE;MACJ,OAAOA,EAAE;IACb;IACA,MAAM,IAAIC,cAAW,CAAE,8BAA6BH,SAAU,6BAA4B,CAAC;EAC/F;;EAEA;EACA,MAAMI,MAA8B,GAAG,CAAC,CAAC;EACzC,MAAMC,SAAiC,GAAG,CAAC,CAAC;;EAE5C;EACA,KAAK,MAAMC,KAAK,IAAIZ,KAAK,CAACa,MAAM,EAAE;IAC9B,MAAMC,UAAU,GAAG,IAAAC,mCAAkB,EAACjB,YAAY,CAACY,MAAM,EAAEE,KAAK,CAAC;IACjE,IAAI,CAACE,UAAU,EAAE;MACb;IACJ;IAEA,MAAME,iBAAiB,GAAGX,mBAAmB,CAACO,KAAK,CAACK,IAAI,CAAC;;IAEzD;IACA,IAAI,CAACD,iBAAiB,IAAI,CAACA,iBAAiB,CAACE,OAAO,EAAE;MAClD;IACJ;IAEA,MAAM;MAAEC,KAAK;MAAEC;IAAS,CAAC,GAAGJ,iBAAiB,CAACE,OAAO,CAAC;MAClDrB,OAAO;MACPG,KAAK;MACLY,KAAK;MACLQ,QAAQ,EAAErB,KAAK,CAACW,MAAM,CAACI,UAAU,CAAC;MAClCK,KAAK,EAAErB,YAAY,CAACY,MAAM,CAACI,UAAU,CAAC;MACtCT,mBAAmB;MACnBE;IACJ,CAAC,CAAC;IAEF,IAAI,OAAOY,KAAK,KAAK,WAAW,EAAE;MAC9BT,MAAM,CAACI,UAAU,CAAC,GAAGK,KAAK;IAC9B;IAEA,IAAI,OAAOC,QAAQ,KAAK,WAAW,EAAE;MACjCT,SAAS,CAACG,UAAU,CAAC,GAAGM,QAAQ;IACpC;EACJ;EACA,mEACOtB,YAAY;IACfY,MAAM;IACNC;EAAS;AAEjB,CAAC;AAAC;AAEF,MAAMP,wBAAwB,GAAG,CAAC;EAC9BP,OAAO,EAAEwB;AACmB,CAAC,KAAK;EAClC,MAAMxB,OAAO,GAAGwB,gBAAgB,CAACC,MAAM,CACnC,mCAAmC,CACtC;EAED,MAAMrB,iBAAqE,GAAG,CAAC,CAAC;EAChF,KAAK,MAAMsB,MAAM,IAAI1B,OAAO,CAAC2B,OAAO,EAAE,EAAE;IACpC,IAAIvB,iBAAiB,CAACsB,MAAM,CAACjB,SAAS,CAAC,EAAE;MACrC;IACJ;IACAL,iBAAiB,CAACsB,MAAM,CAACjB,SAAS,CAAC,GAAGiB,MAAM;EAChD;EACA;EACA,MAAMrB,uBAAuB,GAAGL,OAAO,CAAC4B,IAAI,CAACF,MAAM,IAAIA,MAAM,CAACjB,SAAS,KAAK,GAAG,CAAC;;EAEhF;EACA,MAAMH,gBAA8D,GAAGkB,gBAAgB,CAClFC,MAAM,CAA+B,4BAA4B,CAAC,CAClEI,MAAM,CAAC,CAAC7B,OAAO,EAAE0B,MAAM,iEAAW1B,OAAO;IAAE,CAAC0B,MAAM,CAACjB,SAAS,GAAGiB;EAAM,EAAG,EAAE,CAAC,CAAC,CAAC;EAElF,OAAO;IACHtB,iBAAiB;IACjBC,uBAAuB;IACvBC;EACJ,CAAC;AACL,CAAC;AAEM,MAAMwB,uBAAuB,GAAG,CAAC;EACpC9B,OAAO;EACP+B,OAAO;EACP5B;AAC2B,CAAC,KAAiB;EAC7C,MAAM;IAAEC,iBAAiB;IAAEC,uBAAuB;IAAEC;EAAiB,CAAC,GAClEC,wBAAwB,CAAC;IAAEP;EAAQ,CAAC,CAAC;EAEzC,SAASQ,mBAAmB,CAACC,SAAiB,EAAE;IAC5C,OAAOL,iBAAiB,CAACK,SAAS,CAAC,IAAIJ,uBAAuB;EAClE;EAEA,SAASK,kBAAkB,CAACD,SAAiB,EAAE;IAC3C,OAAOH,gBAAgB,CAACG,SAAS,CAAC;EACtC;EAEA,MAAMuB,IAAgB,GAAG,EAAE;EAE3B,KAAK,MAAM9B,KAAK,IAAI6B,OAAO,EAAE;IACzB;IACA,MAAME,WAAmC,GAAG,CAAC,CAAC;;IAE9C;IACA,KAAK,MAAMlB,KAAK,IAAIZ,KAAK,CAACa,MAAM,EAAE;MAC9B,MAAMkB,eAAe,GAAG5B,gBAAgB,CAACS,KAAK,CAACK,IAAI,CAAC;MACpD,IAAI,CAACc,eAAe,EAAE;QAClB,MAAM,IAAItB,cAAW,CAChB,8BAA6BG,KAAK,CAACK,IAAK,gCAA+B,CAC3E;MACL;MAEA,MAAMD,iBAAiB,GAAGX,mBAAmB,CAACO,KAAK,CAACK,IAAI,CAAC;MACzD,IAAI,CAACD,iBAAiB,IAAI,CAACA,iBAAiB,CAACgB,SAAS,EAAE;QACpD;MACJ;MACA;AACZ;AACA;MACY,MAAMC,WAAW,GAAG,IAAAC,oCAAmB,EAACnC,KAAK,CAACW,MAAM,EAAEX,KAAK,CAACY,SAAS,EAAEC,KAAK,CAAC;MAC7E,IAAI,CAACqB,WAAW,EAAE;QACd;MACJ;MAEA,IAAI;QACAH,WAAW,CAACG,WAAW,CAACE,eAAe,CAAC,GAAGnB,iBAAiB,CAACgB,SAAS,CAAC;UACnEnC,OAAO;UACPG,KAAK;UACLY,KAAK;UACLP,mBAAmB;UACnBE,kBAAkB;UAClBY,KAAK,EAAEpB,KAAK,CAACW,MAAM,CACfuB,WAAW,CAACE,eAAe,IAAIF,WAAW,CAACG,kBAAkB,CAChE;UACD;AACpB;AACA;UACoBhB,QAAQ,EAAErB,KAAK,CAACY,SAAS,GACnBZ,KAAK,CAACY,SAAS,CACXsB,WAAW,CAACG,kBAAkB,IAAIH,WAAW,CAACE,eAAe,CAChE,GACD;QACV,CAAC,CAAC;MACN,CAAC,CAAC,OAAOE,EAAE,EAAE;QACT,MAAM,IAAI5B,cAAW,CACjB4B,EAAE,CAACC,OAAO,IAAI,6CAA6C,EAC3DD,EAAE,CAACE,IAAI,IAAI,wBAAwB,EACnC;UACI3B,KAAK;UACLb;QACJ,CAAC,CACJ;MACL;IACJ;IACA;AACR;AACA;IACQ,MAAMyC,QAAkB,+DACjBzC,KAAK;MACRW,MAAM,EAAEoB;IAAW,EACtB;IACD;AACR;AACA;IACQ;IACA,OAAOU,QAAQ,CAAC,WAAW,CAAC;IAC5B;IACA,OAAOA,QAAQ,CAAC,MAAM,CAAC;IACvB;IACA,OAAOA,QAAQ,CAAC,QAAQ,CAAC;IACzB;IACA,OAAOA,QAAQ,CAAC,QAAQ,CAAC;IACzB;IACA,OAAOA,QAAQ,CAAC,WAAW,CAAC;IAC5BX,IAAI,CAACY,IAAI,iCAAMD,QAAQ,EAAG;EAC9B;EAEA,OAAOX,IAAI;AACf,CAAC;AAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { CmsEntryValues, CmsModelField } from "@webiny/api-headless-cms/types";
|
|
2
|
+
export declare const getFieldIdentifier: (values: CmsEntryValues, field: CmsModelField) => string | undefined;
|
|
3
|
+
export declare const getFieldIdentifiers: (values: CmsEntryValues, rawValues: CmsEntryValues, field: CmsModelField) => {
|
|
4
|
+
valueIdentifier: string;
|
|
5
|
+
rawValueIdentifier: string;
|
|
6
|
+
} | null;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.getFieldIdentifiers = exports.getFieldIdentifier = void 0;
|
|
7
|
+
const hasOwnProperty = (values, property) => {
|
|
8
|
+
if (values.hasOwnProperty) {
|
|
9
|
+
return values.hasOwnProperty(property);
|
|
10
|
+
}
|
|
11
|
+
return values[property] !== undefined;
|
|
12
|
+
};
|
|
13
|
+
const getFieldIdentifier = (values, field) => {
|
|
14
|
+
if (field.storageId && hasOwnProperty(values, field.storageId)) {
|
|
15
|
+
return field.storageId;
|
|
16
|
+
} else if (hasOwnProperty(values, field.fieldId)) {
|
|
17
|
+
return field.fieldId;
|
|
18
|
+
}
|
|
19
|
+
return undefined;
|
|
20
|
+
};
|
|
21
|
+
exports.getFieldIdentifier = getFieldIdentifier;
|
|
22
|
+
const getFieldIdentifiers = (values, rawValues, field) => {
|
|
23
|
+
let valueIdentifier = getFieldIdentifier(values, field);
|
|
24
|
+
let rawValueIdentifier = getFieldIdentifier(rawValues, field);
|
|
25
|
+
if (!valueIdentifier && !rawValueIdentifier) {
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
28
|
+
if (!valueIdentifier) {
|
|
29
|
+
valueIdentifier = rawValueIdentifier;
|
|
30
|
+
}
|
|
31
|
+
if (!rawValueIdentifier) {
|
|
32
|
+
rawValueIdentifier = valueIdentifier;
|
|
33
|
+
}
|
|
34
|
+
return {
|
|
35
|
+
valueIdentifier,
|
|
36
|
+
rawValueIdentifier
|
|
37
|
+
};
|
|
38
|
+
};
|
|
39
|
+
exports.getFieldIdentifiers = getFieldIdentifiers;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["hasOwnProperty","values","property","undefined","getFieldIdentifier","field","storageId","fieldId","getFieldIdentifiers","rawValues","valueIdentifier","rawValueIdentifier"],"sources":["fieldIdentifier.ts"],"sourcesContent":["import { CmsEntryValues, CmsModelField } from \"@webiny/api-headless-cms/types\";\n\nconst hasOwnProperty = (values: CmsEntryValues, property: string): boolean => {\n if (values.hasOwnProperty) {\n return values.hasOwnProperty(property);\n }\n return values[property] !== undefined;\n};\n\nexport const getFieldIdentifier = (\n values: CmsEntryValues,\n field: CmsModelField\n): string | undefined => {\n if (field.storageId && hasOwnProperty(values, field.storageId)) {\n return field.storageId;\n } else if (hasOwnProperty(values, field.fieldId)) {\n return field.fieldId;\n }\n return undefined;\n};\n\nexport const getFieldIdentifiers = (\n values: CmsEntryValues,\n rawValues: CmsEntryValues,\n field: CmsModelField\n) => {\n let valueIdentifier = getFieldIdentifier(values, field);\n let rawValueIdentifier = getFieldIdentifier(rawValues, field);\n if (!valueIdentifier && !rawValueIdentifier) {\n return null;\n }\n if (!valueIdentifier) {\n valueIdentifier = rawValueIdentifier as string;\n }\n if (!rawValueIdentifier) {\n rawValueIdentifier = valueIdentifier as string;\n }\n return {\n valueIdentifier,\n rawValueIdentifier\n };\n};\n"],"mappings":";;;;;;AAEA,MAAMA,cAAc,GAAG,CAACC,MAAsB,EAAEC,QAAgB,KAAc;EAC1E,IAAID,MAAM,CAACD,cAAc,EAAE;IACvB,OAAOC,MAAM,CAACD,cAAc,CAACE,QAAQ,CAAC;EAC1C;EACA,OAAOD,MAAM,CAACC,QAAQ,CAAC,KAAKC,SAAS;AACzC,CAAC;AAEM,MAAMC,kBAAkB,GAAG,CAC9BH,MAAsB,EACtBI,KAAoB,KACC;EACrB,IAAIA,KAAK,CAACC,SAAS,IAAIN,cAAc,CAACC,MAAM,EAAEI,KAAK,CAACC,SAAS,CAAC,EAAE;IAC5D,OAAOD,KAAK,CAACC,SAAS;EAC1B,CAAC,MAAM,IAAIN,cAAc,CAACC,MAAM,EAAEI,KAAK,CAACE,OAAO,CAAC,EAAE;IAC9C,OAAOF,KAAK,CAACE,OAAO;EACxB;EACA,OAAOJ,SAAS;AACpB,CAAC;AAAC;AAEK,MAAMK,mBAAmB,GAAG,CAC/BP,MAAsB,EACtBQ,SAAyB,EACzBJ,KAAoB,KACnB;EACD,IAAIK,eAAe,GAAGN,kBAAkB,CAACH,MAAM,EAAEI,KAAK,CAAC;EACvD,IAAIM,kBAAkB,GAAGP,kBAAkB,CAACK,SAAS,EAAEJ,KAAK,CAAC;EAC7D,IAAI,CAACK,eAAe,IAAI,CAACC,kBAAkB,EAAE;IACzC,OAAO,IAAI;EACf;EACA,IAAI,CAACD,eAAe,EAAE;IAClBA,eAAe,GAAGC,kBAA4B;EAClD;EACA,IAAI,CAACA,kBAAkB,EAAE;IACrBA,kBAAkB,GAAGD,eAAyB;EAClD;EACA,OAAO;IACHA,eAAe;IACfC;EACJ,CAAC;AACL,CAAC;AAAC"}
|
package/helpers/index.d.ts
CHANGED
package/helpers/index.js
CHANGED
|
@@ -13,4 +13,15 @@ Object.keys(_entryIndexHelpers).forEach(function (key) {
|
|
|
13
13
|
return _entryIndexHelpers[key];
|
|
14
14
|
}
|
|
15
15
|
});
|
|
16
|
+
});
|
|
17
|
+
var _fieldIdentifier = require("./fieldIdentifier");
|
|
18
|
+
Object.keys(_fieldIdentifier).forEach(function (key) {
|
|
19
|
+
if (key === "default" || key === "__esModule") return;
|
|
20
|
+
if (key in exports && exports[key] === _fieldIdentifier[key]) return;
|
|
21
|
+
Object.defineProperty(exports, key, {
|
|
22
|
+
enumerable: true,
|
|
23
|
+
get: function () {
|
|
24
|
+
return _fieldIdentifier[key];
|
|
25
|
+
}
|
|
26
|
+
});
|
|
16
27
|
});
|
package/helpers/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["index.ts"],"sourcesContent":["export * from \"./entryIndexHelpers\";\n"],"mappings":";;;;;AAAA;AAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA"}
|
|
1
|
+
{"version":3,"names":[],"sources":["index.ts"],"sourcesContent":["export * from \"./entryIndexHelpers\";\nexport * from \"./fieldIdentifier\";\n"],"mappings":";;;;;AAAA;AAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;AACA;AAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA"}
|
package/index.js
CHANGED
|
@@ -44,6 +44,7 @@ Object.keys(_plugins2).forEach(function (key) {
|
|
|
44
44
|
});
|
|
45
45
|
var _plugins3 = require("./operations/entry/elasticsearch/filtering/plugins");
|
|
46
46
|
var _CmsEntryFilterPlugin = require("./plugins/CmsEntryFilterPlugin");
|
|
47
|
+
var _apiHeadlessCms = require("@webiny/api-headless-cms");
|
|
47
48
|
const createStorageOperations = params => {
|
|
48
49
|
const {
|
|
49
50
|
attributes,
|
|
@@ -119,6 +120,12 @@ const createStorageOperations = params => {
|
|
|
119
120
|
* They are at the end because we can then override existing plugins.
|
|
120
121
|
*/
|
|
121
122
|
...(userPlugins || [])]);
|
|
123
|
+
const entries = (0, _entry.createEntriesStorageOperations)({
|
|
124
|
+
entity: entities.entries,
|
|
125
|
+
esEntity: entities.entriesEs,
|
|
126
|
+
plugins,
|
|
127
|
+
elasticsearch
|
|
128
|
+
});
|
|
122
129
|
return {
|
|
123
130
|
name: "dynamodb:elasticsearch",
|
|
124
131
|
beforeInit: async context => {
|
|
@@ -140,10 +147,11 @@ const createStorageOperations = params => {
|
|
|
140
147
|
// Elasticsearch
|
|
141
148
|
_apiElasticsearch.CompressionPlugin.type, _apiElasticsearch.ElasticsearchQueryBuilderOperatorPlugin.type,
|
|
142
149
|
// Headless CMS
|
|
143
|
-
"cms-model-field-to-graphql", _CmsEntryFilterPlugin.CmsEntryFilterPlugin.type, _plugins2.CmsEntryElasticsearchBodyModifierPlugin.type, _plugins2.CmsEntryElasticsearchFullTextSearchPlugin.type, _plugins2.CmsEntryElasticsearchIndexPlugin.type, _plugins2.CmsEntryElasticsearchQueryBuilderValueSearchPlugin.type, _plugins2.CmsEntryElasticsearchQueryModifierPlugin.type, _plugins2.CmsEntryElasticsearchSortModifierPlugin.type, _plugins2.
|
|
150
|
+
"cms-model-field-to-graphql", _CmsEntryFilterPlugin.CmsEntryFilterPlugin.type, _plugins2.CmsEntryElasticsearchBodyModifierPlugin.type, _plugins2.CmsEntryElasticsearchFullTextSearchPlugin.type, _plugins2.CmsEntryElasticsearchIndexPlugin.type, _plugins2.CmsEntryElasticsearchQueryBuilderValueSearchPlugin.type, _plugins2.CmsEntryElasticsearchQueryModifierPlugin.type, _plugins2.CmsEntryElasticsearchSortModifierPlugin.type, _plugins2.CmsElasticsearchModelFieldPlugin.type, _apiHeadlessCms.StorageOperationsCmsModelPlugin.type];
|
|
144
151
|
for (const type of types) {
|
|
145
152
|
plugins.mergeByType(context.plugins, type);
|
|
146
153
|
}
|
|
154
|
+
entries.dataLoaders.clearAll();
|
|
147
155
|
},
|
|
148
156
|
init: async context => {
|
|
149
157
|
/**
|
|
@@ -203,12 +211,7 @@ const createStorageOperations = params => {
|
|
|
203
211
|
entity: entities.models,
|
|
204
212
|
elasticsearch
|
|
205
213
|
}),
|
|
206
|
-
entries
|
|
207
|
-
entity: entities.entries,
|
|
208
|
-
esEntity: entities.entriesEs,
|
|
209
|
-
plugins,
|
|
210
|
-
elasticsearch
|
|
211
|
-
})
|
|
214
|
+
entries
|
|
212
215
|
};
|
|
213
216
|
};
|
|
214
217
|
exports.createStorageOperations = createStorageOperations;
|
package/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["createStorageOperations","params","attributes","table","esTable","documentClient","elasticsearch","plugins","userPlugins","tableInstance","createTable","tableElasticsearchInstance","createElasticsearchTable","entities","settings","createSettingsEntity","entityName","ENTITIES","SETTINGS","system","createSystemEntity","SYSTEM","groups","createGroupEntity","GROUPS","models","createModelEntity","MODELS","entries","createEntryEntity","ENTRIES","entriesEs","createEntryElasticsearchEntity","ENTRIES_ES","PluginsContainer","dynamoDbValueFilters","dynamoDbPlugins","elasticsearchPlugins","elasticsearchIndexPlugins","createFilterPlugins","name","beforeInit","context","register","types","CompressionPlugin","type","ElasticsearchQueryBuilderOperatorPlugin","CmsEntryFilterPlugin","CmsEntryElasticsearchBodyModifierPlugin","CmsEntryElasticsearchFullTextSearchPlugin","CmsEntryElasticsearchIndexPlugin","CmsEntryElasticsearchQueryBuilderValueSearchPlugin","CmsEntryElasticsearchQueryModifierPlugin","CmsEntryElasticsearchSortModifierPlugin","CmsEntryElasticsearchFieldPlugin","mergeByType","init","cms","onModelBeforeCreate","subscribe","model","createElasticsearchIndex","onModelBeforeCreateFrom","onModelAfterDelete","deleteElasticsearchIndex","onModelInitialize","getEntities","getTable","getEsTable","createSystemStorageOperations","entity","createSettingsStorageOperations","createGroupsStorageOperations","createModelsStorageOperations","createEntriesStorageOperations","esEntity"],"sources":["index.ts"],"sourcesContent":["import dynamoDbValueFilters from \"@webiny/db-dynamodb/plugins/filters\";\nimport elasticsearchPlugins from \"./elasticsearch\";\nimport dynamoDbPlugins from \"./dynamoDb\";\nimport { createSettingsStorageOperations } from \"./operations/settings\";\nimport { createSystemStorageOperations } from \"./operations/system\";\nimport { createModelsStorageOperations } from \"./operations/model\";\nimport { createEntriesStorageOperations } from \"./operations/entry\";\nimport { ENTITIES, StorageOperationsFactory } from \"~/types\";\nimport { createTable } from \"~/definitions/table\";\nimport { createElasticsearchTable } from \"~/definitions/tableElasticsearch\";\nimport { createGroupEntity } from \"~/definitions/group\";\nimport { createModelEntity } from \"~/definitions/model\";\nimport { createEntryEntity } from \"~/definitions/entry\";\nimport { createEntryElasticsearchEntity } from \"~/definitions/entryElasticsearch\";\nimport { createSystemEntity } from \"~/definitions/system\";\nimport { createSettingsEntity } from \"~/definitions/settings\";\nimport { createElasticsearchIndex } from \"~/elasticsearch/createElasticsearchIndex\";\nimport { PluginsContainer } from \"@webiny/plugins\";\nimport { createGroupsStorageOperations } from \"~/operations/group\";\nimport {\n CompressionPlugin,\n ElasticsearchQueryBuilderOperatorPlugin\n} from \"@webiny/api-elasticsearch\";\nimport { elasticsearchIndexPlugins } from \"./elasticsearch/indices\";\nimport { deleteElasticsearchIndex } from \"./elasticsearch/deleteElasticsearchIndex\";\nimport {\n CmsEntryElasticsearchBodyModifierPlugin,\n CmsEntryElasticsearchFullTextSearchPlugin,\n CmsEntryElasticsearchIndexPlugin,\n CmsEntryElasticsearchQueryBuilderValueSearchPlugin,\n CmsEntryElasticsearchQueryModifierPlugin,\n CmsEntryElasticsearchSortModifierPlugin,\n CmsEntryElasticsearchFieldPlugin\n} from \"~/plugins\";\nimport { createFilterPlugins } from \"~/operations/entry/elasticsearch/filtering/plugins\";\nimport { CmsEntryFilterPlugin } from \"~/plugins/CmsEntryFilterPlugin\";\n\nexport * from \"./plugins\";\n\nexport const createStorageOperations: StorageOperationsFactory = params => {\n const {\n attributes,\n table,\n esTable,\n documentClient,\n elasticsearch,\n plugins: userPlugins\n } = params;\n\n const tableInstance = createTable({\n table,\n documentClient\n });\n const tableElasticsearchInstance = createElasticsearchTable({\n table: esTable,\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 entriesEs: createEntryElasticsearchEntity({\n entityName: ENTITIES.ENTRIES_ES,\n table: tableElasticsearchInstance,\n attributes: attributes ? attributes[ENTITIES.ENTRIES_ES] : {}\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 * Field plugins for Elasticsearch.\n */\n elasticsearchPlugins(),\n /**\n * Built-in Elasticsearch index templates.\n */\n elasticsearchIndexPlugins(),\n /**\n * Filter plugins used to apply filtering from where conditions to Elasticsearch query.\n */\n createFilterPlugins(),\n /**\n * User defined custom plugins.\n * They are at the end because we can then override existing plugins.\n */\n ...(userPlugins || [])\n ]);\n\n return {\n name: \"dynamodb:elasticsearch\",\n beforeInit: async context => {\n /**\n * Attach the elasticsearch into context if it is not already attached.\n */\n if (!context.elasticsearch) {\n context.elasticsearch = elasticsearch;\n }\n /**\n * Pass the plugins to the parent context.\n */\n context.plugins.register([dynamoDbPlugins()]);\n /**\n * We need to fetch all the plugin types in the list from the main container.\n * This way we do not need to register plugins in the storage plugins contains.\n */\n const types: string[] = [\n // Elasticsearch\n CompressionPlugin.type,\n ElasticsearchQueryBuilderOperatorPlugin.type,\n // Headless CMS\n \"cms-model-field-to-graphql\",\n CmsEntryFilterPlugin.type,\n CmsEntryElasticsearchBodyModifierPlugin.type,\n CmsEntryElasticsearchFullTextSearchPlugin.type,\n CmsEntryElasticsearchIndexPlugin.type,\n CmsEntryElasticsearchQueryBuilderValueSearchPlugin.type,\n CmsEntryElasticsearchQueryModifierPlugin.type,\n CmsEntryElasticsearchSortModifierPlugin.type,\n CmsEntryElasticsearchFieldPlugin.type\n ];\n for (const type of types) {\n plugins.mergeByType(context.plugins, type);\n }\n },\n init: async context => {\n /**\n * We need to create indexes on before model create and on clone (create from).\n * Other apps create indexes on locale creation.\n */\n context.cms.onModelBeforeCreate.subscribe(async ({ model }) => {\n await createElasticsearchIndex({\n elasticsearch,\n model,\n plugins\n });\n });\n context.cms.onModelBeforeCreateFrom.subscribe(async ({ model }) => {\n await createElasticsearchIndex({\n elasticsearch,\n model,\n plugins\n });\n });\n context.cms.onModelAfterDelete.subscribe(async ({ model }) => {\n await deleteElasticsearchIndex({\n elasticsearch,\n model\n });\n });\n\n context.cms.onModelInitialize.subscribe(async ({ model }) => {\n await createElasticsearchIndex({\n elasticsearch,\n model,\n plugins\n });\n });\n },\n getEntities: () => entities,\n getTable: () => tableInstance,\n getEsTable: () => tableElasticsearchInstance,\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 elasticsearch\n }),\n entries: createEntriesStorageOperations({\n entity: entities.entries,\n esEntity: entities.entriesEs,\n plugins,\n elasticsearch\n })\n };\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["createStorageOperations","params","attributes","table","esTable","documentClient","elasticsearch","plugins","userPlugins","tableInstance","createTable","tableElasticsearchInstance","createElasticsearchTable","entities","settings","createSettingsEntity","entityName","ENTITIES","SETTINGS","system","createSystemEntity","SYSTEM","groups","createGroupEntity","GROUPS","models","createModelEntity","MODELS","entries","createEntryEntity","ENTRIES","entriesEs","createEntryElasticsearchEntity","ENTRIES_ES","PluginsContainer","dynamoDbValueFilters","dynamoDbPlugins","elasticsearchPlugins","elasticsearchIndexPlugins","createFilterPlugins","createEntriesStorageOperations","entity","esEntity","name","beforeInit","context","register","types","CompressionPlugin","type","ElasticsearchQueryBuilderOperatorPlugin","CmsEntryFilterPlugin","CmsEntryElasticsearchBodyModifierPlugin","CmsEntryElasticsearchFullTextSearchPlugin","CmsEntryElasticsearchIndexPlugin","CmsEntryElasticsearchQueryBuilderValueSearchPlugin","CmsEntryElasticsearchQueryModifierPlugin","CmsEntryElasticsearchSortModifierPlugin","CmsElasticsearchModelFieldPlugin","StorageOperationsCmsModelPlugin","mergeByType","dataLoaders","clearAll","init","cms","onModelBeforeCreate","subscribe","model","createElasticsearchIndex","onModelBeforeCreateFrom","onModelAfterDelete","deleteElasticsearchIndex","onModelInitialize","getEntities","getTable","getEsTable","createSystemStorageOperations","createSettingsStorageOperations","createGroupsStorageOperations","createModelsStorageOperations"],"sources":["index.ts"],"sourcesContent":["import dynamoDbValueFilters from \"@webiny/db-dynamodb/plugins/filters\";\nimport elasticsearchPlugins from \"./elasticsearch\";\nimport dynamoDbPlugins from \"./dynamoDb\";\nimport { createSettingsStorageOperations } from \"./operations/settings\";\nimport { createSystemStorageOperations } from \"./operations/system\";\nimport { createModelsStorageOperations } from \"./operations/model\";\nimport { createEntriesStorageOperations } from \"./operations/entry\";\nimport { ENTITIES, StorageOperationsFactory } from \"~/types\";\nimport { createTable } from \"~/definitions/table\";\nimport { createElasticsearchTable } from \"~/definitions/tableElasticsearch\";\nimport { createGroupEntity } from \"~/definitions/group\";\nimport { createModelEntity } from \"~/definitions/model\";\nimport { createEntryEntity } from \"~/definitions/entry\";\nimport { createEntryElasticsearchEntity } from \"~/definitions/entryElasticsearch\";\nimport { createSystemEntity } from \"~/definitions/system\";\nimport { createSettingsEntity } from \"~/definitions/settings\";\nimport { createElasticsearchIndex } from \"~/elasticsearch/createElasticsearchIndex\";\nimport { PluginsContainer } from \"@webiny/plugins\";\nimport { createGroupsStorageOperations } from \"~/operations/group\";\nimport {\n CompressionPlugin,\n ElasticsearchQueryBuilderOperatorPlugin\n} from \"@webiny/api-elasticsearch\";\nimport { elasticsearchIndexPlugins } from \"./elasticsearch/indices\";\nimport { deleteElasticsearchIndex } from \"./elasticsearch/deleteElasticsearchIndex\";\nimport {\n CmsElasticsearchModelFieldPlugin,\n CmsEntryElasticsearchBodyModifierPlugin,\n CmsEntryElasticsearchFullTextSearchPlugin,\n CmsEntryElasticsearchIndexPlugin,\n CmsEntryElasticsearchQueryBuilderValueSearchPlugin,\n CmsEntryElasticsearchQueryModifierPlugin,\n CmsEntryElasticsearchSortModifierPlugin\n} from \"~/plugins\";\nimport { createFilterPlugins } from \"~/operations/entry/elasticsearch/filtering/plugins\";\nimport { CmsEntryFilterPlugin } from \"~/plugins/CmsEntryFilterPlugin\";\nimport { StorageOperationsCmsModelPlugin } from \"@webiny/api-headless-cms\";\n\nexport * from \"./plugins\";\n\nexport const createStorageOperations: StorageOperationsFactory = params => {\n const {\n attributes,\n table,\n esTable,\n documentClient,\n elasticsearch,\n plugins: userPlugins\n } = params;\n\n const tableInstance = createTable({\n table,\n documentClient\n });\n const tableElasticsearchInstance = createElasticsearchTable({\n table: esTable,\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 entriesEs: createEntryElasticsearchEntity({\n entityName: ENTITIES.ENTRIES_ES,\n table: tableElasticsearchInstance,\n attributes: attributes ? attributes[ENTITIES.ENTRIES_ES] : {}\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 * Field plugins for Elasticsearch.\n */\n elasticsearchPlugins(),\n /**\n * Built-in Elasticsearch index templates.\n */\n elasticsearchIndexPlugins(),\n /**\n * Filter plugins used to apply filtering from where conditions to Elasticsearch query.\n */\n createFilterPlugins(),\n /**\n * User defined custom plugins.\n * They are at the end because we can then override existing plugins.\n */\n ...(userPlugins || [])\n ]);\n\n const entries = createEntriesStorageOperations({\n entity: entities.entries,\n esEntity: entities.entriesEs,\n plugins,\n elasticsearch\n });\n\n return {\n name: \"dynamodb:elasticsearch\",\n beforeInit: async context => {\n /**\n * Attach the elasticsearch into context if it is not already attached.\n */\n if (!context.elasticsearch) {\n context.elasticsearch = elasticsearch;\n }\n /**\n * Pass the plugins to the parent context.\n */\n context.plugins.register([dynamoDbPlugins()]);\n /**\n * We need to fetch all the plugin types in the list from the main container.\n * This way we do not need to register plugins in the storage plugins contains.\n */\n const types: string[] = [\n // Elasticsearch\n CompressionPlugin.type,\n ElasticsearchQueryBuilderOperatorPlugin.type,\n // Headless CMS\n \"cms-model-field-to-graphql\",\n CmsEntryFilterPlugin.type,\n CmsEntryElasticsearchBodyModifierPlugin.type,\n CmsEntryElasticsearchFullTextSearchPlugin.type,\n CmsEntryElasticsearchIndexPlugin.type,\n CmsEntryElasticsearchQueryBuilderValueSearchPlugin.type,\n CmsEntryElasticsearchQueryModifierPlugin.type,\n CmsEntryElasticsearchSortModifierPlugin.type,\n CmsElasticsearchModelFieldPlugin.type,\n StorageOperationsCmsModelPlugin.type\n ];\n for (const type of types) {\n plugins.mergeByType(context.plugins, type);\n }\n entries.dataLoaders.clearAll();\n },\n init: async context => {\n /**\n * We need to create indexes on before model create and on clone (create from).\n * Other apps create indexes on locale creation.\n */\n context.cms.onModelBeforeCreate.subscribe(async ({ model }) => {\n await createElasticsearchIndex({\n elasticsearch,\n model,\n plugins\n });\n });\n context.cms.onModelBeforeCreateFrom.subscribe(async ({ model }) => {\n await createElasticsearchIndex({\n elasticsearch,\n model,\n plugins\n });\n });\n context.cms.onModelAfterDelete.subscribe(async ({ model }) => {\n await deleteElasticsearchIndex({\n elasticsearch,\n model\n });\n });\n\n context.cms.onModelInitialize.subscribe(async ({ model }) => {\n await createElasticsearchIndex({\n elasticsearch,\n model,\n plugins\n });\n });\n },\n getEntities: () => entities,\n getTable: () => tableInstance,\n getEsTable: () => tableElasticsearchInstance,\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 elasticsearch\n }),\n entries\n };\n};\n"],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import DataLoader from "dataloader";
|
|
2
|
+
export interface CacheKeyParams {
|
|
3
|
+
name: string;
|
|
4
|
+
tenant: string;
|
|
5
|
+
locale: string;
|
|
6
|
+
}
|
|
7
|
+
export interface ClearAllParams {
|
|
8
|
+
tenant: string;
|
|
9
|
+
locale: string;
|
|
10
|
+
}
|
|
11
|
+
export declare class DataLoaderCache {
|
|
12
|
+
private readonly cache;
|
|
13
|
+
getDataLoader<I = any, R = any>(params: CacheKeyParams): DataLoader<I, R> | null;
|
|
14
|
+
setDataLoader(params: CacheKeyParams, dataLoader: DataLoader<any, any>): void;
|
|
15
|
+
clearAll(params?: ClearAllParams): void;
|
|
16
|
+
private createKey;
|
|
17
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.DataLoaderCache = void 0;
|
|
8
|
+
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
|
|
9
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
10
|
+
class DataLoaderCache {
|
|
11
|
+
constructor() {
|
|
12
|
+
(0, _defineProperty2.default)(this, "cache", {});
|
|
13
|
+
}
|
|
14
|
+
getDataLoader(params) {
|
|
15
|
+
const key = this.createKey(params);
|
|
16
|
+
return this.cache[key] || null;
|
|
17
|
+
}
|
|
18
|
+
setDataLoader(params, dataLoader) {
|
|
19
|
+
const key = this.createKey(params);
|
|
20
|
+
this.cache[key] = dataLoader;
|
|
21
|
+
}
|
|
22
|
+
clearAll(params) {
|
|
23
|
+
if (!params) {
|
|
24
|
+
for (const current in this.cache) {
|
|
25
|
+
this.cache[current].clearAll();
|
|
26
|
+
}
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
const key = this.createKey((0, _objectSpread2.default)((0, _objectSpread2.default)({}, params), {}, {
|
|
30
|
+
name: ""
|
|
31
|
+
}));
|
|
32
|
+
for (const current in this.cache) {
|
|
33
|
+
if (current.startsWith(key) === false) {
|
|
34
|
+
continue;
|
|
35
|
+
}
|
|
36
|
+
this.cache[current].clearAll();
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
createKey(params) {
|
|
40
|
+
return `${params.tenant}_${params.locale}_${params.name}`;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
exports.DataLoaderCache = DataLoaderCache;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["DataLoaderCache","getDataLoader","params","key","createKey","cache","setDataLoader","dataLoader","clearAll","current","name","startsWith","tenant","locale"],"sources":["DataLoaderCache.ts"],"sourcesContent":["import DataLoader from \"dataloader\";\n\nexport interface CacheKeyParams {\n name: string;\n tenant: string;\n locale: string;\n}\n\nexport interface ClearAllParams {\n tenant: string;\n locale: string;\n}\n\nexport class DataLoaderCache {\n private readonly cache: Record<string, DataLoader<any, any>> = {};\n\n public getDataLoader<I = any, R = any>(params: CacheKeyParams): DataLoader<I, R> | null {\n const key = this.createKey(params);\n\n return this.cache[key] || null;\n }\n\n public setDataLoader(params: CacheKeyParams, dataLoader: DataLoader<any, any>): void {\n const key = this.createKey(params);\n this.cache[key] = dataLoader;\n }\n\n public clearAll(params?: ClearAllParams): void {\n if (!params) {\n for (const current in this.cache) {\n this.cache[current].clearAll();\n }\n return;\n }\n const key = this.createKey({\n ...params,\n name: \"\"\n });\n for (const current in this.cache) {\n if (current.startsWith(key) === false) {\n continue;\n }\n this.cache[current].clearAll();\n }\n }\n\n private createKey(params: CacheKeyParams): string {\n return `${params.tenant}_${params.locale}_${params.name}`;\n }\n}\n"],"mappings":";;;;;;;;;AAaO,MAAMA,eAAe,CAAC;EAAA;IAAA,6CACsC,CAAC,CAAC;EAAA;EAE1DC,aAAa,CAAmBC,MAAsB,EAA2B;IACpF,MAAMC,GAAG,GAAG,IAAI,CAACC,SAAS,CAACF,MAAM,CAAC;IAElC,OAAO,IAAI,CAACG,KAAK,CAACF,GAAG,CAAC,IAAI,IAAI;EAClC;EAEOG,aAAa,CAACJ,MAAsB,EAAEK,UAAgC,EAAQ;IACjF,MAAMJ,GAAG,GAAG,IAAI,CAACC,SAAS,CAACF,MAAM,CAAC;IAClC,IAAI,CAACG,KAAK,CAACF,GAAG,CAAC,GAAGI,UAAU;EAChC;EAEOC,QAAQ,CAACN,MAAuB,EAAQ;IAC3C,IAAI,CAACA,MAAM,EAAE;MACT,KAAK,MAAMO,OAAO,IAAI,IAAI,CAACJ,KAAK,EAAE;QAC9B,IAAI,CAACA,KAAK,CAACI,OAAO,CAAC,CAACD,QAAQ,EAAE;MAClC;MACA;IACJ;IACA,MAAML,GAAG,GAAG,IAAI,CAACC,SAAS,6DACnBF,MAAM;MACTQ,IAAI,EAAE;IAAE,GACV;IACF,KAAK,MAAMD,OAAO,IAAI,IAAI,CAACJ,KAAK,EAAE;MAC9B,IAAII,OAAO,CAACE,UAAU,CAACR,GAAG,CAAC,KAAK,KAAK,EAAE;QACnC;MACJ;MACA,IAAI,CAACE,KAAK,CAACI,OAAO,CAAC,CAACD,QAAQ,EAAE;IAClC;EACJ;EAEQJ,SAAS,CAACF,MAAsB,EAAU;IAC9C,OAAQ,GAAEA,MAAM,CAACU,MAAO,IAAGV,MAAM,CAACW,MAAO,IAAGX,MAAM,CAACQ,IAAK,EAAC;EAC7D;AACJ;AAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const CMS_ENTRY_BATCH_SCHEDULE_WAIT: number;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.CMS_ENTRY_BATCH_SCHEDULE_WAIT = void 0;
|
|
7
|
+
const batchScheduleWaitEnv = Number(process.env.WEBINY_API_CMS_ENTRY_BATCH_SCHEDULE_WAIT || "0");
|
|
8
|
+
const CMS_ENTRY_BATCH_SCHEDULE_WAIT = isNaN(batchScheduleWaitEnv) ? 0 : batchScheduleWaitEnv;
|
|
9
|
+
exports.CMS_ENTRY_BATCH_SCHEDULE_WAIT = CMS_ENTRY_BATCH_SCHEDULE_WAIT;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["batchScheduleWaitEnv","Number","process","env","WEBINY_API_CMS_ENTRY_BATCH_SCHEDULE_WAIT","CMS_ENTRY_BATCH_SCHEDULE_WAIT","isNaN"],"sources":["constants.ts"],"sourcesContent":["const batchScheduleWaitEnv = Number(process.env.WEBINY_API_CMS_ENTRY_BATCH_SCHEDULE_WAIT || \"0\");\nexport const CMS_ENTRY_BATCH_SCHEDULE_WAIT = isNaN(batchScheduleWaitEnv) ? 0 : batchScheduleWaitEnv;\n"],"mappings":";;;;;;AAAA,MAAMA,oBAAoB,GAAGC,MAAM,CAACC,OAAO,CAACC,GAAG,CAACC,wCAAwC,IAAI,GAAG,CAAC;AACzF,MAAMC,6BAA6B,GAAGC,KAAK,CAACN,oBAAoB,CAAC,GAAG,CAAC,GAAGA,oBAAoB;AAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This is to be used when user wants to wait for a number of milliseconds before the batch is executed.
|
|
3
|
+
* Intended to be used internally or for a specific user case.
|
|
4
|
+
* Not to be documented and exposed to publish as it can slow the data loading a lot.
|
|
5
|
+
*
|
|
6
|
+
* https://github.com/graphql/dataloader#batch-scheduling
|
|
7
|
+
*/
|
|
8
|
+
export declare const createBatchScheduleFn: () => ((callback: () => void) => void) | undefined;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.createBatchScheduleFn = void 0;
|
|
7
|
+
var _constants = require("./constants");
|
|
8
|
+
/**
|
|
9
|
+
* This is to be used when user wants to wait for a number of milliseconds before the batch is executed.
|
|
10
|
+
* Intended to be used internally or for a specific user case.
|
|
11
|
+
* Not to be documented and exposed to publish as it can slow the data loading a lot.
|
|
12
|
+
*
|
|
13
|
+
* https://github.com/graphql/dataloader#batch-scheduling
|
|
14
|
+
*/
|
|
15
|
+
const createBatchScheduleFn = () => {
|
|
16
|
+
if (_constants.CMS_ENTRY_BATCH_SCHEDULE_WAIT <= 0) {
|
|
17
|
+
return undefined;
|
|
18
|
+
}
|
|
19
|
+
return callback => {
|
|
20
|
+
setTimeout(callback, _constants.CMS_ENTRY_BATCH_SCHEDULE_WAIT);
|
|
21
|
+
};
|
|
22
|
+
};
|
|
23
|
+
exports.createBatchScheduleFn = createBatchScheduleFn;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["createBatchScheduleFn","CMS_ENTRY_BATCH_SCHEDULE_WAIT","undefined","callback","setTimeout"],"sources":["createBatchScheduleFn.ts"],"sourcesContent":["import { CMS_ENTRY_BATCH_SCHEDULE_WAIT } from \"./constants\";\n\n/**\n * This is to be used when user wants to wait for a number of milliseconds before the batch is executed.\n * Intended to be used internally or for a specific user case.\n * Not to be documented and exposed to publish as it can slow the data loading a lot.\n *\n * https://github.com/graphql/dataloader#batch-scheduling\n */\nexport const createBatchScheduleFn = () => {\n if (CMS_ENTRY_BATCH_SCHEDULE_WAIT <= 0) {\n return undefined;\n }\n return (callback: () => void) => {\n setTimeout(callback, CMS_ENTRY_BATCH_SCHEDULE_WAIT);\n };\n};\n"],"mappings":";;;;;;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMA,qBAAqB,GAAG,MAAM;EACvC,IAAIC,wCAA6B,IAAI,CAAC,EAAE;IACpC,OAAOC,SAAS;EACpB;EACA,OAAQC,QAAoB,IAAK;IAC7BC,UAAU,CAACD,QAAQ,EAAEF,wCAA6B,CAAC;EACvD,CAAC;AACL,CAAC;AAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import DataLoader from "dataloader";
|
|
2
|
+
import { CmsStorageEntry } from "@webiny/api-headless-cms/types";
|
|
3
|
+
import { DataLoaderParams } from "./types";
|
|
4
|
+
export declare const createGetAllEntryRevisions: (params: DataLoaderParams) => DataLoader<string, CmsStorageEntry[], string>;
|