@webiny/api-headless-cms 0.0.0-unstable.990c3ab1b6 → 0.0.0-unstable.aad28a72ae

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (309) hide show
  1. package/context.js +15 -0
  2. package/context.js.map +1 -1
  3. package/crud/contentEntry/afterDelete.js +5 -0
  4. package/crud/contentEntry/afterDelete.js.map +1 -1
  5. package/crud/contentEntry/beforeCreate.js +3 -0
  6. package/crud/contentEntry/beforeCreate.js.map +1 -1
  7. package/crud/contentEntry/beforeUpdate.js +3 -0
  8. package/crud/contentEntry/beforeUpdate.js.map +1 -1
  9. package/crud/contentEntry/entryDataValidation.js +40 -1
  10. package/crud/contentEntry/entryDataValidation.js.map +1 -1
  11. package/crud/contentEntry/markLockedFields.js +30 -4
  12. package/crud/contentEntry/markLockedFields.js.map +1 -1
  13. package/crud/contentEntry/referenceFieldsMapping.js +68 -10
  14. package/crud/contentEntry/referenceFieldsMapping.js.map +1 -1
  15. package/crud/contentEntry/searchableFields.d.ts +9 -0
  16. package/crud/contentEntry/searchableFields.js +83 -0
  17. package/crud/contentEntry/searchableFields.js.map +1 -0
  18. package/crud/contentEntry.crud.js +190 -50
  19. package/crud/contentEntry.crud.js.map +1 -1
  20. package/crud/contentModel/afterCreate.js +2 -0
  21. package/crud/contentModel/afterCreate.js.map +1 -1
  22. package/crud/contentModel/afterCreateFrom.js +2 -0
  23. package/crud/contentModel/afterCreateFrom.js.map +1 -1
  24. package/crud/contentModel/afterDelete.js +2 -0
  25. package/crud/contentModel/afterDelete.js.map +1 -1
  26. package/crud/contentModel/afterUpdate.js +2 -0
  27. package/crud/contentModel/afterUpdate.js.map +1 -1
  28. package/crud/contentModel/beforeCreate.js +32 -4
  29. package/crud/contentModel/beforeCreate.js.map +1 -1
  30. package/crud/contentModel/beforeDelete.js +10 -0
  31. package/crud/contentModel/beforeDelete.js.map +1 -1
  32. package/crud/contentModel/beforeUpdate.js +5 -0
  33. package/crud/contentModel/beforeUpdate.js.map +1 -1
  34. package/crud/contentModel/contentModelManagerFactory.js +7 -0
  35. package/crud/contentModel/contentModelManagerFactory.js.map +1 -1
  36. package/crud/contentModel/createFieldModels.js +6 -0
  37. package/crud/contentModel/createFieldModels.js.map +1 -1
  38. package/crud/contentModel/createFieldStorageId.js +7 -1
  39. package/crud/contentModel/createFieldStorageId.js.map +1 -1
  40. package/crud/contentModel/fieldIdValidation.js +5 -0
  41. package/crud/contentModel/fieldIdValidation.js.map +1 -1
  42. package/crud/contentModel/idValidation.js +5 -0
  43. package/crud/contentModel/idValidation.js.map +1 -1
  44. package/crud/contentModel/models.js +20 -1
  45. package/crud/contentModel/models.js.map +1 -1
  46. package/crud/contentModel/systemFields.js.map +1 -1
  47. package/crud/contentModel/validateLayout.js +8 -0
  48. package/crud/contentModel/validateLayout.js.map +1 -1
  49. package/crud/contentModel/validateModel.js +8 -0
  50. package/crud/contentModel/validateModel.js.map +1 -1
  51. package/crud/contentModel/validateModelFields.js +97 -33
  52. package/crud/contentModel/validateModelFields.js.map +1 -1
  53. package/crud/contentModel.crud.js +251 -121
  54. package/crud/contentModel.crud.js.map +1 -1
  55. package/crud/contentModelGroup/beforeCreate.js +12 -0
  56. package/crud/contentModelGroup/beforeCreate.js.map +1 -1
  57. package/crud/contentModelGroup/beforeDelete.js +8 -0
  58. package/crud/contentModelGroup/beforeDelete.js.map +1 -1
  59. package/crud/contentModelGroup/beforeUpdate.js +5 -0
  60. package/crud/contentModelGroup/beforeUpdate.js.map +1 -1
  61. package/crud/contentModelGroup.crud.js +74 -7
  62. package/crud/contentModelGroup.crud.js.map +1 -1
  63. package/crud/index.js +16 -0
  64. package/crud/index.js.map +1 -1
  65. package/crud/settings.crud.js +12 -0
  66. package/crud/settings.crud.js.map +1 -1
  67. package/crud/system.crud.js +37 -2
  68. package/crud/system.crud.js.map +1 -1
  69. package/fieldConverters/CmsModelDefaultFieldConverterPlugin.js +13 -0
  70. package/fieldConverters/CmsModelDefaultFieldConverterPlugin.js.map +1 -1
  71. package/fieldConverters/CmsModelDynamicZoneFieldConverterPlugin.d.ts +11 -0
  72. package/fieldConverters/CmsModelDynamicZoneFieldConverterPlugin.js +239 -0
  73. package/fieldConverters/CmsModelDynamicZoneFieldConverterPlugin.js.map +1 -0
  74. package/fieldConverters/CmsModelObjectFieldConverterPlugin.js +53 -0
  75. package/fieldConverters/CmsModelObjectFieldConverterPlugin.js.map +1 -1
  76. package/fieldConverters/index.d.ts +2 -1
  77. package/fieldConverters/index.js +7 -1
  78. package/fieldConverters/index.js.map +1 -1
  79. package/graphql/buildSchemaPlugins.js +9 -5
  80. package/graphql/buildSchemaPlugins.js.map +1 -1
  81. package/graphql/graphQLHandlerFactory.js +80 -17
  82. package/graphql/graphQLHandlerFactory.js.map +1 -1
  83. package/graphql/index.js +8 -1
  84. package/graphql/index.js.map +1 -1
  85. package/graphql/schema/baseContentSchema.js +9 -1
  86. package/graphql/schema/baseContentSchema.js.map +1 -1
  87. package/graphql/schema/contentEntries.js +42 -2
  88. package/graphql/schema/contentEntries.js.map +1 -1
  89. package/graphql/schema/contentModelGroups.js +19 -2
  90. package/graphql/schema/contentModelGroups.js.map +1 -1
  91. package/graphql/schema/contentModels.js +41 -6
  92. package/graphql/schema/contentModels.js.map +1 -1
  93. package/graphql/schema/createFieldResolvers.d.ts +1 -1
  94. package/graphql/schema/createFieldResolvers.js +30 -8
  95. package/graphql/schema/createFieldResolvers.js.map +1 -1
  96. package/graphql/schema/createManageResolvers.js +26 -0
  97. package/graphql/schema/createManageResolvers.js.map +1 -1
  98. package/graphql/schema/createManageSDL.js +19 -5
  99. package/graphql/schema/createManageSDL.js.map +1 -1
  100. package/graphql/schema/createPreviewResolvers.js +10 -0
  101. package/graphql/schema/createPreviewResolvers.js.map +1 -1
  102. package/graphql/schema/createReadResolvers.js +10 -0
  103. package/graphql/schema/createReadResolvers.js.map +1 -1
  104. package/graphql/schema/createReadSDL.js +15 -3
  105. package/graphql/schema/createReadSDL.js.map +1 -1
  106. package/graphql/schema/resolvers/commonFieldResolvers.js +2 -0
  107. package/graphql/schema/resolvers/commonFieldResolvers.js.map +1 -1
  108. package/graphql/schema/resolvers/manage/resolveCreate.js +3 -0
  109. package/graphql/schema/resolvers/manage/resolveCreate.js.map +1 -1
  110. package/graphql/schema/resolvers/manage/resolveCreateFrom.js +3 -0
  111. package/graphql/schema/resolvers/manage/resolveCreateFrom.js.map +1 -1
  112. package/graphql/schema/resolvers/manage/resolveDelete.js +6 -0
  113. package/graphql/schema/resolvers/manage/resolveDelete.js.map +1 -1
  114. package/graphql/schema/resolvers/manage/resolveGet.js +16 -0
  115. package/graphql/schema/resolvers/manage/resolveGet.js.map +1 -1
  116. package/graphql/schema/resolvers/manage/resolveGetByIds.js +3 -0
  117. package/graphql/schema/resolvers/manage/resolveGetByIds.js.map +1 -1
  118. package/graphql/schema/resolvers/manage/resolveGetRevisions.js +3 -0
  119. package/graphql/schema/resolvers/manage/resolveGetRevisions.js.map +1 -1
  120. package/graphql/schema/resolvers/manage/resolveList.js +3 -0
  121. package/graphql/schema/resolvers/manage/resolveList.js.map +1 -1
  122. package/graphql/schema/resolvers/manage/resolvePublish.js +3 -0
  123. package/graphql/schema/resolvers/manage/resolvePublish.js.map +1 -1
  124. package/graphql/schema/resolvers/manage/resolveRepublish.js +3 -0
  125. package/graphql/schema/resolvers/manage/resolveRepublish.js.map +1 -1
  126. package/graphql/schema/resolvers/manage/resolveUnpublish.js +3 -0
  127. package/graphql/schema/resolvers/manage/resolveUnpublish.js.map +1 -1
  128. package/graphql/schema/resolvers/manage/resolveUpdate.js +3 -0
  129. package/graphql/schema/resolvers/manage/resolveUpdate.js.map +1 -1
  130. package/graphql/schema/resolvers/preview/resolveGet.js +8 -0
  131. package/graphql/schema/resolvers/preview/resolveGet.js.map +1 -1
  132. package/graphql/schema/resolvers/preview/resolveList.js +3 -0
  133. package/graphql/schema/resolvers/preview/resolveList.js.map +1 -1
  134. package/graphql/schema/resolvers/read/resolveGet.js +8 -0
  135. package/graphql/schema/resolvers/read/resolveGet.js.map +1 -1
  136. package/graphql/schema/resolvers/read/resolveList.js +3 -0
  137. package/graphql/schema/resolvers/read/resolveList.js.map +1 -1
  138. package/graphql/schema/schemaPlugins.js +19 -5
  139. package/graphql/schema/schemaPlugins.js.map +1 -1
  140. package/graphql/system.js +14 -1
  141. package/graphql/system.js.map +1 -1
  142. package/graphqlFields/boolean.js +12 -0
  143. package/graphqlFields/boolean.js.map +1 -1
  144. package/graphqlFields/datetime.js +17 -0
  145. package/graphqlFields/datetime.js.map +1 -1
  146. package/graphqlFields/dynamicZone/dynamicZoneField.d.ts +2 -0
  147. package/graphqlFields/dynamicZone/dynamicZoneField.js +234 -0
  148. package/graphqlFields/dynamicZone/dynamicZoneField.js.map +1 -0
  149. package/graphqlFields/dynamicZone/dynamicZoneStorage.d.ts +3 -0
  150. package/graphqlFields/dynamicZone/dynamicZoneStorage.js +79 -0
  151. package/graphqlFields/dynamicZone/dynamicZoneStorage.js.map +1 -0
  152. package/graphqlFields/dynamicZone/index.d.ts +2 -0
  153. package/graphqlFields/dynamicZone/index.js +21 -0
  154. package/graphqlFields/dynamicZone/index.js.map +1 -0
  155. package/graphqlFields/file.js +8 -0
  156. package/graphqlFields/file.js.map +1 -1
  157. package/graphqlFields/helpers.js +10 -0
  158. package/graphqlFields/helpers.js.map +1 -1
  159. package/graphqlFields/index.d.ts +1 -1
  160. package/graphqlFields/index.js +14 -1
  161. package/graphqlFields/index.js.map +1 -1
  162. package/graphqlFields/longText.js +10 -0
  163. package/graphqlFields/longText.js.map +1 -1
  164. package/graphqlFields/number.js +16 -0
  165. package/graphqlFields/number.js.map +1 -1
  166. package/graphqlFields/object.js +148 -68
  167. package/graphqlFields/object.js.map +1 -1
  168. package/graphqlFields/ref.js +77 -61
  169. package/graphqlFields/ref.js.map +1 -1
  170. package/graphqlFields/richText.js +9 -0
  171. package/graphqlFields/richText.js.map +1 -1
  172. package/graphqlFields/text.js +11 -0
  173. package/graphqlFields/text.js.map +1 -1
  174. package/index.d.ts +1 -1
  175. package/index.js +22 -1
  176. package/index.js.map +1 -1
  177. package/modelManager/DefaultCmsModelManager.js +16 -0
  178. package/modelManager/DefaultCmsModelManager.js.map +1 -1
  179. package/modelManager/index.js +4 -0
  180. package/modelManager/index.js.map +1 -1
  181. package/package.json +25 -24
  182. package/parameters/context.js +4 -0
  183. package/parameters/context.js.map +1 -1
  184. package/parameters/header.js +11 -0
  185. package/parameters/header.js.map +1 -1
  186. package/parameters/index.js +8 -0
  187. package/parameters/index.js.map +1 -1
  188. package/parameters/manual.js +8 -1
  189. package/parameters/manual.js.map +1 -1
  190. package/parameters/path.js +11 -0
  191. package/parameters/path.js.map +1 -1
  192. package/plugins/CmsGroupPlugin.js +8 -0
  193. package/plugins/CmsGroupPlugin.js.map +1 -1
  194. package/plugins/CmsModelFieldConverterPlugin.d.ts +2 -2
  195. package/plugins/CmsModelFieldConverterPlugin.js +5 -0
  196. package/plugins/CmsModelFieldConverterPlugin.js.map +1 -1
  197. package/plugins/CmsModelPlugin.js +38 -2
  198. package/plugins/CmsModelPlugin.js.map +1 -1
  199. package/plugins/CmsParametersPlugin.js +7 -0
  200. package/plugins/CmsParametersPlugin.js.map +1 -1
  201. package/plugins/StorageTransformPlugin.d.ts +11 -11
  202. package/plugins/StorageTransformPlugin.js +9 -0
  203. package/plugins/StorageTransformPlugin.js.map +1 -1
  204. package/plugins/index.js +10 -0
  205. package/plugins/index.js.map +1 -1
  206. package/storage/default.js +3 -0
  207. package/storage/default.js.map +1 -1
  208. package/storage/object.js +23 -2
  209. package/storage/object.js.map +1 -1
  210. package/types.d.ts +185 -42
  211. package/types.js +112 -7
  212. package/types.js.map +1 -1
  213. package/upgrades/5.33.0/index.js +26 -3
  214. package/upgrades/5.33.0/index.js.map +1 -1
  215. package/upgrades/index.js +3 -0
  216. package/upgrades/index.js.map +1 -1
  217. package/utils/access.js +25 -11
  218. package/utils/access.js.map +1 -1
  219. package/utils/converters/Converter.js +13 -0
  220. package/utils/converters/Converter.js.map +1 -1
  221. package/utils/converters/ConverterCollection.js +38 -11
  222. package/utils/converters/ConverterCollection.js.map +1 -1
  223. package/utils/converters/valueKeyStorageConverter.js +26 -0
  224. package/utils/converters/valueKeyStorageConverter.js.map +1 -1
  225. package/utils/createTypeFromFields.d.ts +15 -0
  226. package/utils/createTypeFromFields.js +75 -0
  227. package/utils/createTypeFromFields.js.map +1 -0
  228. package/utils/createTypeName.js +11 -1
  229. package/utils/createTypeName.js.map +1 -1
  230. package/utils/entryStorage.js +38 -19
  231. package/utils/entryStorage.js.map +1 -1
  232. package/utils/filterAsync.js +5 -0
  233. package/utils/filterAsync.js.map +1 -1
  234. package/utils/filterModelFields.js +9 -3
  235. package/utils/filterModelFields.js.map +1 -1
  236. package/utils/getBaseFieldType.d.ts +4 -0
  237. package/utils/getBaseFieldType.js +12 -0
  238. package/utils/getBaseFieldType.js.map +1 -0
  239. package/utils/getEntryTitle.js +9 -0
  240. package/utils/getEntryTitle.js.map +1 -1
  241. package/utils/getSchemaFromFieldPlugins.js +6 -2
  242. package/utils/getSchemaFromFieldPlugins.js.map +1 -1
  243. package/utils/ownership.js +8 -0
  244. package/utils/ownership.js.map +1 -1
  245. package/utils/permissions.js +23 -8
  246. package/utils/permissions.js.map +1 -1
  247. package/utils/pluralizedTypeName.js +6 -0
  248. package/utils/pluralizedTypeName.js.map +1 -1
  249. package/utils/renderFields.js +11 -1
  250. package/utils/renderFields.js.map +1 -1
  251. package/utils/renderGetFilterFields.js +19 -3
  252. package/utils/renderGetFilterFields.js.map +1 -1
  253. package/utils/renderInputFields.js +11 -1
  254. package/utils/renderInputFields.js.map +1 -1
  255. package/utils/renderListFilterFields.js +13 -2
  256. package/utils/renderListFilterFields.js.map +1 -1
  257. package/utils/renderSortEnum.js +10 -1
  258. package/utils/renderSortEnum.js.map +1 -1
  259. package/utils/toSlug.js +4 -0
  260. package/utils/toSlug.js.map +1 -1
  261. package/validators/dateGte.js +7 -0
  262. package/validators/dateGte.js.map +1 -1
  263. package/validators/dateLte.js +7 -0
  264. package/validators/dateLte.js.map +1 -1
  265. package/validators/dynamicZone.d.ts +2 -0
  266. package/validators/dynamicZone.js +24 -0
  267. package/validators/dynamicZone.js.map +1 -0
  268. package/validators/gte.js +8 -0
  269. package/validators/gte.js.map +1 -1
  270. package/validators/in.js +8 -0
  271. package/validators/in.js.map +1 -1
  272. package/validators/index.js +18 -1
  273. package/validators/index.js.map +1 -1
  274. package/validators/lte.js +8 -0
  275. package/validators/lte.js.map +1 -1
  276. package/validators/maxLength.js +8 -0
  277. package/validators/maxLength.js.map +1 -1
  278. package/validators/minLength.js +8 -0
  279. package/validators/minLength.js.map +1 -1
  280. package/validators/pattern.js +9 -0
  281. package/validators/pattern.js.map +1 -1
  282. package/validators/patternPlugins/email.js +2 -0
  283. package/validators/patternPlugins/email.js.map +1 -1
  284. package/validators/patternPlugins/index.js +8 -0
  285. package/validators/patternPlugins/index.js.map +1 -1
  286. package/validators/patternPlugins/lowerCase.js +2 -0
  287. package/validators/patternPlugins/lowerCase.js.map +1 -1
  288. package/validators/patternPlugins/lowerCaseSpace.js +2 -0
  289. package/validators/patternPlugins/lowerCaseSpace.js.map +1 -1
  290. package/validators/patternPlugins/upperCase.js +2 -0
  291. package/validators/patternPlugins/upperCase.js.map +1 -1
  292. package/validators/patternPlugins/upperCaseSpace.js +2 -0
  293. package/validators/patternPlugins/upperCaseSpace.js.map +1 -1
  294. package/validators/patternPlugins/url.js +2 -0
  295. package/validators/patternPlugins/url.js.map +1 -1
  296. package/validators/required.js +5 -0
  297. package/validators/required.js.map +1 -1
  298. package/validators/timeGte.js +8 -0
  299. package/validators/timeGte.js.map +1 -1
  300. package/validators/timeLte.js +8 -0
  301. package/validators/timeLte.js.map +1 -1
  302. package/validators/unique.js +7 -0
  303. package/validators/unique.js.map +1 -1
  304. package/graphql/schema/resolvers/manage/resolveRequestChanges.d.ts +0 -7
  305. package/graphql/schema/resolvers/manage/resolveRequestChanges.js +0 -21
  306. package/graphql/schema/resolvers/manage/resolveRequestChanges.js.map +0 -1
  307. package/graphql/schema/resolvers/manage/resolveRequestReview.d.ts +0 -7
  308. package/graphql/schema/resolvers/manage/resolveRequestReview.js +0 -21
  309. package/graphql/schema/resolvers/manage/resolveRequestReview.js.map +0 -1
