@webiny/api-headless-cms 0.0.0-mt-1

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 (231) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +73 -0
  3. package/content/contextSetup.d.ts +4 -0
  4. package/content/contextSetup.js +65 -0
  5. package/content/graphQLHandlerFactory.d.ts +5 -0
  6. package/content/graphQLHandlerFactory.js +173 -0
  7. package/content/plugins/CmsGroupPlugin.d.ts +11 -0
  8. package/content/plugins/CmsGroupPlugin.js +24 -0
  9. package/content/plugins/CmsModelPlugin.d.ts +11 -0
  10. package/content/plugins/CmsModelPlugin.js +24 -0
  11. package/content/plugins/buildSchemaPlugins.d.ts +7 -0
  12. package/content/plugins/buildSchemaPlugins.js +29 -0
  13. package/content/plugins/crud/contentEntry/afterDelete.d.ts +7 -0
  14. package/content/plugins/crud/contentEntry/afterDelete.js +41 -0
  15. package/content/plugins/crud/contentEntry/beforeCreate.d.ts +7 -0
  16. package/content/plugins/crud/contentEntry/beforeCreate.js +28 -0
  17. package/content/plugins/crud/contentEntry/beforeUpdate.d.ts +7 -0
  18. package/content/plugins/crud/contentEntry/beforeUpdate.js +28 -0
  19. package/content/plugins/crud/contentEntry/entryDataValidation.d.ts +4 -0
  20. package/content/plugins/crud/contentEntry/entryDataValidation.js +188 -0
  21. package/content/plugins/crud/contentEntry/markLockedFields.d.ts +12 -0
  22. package/content/plugins/crud/contentEntry/markLockedFields.js +117 -0
  23. package/content/plugins/crud/contentEntry.crud.d.ts +17 -0
  24. package/content/plugins/crud/contentEntry.crud.js +931 -0
  25. package/content/plugins/crud/contentModel/afterCreate.d.ts +7 -0
  26. package/content/plugins/crud/contentModel/afterCreate.js +18 -0
  27. package/content/plugins/crud/contentModel/afterDelete.d.ts +7 -0
  28. package/content/plugins/crud/contentModel/afterDelete.js +18 -0
  29. package/content/plugins/crud/contentModel/afterUpdate.d.ts +7 -0
  30. package/content/plugins/crud/contentModel/afterUpdate.js +18 -0
  31. package/content/plugins/crud/contentModel/beforeCreate.d.ts +9 -0
  32. package/content/plugins/crud/contentModel/beforeCreate.js +146 -0
  33. package/content/plugins/crud/contentModel/beforeDelete.d.ts +9 -0
  34. package/content/plugins/crud/contentModel/beforeDelete.js +56 -0
  35. package/content/plugins/crud/contentModel/beforeUpdate.d.ts +9 -0
  36. package/content/plugins/crud/contentModel/beforeUpdate.js +128 -0
  37. package/content/plugins/crud/contentModel/contentModelManagerFactory.d.ts +2 -0
  38. package/content/plugins/crud/contentModel/contentModelManagerFactory.js +29 -0
  39. package/content/plugins/crud/contentModel/createFieldModels.d.ts +2 -0
  40. package/content/plugins/crud/contentModel/createFieldModels.js +22 -0
  41. package/content/plugins/crud/contentModel/idValidation.d.ts +2 -0
  42. package/content/plugins/crud/contentModel/idValidation.js +22 -0
  43. package/content/plugins/crud/contentModel/models.d.ts +3 -0
  44. package/content/plugins/crud/contentModel/models.js +141 -0
  45. package/content/plugins/crud/contentModel/validateLayout.d.ts +2 -0
  46. package/content/plugins/crud/contentModel/validateLayout.js +38 -0
  47. package/content/plugins/crud/contentModel.crud.d.ts +12 -0
  48. package/content/plugins/crud/contentModel.crud.js +425 -0
  49. package/content/plugins/crud/contentModelGroup/beforeCreate.d.ts +9 -0
  50. package/content/plugins/crud/contentModelGroup/beforeCreate.js +66 -0
  51. package/content/plugins/crud/contentModelGroup/beforeDelete.d.ts +9 -0
  52. package/content/plugins/crud/contentModelGroup/beforeDelete.js +48 -0
  53. package/content/plugins/crud/contentModelGroup/beforeUpdate.d.ts +8 -0
  54. package/content/plugins/crud/contentModelGroup/beforeUpdate.js +28 -0
  55. package/content/plugins/crud/contentModelGroup.crud.d.ts +12 -0
  56. package/content/plugins/crud/contentModelGroup.crud.js +351 -0
  57. package/content/plugins/crud/index.d.ts +6 -0
  58. package/content/plugins/crud/index.js +100 -0
  59. package/content/plugins/graphqlFields/boolean.d.ts +3 -0
  60. package/content/plugins/graphqlFields/boolean.js +69 -0
  61. package/content/plugins/graphqlFields/datetime.d.ts +3 -0
  62. package/content/plugins/graphqlFields/datetime.js +83 -0
  63. package/content/plugins/graphqlFields/file.d.ts +3 -0
  64. package/content/plugins/graphqlFields/file.js +49 -0
  65. package/content/plugins/graphqlFields/index.d.ts +2 -0
  66. package/content/plugins/graphqlFields/index.js +30 -0
  67. package/content/plugins/graphqlFields/longText.d.ts +3 -0
  68. package/content/plugins/graphqlFields/longText.js +62 -0
  69. package/content/plugins/graphqlFields/number.d.ts +3 -0
  70. package/content/plugins/graphqlFields/number.js +75 -0
  71. package/content/plugins/graphqlFields/object.d.ts +3 -0
  72. package/content/plugins/graphqlFields/object.js +180 -0
  73. package/content/plugins/graphqlFields/ref.d.ts +3 -0
  74. package/content/plugins/graphqlFields/ref.js +205 -0
  75. package/content/plugins/graphqlFields/richText.d.ts +3 -0
  76. package/content/plugins/graphqlFields/richText.js +55 -0
  77. package/content/plugins/graphqlFields/text.d.ts +3 -0
  78. package/content/plugins/graphqlFields/text.js +72 -0
  79. package/content/plugins/internalSecurity/InternalAuthenticationPlugin.d.ts +8 -0
  80. package/content/plugins/internalSecurity/InternalAuthenticationPlugin.js +54 -0
  81. package/content/plugins/internalSecurity/InternalAuthorizationPlugin.d.ts +7 -0
  82. package/content/plugins/internalSecurity/InternalAuthorizationPlugin.js +35 -0
  83. package/content/plugins/modelManager/DefaultCmsModelManager.d.ts +15 -0
  84. package/content/plugins/modelManager/DefaultCmsModelManager.js +62 -0
  85. package/content/plugins/modelManager/index.d.ts +3 -0
  86. package/content/plugins/modelManager/index.js +20 -0
  87. package/content/plugins/schema/baseSchema.d.ts +4 -0
  88. package/content/plugins/schema/baseSchema.js +98 -0
  89. package/content/plugins/schema/contentEntries.d.ts +4 -0
  90. package/content/plugins/schema/contentEntries.js +166 -0
  91. package/content/plugins/schema/contentModelGroups.d.ts +4 -0
  92. package/content/plugins/schema/contentModelGroups.js +153 -0
  93. package/content/plugins/schema/contentModels.d.ts +4 -0
  94. package/content/plugins/schema/contentModels.js +225 -0
  95. package/content/plugins/schema/createFieldResolvers.d.ts +19 -0
  96. package/content/plugins/schema/createFieldResolvers.js +92 -0
  97. package/content/plugins/schema/createManageResolvers.d.ts +11 -0
  98. package/content/plugins/schema/createManageResolvers.js +135 -0
  99. package/content/plugins/schema/createManageSDL.d.ts +9 -0
  100. package/content/plugins/schema/createManageSDL.js +153 -0
  101. package/content/plugins/schema/createPreviewResolvers.d.ts +10 -0
  102. package/content/plugins/schema/createPreviewResolvers.js +55 -0
  103. package/content/plugins/schema/createReadResolvers.d.ts +10 -0
  104. package/content/plugins/schema/createReadResolvers.js +55 -0
  105. package/content/plugins/schema/createReadSDL.d.ts +9 -0
  106. package/content/plugins/schema/createReadSDL.js +96 -0
  107. package/content/plugins/schema/resolvers/commonFieldResolvers.d.ts +6 -0
  108. package/content/plugins/schema/resolvers/commonFieldResolvers.js +14 -0
  109. package/content/plugins/schema/resolvers/manage/resolveCreate.d.ts +6 -0
  110. package/content/plugins/schema/resolvers/manage/resolveCreate.js +23 -0
  111. package/content/plugins/schema/resolvers/manage/resolveCreateFrom.d.ts +7 -0
  112. package/content/plugins/schema/resolvers/manage/resolveCreateFrom.js +23 -0
  113. package/content/plugins/schema/resolvers/manage/resolveDelete.d.ts +2 -0
  114. package/content/plugins/schema/resolvers/manage/resolveDelete.js +30 -0
  115. package/content/plugins/schema/resolvers/manage/resolveGet.d.ts +2 -0
  116. package/content/plugins/schema/resolvers/manage/resolveGet.js +21 -0
  117. package/content/plugins/schema/resolvers/manage/resolveGetByIds.d.ts +2 -0
  118. package/content/plugins/schema/resolvers/manage/resolveGetByIds.js +23 -0
  119. package/content/plugins/schema/resolvers/manage/resolveGetRevisions.d.ts +2 -0
  120. package/content/plugins/schema/resolvers/manage/resolveGetRevisions.js +23 -0
  121. package/content/plugins/schema/resolvers/manage/resolveList.d.ts +2 -0
  122. package/content/plugins/schema/resolvers/manage/resolveList.js +23 -0
  123. package/content/plugins/schema/resolvers/manage/resolvePublish.d.ts +2 -0
  124. package/content/plugins/schema/resolvers/manage/resolvePublish.js +21 -0
  125. package/content/plugins/schema/resolvers/manage/resolveRequestChanges.d.ts +6 -0
  126. package/content/plugins/schema/resolvers/manage/resolveRequestChanges.js +23 -0
  127. package/content/plugins/schema/resolvers/manage/resolveRequestReview.d.ts +6 -0
  128. package/content/plugins/schema/resolvers/manage/resolveRequestReview.js +23 -0
  129. package/content/plugins/schema/resolvers/manage/resolveUnpublish.d.ts +2 -0
  130. package/content/plugins/schema/resolvers/manage/resolveUnpublish.js +21 -0
  131. package/content/plugins/schema/resolvers/manage/resolveUpdate.d.ts +7 -0
  132. package/content/plugins/schema/resolvers/manage/resolveUpdate.js +23 -0
  133. package/content/plugins/schema/resolvers/preview/resolveGet.d.ts +2 -0
  134. package/content/plugins/schema/resolvers/preview/resolveGet.js +38 -0
  135. package/content/plugins/schema/resolvers/preview/resolveList.d.ts +2 -0
  136. package/content/plugins/schema/resolvers/preview/resolveList.js +23 -0
  137. package/content/plugins/schema/resolvers/read/resolveGet.d.ts +2 -0
  138. package/content/plugins/schema/resolvers/read/resolveGet.js +38 -0
  139. package/content/plugins/schema/resolvers/read/resolveList.d.ts +2 -0
  140. package/content/plugins/schema/resolvers/read/resolveList.js +23 -0
  141. package/content/plugins/schema/schemaPlugins.d.ts +3 -0
  142. package/content/plugins/schema/schemaPlugins.js +92 -0
  143. package/content/plugins/storage/StorageTransformPlugin.d.ts +30 -0
  144. package/content/plugins/storage/StorageTransformPlugin.js +36 -0
  145. package/content/plugins/storage/default.d.ts +3 -0
  146. package/content/plugins/storage/default.js +28 -0
  147. package/content/plugins/storage/object.d.ts +3 -0
  148. package/content/plugins/storage/object.js +119 -0
  149. package/content/plugins/utils/createTypeName.d.ts +3 -0
  150. package/content/plugins/utils/createTypeName.js +28 -0
  151. package/content/plugins/utils/entryStorage.d.ts +17 -0
  152. package/content/plugins/utils/entryStorage.js +125 -0
  153. package/content/plugins/utils/getEntryTitle.d.ts +2 -0
  154. package/content/plugins/utils/getEntryTitle.js +42 -0
  155. package/content/plugins/utils/getSchemaFromFieldPlugins.d.ts +11 -0
  156. package/content/plugins/utils/getSchemaFromFieldPlugins.js +30 -0
  157. package/content/plugins/utils/pluralizedTypeName.d.ts +1 -0
  158. package/content/plugins/utils/pluralizedTypeName.js +26 -0
  159. package/content/plugins/utils/renderFields.d.ts +16 -0
  160. package/content/plugins/utils/renderFields.js +51 -0
  161. package/content/plugins/utils/renderGetFilterFields.d.ts +9 -0
  162. package/content/plugins/utils/renderGetFilterFields.js +41 -0
  163. package/content/plugins/utils/renderInputFields.d.ts +14 -0
  164. package/content/plugins/utils/renderInputFields.js +53 -0
  165. package/content/plugins/utils/renderListFilterFields.d.ts +10 -0
  166. package/content/plugins/utils/renderListFilterFields.js +39 -0
  167. package/content/plugins/utils/renderSortEnum.d.ts +9 -0
  168. package/content/plugins/utils/renderSortEnum.js +32 -0
  169. package/content/plugins/validators/dateGte.d.ts +3 -0
  170. package/content/plugins/validators/dateGte.js +37 -0
  171. package/content/plugins/validators/dateLte.d.ts +3 -0
  172. package/content/plugins/validators/dateLte.js +37 -0
  173. package/content/plugins/validators/gte.d.ts +3 -0
  174. package/content/plugins/validators/gte.js +32 -0
  175. package/content/plugins/validators/in.d.ts +3 -0
  176. package/content/plugins/validators/in.js +32 -0
  177. package/content/plugins/validators/index.d.ts +2 -0
  178. package/content/plugins/validators/index.js +36 -0
  179. package/content/plugins/validators/lte.d.ts +3 -0
  180. package/content/plugins/validators/lte.js +32 -0
  181. package/content/plugins/validators/maxLength.d.ts +3 -0
  182. package/content/plugins/validators/maxLength.js +32 -0
  183. package/content/plugins/validators/minLength.d.ts +3 -0
  184. package/content/plugins/validators/minLength.js +32 -0
  185. package/content/plugins/validators/pattern.d.ts +3 -0
  186. package/content/plugins/validators/pattern.js +47 -0
  187. package/content/plugins/validators/patternPlugins/email.d.ts +3 -0
  188. package/content/plugins/validators/patternPlugins/email.js +17 -0
  189. package/content/plugins/validators/patternPlugins/index.d.ts +2 -0
  190. package/content/plugins/validators/patternPlugins/index.js +19 -0
  191. package/content/plugins/validators/patternPlugins/lowerCase.d.ts +3 -0
  192. package/content/plugins/validators/patternPlugins/lowerCase.js +17 -0
  193. package/content/plugins/validators/patternPlugins/upperCase.d.ts +3 -0
  194. package/content/plugins/validators/patternPlugins/upperCase.js +17 -0
  195. package/content/plugins/validators/patternPlugins/url.d.ts +3 -0
  196. package/content/plugins/validators/patternPlugins/url.js +17 -0
  197. package/content/plugins/validators/required.d.ts +3 -0
  198. package/content/plugins/validators/required.js +25 -0
  199. package/content/plugins/validators/timeGte.d.ts +3 -0
  200. package/content/plugins/validators/timeGte.js +32 -0
  201. package/content/plugins/validators/timeLte.d.ts +3 -0
  202. package/content/plugins/validators/timeLte.js +32 -0
  203. package/index.d.ts +12 -0
  204. package/index.js +66 -0
  205. package/migrateCMSPermissions.d.ts +17 -0
  206. package/migrateCMSPermissions.js +193 -0
  207. package/package.json +80 -0
  208. package/plugins/context.d.ts +4 -0
  209. package/plugins/context.js +34 -0
  210. package/plugins/crud/index.d.ts +6 -0
  211. package/plugins/crud/index.js +100 -0
  212. package/plugins/crud/settings.crud.d.ts +10 -0
  213. package/plugins/crud/settings.crud.js +93 -0
  214. package/plugins/crud/system.crud.d.ts +10 -0
  215. package/plugins/crud/system.crud.js +182 -0
  216. package/plugins/graphql/system.d.ts +17 -0
  217. package/plugins/graphql/system.js +72 -0
  218. package/plugins/graphql.d.ts +2 -0
  219. package/plugins/graphql.js +79 -0
  220. package/plugins/upgrades/index.d.ts +2 -0
  221. package/plugins/upgrades/index.js +14 -0
  222. package/plugins/upgrades/v5.5.0/helpers.d.ts +6 -0
  223. package/plugins/upgrades/v5.5.0/helpers.js +10 -0
  224. package/plugins/upgrades/v5.5.0/index.d.ts +4 -0
  225. package/plugins/upgrades/v5.5.0/index.js +129 -0
  226. package/transformers.d.ts +2 -0
  227. package/transformers.js +25 -0
  228. package/types.d.ts +2149 -0
  229. package/types.js +366 -0
  230. package/utils.d.ts +25 -0
  231. package/utils.js +251 -0
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ const plugin = {
8
+ type: "cms-model-field-validator",
9
+ name: "cms-model-field-validator-pattern",
10
+ validator: {
11
+ name: "pattern",
12
+
13
+ async validate({
14
+ value,
15
+ validator,
16
+ context
17
+ }) {
18
+ if (!value) {
19
+ return true;
20
+ }
21
+
22
+ const {
23
+ settings
24
+ } = validator;
25
+ let pattern;
26
+
27
+ if (settings.preset === "custom") {
28
+ pattern = settings;
29
+ } else {
30
+ const patternPlugin = context.plugins.byType("cms-model-field-validator-pattern").find(item => item.pattern.name === settings.preset);
31
+
32
+ if (patternPlugin) {
33
+ pattern = patternPlugin.pattern;
34
+ }
35
+ }
36
+
37
+ if (!pattern) {
38
+ return true;
39
+ }
40
+
41
+ return new RegExp(pattern.regex, pattern.flags).test(value);
42
+ }
43
+
44
+ }
45
+ };
46
+ var _default = plugin;
47
+ exports.default = _default;
@@ -0,0 +1,3 @@
1
+ import { CmsModelFieldPatternValidatorPlugin } from "../../../../types";
2
+ declare const plugin: CmsModelFieldPatternValidatorPlugin;
3
+ export default plugin;
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ const plugin = {
8
+ type: "cms-model-field-validator-pattern",
9
+ name: "cms-model-field-validator-pattern-email",
10
+ pattern: {
11
+ name: "email",
12
+ regex: `^\\w[\\w.-]*@([\\w-]+\\.)+[\\w-]+$`,
13
+ flags: "i"
14
+ }
15
+ };
16
+ var _default = plugin;
17
+ exports.default = _default;
@@ -0,0 +1,2 @@
1
+ declare const _default: import("../../../../types").CmsModelFieldPatternValidatorPlugin[];
2
+ export default _default;
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = void 0;
9
+
10
+ var _email = _interopRequireDefault(require("./email"));
11
+
12
+ var _url = _interopRequireDefault(require("./url"));
13
+
14
+ var _lowerCase = _interopRequireDefault(require("./lowerCase"));
15
+
16
+ var _upperCase = _interopRequireDefault(require("./upperCase"));
17
+
18
+ var _default = [_email.default, _url.default, _lowerCase.default, _upperCase.default];
19
+ exports.default = _default;
@@ -0,0 +1,3 @@
1
+ import { CmsModelFieldPatternValidatorPlugin } from "../../../../types";
2
+ declare const plugin: CmsModelFieldPatternValidatorPlugin;
3
+ export default plugin;
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ const plugin = {
8
+ type: "cms-model-field-validator-pattern",
9
+ name: "cms-model-field-validator-pattern-lower-case",
10
+ pattern: {
11
+ name: "lowerCase",
12
+ regex: `^([a-z]*)$`,
13
+ flags: ""
14
+ }
15
+ };
16
+ var _default = plugin;
17
+ exports.default = _default;
@@ -0,0 +1,3 @@
1
+ import { CmsModelFieldPatternValidatorPlugin } from "../../../../types";
2
+ declare const plugin: CmsModelFieldPatternValidatorPlugin;
3
+ export default plugin;
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ const plugin = {
8
+ type: "cms-model-field-validator-pattern",
9
+ name: "cms-model-field-validator-pattern-upper-case",
10
+ pattern: {
11
+ name: "upperCase",
12
+ regex: `^([A-Z]*)$`,
13
+ flags: ""
14
+ }
15
+ };
16
+ var _default = plugin;
17
+ exports.default = _default;
@@ -0,0 +1,3 @@
1
+ import { CmsModelFieldPatternValidatorPlugin } from "../../../../types";
2
+ declare const plugin: CmsModelFieldPatternValidatorPlugin;
3
+ export default plugin;
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ const plugin = {
8
+ type: "cms-model-field-validator-pattern",
9
+ name: "cms-model-field-validator-pattern-url",
10
+ pattern: {
11
+ name: "url",
12
+ regex: "^(ftp|http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!\\-\\/]))?$",
13
+ flags: "i"
14
+ }
15
+ };
16
+ var _default = plugin;
17
+ exports.default = _default;
@@ -0,0 +1,3 @@
1
+ import { CmsModelFieldValidatorPlugin } from "../../../types";
2
+ declare const plugin: CmsModelFieldValidatorPlugin;
3
+ export default plugin;
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var _validation = require("@webiny/validation");
9
+
10
+ const plugin = {
11
+ type: "cms-model-field-validator",
12
+ name: "cms-model-field-validator-required",
13
+ validator: {
14
+ name: "required",
15
+
16
+ validate({
17
+ value
18
+ }) {
19
+ return _validation.validation.validate(value, "required").then(v => v === true).catch(() => false);
20
+ }
21
+
22
+ }
23
+ };
24
+ var _default = plugin;
25
+ exports.default = _default;
@@ -0,0 +1,3 @@
1
+ import { CmsModelFieldValidatorPlugin } from "../../../types";
2
+ declare const _default: () => CmsModelFieldValidatorPlugin;
3
+ export default _default;
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var _validation = require("@webiny/validation");
9
+
10
+ var _default = () => ({
11
+ type: "cms-model-field-validator",
12
+ name: "cms-model-field-validator-time-gte",
13
+ validator: {
14
+ name: "timeGte",
15
+
16
+ async validate({
17
+ value,
18
+ validator
19
+ }) {
20
+ const gteValue = validator.settings.value;
21
+
22
+ if (typeof gteValue === "undefined") {
23
+ return true;
24
+ }
25
+
26
+ return _validation.validation.validate(value, `timeGte:${gteValue}`).then(v => v === true).catch(() => false);
27
+ }
28
+
29
+ }
30
+ });
31
+
32
+ exports.default = _default;
@@ -0,0 +1,3 @@
1
+ import { CmsModelFieldValidatorPlugin } from "../../../types";
2
+ declare const _default: () => CmsModelFieldValidatorPlugin;
3
+ export default _default;
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var _validation = require("@webiny/validation");
9
+
10
+ var _default = () => ({
11
+ type: "cms-model-field-validator",
12
+ name: "cms-model-field-validator-time-lte",
13
+ validator: {
14
+ name: "timeLte",
15
+
16
+ async validate({
17
+ value,
18
+ validator
19
+ }) {
20
+ const lteValue = validator.settings.value;
21
+
22
+ if (typeof lteValue === "undefined") {
23
+ return true;
24
+ }
25
+
26
+ return _validation.validation.validate(value, `timeLte:${lteValue}`).then(v => v === true).catch(() => false);
27
+ }
28
+
29
+ }
30
+ });
31
+
32
+ exports.default = _default;
package/index.d.ts ADDED
@@ -0,0 +1,12 @@
1
+ import { Params as CreateAdminCrudsParams } from "./plugins/crud";
2
+ import { Params as CreateContentCrudsParams } from "./content/plugins/crud";
3
+ import { CreateGraphQLHandlerOptions } from "./content/graphQLHandlerFactory";
4
+ import { StorageTransformPlugin } from "./content/plugins/storage/StorageTransformPlugin";
5
+ export declare type AdminContextParams = CreateAdminCrudsParams;
6
+ export declare const createAdminHeadlessCmsContext: (params: AdminContextParams) => (import("@webiny/handler/plugins/ContextPlugin").ContextPlugin<import("./types").CmsContext> | import("@webiny/api-upgrade").UpgradePlugin<import("./types").CmsContext>[])[];
7
+ export declare const createAdminHeadlessCmsGraphQL: () => import("@webiny/handler-graphql/types").GraphQLSchemaPlugin<import("@webiny/handler/types").ContextInterface>;
8
+ export declare type ContentContextParams = CreateContentCrudsParams;
9
+ export declare const createContentHeadlessCmsContext: (params: ContentContextParams) => (import("./types").ModelManagerPlugin | import("./types").CmsModelFieldToGraphQLPlugin[] | StorageTransformPlugin<any, any> | import("@webiny/handler/plugins/ContextPlugin").ContextPlugin<import("./types").CmsContext> | (import("./types").CmsModelFieldValidatorPlugin | import("./types").CmsModelFieldPatternValidatorPlugin[])[])[];
10
+ export declare type ContentGraphQLParams = CreateGraphQLHandlerOptions;
11
+ export declare const createContentHeadlessCmsGraphQL: (params?: ContentGraphQLParams) => import("@webiny/plugins/types").PluginCollection;
12
+ export { StorageTransformPlugin };
package/index.js ADDED
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ Object.defineProperty(exports, "StorageTransformPlugin", {
9
+ enumerable: true,
10
+ get: function () {
11
+ return _StorageTransformPlugin.StorageTransformPlugin;
12
+ }
13
+ });
14
+ exports.createContentHeadlessCmsGraphQL = exports.createContentHeadlessCmsContext = exports.createAdminHeadlessCmsGraphQL = exports.createAdminHeadlessCmsContext = void 0;
15
+
16
+ var _graphql = require("./plugins/graphql");
17
+
18
+ var _crud = require("./plugins/crud");
19
+
20
+ var _context = _interopRequireDefault(require("./plugins/context"));
21
+
22
+ var _upgrades = _interopRequireDefault(require("./plugins/upgrades"));
23
+
24
+ var _contextSetup = _interopRequireDefault(require("./content/contextSetup"));
25
+
26
+ var _modelManager = _interopRequireDefault(require("./content/plugins/modelManager"));
27
+
28
+ var _crud2 = require("./content/plugins/crud");
29
+
30
+ var _graphqlFields = _interopRequireDefault(require("./content/plugins/graphqlFields"));
31
+
32
+ var _validators = _interopRequireDefault(require("./content/plugins/validators"));
33
+
34
+ var _default = _interopRequireDefault(require("./content/plugins/storage/default"));
35
+
36
+ var _object = _interopRequireDefault(require("./content/plugins/storage/object"));
37
+
38
+ var _graphQLHandlerFactory = require("./content/graphQLHandlerFactory");
39
+
40
+ var _StorageTransformPlugin = require("./content/plugins/storage/StorageTransformPlugin");
41
+
42
+ const createAdminHeadlessCmsContext = params => {
43
+ return [(0, _context.default)(), (0, _crud.createAdminCruds)(params), (0, _upgrades.default)()];
44
+ };
45
+
46
+ exports.createAdminHeadlessCmsContext = createAdminHeadlessCmsContext;
47
+
48
+ const createAdminHeadlessCmsGraphQL = () => {
49
+ return (0, _graphql.createGraphQLPlugin)();
50
+ };
51
+
52
+ exports.createAdminHeadlessCmsGraphQL = createAdminHeadlessCmsGraphQL;
53
+
54
+ const createContentHeadlessCmsContext = params => {
55
+ return [(0, _contextSetup.default)(), (0, _modelManager.default)(), (0, _crud2.createContentCruds)(params), (0, _graphqlFields.default)(), (0, _validators.default)(), (0, _default.default)(), (0, _object.default)() // new InternalAuthenticationPlugin("read-api-key"),
56
+ // new InternalAuthorizationPlugin("read-api-key")
57
+ ];
58
+ };
59
+
60
+ exports.createContentHeadlessCmsContext = createContentHeadlessCmsContext;
61
+
62
+ const createContentHeadlessCmsGraphQL = params => {
63
+ return (0, _graphQLHandlerFactory.graphQLHandlerFactory)(params);
64
+ };
65
+
66
+ exports.createContentHeadlessCmsGraphQL = createContentHeadlessCmsGraphQL;
@@ -0,0 +1,17 @@
1
+ import { CmsModel } from "./types";
2
+ declare type Group = {
3
+ [code: string]: string[];
4
+ };
5
+ declare type Model = {
6
+ [code: string]: string[];
7
+ };
8
+ declare type CMSPermission = {
9
+ name: string;
10
+ rwd?: string;
11
+ pw?: string;
12
+ own?: boolean;
13
+ groups?: Group;
14
+ models?: Model;
15
+ };
16
+ export declare const migrateCMSPermissions: (permissions: CMSPermission[], getModel: (modelId: string) => Promise<CmsModel>) => Promise<CMSPermission[]>;
17
+ export {};
@@ -0,0 +1,193 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.migrateCMSPermissions = void 0;
9
+
10
+ var _mergeWith = _interopRequireDefault(require("lodash/mergeWith"));
11
+
12
+ var _isEmpty = _interopRequireDefault(require("lodash/isEmpty"));
13
+
14
+ var AccessTypes;
15
+
16
+ (function (AccessTypes) {
17
+ AccessTypes["FULL"] = "cms.*";
18
+ AccessTypes["CONTENT_MODEL_GROUP"] = "cms.contentModelGroup";
19
+ AccessTypes["CONTENT_MODEL"] = "cms.contentModel";
20
+ AccessTypes["CONTENT_ENTRY"] = "cms.contentEntry";
21
+ })(AccessTypes || (AccessTypes = {}));
22
+
23
+ const migrateCMSPermissions = async (permissions, getModel) => {
24
+ // First we've to know whether is a "full" access or "custom" access.
25
+ const fullAccess = permissions.find(permission => permission.name === AccessTypes.FULL);
26
+
27
+ if (fullAccess) {
28
+ return permissions;
29
+ } // We'll construct the new newPermissions one by one.
30
+
31
+
32
+ const newPermissions = {};
33
+ const DEFAULT_PERMISSIONS = {
34
+ [AccessTypes.CONTENT_MODEL_GROUP]: {
35
+ name: AccessTypes.CONTENT_MODEL_GROUP,
36
+ rwd: "r",
37
+ own: false
38
+ },
39
+ [AccessTypes.CONTENT_MODEL]: {
40
+ name: AccessTypes.CONTENT_MODEL,
41
+ rwd: "r",
42
+ own: false
43
+ },
44
+ [AccessTypes.CONTENT_ENTRY]: {
45
+ name: AccessTypes.CONTENT_ENTRY,
46
+ rwd: "r",
47
+ own: false
48
+ }
49
+ }; // Create new permissions.
50
+
51
+ [AccessTypes.CONTENT_MODEL_GROUP, AccessTypes.CONTENT_MODEL, AccessTypes.CONTENT_ENTRY].forEach(entity => {
52
+ // Check for "entity" permission existence.
53
+ const existingPermission = permissions.find(permission => permission.name === entity);
54
+
55
+ if (existingPermission) {
56
+ newPermissions[entity] = existingPermission;
57
+ } else {
58
+ newPermissions[entity] = DEFAULT_PERMISSIONS[entity];
59
+ } // Handle specific cases.
60
+
61
+
62
+ if (entity === AccessTypes.CONTENT_MODEL_GROUP) {
63
+ // Just to be on the safer side.
64
+ if (newPermissions[entity].own) {
65
+ setAccessScopeToOwn(newPermissions, entity);
66
+ }
67
+ } // Handle specific cases.
68
+
69
+
70
+ if (entity === AccessTypes.CONTENT_MODEL) {
71
+ // Just to be on the safer side.
72
+ if (newPermissions[entity].own) {
73
+ setAccessScopeToOwn(newPermissions, entity);
74
+ } // If parent has the "own" access scope.
75
+
76
+
77
+ if (newPermissions[AccessTypes.CONTENT_MODEL_GROUP].own) {
78
+ setAccessScopeToOwn(newPermissions, entity);
79
+ } // Transfer groups data to content model groups permission
80
+
81
+
82
+ if (newPermissions[entity].groups) {
83
+ moveGroups(newPermissions, entity);
84
+ }
85
+ } // Handle specific cases.
86
+
87
+
88
+ if (entity === AccessTypes.CONTENT_ENTRY) {
89
+ // Just to be on the safer side.
90
+ if (newPermissions[entity].own) {
91
+ setAccessScopeToOwn(newPermissions, entity);
92
+ } // If parent has the "own" access scope.
93
+
94
+
95
+ if (newPermissions[AccessTypes.CONTENT_MODEL].own) {
96
+ setAccessScopeToOwn(newPermissions, entity);
97
+ } // Transfer groups data to content model groups permission
98
+
99
+
100
+ if (newPermissions[entity].groups) {
101
+ moveGroups(newPermissions, entity);
102
+ } // Transfer models data to content model groups permission
103
+
104
+
105
+ if (newPermissions[entity].models) {
106
+ moveModels(newPermissions, entity);
107
+ }
108
+ }
109
+ });
110
+ /*
111
+ * Sync "models" and "groups".
112
+ * If there is a model from "cms.contentModel" permission's models property;
113
+ * whose content group is missing from "cms.contentModelGroup" permission's groups property;
114
+ * we add that into "cms.contentModelGroup" permission.
115
+ *
116
+ * Why?
117
+ * Because, now the user must need to have at least READ permission on "cms.contentModelGroup" to access a model defined by "cms.contentModel".
118
+ * */
119
+
120
+ const contentModels = newPermissions[AccessTypes.CONTENT_MODEL].models;
121
+
122
+ if (!(0, _isEmpty.default)(contentModels)) {
123
+ const contentModelGroups = newPermissions[AccessTypes.CONTENT_MODEL_GROUP].groups || {};
124
+ const locales = Object.keys(contentModels);
125
+
126
+ for (let i = 0; i < locales.length; i++) {
127
+ const code = locales[i];
128
+
129
+ for (let j = 0; j < contentModels[code].length; j++) {
130
+ const modelId = contentModels[code][j]; // Check if we've access to it's contentModelGroup.
131
+
132
+ const {
133
+ group
134
+ } = await getModel(modelId);
135
+
136
+ if ((0, _isEmpty.default)(contentModelGroups[code])) {
137
+ contentModelGroups[code] = [];
138
+ }
139
+
140
+ if (!contentModelGroups[code].includes(group.id)) {
141
+ contentModelGroups[code].push(group.id);
142
+ }
143
+ }
144
+ } // Update "groups" value in permission.
145
+
146
+
147
+ newPermissions[AccessTypes.CONTENT_MODEL_GROUP].groups = contentModelGroups;
148
+ }
149
+
150
+ return Object.values(newPermissions);
151
+ };
152
+
153
+ exports.migrateCMSPermissions = migrateCMSPermissions;
154
+
155
+ const mergeCustomizer = (objValue, srcValue) => {
156
+ if (Array.isArray(objValue)) {
157
+ return objValue.concat(srcValue).filter(removeDuplicate);
158
+ }
159
+ };
160
+
161
+ const removeDuplicate = (item, index, arr) => arr.findIndex(el => el === item) === index;
162
+
163
+ const moveGroups = (permissions, entity) => {
164
+ if (!(0, _isEmpty.default)(permissions[AccessTypes.CONTENT_MODEL_GROUP]["groups"])) {
165
+ permissions[AccessTypes.CONTENT_MODEL_GROUP]["groups"] = (0, _mergeWith.default)(permissions[AccessTypes.CONTENT_MODEL_GROUP]["groups"], permissions[entity].groups, mergeCustomizer);
166
+ } else {
167
+ permissions[AccessTypes.CONTENT_MODEL_GROUP]["groups"] = permissions[entity].groups;
168
+ } // Remove "groups" from content model permission
169
+
170
+
171
+ delete permissions[entity].groups;
172
+ };
173
+
174
+ const moveModels = (permissions, entity) => {
175
+ if (!(0, _isEmpty.default)(permissions[AccessTypes.CONTENT_MODEL]["models"])) {
176
+ permissions[AccessTypes.CONTENT_MODEL]["models"] = (0, _mergeWith.default)(permissions[AccessTypes.CONTENT_MODEL]["models"], permissions[entity].models, mergeCustomizer);
177
+ } else {
178
+ permissions[AccessTypes.CONTENT_MODEL]["models"] = permissions[entity].models;
179
+ } // Remove "models" from content model permission
180
+
181
+
182
+ delete permissions[entity].models;
183
+ };
184
+
185
+ const setAccessScopeToOwn = (permissions, entity) => {
186
+ permissions[entity].own = true; // Set primary action.
187
+
188
+ permissions[entity].rwd = "rwd"; // Remove "groups" from content model permission
189
+
190
+ delete permissions[entity].groups; // Remove "models" from content model permission
191
+
192
+ delete permissions[entity].models;
193
+ };
package/package.json ADDED
@@ -0,0 +1,80 @@
1
+ {
2
+ "name": "@webiny/api-headless-cms",
3
+ "version": "0.0.0-mt-1",
4
+ "main": "index.js",
5
+ "keywords": [
6
+ "cms:base"
7
+ ],
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "https://github.com/webiny/webiny-js.git",
11
+ "directory": "packages/api-headless-cms"
12
+ },
13
+ "description": "GraphQL API for Webiny Headless CMS.",
14
+ "contributors": [
15
+ "Pavel Denisjuk <pavel@webiny.com>",
16
+ "Sven Al Hamad <sven@webiny.com>",
17
+ "Adrian Smijulj <adrian@webiny.com>"
18
+ ],
19
+ "license": "MIT",
20
+ "dependencies": {
21
+ "@babel/runtime": "7.15.4",
22
+ "@commodo/fields": "1.1.2-beta.20",
23
+ "@graphql-tools/schema": "7.1.5",
24
+ "@webiny/api-file-manager": "0.0.0-mt-1",
25
+ "@webiny/api-i18n": "0.0.0-mt-1",
26
+ "@webiny/api-i18n-content": "0.0.0-mt-1",
27
+ "@webiny/api-i18n-ddb": "0.0.0-mt-1",
28
+ "@webiny/api-security": "0.0.0-mt-1",
29
+ "@webiny/api-tenancy": "0.0.0-mt-1",
30
+ "@webiny/api-upgrade": "0.0.0-mt-1",
31
+ "@webiny/error": "0.0.0-mt-1",
32
+ "@webiny/handler": "0.0.0-mt-1",
33
+ "@webiny/handler-aws": "0.0.0-mt-1",
34
+ "@webiny/handler-db": "0.0.0-mt-1",
35
+ "@webiny/handler-graphql": "0.0.0-mt-1",
36
+ "@webiny/handler-http": "0.0.0-mt-1",
37
+ "@webiny/plugins": "0.0.0-mt-1",
38
+ "@webiny/pubsub": "0.0.0-mt-1",
39
+ "@webiny/utils": "0.0.0-mt-1",
40
+ "@webiny/validation": "0.0.0-mt-1",
41
+ "boolean": "3.1.4",
42
+ "commodo-fields-object": "1.0.6",
43
+ "dataloader": "2.0.0",
44
+ "lodash": "4.17.21",
45
+ "p-map": "4.0.0",
46
+ "p-reduce": "2.1.0",
47
+ "pluralize": "8.0.0",
48
+ "shortid": "2.2.16",
49
+ "slugify": "1.6.1"
50
+ },
51
+ "devDependencies": {
52
+ "@babel/cli": "^7.5.5",
53
+ "@babel/core": "^7.5.5",
54
+ "@babel/preset-env": "^7.5.5",
55
+ "@babel/preset-flow": "^7.0.0",
56
+ "@webiny/api-security-so-ddb": "^0.0.0-mt-1",
57
+ "@webiny/api-tenancy-so-ddb": "^0.0.0-mt-1",
58
+ "@webiny/cli": "^0.0.0-mt-1",
59
+ "@webiny/project-utils": "^0.0.0-mt-1",
60
+ "apollo-graphql": "^0.4.1",
61
+ "get-yarn-workspaces": "^1.0.2",
62
+ "graphql": "^14.6.0",
63
+ "jest": "^26.6.3",
64
+ "mdbid": "^1.0.0",
65
+ "prettier": "^2.3.2",
66
+ "rimraf": "^3.0.2",
67
+ "sinon": "^9.0.2",
68
+ "ttypescript": "^1.5.12",
69
+ "typescript": "^4.1.3"
70
+ },
71
+ "publishConfig": {
72
+ "access": "public",
73
+ "directory": "dist"
74
+ },
75
+ "scripts": {
76
+ "build": "yarn webiny run build",
77
+ "watch": "yarn webiny run watch"
78
+ },
79
+ "gitHead": "37736d8456a6ecb342a6c3645060bd9a3f2d4bb0"
80
+ }
@@ -0,0 +1,4 @@
1
+ import { ContextPlugin } from "@webiny/handler/plugins/ContextPlugin";
2
+ import { CmsContext } from "../types";
3
+ declare const _default: () => ContextPlugin<CmsContext>;
4
+ export default _default;