@@ -1,14 +1,22 @@
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.referenceFieldsMapping = void 0;
9
+
8
10
  var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
11
+
9
12
  var _error = _interopRequireDefault(require("@webiny/error"));
13
+
10
14
  var _dotProp = _interopRequireDefault(require("dot-prop"));
15
+
11
16
  var _utils = require("@webiny/utils");
17
+
18
+ var _getBaseFieldType = require("../../utils/getBaseFieldType");
19
+
12
20
  const buildReferenceFieldPaths = params => {
13
21
  const {
14
22
  fields,
@@ -17,60 +25,79 @@ const buildReferenceFieldPaths = params => {
17
25
  } = params;
18
26
  const parentPaths = [...initialParentPaths];
19
27
  const isMultipleValues = Array.isArray(input);
20
- return fields.filter(field => ["object", "ref"].includes(field.type)).reduce((collection, field) => {
28
+ return fields.filter(field => ["object", "ref"].includes((0, _getBaseFieldType.getBaseFieldType)(field))).reduce((collection, field) => {
21
29
  var _field$settings2;
30
+
22
31
  /**
23
32
  * First we check the ref field
24
33
  */
25
- if (field.type === "ref") {
34
+ const baseType = (0, _getBaseFieldType.getBaseFieldType)(field);
35
+
36
+ if (baseType === "ref") {
26
37
  const parentPathsValue = parentPaths.length > 0 ? `${parentPaths.join(".")}.` : "";
38
+
27
39
  if (field.multipleValues) {
28
40
  const inputValue = _dotProp.default.get(input, `${field.fieldId}`, []);
41
+
29
42
  if (Array.isArray(inputValue) === false) {
30
43
  return collection;
31
44
  }
45
+
32
46
  for (const key in inputValue) {
33
47
  const path = `${parentPathsValue}${field.fieldId}.${key}`;
34
48
  collection.push(path);
35
49
  }
50
+
36
51
  return collection;
37
52
  }
53
+
38
54
  if (isMultipleValues) {
39
55
  for (const key in input) {
40
56
  const path = `${parentPathsValue}${key}.${field.fieldId}`;
41
57
  collection.push(path);
42
58
  }
59
+
43
60
  return collection;
44
61
  }
62
+
45
63
  collection.push(`${parentPathsValue}${field.fieldId}`);
46
64
  return collection;
47
65
  }
48
66
  /**
49
67
  * Then we move onto the object field
50
68
  */
69
+
70
+
51
71
  const parentPathsValue = parentPaths.length > 0 ? `${parentPaths.join(".")}.` : "";
52
72
  /**
53
73
  * This is if received input is array. We need to map key with fieldId at this point.
54
74
  */
75
+
55
76
  if (isMultipleValues) {
56
77
  for (const key in input) {
57
78
  const path = `${parentPathsValue}${key}.${field.fieldId}`;
58
79
  collection.push(path);
59
80
  }
81
+
60
82
  return collection;
61
83
  }
84
+
62
85
  const objFieldPath = `${field.fieldId}`;
63
- const objFieldInputValue = _dotProp.default.get(input, objFieldPath, []);
64
86
 
87
+ const objFieldInputValue = _dotProp.default.get(input, objFieldPath, []);
65
88
  /**
66
89
  * If field is multiple values one, we need to go through the input and use the existing keys.
67
90
  */
91
+
92
+
68
93
  if (field.multipleValues) {
69
94
  if (Array.isArray(objFieldInputValue) === false) {
70
95
  return collection;
71
96
  }
97
+
72
98
  for (const key in objFieldInputValue) {
73
99
  var _field$settings;
100
+
74
101
  const result = buildReferenceFieldPaths({
75
102
  fields: ((_field$settings = field.settings) === null || _field$settings === void 0 ? void 0 : _field$settings.fields) || [],
76
103
  input: objFieldInputValue[key],
@@ -78,12 +105,14 @@ const buildReferenceFieldPaths = params => {
78
105
  });
79
106
  collection.push(...result);
80
107
  }
108
+
81
109
  return collection;
82
110
  }
83
-
84
111
  /**
85
112
  * Single value reference field.
86
113
  */
114
+
115
+
87
116
  const results = buildReferenceFieldPaths({
88
117
  fields: ((_field$settings2 = field.settings) === null || _field$settings2 === void 0 ? void 0 : _field$settings2.fields) || [],
89
118
  input: objFieldInputValue,
@@ -92,6 +121,7 @@ const buildReferenceFieldPaths = params => {
92
121
  return collection.concat(results);
93
122
  }, []);
94
123
  };
124
+
95
125
  const getReferenceFieldValue = ref => {
96
126
  if (!ref) {
97
127
  return {
@@ -99,11 +129,13 @@ const getReferenceFieldValue = ref => {
99
129
  modelId: null
100
130
  };
101
131
  }
132
+
102
133
  return {
103
134
  id: (ref.id || ref.entryId || "").trim() || null,
104
135
  modelId: (ref.modelId || "").trim() || null
105
136
  };
106
137
  };
138
+
107
139
  const referenceFieldsMapping = async params => {
108
140
  const {
109
141
  context,
@@ -117,56 +149,72 @@ const referenceFieldsMapping = async params => {
117
149
  input,
118
150
  parentPaths: []
119
151
  });
152
+
120
153
  if (referenceFieldPaths.length === 0) {
121
154
  return output;
122
155
  }
156
+
123
157
  const referencesByModel = {};
124
158
  const pathsByReferenceId = {};
159
+
125
160
  for (const path of referenceFieldPaths) {
126
161
  const ref = _dotProp.default.get(output, path);
162
+
127
163
  const {
128
164
  id,
129
165
  modelId
130
166
  } = getReferenceFieldValue(ref);
167
+
131
168
  if (!id || !modelId) {
132
169
  continue;
133
170
  }
171
+
134
172
  if (!referencesByModel[modelId]) {
135
173
  referencesByModel[modelId] = [];
136
174
  }
175
+
137
176
  referencesByModel[modelId].push(id);
177
+
138
178
  if (!pathsByReferenceId[id]) {
139
179
  pathsByReferenceId[id] = [];
140
180
  }
181
+
141
182
  pathsByReferenceId[id].push(path);
142
183
  }
143
-
144
184
  /**
145
185
  * Again, no point in going further.
146
186
  */
187
+
188
+
147
189
  if (Object.keys(referencesByModel).length === 0) {
148
190
  return output;
149
191
  }
150
192
  /**
151
193
  * Load all models and use only those that are used in reference.
152
194
  */
195
+
196
+
153
197
  const models = (await context.cms.listModels()).filter(model => {
154
198
  const entries = referencesByModel[model.modelId];
155
- if (Array.isArray(entries) === false || entries.length === 0) {
199
+
200
+ if (!Array.isArray(entries) || entries.length === 0) {
156
201
  return false;
157
202
  }
203
+
158
204
  return true;
159
205
  });
160
206
  /**
161
207
  * Check for any model existence, just in case.
162
208
  */
209
+
163
210
  if (models.length === 0) {
164
211
  return output;
165
212
  }
166
-
167
213
  /**
168
214
  * Load all the entries by their ID
169
215
  */
216
+
217
+
170
218
  const promises = models.map(model => {
171
219
  return context.cms.getEntriesByIds(model, referencesByModel[model.modelId]);
172
220
  });
@@ -179,22 +227,26 @@ const referenceFieldsMapping = async params => {
179
227
  modelId: entry.modelId
180
228
  };
181
229
  }
230
+
182
231
  return collection;
183
232
  }, {});
184
233
  /**
185
234
  * Verify that all referenced entries actually exist.
186
235
  */
236
+
187
237
  for (const modelId in referencesByModel) {
188
238
  const entries = referencesByModel[modelId];
239
+
189
240
  for (const id of entries) {
190
241
  if (records[id]) {
191
242
  continue;
192
- } else if (validateEntries === true) {
243
+ } else if (validateEntries) {
193
244
  throw new _error.default(`Missing referenced entry with id "${id}" in model "${modelId}".`, "ENTRY_NOT_FOUND", {
194
245
  id,
195
246
  model: modelId
196
247
  });
197
248
  }
249
+
198
250
  const {
199
251
  id: entryId
200
252
  } = (0, _utils.parseIdentifier)(id);
@@ -205,22 +257,26 @@ const referenceFieldsMapping = async params => {
205
257
  };
206
258
  }
207
259
  }
208
-
209
260
  /**
210
261
  * In the end, assign the entryId, id and model values to the output.
211
262
  */
263
+
264
+
212
265
  for (const id in pathsByReferenceId) {
213
266
  const entry = records[id];
214
267
  const paths = pathsByReferenceId[id];
268
+
215
269
  if (!entry) {
216
- if (validateEntries === true) {
270
+ if (validateEntries) {
217
271
  throw new _error.default("Missing entry in records.", "ENTRY_ERROR", {
218
272
  id,
219
273
  paths
220
274
  });
221
275
  }
276
+
222
277
  continue;
223
278
  }
279
+
224
280
  for (const path of paths) {
225
281
  output = _dotProp.default.set(output, path, {
226
282
  id: entry.id,
@@ -229,6 +285,8 @@ const referenceFieldsMapping = async params => {
229
285
  });
230
286
  }
231
287
  }
288
+
232
289
  return output;
233
290
  };
291
+
234
292
  exports.referenceFieldsMapping = referenceFieldsMapping;
@@ -1 +1 @@
1
- {"version":3,"names":["buildReferenceFieldPaths","params","fields","parentPaths","initialParentPaths","input","isMultipleValues","Array","isArray","filter","field","includes","type","reduce","collection","parentPathsValue","length","join","multipleValues","inputValue","dotProp","get","fieldId","key","path","push","objFieldPath","objFieldInputValue","result","settings","concat","results","getReferenceFieldValue","ref","id","modelId","entryId","trim","referenceFieldsMapping","context","model","validateEntries","output","referenceFieldPaths","referencesByModel","pathsByReferenceId","Object","keys","models","cms","listModels","entries","promises","map","getEntriesByIds","Promise","all","records","entry","WebinyError","parseIdentifier","paths","set"],"sources":["referenceFieldsMapping.ts"],"sourcesContent":["import { CmsContext, CmsModel, CmsModelField } from \"~/types\";\nimport WebinyError from \"@webiny/error\";\nimport dotProp from \"dot-prop\";\nimport { parseIdentifier } from \"@webiny/utils\";\n\ninterface CmsRefEntry {\n id: string;\n entryId: string;\n modelId: string;\n}\n\ninterface ReferenceObject {\n id: string;\n modelId: string;\n}\n\ninterface Params {\n context: CmsContext;\n model: CmsModel;\n input: Record<string, ReferenceObject | ReferenceObject[]>;\n validateEntries?: boolean;\n}\n\ninterface BuildReferenceFieldPaths {\n fields: CmsModelField[];\n parentPaths: string[];\n input: Record<string, any>;\n}\n\nconst buildReferenceFieldPaths = (params: BuildReferenceFieldPaths): string[] => {\n const { fields, parentPaths: initialParentPaths, input } = params;\n\n const parentPaths = [...initialParentPaths];\n\n const isMultipleValues = Array.isArray(input);\n\n return fields\n .filter(field => [\"object\", \"ref\"].includes(field.type))\n .reduce((collection, field) => {\n /**\n * First we check the ref field\n */\n if (field.type === \"ref\") {\n const parentPathsValue = parentPaths.length > 0 ? `${parentPaths.join(\".\")}.` : \"\";\n if (field.multipleValues) {\n const inputValue = dotProp.get(input, `${field.fieldId}`, []);\n if (Array.isArray(inputValue) === false) {\n return collection;\n }\n for (const key in inputValue) {\n const path = `${parentPathsValue}${field.fieldId}.${key}`;\n collection.push(path);\n }\n return collection;\n }\n\n if (isMultipleValues) {\n for (const key in input) {\n const path = `${parentPathsValue}${key}.${field.fieldId}`;\n collection.push(path);\n }\n return collection;\n }\n\n collection.push(`${parentPathsValue}${field.fieldId}`);\n\n return collection;\n }\n /**\n * Then we move onto the object field\n */\n const parentPathsValue = parentPaths.length > 0 ? `${parentPaths.join(\".\")}.` : \"\";\n /**\n * This is if received input is array. We need to map key with fieldId at this point.\n */\n if (isMultipleValues) {\n for (const key in input) {\n const path = `${parentPathsValue}${key}.${field.fieldId}`;\n collection.push(path);\n }\n return collection;\n }\n\n const objFieldPath = `${field.fieldId}`;\n const objFieldInputValue = dotProp.get(input, objFieldPath, []);\n\n /**\n * If field is multiple values one, we need to go through the input and use the existing keys.\n */\n if (field.multipleValues) {\n if (Array.isArray(objFieldInputValue) === false) {\n return collection;\n }\n for (const key in objFieldInputValue) {\n const result = buildReferenceFieldPaths({\n fields: field.settings?.fields || [],\n input: objFieldInputValue[key],\n parentPaths: parentPaths.concat([field.fieldId, key])\n });\n collection.push(...result);\n }\n\n return collection;\n }\n\n /**\n * Single value reference field.\n */\n const results = buildReferenceFieldPaths({\n fields: field.settings?.fields || [],\n input: objFieldInputValue,\n parentPaths: parentPaths.concat([field.fieldId])\n });\n\n return collection.concat(results);\n }, [] as string[]);\n};\n\nconst getReferenceFieldValue = (ref: any): { id: string | null; modelId: string | null } => {\n if (!ref) {\n return {\n id: null,\n modelId: null\n };\n }\n return {\n id: (ref.id || ref.entryId || \"\").trim() || null,\n modelId: (ref.modelId || \"\").trim() || null\n };\n};\n\nexport const referenceFieldsMapping = async (params: Params): Promise<Record<string, any>> => {\n const { context, model, input, validateEntries = false } = params;\n\n let output: Record<string, any> = {\n ...input\n };\n\n const referenceFieldPaths = buildReferenceFieldPaths({\n fields: model.fields,\n input,\n parentPaths: []\n });\n if (referenceFieldPaths.length === 0) {\n return output;\n }\n\n const referencesByModel: Record<string, string[]> = {};\n const pathsByReferenceId: Record<string, string[]> = {};\n\n for (const path of referenceFieldPaths) {\n const ref = dotProp.get(output, path) as ReferenceObject | any;\n\n const { id, modelId } = getReferenceFieldValue(ref);\n\n if (!id || !modelId) {\n continue;\n }\n if (!referencesByModel[modelId]) {\n referencesByModel[modelId] = [];\n }\n referencesByModel[modelId].push(id);\n if (!pathsByReferenceId[id]) {\n pathsByReferenceId[id] = [];\n }\n pathsByReferenceId[id].push(path);\n }\n\n /**\n * Again, no point in going further.\n */\n if (Object.keys(referencesByModel).length === 0) {\n return output;\n }\n /**\n * Load all models and use only those that are used in reference.\n */\n const models = (await context.cms.listModels()).filter(model => {\n const entries = referencesByModel[model.modelId];\n if (Array.isArray(entries) === false || entries.length === 0) {\n return false;\n }\n return true;\n });\n /**\n * Check for any model existence, just in case.\n */\n if (models.length === 0) {\n return output;\n }\n\n /**\n * Load all the entries by their ID\n */\n const promises = models.map(model => {\n return context.cms.getEntriesByIds(model, referencesByModel[model.modelId]);\n });\n\n const results = await Promise.all(promises);\n\n const records: Record<string, CmsRefEntry> = results.reduce((collection, entries) => {\n for (const entry of entries) {\n collection[entry.id] = {\n id: entry.id,\n entryId: entry.entryId,\n modelId: entry.modelId\n };\n }\n return collection;\n }, {} as Record<string, CmsRefEntry>);\n /**\n * Verify that all referenced entries actually exist.\n */\n for (const modelId in referencesByModel) {\n const entries = referencesByModel[modelId];\n for (const id of entries) {\n if (records[id]) {\n continue;\n } else if (validateEntries === true) {\n throw new WebinyError(\n `Missing referenced entry with id \"${id}\" in model \"${modelId}\".`,\n \"ENTRY_NOT_FOUND\",\n {\n id,\n model: modelId\n }\n );\n }\n const { id: entryId } = parseIdentifier(id);\n records[id] = {\n id,\n entryId,\n modelId\n };\n }\n }\n\n /**\n * In the end, assign the entryId, id and model values to the output.\n */\n for (const id in pathsByReferenceId) {\n const entry = records[id];\n const paths = pathsByReferenceId[id];\n if (!entry) {\n if (validateEntries === true) {\n throw new WebinyError(\"Missing entry in records.\", \"ENTRY_ERROR\", {\n id,\n paths\n });\n }\n continue;\n }\n for (const path of paths) {\n output = dotProp.set(output, path, {\n id: entry.id,\n entryId: entry.entryId,\n modelId: entry.modelId\n });\n }\n }\n\n return output;\n};\n"],"mappings":"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"}
1
+ {"version":3,"names":["buildReferenceFieldPaths","params","fields","parentPaths","initialParentPaths","input","isMultipleValues","Array","isArray","filter","field","includes","getBaseFieldType","reduce","collection","baseType","parentPathsValue","length","join","multipleValues","inputValue","dotProp","get","fieldId","key","path","push","objFieldPath","objFieldInputValue","result","settings","concat","results","getReferenceFieldValue","ref","id","modelId","entryId","trim","referenceFieldsMapping","context","model","validateEntries","output","referenceFieldPaths","referencesByModel","pathsByReferenceId","Object","keys","models","cms","listModels","entries","promises","map","getEntriesByIds","Promise","all","records","entry","WebinyError","parseIdentifier","paths","set"],"sources":["referenceFieldsMapping.ts"],"sourcesContent":["import { CmsContext, CmsModel, CmsModelField } from \"~/types\";\nimport WebinyError from \"@webiny/error\";\nimport dotProp from \"dot-prop\";\nimport { parseIdentifier } from \"@webiny/utils\";\nimport { getBaseFieldType } from \"~/utils/getBaseFieldType\";\n\ninterface CmsRefEntry {\n id: string;\n entryId: string;\n modelId: string;\n}\n\ninterface ReferenceObject {\n id: string;\n modelId: string;\n}\n\ninterface Params {\n context: CmsContext;\n model: CmsModel;\n input: Record<string, ReferenceObject | ReferenceObject[]>;\n validateEntries?: boolean;\n}\n\ninterface BuildReferenceFieldPaths {\n fields: CmsModelField[];\n parentPaths: string[];\n input: Record<string, any>;\n}\n\nconst buildReferenceFieldPaths = (params: BuildReferenceFieldPaths): string[] => {\n const { fields, parentPaths: initialParentPaths, input } = params;\n\n const parentPaths = [...initialParentPaths];\n\n const isMultipleValues = Array.isArray(input);\n\n return fields\n .filter(field => [\"object\", \"ref\"].includes(getBaseFieldType(field)))\n .reduce((collection, field) => {\n /**\n * First we check the ref field\n */\n const baseType = getBaseFieldType(field);\n if (baseType === \"ref\") {\n const parentPathsValue = parentPaths.length > 0 ? `${parentPaths.join(\".\")}.` : \"\";\n if (field.multipleValues) {\n const inputValue = dotProp.get(input, `${field.fieldId}`, []);\n if (Array.isArray(inputValue) === false) {\n return collection;\n }\n for (const key in inputValue) {\n const path = `${parentPathsValue}${field.fieldId}.${key}`;\n collection.push(path);\n }\n return collection;\n }\n\n if (isMultipleValues) {\n for (const key in input) {\n const path = `${parentPathsValue}${key}.${field.fieldId}`;\n collection.push(path);\n }\n return collection;\n }\n\n collection.push(`${parentPathsValue}${field.fieldId}`);\n\n return collection;\n }\n /**\n * Then we move onto the object field\n */\n const parentPathsValue = parentPaths.length > 0 ? `${parentPaths.join(\".\")}.` : \"\";\n /**\n * This is if received input is array. We need to map key with fieldId at this point.\n */\n if (isMultipleValues) {\n for (const key in input) {\n const path = `${parentPathsValue}${key}.${field.fieldId}`;\n collection.push(path);\n }\n return collection;\n }\n\n const objFieldPath = `${field.fieldId}`;\n const objFieldInputValue = dotProp.get(input, objFieldPath, []);\n\n /**\n * If field is multiple values one, we need to go through the input and use the existing keys.\n */\n if (field.multipleValues) {\n if (Array.isArray(objFieldInputValue) === false) {\n return collection;\n }\n for (const key in objFieldInputValue) {\n const result = buildReferenceFieldPaths({\n fields: field.settings?.fields || [],\n input: objFieldInputValue[key],\n parentPaths: parentPaths.concat([field.fieldId, key])\n });\n collection.push(...result);\n }\n\n return collection;\n }\n\n /**\n * Single value reference field.\n */\n const results = buildReferenceFieldPaths({\n fields: field.settings?.fields || [],\n input: objFieldInputValue,\n parentPaths: parentPaths.concat([field.fieldId])\n });\n\n return collection.concat(results);\n }, [] as string[]);\n};\n\nconst getReferenceFieldValue = (ref: any): { id: string | null; modelId: string | null } => {\n if (!ref) {\n return {\n id: null,\n modelId: null\n };\n }\n return {\n id: (ref.id || ref.entryId || \"\").trim() || null,\n modelId: (ref.modelId || \"\").trim() || null\n };\n};\n\nexport const referenceFieldsMapping = async (params: Params): Promise<Record<string, any>> => {\n const { context, model, input, validateEntries = false } = params;\n\n let output: Record<string, any> = {\n ...input\n };\n\n const referenceFieldPaths = buildReferenceFieldPaths({\n fields: model.fields,\n input,\n parentPaths: []\n });\n if (referenceFieldPaths.length === 0) {\n return output;\n }\n\n const referencesByModel: Record<string, string[]> = {};\n const pathsByReferenceId: Record<string, string[]> = {};\n\n for (const path of referenceFieldPaths) {\n const ref = dotProp.get(output, path) as ReferenceObject | any;\n\n const { id, modelId } = getReferenceFieldValue(ref);\n\n if (!id || !modelId) {\n continue;\n }\n if (!referencesByModel[modelId]) {\n referencesByModel[modelId] = [];\n }\n referencesByModel[modelId].push(id);\n if (!pathsByReferenceId[id]) {\n pathsByReferenceId[id] = [];\n }\n pathsByReferenceId[id].push(path);\n }\n\n /**\n * Again, no point in going further.\n */\n if (Object.keys(referencesByModel).length === 0) {\n return output;\n }\n /**\n * Load all models and use only those that are used in reference.\n */\n const models = (await context.cms.listModels()).filter(model => {\n const entries = referencesByModel[model.modelId];\n if (!Array.isArray(entries) || entries.length === 0) {\n return false;\n }\n return true;\n });\n /**\n * Check for any model existence, just in case.\n */\n if (models.length === 0) {\n return output;\n }\n\n /**\n * Load all the entries by their ID\n */\n const promises = models.map(model => {\n return context.cms.getEntriesByIds(model, referencesByModel[model.modelId]);\n });\n\n const results = await Promise.all(promises);\n\n const records: Record<string, CmsRefEntry> = results.reduce((collection, entries) => {\n for (const entry of entries) {\n collection[entry.id] = {\n id: entry.id,\n entryId: entry.entryId,\n modelId: entry.modelId\n };\n }\n return collection;\n }, {} as Record<string, CmsRefEntry>);\n /**\n * Verify that all referenced entries actually exist.\n */\n for (const modelId in referencesByModel) {\n const entries = referencesByModel[modelId];\n for (const id of entries) {\n if (records[id]) {\n continue;\n } else if (validateEntries) {\n throw new WebinyError(\n `Missing referenced entry with id \"${id}\" in model \"${modelId}\".`,\n \"ENTRY_NOT_FOUND\",\n {\n id,\n model: modelId\n }\n );\n }\n const { id: entryId } = parseIdentifier(id);\n records[id] = {\n id,\n entryId,\n modelId\n };\n }\n }\n\n /**\n * In the end, assign the entryId, id and model values to the output.\n */\n for (const id in pathsByReferenceId) {\n const entry = records[id];\n const paths = pathsByReferenceId[id];\n if (!entry) {\n if (validateEntries) {\n throw new WebinyError(\"Missing entry in records.\", \"ENTRY_ERROR\", {\n id,\n paths\n });\n }\n continue;\n }\n for (const path of paths) {\n output = dotProp.set(output, path, {\n id: entry.id,\n entryId: entry.entryId,\n modelId: entry.modelId\n });\n }\n }\n\n return output;\n};\n"],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { CmsModelField } from "../../types";
2
+ import { PluginsContainer } from "@webiny/plugins";
3
+ interface Params {
4
+ input: string[];
5
+ fields: CmsModelField[];
6
+ plugins: PluginsContainer;
7
+ }
8
+ export declare const getSearchableFields: (params: Params) => string[];
9
+ export {};
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.getSearchableFields = void 0;
7
+
8
+ const buildSearchableFieldList = params => {
9
+ const {
10
+ input,
11
+ plugins,
12
+ fields,
13
+ parents
14
+ } = params;
15
+ return fields.reduce((result, field) => {
16
+ var _field$settings;
17
+
18
+ /**
19
+ * We need to check if the field is full text searchable, and for that we need a plugin for the field type.
20
+ */
21
+ const plugin = plugins[field.type];
22
+
23
+ if (!plugin) {
24
+ return result;
25
+ }
26
+ /**
27
+ * There is a possibility that searchable fields exist in nested object field, so check that as well.
28
+ */
29
+
30
+
31
+ const childFields = ((_field$settings = field.settings) === null || _field$settings === void 0 ? void 0 : _field$settings.fields) || [];
32
+
33
+ if (childFields.length > 0) {
34
+ /**
35
+ * So we build a list of searchable child fields and push it into the main result set.
36
+ */
37
+ const childResults = buildSearchableFieldList({
38
+ fields: childFields,
39
+ parents: [...parents, field.fieldId],
40
+ plugins,
41
+ input
42
+ });
43
+ result.push(...childResults);
44
+ return result;
45
+ }
46
+ /**
47
+ * If not searchable, continue further.
48
+ */
49
+
50
+
51
+ if (!plugin.fullTextSearch) {
52
+ return result;
53
+ }
54
+ /**
55
+ * Combine all parent paths with the current one and push it.
56
+ */
57
+
58
+
59
+ const path = [...parents, field.fieldId].join(".");
60
+ result.push(path);
61
+ return result;
62
+ }, []);
63
+ };
64
+
65
+ const getSearchableFields = params => {
66
+ const {
67
+ plugins,
68
+ input,
69
+ fields
70
+ } = params;
71
+ const fieldPluginMap = plugins.byType("cms-model-field-to-graphql").reduce((collection, field) => {
72
+ collection[field.fieldType] = field;
73
+ return collection;
74
+ }, {});
75
+ return buildSearchableFieldList({
76
+ fields,
77
+ input,
78
+ plugins: fieldPluginMap,
79
+ parents: []
80
+ });
81
+ };
82
+
83
+ exports.getSearchableFields = getSearchableFields;
@@ -0,0 +1 @@
1
+ {"version":3,"names":["buildSearchableFieldList","params","input","plugins","fields","parents","reduce","result","field","plugin","type","childFields","settings","length","childResults","fieldId","push","fullTextSearch","path","join","getSearchableFields","fieldPluginMap","byType","collection","fieldType"],"sources":["searchableFields.ts"],"sourcesContent":["import { CmsModelField, CmsModelFieldToGraphQLPlugin } from \"~/types\";\nimport { PluginsContainer } from \"@webiny/plugins\";\n\ninterface BuildParams {\n input: string[];\n fields: CmsModelField[];\n plugins: Record<string, CmsModelFieldToGraphQLPlugin>;\n parents: string[];\n}\nconst buildSearchableFieldList = (params: BuildParams): string[] => {\n const { input, plugins, fields, parents } = params;\n return fields.reduce<string[]>((result, field) => {\n /**\n * We need to check if the field is full text searchable, and for that we need a plugin for the field type.\n */\n const plugin = plugins[field.type];\n if (!plugin) {\n return result;\n }\n /**\n * There is a possibility that searchable fields exist in nested object field, so check that as well.\n */\n const childFields = field.settings?.fields || [];\n if (childFields.length > 0) {\n /**\n * So we build a list of searchable child fields and push it into the main result set.\n */\n const childResults = buildSearchableFieldList({\n fields: childFields,\n parents: [...parents, field.fieldId],\n plugins,\n input\n });\n\n result.push(...childResults);\n return result;\n }\n /**\n * If not searchable, continue further.\n */\n if (!plugin.fullTextSearch) {\n return result;\n }\n\n /**\n * Combine all parent paths with the current one and push it.\n */\n const path = [...parents, field.fieldId].join(\".\");\n result.push(path);\n\n return result;\n }, []);\n};\n\ninterface Params {\n input: string[];\n fields: CmsModelField[];\n plugins: PluginsContainer;\n}\nexport const getSearchableFields = (params: Params): string[] => {\n const { plugins, input, fields } = params;\n const fieldPluginMap = plugins\n .byType<CmsModelFieldToGraphQLPlugin>(\"cms-model-field-to-graphql\")\n .reduce((collection, field) => {\n collection[field.fieldType] = field;\n return collection;\n }, {} as Record<string, CmsModelFieldToGraphQLPlugin>);\n\n return buildSearchableFieldList({\n fields,\n input,\n plugins: fieldPluginMap,\n parents: []\n });\n};\n"],"mappings":";;;;;;;AASA,MAAMA,wBAAwB,GAAIC,MAAD,IAAmC;EAChE,MAAM;IAAEC,KAAF;IAASC,OAAT;IAAkBC,MAAlB;IAA0BC;EAA1B,IAAsCJ,MAA5C;EACA,OAAOG,MAAM,CAACE,MAAP,CAAwB,CAACC,MAAD,EAASC,KAAT,KAAmB;IAAA;;IAC9C;AACR;AACA;IACQ,MAAMC,MAAM,GAAGN,OAAO,CAACK,KAAK,CAACE,IAAP,CAAtB;;IACA,IAAI,CAACD,MAAL,EAAa;MACT,OAAOF,MAAP;IACH;IACD;AACR;AACA;;;IACQ,MAAMI,WAAW,GAAG,oBAAAH,KAAK,CAACI,QAAN,oEAAgBR,MAAhB,KAA0B,EAA9C;;IACA,IAAIO,WAAW,CAACE,MAAZ,GAAqB,CAAzB,EAA4B;MACxB;AACZ;AACA;MACY,MAAMC,YAAY,GAAGd,wBAAwB,CAAC;QAC1CI,MAAM,EAAEO,WADkC;QAE1CN,OAAO,EAAE,CAAC,GAAGA,OAAJ,EAAaG,KAAK,CAACO,OAAnB,CAFiC;QAG1CZ,OAH0C;QAI1CD;MAJ0C,CAAD,CAA7C;MAOAK,MAAM,CAACS,IAAP,CAAY,GAAGF,YAAf;MACA,OAAOP,MAAP;IACH;IACD;AACR;AACA;;;IACQ,IAAI,CAACE,MAAM,CAACQ,cAAZ,EAA4B;MACxB,OAAOV,MAAP;IACH;IAED;AACR;AACA;;;IACQ,MAAMW,IAAI,GAAG,CAAC,GAAGb,OAAJ,EAAaG,KAAK,CAACO,OAAnB,EAA4BI,IAA5B,CAAiC,GAAjC,CAAb;IACAZ,MAAM,CAACS,IAAP,CAAYE,IAAZ;IAEA,OAAOX,MAAP;EACH,CAxCM,EAwCJ,EAxCI,CAAP;AAyCH,CA3CD;;AAkDO,MAAMa,mBAAmB,GAAInB,MAAD,IAA8B;EAC7D,MAAM;IAAEE,OAAF;IAAWD,KAAX;IAAkBE;EAAlB,IAA6BH,MAAnC;EACA,MAAMoB,cAAc,GAAGlB,OAAO,CACzBmB,MADkB,CACmB,4BADnB,EAElBhB,MAFkB,CAEX,CAACiB,UAAD,EAAaf,KAAb,KAAuB;IAC3Be,UAAU,CAACf,KAAK,CAACgB,SAAP,CAAV,GAA8BhB,KAA9B;IACA,OAAOe,UAAP;EACH,CALkB,EAKhB,EALgB,CAAvB;EAOA,OAAOvB,wBAAwB,CAAC;IAC5BI,MAD4B;IAE5BF,KAF4B;IAG5BC,OAAO,EAAEkB,cAHmB;IAI5BhB,OAAO,EAAE;EAJmB,CAAD,CAA/B;AAMH,CAfM"}