@webiny/api-headless-cms 0.0.0-unstable.6e5425ee89 → 0.0.0-unstable.78f581c1d2
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/context.js +15 -0
- package/context.js.map +1 -1
- package/crud/contentEntry/afterDelete.js +5 -0
- package/crud/contentEntry/afterDelete.js.map +1 -1
- package/crud/contentEntry/beforeCreate.js +3 -0
- package/crud/contentEntry/beforeCreate.js.map +1 -1
- package/crud/contentEntry/beforeUpdate.js +3 -0
- package/crud/contentEntry/beforeUpdate.js.map +1 -1
- package/crud/contentEntry/entryDataValidation.js +40 -1
- package/crud/contentEntry/entryDataValidation.js.map +1 -1
- package/crud/contentEntry/markLockedFields.js +25 -2
- package/crud/contentEntry/markLockedFields.js.map +1 -1
- package/crud/contentEntry/referenceFieldsMapping.js +59 -5
- package/crud/contentEntry/referenceFieldsMapping.js.map +1 -1
- package/crud/contentEntry.crud.js +145 -27
- package/crud/contentEntry.crud.js.map +1 -1
- package/crud/contentModel/afterCreate.js +2 -0
- package/crud/contentModel/afterCreate.js.map +1 -1
- package/crud/contentModel/afterCreateFrom.js +2 -0
- package/crud/contentModel/afterCreateFrom.js.map +1 -1
- package/crud/contentModel/afterDelete.js +2 -0
- package/crud/contentModel/afterDelete.js.map +1 -1
- package/crud/contentModel/afterUpdate.js +2 -0
- package/crud/contentModel/afterUpdate.js.map +1 -1
- package/crud/contentModel/beforeCreate.js +32 -4
- package/crud/contentModel/beforeCreate.js.map +1 -1
- package/crud/contentModel/beforeDelete.js +10 -0
- package/crud/contentModel/beforeDelete.js.map +1 -1
- package/crud/contentModel/beforeUpdate.js +5 -0
- package/crud/contentModel/beforeUpdate.js.map +1 -1
- package/crud/contentModel/contentModelManagerFactory.js +7 -0
- package/crud/contentModel/contentModelManagerFactory.js.map +1 -1
- package/crud/contentModel/createFieldModels.js +6 -0
- package/crud/contentModel/createFieldModels.js.map +1 -1
- package/crud/contentModel/createFieldStorageId.js +2 -0
- package/crud/contentModel/createFieldStorageId.js.map +1 -1
- package/crud/contentModel/fieldIdValidation.js +5 -0
- package/crud/contentModel/fieldIdValidation.js.map +1 -1
- package/crud/contentModel/idValidation.js +5 -0
- package/crud/contentModel/idValidation.js.map +1 -1
- package/crud/contentModel/models.js +8 -1
- package/crud/contentModel/models.js.map +1 -1
- package/crud/contentModel/systemFields.js.map +1 -1
- package/crud/contentModel/validateLayout.js +8 -0
- package/crud/contentModel/validateLayout.js.map +1 -1
- package/crud/contentModel/validateModel.js +8 -0
- package/crud/contentModel/validateModel.js.map +1 -1
- package/crud/contentModel/validateModelFields.js +60 -8
- package/crud/contentModel/validateModelFields.js.map +1 -1
- package/crud/contentModel.crud.js +96 -11
- package/crud/contentModel.crud.js.map +1 -1
- package/crud/contentModelGroup/beforeCreate.js +12 -0
- package/crud/contentModelGroup/beforeCreate.js.map +1 -1
- package/crud/contentModelGroup/beforeDelete.js +8 -0
- package/crud/contentModelGroup/beforeDelete.js.map +1 -1
- package/crud/contentModelGroup/beforeUpdate.js +5 -0
- package/crud/contentModelGroup/beforeUpdate.js.map +1 -1
- package/crud/contentModelGroup.crud.js +47 -10
- package/crud/contentModelGroup.crud.js.map +1 -1
- package/crud/index.js +16 -0
- package/crud/index.js.map +1 -1
- package/crud/settings.crud.js +12 -0
- package/crud/settings.crud.js.map +1 -1
- package/crud/system.crud.js +37 -2
- package/crud/system.crud.js.map +1 -1
- package/fieldConverters/CmsModelDefaultFieldConverterPlugin.js +13 -0
- package/fieldConverters/CmsModelDefaultFieldConverterPlugin.js.map +1 -1
- package/fieldConverters/CmsModelObjectFieldConverterPlugin.js +53 -0
- package/fieldConverters/CmsModelObjectFieldConverterPlugin.js.map +1 -1
- package/fieldConverters/index.js +4 -0
- package/fieldConverters/index.js.map +1 -1
- package/graphql/buildSchemaPlugins.js +9 -5
- package/graphql/buildSchemaPlugins.js.map +1 -1
- package/graphql/graphQLHandlerFactory.js +28 -3
- package/graphql/graphQLHandlerFactory.js.map +1 -1
- package/graphql/index.js +8 -1
- package/graphql/index.js.map +1 -1
- package/graphql/schema/baseContentSchema.js +9 -1
- package/graphql/schema/baseContentSchema.js.map +1 -1
- package/graphql/schema/contentEntries.js +42 -2
- package/graphql/schema/contentEntries.js.map +1 -1
- package/graphql/schema/contentModelGroups.js +19 -2
- package/graphql/schema/contentModelGroups.js.map +1 -1
- package/graphql/schema/contentModels.js +18 -2
- package/graphql/schema/contentModels.js.map +1 -1
- package/graphql/schema/createFieldResolvers.js +21 -3
- package/graphql/schema/createFieldResolvers.js.map +1 -1
- package/graphql/schema/createManageResolvers.js +26 -0
- package/graphql/schema/createManageResolvers.js.map +1 -1
- package/graphql/schema/createManageSDL.js +14 -1
- package/graphql/schema/createManageSDL.js.map +1 -1
- package/graphql/schema/createPreviewResolvers.js +10 -0
- package/graphql/schema/createPreviewResolvers.js.map +1 -1
- package/graphql/schema/createReadResolvers.js +10 -0
- package/graphql/schema/createReadResolvers.js.map +1 -1
- package/graphql/schema/createReadSDL.js +10 -0
- package/graphql/schema/createReadSDL.js.map +1 -1
- package/graphql/schema/resolvers/commonFieldResolvers.js +2 -0
- package/graphql/schema/resolvers/commonFieldResolvers.js.map +1 -1
- package/graphql/schema/resolvers/manage/resolveCreate.js +3 -0
- package/graphql/schema/resolvers/manage/resolveCreate.js.map +1 -1
- package/graphql/schema/resolvers/manage/resolveCreateFrom.js +3 -0
- package/graphql/schema/resolvers/manage/resolveCreateFrom.js.map +1 -1
- package/graphql/schema/resolvers/manage/resolveDelete.js +6 -0
- package/graphql/schema/resolvers/manage/resolveDelete.js.map +1 -1
- package/graphql/schema/resolvers/manage/resolveGet.js +16 -0
- package/graphql/schema/resolvers/manage/resolveGet.js.map +1 -1
- package/graphql/schema/resolvers/manage/resolveGetByIds.js +3 -0
- package/graphql/schema/resolvers/manage/resolveGetByIds.js.map +1 -1
- package/graphql/schema/resolvers/manage/resolveGetRevisions.js +3 -0
- package/graphql/schema/resolvers/manage/resolveGetRevisions.js.map +1 -1
- package/graphql/schema/resolvers/manage/resolveList.js +3 -0
- package/graphql/schema/resolvers/manage/resolveList.js.map +1 -1
- package/graphql/schema/resolvers/manage/resolvePublish.js +3 -0
- package/graphql/schema/resolvers/manage/resolvePublish.js.map +1 -1
- package/graphql/schema/resolvers/manage/resolveRepublish.js +3 -0
- package/graphql/schema/resolvers/manage/resolveRepublish.js.map +1 -1
- package/graphql/schema/resolvers/manage/resolveUnpublish.js +3 -0
- package/graphql/schema/resolvers/manage/resolveUnpublish.js.map +1 -1
- package/graphql/schema/resolvers/manage/resolveUpdate.js +3 -0
- package/graphql/schema/resolvers/manage/resolveUpdate.js.map +1 -1
- package/graphql/schema/resolvers/preview/resolveGet.js +8 -0
- package/graphql/schema/resolvers/preview/resolveGet.js.map +1 -1
- package/graphql/schema/resolvers/preview/resolveList.js +3 -0
- package/graphql/schema/resolvers/preview/resolveList.js.map +1 -1
- package/graphql/schema/resolvers/read/resolveGet.js +8 -0
- package/graphql/schema/resolvers/read/resolveGet.js.map +1 -1
- package/graphql/schema/resolvers/read/resolveList.js +3 -0
- package/graphql/schema/resolvers/read/resolveList.js.map +1 -1
- package/graphql/schema/schemaPlugins.js +19 -5
- package/graphql/schema/schemaPlugins.js.map +1 -1
- package/graphql/system.js +14 -1
- package/graphql/system.js.map +1 -1
- package/graphqlFields/boolean.js +12 -0
- package/graphqlFields/boolean.js.map +1 -1
- package/graphqlFields/datetime.js +17 -0
- package/graphqlFields/datetime.js.map +1 -1
- package/graphqlFields/file.js +8 -0
- package/graphqlFields/file.js.map +1 -1
- package/graphqlFields/helpers.js +10 -0
- package/graphqlFields/helpers.js.map +1 -1
- package/graphqlFields/index.js +11 -0
- package/graphqlFields/index.js.map +1 -1
- package/graphqlFields/longText.js +10 -0
- package/graphqlFields/longText.js.map +1 -1
- package/graphqlFields/number.js +12 -0
- package/graphqlFields/number.js.map +1 -1
- package/graphqlFields/object.js +36 -6
- package/graphqlFields/object.js.map +1 -1
- package/graphqlFields/ref.js +51 -17
- package/graphqlFields/ref.js.map +1 -1
- package/graphqlFields/richText.js +9 -0
- package/graphqlFields/richText.js.map +1 -1
- package/graphqlFields/text.js +11 -0
- package/graphqlFields/text.js.map +1 -1
- package/index.js +19 -0
- package/index.js.map +1 -1
- package/modelManager/DefaultCmsModelManager.js +16 -0
- package/modelManager/DefaultCmsModelManager.js.map +1 -1
- package/modelManager/index.js +4 -0
- package/modelManager/index.js.map +1 -1
- package/package.json +24 -24
- package/parameters/context.js +4 -0
- package/parameters/context.js.map +1 -1
- package/parameters/header.js +11 -0
- package/parameters/header.js.map +1 -1
- package/parameters/index.js +8 -0
- package/parameters/index.js.map +1 -1
- package/parameters/manual.js +8 -1
- package/parameters/manual.js.map +1 -1
- package/parameters/path.js +11 -0
- package/parameters/path.js.map +1 -1
- package/plugins/CmsGroupPlugin.js +8 -0
- package/plugins/CmsGroupPlugin.js.map +1 -1
- package/plugins/CmsModelFieldConverterPlugin.js +5 -0
- package/plugins/CmsModelFieldConverterPlugin.js.map +1 -1
- package/plugins/CmsModelPlugin.js +38 -2
- package/plugins/CmsModelPlugin.js.map +1 -1
- package/plugins/CmsParametersPlugin.js +7 -0
- package/plugins/CmsParametersPlugin.js.map +1 -1
- package/plugins/StorageTransformPlugin.js +9 -0
- package/plugins/StorageTransformPlugin.js.map +1 -1
- package/plugins/index.js +10 -0
- package/plugins/index.js.map +1 -1
- package/storage/default.js +3 -0
- package/storage/default.js.map +1 -1
- package/storage/object.js +18 -0
- package/storage/object.js.map +1 -1
- package/types.js +62 -0
- package/types.js.map +1 -1
- package/upgrades/5.33.0/index.js +26 -3
- package/upgrades/5.33.0/index.js.map +1 -1
- package/upgrades/index.js +3 -0
- package/upgrades/index.js.map +1 -1
- package/utils/access.js +25 -11
- package/utils/access.js.map +1 -1
- package/utils/converters/Converter.js +13 -0
- package/utils/converters/Converter.js.map +1 -1
- package/utils/converters/ConverterCollection.js +32 -9
- package/utils/converters/ConverterCollection.js.map +1 -1
- package/utils/converters/valueKeyStorageConverter.js +26 -0
- package/utils/converters/valueKeyStorageConverter.js.map +1 -1
- package/utils/createTypeName.js +8 -0
- package/utils/createTypeName.js.map +1 -1
- package/utils/entryStorage.js +26 -10
- package/utils/entryStorage.js.map +1 -1
- package/utils/filterAsync.js +5 -0
- package/utils/filterAsync.js.map +1 -1
- package/utils/filterModelFields.js +9 -3
- package/utils/filterModelFields.js.map +1 -1
- package/utils/getEntryTitle.js +9 -0
- package/utils/getEntryTitle.js.map +1 -1
- package/utils/getSchemaFromFieldPlugins.js +6 -2
- package/utils/getSchemaFromFieldPlugins.js.map +1 -1
- package/utils/ownership.js +8 -0
- package/utils/ownership.js.map +1 -1
- package/utils/permissions.js +23 -8
- package/utils/permissions.js.map +1 -1
- package/utils/pluralizedTypeName.js +6 -0
- package/utils/pluralizedTypeName.js.map +1 -1
- package/utils/renderFields.js +8 -0
- package/utils/renderFields.js.map +1 -1
- package/utils/renderGetFilterFields.js +11 -0
- package/utils/renderGetFilterFields.js.map +1 -1
- package/utils/renderInputFields.js +8 -0
- package/utils/renderInputFields.js.map +1 -1
- package/utils/renderListFilterFields.js +9 -1
- package/utils/renderListFilterFields.js.map +1 -1
- package/utils/renderSortEnum.js +7 -0
- package/utils/renderSortEnum.js.map +1 -1
- package/utils/toSlug.js +4 -0
- package/utils/toSlug.js.map +1 -1
- package/validators/dateGte.js +7 -0
- package/validators/dateGte.js.map +1 -1
- package/validators/dateLte.js +7 -0
- package/validators/dateLte.js.map +1 -1
- package/validators/gte.js +8 -0
- package/validators/gte.js.map +1 -1
- package/validators/in.js +8 -0
- package/validators/in.js.map +1 -1
- package/validators/index.js +15 -0
- package/validators/index.js.map +1 -1
- package/validators/lte.js +8 -0
- package/validators/lte.js.map +1 -1
- package/validators/maxLength.js +8 -0
- package/validators/maxLength.js.map +1 -1
- package/validators/minLength.js +8 -0
- package/validators/minLength.js.map +1 -1
- package/validators/pattern.js +9 -0
- package/validators/pattern.js.map +1 -1
- package/validators/patternPlugins/email.js +2 -0
- package/validators/patternPlugins/email.js.map +1 -1
- package/validators/patternPlugins/index.js +8 -0
- package/validators/patternPlugins/index.js.map +1 -1
- package/validators/patternPlugins/lowerCase.js +2 -0
- package/validators/patternPlugins/lowerCase.js.map +1 -1
- package/validators/patternPlugins/lowerCaseSpace.js +2 -0
- package/validators/patternPlugins/lowerCaseSpace.js.map +1 -1
- package/validators/patternPlugins/upperCase.js +2 -0
- package/validators/patternPlugins/upperCase.js.map +1 -1
- package/validators/patternPlugins/upperCaseSpace.js +2 -0
- package/validators/patternPlugins/upperCaseSpace.js.map +1 -1
- package/validators/patternPlugins/url.js +2 -0
- package/validators/patternPlugins/url.js.map +1 -1
- package/validators/required.js +5 -0
- package/validators/required.js.map +1 -1
- package/validators/timeGte.js +8 -0
- package/validators/timeGte.js.map +1 -1
- package/validators/timeLte.js +8 -0
- package/validators/timeLte.js.map +1 -1
- package/validators/unique.js +7 -0
- package/validators/unique.js.map +1 -1
package/utils/access.js
CHANGED
|
@@ -4,26 +4,33 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.validateModelAccess = exports.validateGroupAccess = exports.checkModelAccess = void 0;
|
|
7
|
+
|
|
7
8
|
var _apiSecurity = require("@webiny/api-security");
|
|
9
|
+
|
|
8
10
|
var _permissions = require("./permissions");
|
|
11
|
+
|
|
9
12
|
const validateGroupAccess = (context, permission, group) => {
|
|
10
13
|
const {
|
|
11
14
|
groups
|
|
12
|
-
} = permission;
|
|
13
|
-
// when no groups defined on permission
|
|
15
|
+
} = permission; // when no groups defined on permission
|
|
14
16
|
// it means user has access to everything
|
|
17
|
+
|
|
15
18
|
if (!groups) {
|
|
16
19
|
return true;
|
|
17
20
|
}
|
|
18
|
-
|
|
19
|
-
// when there is no locale in groups, it means that no access was given
|
|
21
|
+
|
|
22
|
+
const locale = context.cms.getLocale().code; // when there is no locale in groups, it means that no access was given
|
|
20
23
|
// this happens when access control was set but no models or groups were added
|
|
24
|
+
|
|
21
25
|
if (Array.isArray(groups[locale]) === false || groups[locale].includes(group.id) === false) {
|
|
22
26
|
return false;
|
|
23
27
|
}
|
|
28
|
+
|
|
24
29
|
return true;
|
|
25
30
|
};
|
|
31
|
+
|
|
26
32
|
exports.validateGroupAccess = validateGroupAccess;
|
|
33
|
+
|
|
27
34
|
const validateModelAccess = async (context, model) => {
|
|
28
35
|
const modelGroupPermission = await (0, _permissions.checkPermissions)(context, "cms.contentModelGroup", {
|
|
29
36
|
rwd: "r"
|
|
@@ -36,41 +43,48 @@ const validateModelAccess = async (context, model) => {
|
|
|
36
43
|
});
|
|
37
44
|
const {
|
|
38
45
|
models
|
|
39
|
-
} = modelPermission;
|
|
40
|
-
// when no models or groups defined on permission
|
|
46
|
+
} = modelPermission; // when no models or groups defined on permission
|
|
41
47
|
// it means user has access to everything
|
|
48
|
+
|
|
42
49
|
if (!models && !groups) {
|
|
43
50
|
return true;
|
|
44
51
|
}
|
|
45
|
-
|
|
46
|
-
// Check whether the model is question belongs to "content model groups" for which user has permission.
|
|
52
|
+
|
|
53
|
+
const locale = context.cms.getLocale().code; // Check whether the model is question belongs to "content model groups" for which user has permission.
|
|
54
|
+
|
|
47
55
|
if (groups) {
|
|
48
56
|
if (Array.isArray(groups[locale]) === false || groups[locale].includes(model.group.id) === false) {
|
|
49
57
|
return false;
|
|
50
58
|
}
|
|
51
|
-
}
|
|
52
|
-
|
|
59
|
+
} // Check whether the model is question belongs to "content models" for which user has permission.
|
|
60
|
+
|
|
61
|
+
|
|
53
62
|
if (models) {
|
|
54
63
|
if (Array.isArray(models[locale]) === false || models[locale].includes(model.modelId) === false) {
|
|
55
64
|
return false;
|
|
56
65
|
}
|
|
57
66
|
}
|
|
67
|
+
|
|
58
68
|
return true;
|
|
59
69
|
};
|
|
60
|
-
|
|
61
70
|
/**
|
|
62
71
|
* model access is checking for both specific model or group access
|
|
63
72
|
* if permission has specific models set as access pattern then groups will not matter (although both can be set)
|
|
64
73
|
*/
|
|
74
|
+
|
|
75
|
+
|
|
65
76
|
exports.validateModelAccess = validateModelAccess;
|
|
77
|
+
|
|
66
78
|
const checkModelAccess = async (context, model) => {
|
|
67
79
|
if (await validateModelAccess(context, model)) {
|
|
68
80
|
return;
|
|
69
81
|
}
|
|
82
|
+
|
|
70
83
|
throw new _apiSecurity.NotAuthorizedError({
|
|
71
84
|
data: {
|
|
72
85
|
reason: `Not allowed to access model "${model.modelId}".`
|
|
73
86
|
}
|
|
74
87
|
});
|
|
75
88
|
};
|
|
89
|
+
|
|
76
90
|
exports.checkModelAccess = checkModelAccess;
|
package/utils/access.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["validateGroupAccess","context","permission","group","groups","locale","cms","getLocale","code","Array","isArray","includes","id","validateModelAccess","model","modelGroupPermission","checkPermissions","rwd","modelPermission","models","modelId","checkModelAccess","NotAuthorizedError","data","reason"],"sources":["access.ts"],"sourcesContent":["import { NotAuthorizedError } from \"@webiny/api-security\";\nimport { CmsContext, CmsGroup, CmsGroupPermission, CmsModel, CmsModelPermission } from \"~/types\";\nimport { checkPermissions } from \"./permissions\";\n\nexport const validateGroupAccess = (\n context: CmsContext,\n permission: CmsGroupPermission,\n group: CmsGroup\n): boolean => {\n const { groups } = permission;\n // when no groups defined on permission\n // it means user has access to everything\n if (!groups) {\n return true;\n }\n const locale = context.cms.getLocale().code;\n // when there is no locale in groups, it means that no access was given\n // this happens when access control was set but no models or groups were added\n if (Array.isArray(groups[locale]) === false || groups[locale].includes(group.id) === false) {\n return false;\n }\n return true;\n};\n\nexport const validateModelAccess = async (\n context: CmsContext,\n model: CmsModel\n): Promise<boolean> => {\n const modelGroupPermission: CmsGroupPermission = await checkPermissions(\n context,\n \"cms.contentModelGroup\",\n { rwd: \"r\" }\n );\n const { groups } = modelGroupPermission;\n\n const modelPermission: CmsModelPermission = await checkPermissions(\n context,\n \"cms.contentModel\",\n {\n rwd: \"r\"\n }\n );\n const { models } = modelPermission;\n // when no models or groups defined on permission\n // it means user has access to everything\n if (!models && !groups) {\n return true;\n }\n const locale = context.cms.getLocale().code;\n // Check whether the model is question belongs to \"content model groups\" for which user has permission.\n if (groups) {\n if (\n Array.isArray(groups[locale]) === false ||\n groups[locale].includes(model.group.id) === false\n ) {\n return false;\n }\n }\n // Check whether the model is question belongs to \"content models\" for which user has permission.\n if (models) {\n if (\n Array.isArray(models[locale]) === false ||\n models[locale].includes(model.modelId) === false\n ) {\n return false;\n }\n }\n\n return true;\n};\n\n/**\n * model access is checking for both specific model or group access\n * if permission has specific models set as access pattern then groups will not matter (although both can be set)\n */\nexport const checkModelAccess = async (context: CmsContext, model: CmsModel): Promise<void> => {\n if (await validateModelAccess(context, model)) {\n return;\n }\n throw new NotAuthorizedError({\n data: {\n reason: `Not allowed to access model \"${model.modelId}\".`\n }\n });\n};\n"],"mappings":"
|
|
1
|
+
{"version":3,"names":["validateGroupAccess","context","permission","group","groups","locale","cms","getLocale","code","Array","isArray","includes","id","validateModelAccess","model","modelGroupPermission","checkPermissions","rwd","modelPermission","models","modelId","checkModelAccess","NotAuthorizedError","data","reason"],"sources":["access.ts"],"sourcesContent":["import { NotAuthorizedError } from \"@webiny/api-security\";\nimport { CmsContext, CmsGroup, CmsGroupPermission, CmsModel, CmsModelPermission } from \"~/types\";\nimport { checkPermissions } from \"./permissions\";\n\nexport const validateGroupAccess = (\n context: CmsContext,\n permission: CmsGroupPermission,\n group: CmsGroup\n): boolean => {\n const { groups } = permission;\n // when no groups defined on permission\n // it means user has access to everything\n if (!groups) {\n return true;\n }\n const locale = context.cms.getLocale().code;\n // when there is no locale in groups, it means that no access was given\n // this happens when access control was set but no models or groups were added\n if (Array.isArray(groups[locale]) === false || groups[locale].includes(group.id) === false) {\n return false;\n }\n return true;\n};\n\nexport const validateModelAccess = async (\n context: CmsContext,\n model: CmsModel\n): Promise<boolean> => {\n const modelGroupPermission: CmsGroupPermission = await checkPermissions(\n context,\n \"cms.contentModelGroup\",\n { rwd: \"r\" }\n );\n const { groups } = modelGroupPermission;\n\n const modelPermission: CmsModelPermission = await checkPermissions(\n context,\n \"cms.contentModel\",\n {\n rwd: \"r\"\n }\n );\n const { models } = modelPermission;\n // when no models or groups defined on permission\n // it means user has access to everything\n if (!models && !groups) {\n return true;\n }\n const locale = context.cms.getLocale().code;\n // Check whether the model is question belongs to \"content model groups\" for which user has permission.\n if (groups) {\n if (\n Array.isArray(groups[locale]) === false ||\n groups[locale].includes(model.group.id) === false\n ) {\n return false;\n }\n }\n // Check whether the model is question belongs to \"content models\" for which user has permission.\n if (models) {\n if (\n Array.isArray(models[locale]) === false ||\n models[locale].includes(model.modelId) === false\n ) {\n return false;\n }\n }\n\n return true;\n};\n\n/**\n * model access is checking for both specific model or group access\n * if permission has specific models set as access pattern then groups will not matter (although both can be set)\n */\nexport const checkModelAccess = async (context: CmsContext, model: CmsModel): Promise<void> => {\n if (await validateModelAccess(context, model)) {\n return;\n }\n throw new NotAuthorizedError({\n data: {\n reason: `Not allowed to access model \"${model.modelId}\".`\n }\n });\n};\n"],"mappings":";;;;;;;AAAA;;AAEA;;AAEO,MAAMA,mBAAmB,GAAG,CAC/BC,OAD+B,EAE/BC,UAF+B,EAG/BC,KAH+B,KAIrB;EACV,MAAM;IAAEC;EAAF,IAAaF,UAAnB,CADU,CAEV;EACA;;EACA,IAAI,CAACE,MAAL,EAAa;IACT,OAAO,IAAP;EACH;;EACD,MAAMC,MAAM,GAAGJ,OAAO,CAACK,GAAR,CAAYC,SAAZ,GAAwBC,IAAvC,CAPU,CAQV;EACA;;EACA,IAAIC,KAAK,CAACC,OAAN,CAAcN,MAAM,CAACC,MAAD,CAApB,MAAkC,KAAlC,IAA2CD,MAAM,CAACC,MAAD,CAAN,CAAeM,QAAf,CAAwBR,KAAK,CAACS,EAA9B,MAAsC,KAArF,EAA4F;IACxF,OAAO,KAAP;EACH;;EACD,OAAO,IAAP;AACH,CAlBM;;;;AAoBA,MAAMC,mBAAmB,GAAG,OAC/BZ,OAD+B,EAE/Ba,KAF+B,KAGZ;EACnB,MAAMC,oBAAwC,GAAG,MAAM,IAAAC,6BAAA,EACnDf,OADmD,EAEnD,uBAFmD,EAGnD;IAAEgB,GAAG,EAAE;EAAP,CAHmD,CAAvD;EAKA,MAAM;IAAEb;EAAF,IAAaW,oBAAnB;EAEA,MAAMG,eAAmC,GAAG,MAAM,IAAAF,6BAAA,EAC9Cf,OAD8C,EAE9C,kBAF8C,EAG9C;IACIgB,GAAG,EAAE;EADT,CAH8C,CAAlD;EAOA,MAAM;IAAEE;EAAF,IAAaD,eAAnB,CAfmB,CAgBnB;EACA;;EACA,IAAI,CAACC,MAAD,IAAW,CAACf,MAAhB,EAAwB;IACpB,OAAO,IAAP;EACH;;EACD,MAAMC,MAAM,GAAGJ,OAAO,CAACK,GAAR,CAAYC,SAAZ,GAAwBC,IAAvC,CArBmB,CAsBnB;;EACA,IAAIJ,MAAJ,EAAY;IACR,IACIK,KAAK,CAACC,OAAN,CAAcN,MAAM,CAACC,MAAD,CAApB,MAAkC,KAAlC,IACAD,MAAM,CAACC,MAAD,CAAN,CAAeM,QAAf,CAAwBG,KAAK,CAACX,KAAN,CAAYS,EAApC,MAA4C,KAFhD,EAGE;MACE,OAAO,KAAP;IACH;EACJ,CA9BkB,CA+BnB;;;EACA,IAAIO,MAAJ,EAAY;IACR,IACIV,KAAK,CAACC,OAAN,CAAcS,MAAM,CAACd,MAAD,CAApB,MAAkC,KAAlC,IACAc,MAAM,CAACd,MAAD,CAAN,CAAeM,QAAf,CAAwBG,KAAK,CAACM,OAA9B,MAA2C,KAF/C,EAGE;MACE,OAAO,KAAP;IACH;EACJ;;EAED,OAAO,IAAP;AACH,CA7CM;AA+CP;AACA;AACA;AACA;;;;;AACO,MAAMC,gBAAgB,GAAG,OAAOpB,OAAP,EAA4Ba,KAA5B,KAA+D;EAC3F,IAAI,MAAMD,mBAAmB,CAACZ,OAAD,EAAUa,KAAV,CAA7B,EAA+C;IAC3C;EACH;;EACD,MAAM,IAAIQ,+BAAJ,CAAuB;IACzBC,IAAI,EAAE;MACFC,MAAM,EAAG,gCAA+BV,KAAK,CAACM,OAAQ;IADpD;EADmB,CAAvB,CAAN;AAKH,CATM"}
|
|
@@ -1,12 +1,16 @@
|
|
|
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.Converter = void 0;
|
|
9
|
+
|
|
8
10
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
11
|
+
|
|
9
12
|
var _error = _interopRequireDefault(require("@webiny/error"));
|
|
13
|
+
|
|
10
14
|
class Converter {
|
|
11
15
|
constructor(config) {
|
|
12
16
|
(0, _defineProperty2.default)(this, "type", void 0);
|
|
@@ -15,23 +19,29 @@ class Converter {
|
|
|
15
19
|
this.type = config.type;
|
|
16
20
|
this.plugin = config.plugin;
|
|
17
21
|
}
|
|
22
|
+
|
|
18
23
|
setConverterCollection(converters) {
|
|
19
24
|
if (this.converters) {
|
|
20
25
|
throw new _error.default(`Cannot attach converters collection more than once to Converter with type "${this.type}".`, "CONVERTER_COLLECTION_ERROR", {
|
|
21
26
|
type: this.type
|
|
22
27
|
});
|
|
23
28
|
}
|
|
29
|
+
|
|
24
30
|
this.converters = converters;
|
|
25
31
|
}
|
|
32
|
+
|
|
26
33
|
getConverterCollection() {
|
|
27
34
|
if (!this.converters) {
|
|
28
35
|
throw new _error.default(`There is no ConverterCollection defined in the converter with type "${this.type}".`);
|
|
29
36
|
}
|
|
37
|
+
|
|
30
38
|
return this.converters;
|
|
31
39
|
}
|
|
40
|
+
|
|
32
41
|
getType() {
|
|
33
42
|
return this.type;
|
|
34
43
|
}
|
|
44
|
+
|
|
35
45
|
convertToStorage(params) {
|
|
36
46
|
const {
|
|
37
47
|
field,
|
|
@@ -43,6 +53,7 @@ class Converter {
|
|
|
43
53
|
converterCollection: this.getConverterCollection()
|
|
44
54
|
});
|
|
45
55
|
}
|
|
56
|
+
|
|
46
57
|
convertFromStorage(params) {
|
|
47
58
|
const {
|
|
48
59
|
field,
|
|
@@ -54,5 +65,7 @@ class Converter {
|
|
|
54
65
|
converterCollection: this.getConverterCollection()
|
|
55
66
|
});
|
|
56
67
|
}
|
|
68
|
+
|
|
57
69
|
}
|
|
70
|
+
|
|
58
71
|
exports.Converter = Converter;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Converter","constructor","config","undefined","type","plugin","setConverterCollection","converters","WebinyError","getConverterCollection","getType","convertToStorage","params","field","value","converterCollection","convertFromStorage"],"sources":["Converter.ts"],"sourcesContent":["import WebinyError from \"@webiny/error\";\nimport { CmsEntryValues, CmsModelField } from \"~/types\";\nimport { CmsModelFieldConverterPlugin } from \"~/plugins\";\nimport { ConverterCollection } from \"./ConverterCollection\";\n\nexport interface CmsModelFieldWithParent extends CmsModelField {\n parent?: CmsModelFieldWithParent | null;\n}\n\ninterface ConverterConvertParams {\n field: CmsModelFieldWithParent;\n value: any;\n parent?: CmsModelFieldWithParent | null;\n}\nexport interface ConverterConfig {\n type: string;\n plugin: CmsModelFieldConverterPlugin;\n}\nexport class Converter {\n private readonly type: string;\n private readonly plugin: CmsModelFieldConverterPlugin;\n\n private converters: ConverterCollection | undefined = undefined;\n\n public constructor(config: ConverterConfig) {\n this.type = config.type;\n this.plugin = config.plugin;\n }\n\n public setConverterCollection(converters: ConverterCollection): void {\n if (this.converters) {\n throw new WebinyError(\n `Cannot attach converters collection more than once to Converter with type \"${this.type}\".`,\n \"CONVERTER_COLLECTION_ERROR\",\n {\n type: this.type\n }\n );\n }\n this.converters = converters;\n }\n\n public getConverterCollection(): ConverterCollection {\n if (!this.converters) {\n throw new WebinyError(\n `There is no ConverterCollection defined in the converter with type \"${this.type}\".`\n );\n }\n return this.converters;\n }\n\n public getType(): string {\n return this.type;\n }\n\n public convertToStorage(params: ConverterConvertParams): CmsEntryValues {\n const { field, value } = params;\n\n return this.plugin.convertToStorage({\n field,\n value,\n converterCollection: this.getConverterCollection()\n });\n }\n\n public convertFromStorage(params: ConverterConvertParams): CmsEntryValues {\n const { field, value } = params;\n\n return this.plugin.convertFromStorage({\n field,\n value,\n converterCollection: this.getConverterCollection()\n });\n }\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"names":["Converter","constructor","config","undefined","type","plugin","setConverterCollection","converters","WebinyError","getConverterCollection","getType","convertToStorage","params","field","value","converterCollection","convertFromStorage"],"sources":["Converter.ts"],"sourcesContent":["import WebinyError from \"@webiny/error\";\nimport { CmsEntryValues, CmsModelField } from \"~/types\";\nimport { CmsModelFieldConverterPlugin } from \"~/plugins\";\nimport { ConverterCollection } from \"./ConverterCollection\";\n\nexport interface CmsModelFieldWithParent extends CmsModelField {\n parent?: CmsModelFieldWithParent | null;\n}\n\ninterface ConverterConvertParams {\n field: CmsModelFieldWithParent;\n value: any;\n parent?: CmsModelFieldWithParent | null;\n}\nexport interface ConverterConfig {\n type: string;\n plugin: CmsModelFieldConverterPlugin;\n}\nexport class Converter {\n private readonly type: string;\n private readonly plugin: CmsModelFieldConverterPlugin;\n\n private converters: ConverterCollection | undefined = undefined;\n\n public constructor(config: ConverterConfig) {\n this.type = config.type;\n this.plugin = config.plugin;\n }\n\n public setConverterCollection(converters: ConverterCollection): void {\n if (this.converters) {\n throw new WebinyError(\n `Cannot attach converters collection more than once to Converter with type \"${this.type}\".`,\n \"CONVERTER_COLLECTION_ERROR\",\n {\n type: this.type\n }\n );\n }\n this.converters = converters;\n }\n\n public getConverterCollection(): ConverterCollection {\n if (!this.converters) {\n throw new WebinyError(\n `There is no ConverterCollection defined in the converter with type \"${this.type}\".`\n );\n }\n return this.converters;\n }\n\n public getType(): string {\n return this.type;\n }\n\n public convertToStorage(params: ConverterConvertParams): CmsEntryValues {\n const { field, value } = params;\n\n return this.plugin.convertToStorage({\n field,\n value,\n converterCollection: this.getConverterCollection()\n });\n }\n\n public convertFromStorage(params: ConverterConvertParams): CmsEntryValues {\n const { field, value } = params;\n\n return this.plugin.convertFromStorage({\n field,\n value,\n converterCollection: this.getConverterCollection()\n });\n }\n}\n"],"mappings":";;;;;;;;;;;AAAA;;AAkBO,MAAMA,SAAN,CAAgB;EAMZC,WAAW,CAACC,MAAD,EAA0B;IAAA;IAAA;IAAA,kDAFUC,SAEV;IACxC,KAAKC,IAAL,GAAYF,MAAM,CAACE,IAAnB;IACA,KAAKC,MAAL,GAAcH,MAAM,CAACG,MAArB;EACH;;EAEMC,sBAAsB,CAACC,UAAD,EAAwC;IACjE,IAAI,KAAKA,UAAT,EAAqB;MACjB,MAAM,IAAIC,cAAJ,CACD,8EAA6E,KAAKJ,IAAK,IADtF,EAEF,4BAFE,EAGF;QACIA,IAAI,EAAE,KAAKA;MADf,CAHE,CAAN;IAOH;;IACD,KAAKG,UAAL,GAAkBA,UAAlB;EACH;;EAEME,sBAAsB,GAAwB;IACjD,IAAI,CAAC,KAAKF,UAAV,EAAsB;MAClB,MAAM,IAAIC,cAAJ,CACD,uEAAsE,KAAKJ,IAAK,IAD/E,CAAN;IAGH;;IACD,OAAO,KAAKG,UAAZ;EACH;;EAEMG,OAAO,GAAW;IACrB,OAAO,KAAKN,IAAZ;EACH;;EAEMO,gBAAgB,CAACC,MAAD,EAAiD;IACpE,MAAM;MAAEC,KAAF;MAASC;IAAT,IAAmBF,MAAzB;IAEA,OAAO,KAAKP,MAAL,CAAYM,gBAAZ,CAA6B;MAChCE,KADgC;MAEhCC,KAFgC;MAGhCC,mBAAmB,EAAE,KAAKN,sBAAL;IAHW,CAA7B,CAAP;EAKH;;EAEMO,kBAAkB,CAACJ,MAAD,EAAiD;IACtE,MAAM;MAAEC,KAAF;MAASC;IAAT,IAAmBF,MAAzB;IAEA,OAAO,KAAKP,MAAL,CAAYW,kBAAZ,CAA+B;MAClCH,KADkC;MAElCC,KAFkC;MAGlCC,mBAAmB,EAAE,KAAKN,sBAAL;IAHa,CAA/B,CAAP;EAKH;;AAvDkB"}
|
|
@@ -1,15 +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.ConverterCollection = void 0;
|
|
9
|
+
|
|
8
10
|
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
|
|
11
|
+
|
|
9
12
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
13
|
+
|
|
10
14
|
var _error = _interopRequireDefault(require("@webiny/error"));
|
|
15
|
+
|
|
11
16
|
var _Converter = require("./Converter");
|
|
17
|
+
|
|
12
18
|
var _plugins = require("../../plugins");
|
|
19
|
+
|
|
13
20
|
class ConverterCollection {
|
|
14
21
|
constructor(params) {
|
|
15
22
|
(0, _defineProperty2.default)(this, "converters", new Map());
|
|
@@ -19,9 +26,11 @@ class ConverterCollection {
|
|
|
19
26
|
const fieldGraphQLPlugins = plugins.byType("cms-model-field-to-graphql");
|
|
20
27
|
const fieldConverterPlugins = plugins.byType(_plugins.CmsModelFieldConverterPlugin.type);
|
|
21
28
|
const defaultFieldConverterPlugin = fieldConverterPlugins.find(pl => pl.getFieldType() === "*");
|
|
29
|
+
|
|
22
30
|
if (defaultFieldConverterPlugin === undefined) {
|
|
23
31
|
throw new _error.default(`Missing default field converter plugin.`, "DEFAULT_FIELD_CONVERTER_ERROR");
|
|
24
32
|
}
|
|
33
|
+
|
|
25
34
|
for (const fieldGraphQLPlugin of fieldGraphQLPlugins) {
|
|
26
35
|
const plugin = fieldConverterPlugins.find(pl => pl.getFieldType() === fieldGraphQLPlugin.fieldType);
|
|
27
36
|
const converter = new _Converter.Converter({
|
|
@@ -31,33 +40,42 @@ class ConverterCollection {
|
|
|
31
40
|
this.addConverter(converter);
|
|
32
41
|
}
|
|
33
42
|
}
|
|
43
|
+
|
|
34
44
|
addConverter(converter) {
|
|
35
45
|
converter.setConverterCollection(this);
|
|
36
46
|
this.converters.set(converter.getType(), converter);
|
|
37
47
|
}
|
|
48
|
+
|
|
38
49
|
getConverter(type) {
|
|
39
50
|
const converter = this.converters.get(type);
|
|
51
|
+
|
|
40
52
|
if (converter === undefined) {
|
|
41
53
|
throw new _error.default(`Missing converter for field type "${type}".`, "CONVERTER_ERROR", {
|
|
42
54
|
type
|
|
43
55
|
});
|
|
44
56
|
}
|
|
57
|
+
|
|
45
58
|
return converter;
|
|
46
59
|
}
|
|
60
|
+
|
|
47
61
|
convertToStorage(params) {
|
|
48
62
|
const {
|
|
49
63
|
fields,
|
|
50
64
|
values: inputValues
|
|
51
65
|
} = params;
|
|
66
|
+
|
|
52
67
|
if (inputValues === undefined) {
|
|
53
68
|
return undefined;
|
|
54
69
|
}
|
|
70
|
+
|
|
55
71
|
this.attachHasOwnProperty(inputValues);
|
|
56
72
|
return fields.reduce((output, field) => {
|
|
57
73
|
const converter = this.getConverter(field.type);
|
|
74
|
+
|
|
58
75
|
if (inputValues === null || inputValues.hasOwnProperty(field.fieldId) === false) {
|
|
59
76
|
return output;
|
|
60
77
|
}
|
|
78
|
+
|
|
61
79
|
const values = converter.convertToStorage({
|
|
62
80
|
field,
|
|
63
81
|
value: inputValues[field.fieldId]
|
|
@@ -65,19 +83,24 @@ class ConverterCollection {
|
|
|
65
83
|
return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, output), values);
|
|
66
84
|
}, {});
|
|
67
85
|
}
|
|
86
|
+
|
|
68
87
|
convertFromStorage(params) {
|
|
69
88
|
const {
|
|
70
89
|
fields,
|
|
71
90
|
values: inputValues
|
|
72
91
|
} = params;
|
|
92
|
+
|
|
73
93
|
if (inputValues === undefined) {
|
|
74
94
|
return undefined;
|
|
75
95
|
}
|
|
96
|
+
|
|
76
97
|
return fields.reduce((output, field) => {
|
|
77
98
|
const converter = this.getConverter(field.type);
|
|
99
|
+
|
|
78
100
|
if (inputValues === null || inputValues.hasOwnProperty(field.storageId) === false) {
|
|
79
101
|
return output;
|
|
80
102
|
}
|
|
103
|
+
|
|
81
104
|
const values = converter.convertFromStorage({
|
|
82
105
|
field,
|
|
83
106
|
value: inputValues[field.storageId]
|
|
@@ -85,25 +108,23 @@ class ConverterCollection {
|
|
|
85
108
|
return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, output), values);
|
|
86
109
|
}, {});
|
|
87
110
|
}
|
|
88
|
-
|
|
89
111
|
/**
|
|
90
112
|
* This method attaches hasOwnProperty when received object was created via Object.create(null) - no inheritance of Object.
|
|
91
113
|
* At that point, hasOwnProperty does not exist, and we need to add it.
|
|
92
114
|
*
|
|
93
115
|
* TODO add more checks if required
|
|
94
116
|
*/
|
|
117
|
+
|
|
118
|
+
|
|
95
119
|
attachHasOwnProperty(values) {
|
|
96
|
-
if (
|
|
97
|
-
|
|
98
|
-
values
|
|
99
|
-
//
|
|
100
|
-
typeof values !== "object" ||
|
|
101
|
-
// maybe it's an array?
|
|
102
|
-
Array.isArray(values) ||
|
|
103
|
-
// and in the end, check if hasOwnProperty is a function already
|
|
120
|
+
if ( // null or undefined?
|
|
121
|
+
values === null || values === undefined || // not an object?
|
|
122
|
+
typeof values !== "object" || // maybe it's an array?
|
|
123
|
+
Array.isArray(values) || // and in the end, check if hasOwnProperty is a function already
|
|
104
124
|
typeof (values === null || values === void 0 ? void 0 : values.hasOwnProperty) === "function") {
|
|
105
125
|
return;
|
|
106
126
|
}
|
|
127
|
+
|
|
107
128
|
Object.defineProperty(values, "hasOwnProperty", {
|
|
108
129
|
enumerable: false,
|
|
109
130
|
writable: false,
|
|
@@ -112,5 +133,7 @@ class ConverterCollection {
|
|
|
112
133
|
}
|
|
113
134
|
});
|
|
114
135
|
}
|
|
136
|
+
|
|
115
137
|
}
|
|
138
|
+
|
|
116
139
|
exports.ConverterCollection = ConverterCollection;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["ConverterCollection","constructor","params","Map","plugins","fieldGraphQLPlugins","byType","fieldConverterPlugins","CmsModelFieldConverterPlugin","type","defaultFieldConverterPlugin","find","pl","getFieldType","undefined","WebinyError","fieldGraphQLPlugin","plugin","fieldType","converter","Converter","addConverter","setConverterCollection","converters","set","getType","getConverter","get","convertToStorage","fields","values","inputValues","attachHasOwnProperty","reduce","output","field","hasOwnProperty","fieldId","value","convertFromStorage","storageId","Array","isArray","Object","defineProperty","enumerable","writable","property"],"sources":["ConverterCollection.ts"],"sourcesContent":["import WebinyError from \"@webiny/error\";\nimport { Converter } from \"./Converter\";\nimport { CmsEntryValues, CmsModelField, CmsModelFieldToGraphQLPlugin } from \"~/types\";\nimport { CmsModelFieldConverterPlugin } from \"~/plugins\";\nimport { PluginsContainer } from \"@webiny/plugins\";\n\nexport interface CmsModelFieldsWithParent extends CmsModelField {\n parent?: CmsModelField | null;\n}\n\nexport interface CmsModelConverterCallable {\n (params: ConverterCollectionConvertParams): CmsEntryValues;\n}\n\nexport interface ConverterCollectionConvertParams {\n fields: CmsModelFieldsWithParent[];\n values?: CmsEntryValues;\n}\n\nexport interface ConverterCollectionParams {\n plugins: PluginsContainer;\n}\n\nexport class ConverterCollection {\n private readonly converters: Map<string, Converter> = new Map();\n\n public constructor(params: ConverterCollectionParams) {\n const { plugins } = params;\n const fieldGraphQLPlugins = plugins.byType<CmsModelFieldToGraphQLPlugin>(\n \"cms-model-field-to-graphql\"\n );\n const fieldConverterPlugins = plugins.byType<CmsModelFieldConverterPlugin>(\n CmsModelFieldConverterPlugin.type\n );\n const defaultFieldConverterPlugin = fieldConverterPlugins.find(\n pl => pl.getFieldType() === \"*\"\n );\n if (defaultFieldConverterPlugin === undefined) {\n throw new WebinyError(\n `Missing default field converter plugin.`,\n \"DEFAULT_FIELD_CONVERTER_ERROR\"\n );\n }\n for (const fieldGraphQLPlugin of fieldGraphQLPlugins) {\n const plugin = fieldConverterPlugins.find(\n pl => pl.getFieldType() === fieldGraphQLPlugin.fieldType\n );\n const converter = new Converter({\n type: fieldGraphQLPlugin.fieldType,\n plugin: plugin || defaultFieldConverterPlugin\n });\n\n this.addConverter(converter);\n }\n }\n\n public addConverter(converter: Converter): void {\n converter.setConverterCollection(this);\n this.converters.set(converter.getType(), converter);\n }\n\n public getConverter(type: string): Converter {\n const converter = this.converters.get(type);\n if (converter === undefined) {\n throw new WebinyError(\n `Missing converter for field type \"${type}\".`,\n \"CONVERTER_ERROR\",\n {\n type\n }\n );\n }\n return converter;\n }\n\n public convertToStorage(params: ConverterCollectionConvertParams): CmsEntryValues | undefined {\n const { fields, values: inputValues } = params;\n if (inputValues === undefined) {\n return undefined;\n }\n\n this.attachHasOwnProperty(inputValues);\n\n return fields.reduce<CmsEntryValues>((output, field) => {\n const converter = this.getConverter(field.type);\n if (inputValues === null || inputValues.hasOwnProperty(field.fieldId) === false) {\n return output;\n }\n const values = converter.convertToStorage({\n field,\n value: inputValues[field.fieldId]\n });\n\n return {\n ...output,\n ...values\n };\n }, {});\n }\n\n public convertFromStorage(\n params: ConverterCollectionConvertParams\n ): CmsEntryValues | undefined {\n const { fields, values: inputValues } = params;\n if (inputValues === undefined) {\n return undefined;\n }\n\n return fields.reduce((output, field) => {\n const converter = this.getConverter(field.type);\n if (inputValues === null || inputValues.hasOwnProperty(field.storageId) === false) {\n return output;\n }\n const values = converter.convertFromStorage({\n field,\n value: inputValues[field.storageId]\n });\n\n return {\n ...output,\n ...values\n };\n }, {});\n }\n\n /**\n * This method attaches hasOwnProperty when received object was created via Object.create(null) - no inheritance of Object.\n * At that point, hasOwnProperty does not exist, and we need to add it.\n *\n * TODO add more checks if required\n */\n private attachHasOwnProperty(values: CmsEntryValues) {\n if (\n // null or undefined?\n values === null ||\n values === undefined ||\n // not an object?\n typeof values !== \"object\" ||\n // maybe it's an array?\n Array.isArray(values) ||\n // and in the end, check if hasOwnProperty is a function already\n typeof values?.hasOwnProperty === \"function\"\n ) {\n return;\n }\n Object.defineProperty(values, \"hasOwnProperty\", {\n enumerable: false,\n writable: false,\n value: function (property: string) {\n return this[property] !== undefined;\n }\n });\n }\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"names":["ConverterCollection","constructor","params","Map","plugins","fieldGraphQLPlugins","byType","fieldConverterPlugins","CmsModelFieldConverterPlugin","type","defaultFieldConverterPlugin","find","pl","getFieldType","undefined","WebinyError","fieldGraphQLPlugin","plugin","fieldType","converter","Converter","addConverter","setConverterCollection","converters","set","getType","getConverter","get","convertToStorage","fields","values","inputValues","attachHasOwnProperty","reduce","output","field","hasOwnProperty","fieldId","value","convertFromStorage","storageId","Array","isArray","Object","defineProperty","enumerable","writable","property"],"sources":["ConverterCollection.ts"],"sourcesContent":["import WebinyError from \"@webiny/error\";\nimport { Converter } from \"./Converter\";\nimport { CmsEntryValues, CmsModelField, CmsModelFieldToGraphQLPlugin } from \"~/types\";\nimport { CmsModelFieldConverterPlugin } from \"~/plugins\";\nimport { PluginsContainer } from \"@webiny/plugins\";\n\nexport interface CmsModelFieldsWithParent extends CmsModelField {\n parent?: CmsModelField | null;\n}\n\nexport interface CmsModelConverterCallable {\n (params: ConverterCollectionConvertParams): CmsEntryValues;\n}\n\nexport interface ConverterCollectionConvertParams {\n fields: CmsModelFieldsWithParent[];\n values?: CmsEntryValues;\n}\n\nexport interface ConverterCollectionParams {\n plugins: PluginsContainer;\n}\n\nexport class ConverterCollection {\n private readonly converters: Map<string, Converter> = new Map();\n\n public constructor(params: ConverterCollectionParams) {\n const { plugins } = params;\n const fieldGraphQLPlugins = plugins.byType<CmsModelFieldToGraphQLPlugin>(\n \"cms-model-field-to-graphql\"\n );\n const fieldConverterPlugins = plugins.byType<CmsModelFieldConverterPlugin>(\n CmsModelFieldConverterPlugin.type\n );\n const defaultFieldConverterPlugin = fieldConverterPlugins.find(\n pl => pl.getFieldType() === \"*\"\n );\n if (defaultFieldConverterPlugin === undefined) {\n throw new WebinyError(\n `Missing default field converter plugin.`,\n \"DEFAULT_FIELD_CONVERTER_ERROR\"\n );\n }\n for (const fieldGraphQLPlugin of fieldGraphQLPlugins) {\n const plugin = fieldConverterPlugins.find(\n pl => pl.getFieldType() === fieldGraphQLPlugin.fieldType\n );\n const converter = new Converter({\n type: fieldGraphQLPlugin.fieldType,\n plugin: plugin || defaultFieldConverterPlugin\n });\n\n this.addConverter(converter);\n }\n }\n\n public addConverter(converter: Converter): void {\n converter.setConverterCollection(this);\n this.converters.set(converter.getType(), converter);\n }\n\n public getConverter(type: string): Converter {\n const converter = this.converters.get(type);\n if (converter === undefined) {\n throw new WebinyError(\n `Missing converter for field type \"${type}\".`,\n \"CONVERTER_ERROR\",\n {\n type\n }\n );\n }\n return converter;\n }\n\n public convertToStorage(params: ConverterCollectionConvertParams): CmsEntryValues | undefined {\n const { fields, values: inputValues } = params;\n if (inputValues === undefined) {\n return undefined;\n }\n\n this.attachHasOwnProperty(inputValues);\n\n return fields.reduce<CmsEntryValues>((output, field) => {\n const converter = this.getConverter(field.type);\n if (inputValues === null || inputValues.hasOwnProperty(field.fieldId) === false) {\n return output;\n }\n const values = converter.convertToStorage({\n field,\n value: inputValues[field.fieldId]\n });\n\n return {\n ...output,\n ...values\n };\n }, {});\n }\n\n public convertFromStorage(\n params: ConverterCollectionConvertParams\n ): CmsEntryValues | undefined {\n const { fields, values: inputValues } = params;\n if (inputValues === undefined) {\n return undefined;\n }\n\n return fields.reduce((output, field) => {\n const converter = this.getConverter(field.type);\n if (inputValues === null || inputValues.hasOwnProperty(field.storageId) === false) {\n return output;\n }\n const values = converter.convertFromStorage({\n field,\n value: inputValues[field.storageId]\n });\n\n return {\n ...output,\n ...values\n };\n }, {});\n }\n\n /**\n * This method attaches hasOwnProperty when received object was created via Object.create(null) - no inheritance of Object.\n * At that point, hasOwnProperty does not exist, and we need to add it.\n *\n * TODO add more checks if required\n */\n private attachHasOwnProperty(values: CmsEntryValues) {\n if (\n // null or undefined?\n values === null ||\n values === undefined ||\n // not an object?\n typeof values !== \"object\" ||\n // maybe it's an array?\n Array.isArray(values) ||\n // and in the end, check if hasOwnProperty is a function already\n typeof values?.hasOwnProperty === \"function\"\n ) {\n return;\n }\n Object.defineProperty(values, \"hasOwnProperty\", {\n enumerable: false,\n writable: false,\n value: function (property: string) {\n return this[property] !== undefined;\n }\n });\n }\n}\n"],"mappings":"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"}
|
|
@@ -1,20 +1,28 @@
|
|
|
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.createValueKeyToStorageConverter = exports.createValueKeyFromStorageConverter = exports.attachCmsModelFieldConverters = void 0;
|
|
9
|
+
|
|
8
10
|
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
|
|
11
|
+
|
|
9
12
|
var _ConverterCollection = require("./ConverterCollection");
|
|
13
|
+
|
|
10
14
|
var _semver = _interopRequireDefault(require("semver"));
|
|
15
|
+
|
|
11
16
|
const featureVersion = _semver.default.coerce("5.33.0");
|
|
17
|
+
|
|
12
18
|
const isBetaOrNext = model => {
|
|
13
19
|
if (!model.webinyVersion) {
|
|
14
20
|
return false;
|
|
15
21
|
}
|
|
22
|
+
|
|
16
23
|
return model.webinyVersion.match(/next|beta/) !== null;
|
|
17
24
|
};
|
|
25
|
+
|
|
18
26
|
const isFeatureEnabled = model => {
|
|
19
27
|
/**
|
|
20
28
|
* In case of disabled webinyVersion value, we disable this feature.
|
|
@@ -26,12 +34,16 @@ const isFeatureEnabled = model => {
|
|
|
26
34
|
/**
|
|
27
35
|
* If is a test environment, always have this turned on.
|
|
28
36
|
*/
|
|
37
|
+
|
|
38
|
+
|
|
29
39
|
if (process.env.NODE_ENV === "test" || isBetaOrNext(model) === true) {
|
|
30
40
|
return true;
|
|
31
41
|
}
|
|
32
42
|
/**
|
|
33
43
|
* Possibility that the version is not defined, this means it is a quite old system where models did not change.
|
|
34
44
|
*/
|
|
45
|
+
|
|
46
|
+
|
|
35
47
|
if (!model.webinyVersion) {
|
|
36
48
|
return false;
|
|
37
49
|
}
|
|
@@ -40,20 +52,26 @@ const isFeatureEnabled = model => {
|
|
|
40
52
|
*
|
|
41
53
|
* TODO change if necessary after the update to the system
|
|
42
54
|
*/
|
|
55
|
+
|
|
56
|
+
|
|
43
57
|
const modelVersion = _semver.default.coerce(model.webinyVersion);
|
|
58
|
+
|
|
44
59
|
if (!modelVersion) {
|
|
45
60
|
console.log(`Warning: Model "${model.modelId}" does not have valid Webiny version set.`);
|
|
46
61
|
return true;
|
|
47
62
|
} else if (_semver.default.compare(modelVersion, featureVersion) === -1) {
|
|
48
63
|
return false;
|
|
49
64
|
}
|
|
65
|
+
|
|
50
66
|
return true;
|
|
51
67
|
};
|
|
68
|
+
|
|
52
69
|
const createValueKeyToStorageConverter = params => {
|
|
53
70
|
const {
|
|
54
71
|
plugins,
|
|
55
72
|
model
|
|
56
73
|
} = params;
|
|
74
|
+
|
|
57
75
|
if (isFeatureEnabled(model) === false) {
|
|
58
76
|
return ({
|
|
59
77
|
values
|
|
@@ -61,6 +79,7 @@ const createValueKeyToStorageConverter = params => {
|
|
|
61
79
|
return values || {};
|
|
62
80
|
};
|
|
63
81
|
}
|
|
82
|
+
|
|
64
83
|
const converters = new _ConverterCollection.ConverterCollection({
|
|
65
84
|
plugins
|
|
66
85
|
});
|
|
@@ -75,12 +94,15 @@ const createValueKeyToStorageConverter = params => {
|
|
|
75
94
|
return result || {};
|
|
76
95
|
};
|
|
77
96
|
};
|
|
97
|
+
|
|
78
98
|
exports.createValueKeyToStorageConverter = createValueKeyToStorageConverter;
|
|
99
|
+
|
|
79
100
|
const createValueKeyFromStorageConverter = params => {
|
|
80
101
|
const {
|
|
81
102
|
plugins,
|
|
82
103
|
model
|
|
83
104
|
} = params;
|
|
105
|
+
|
|
84
106
|
if (isFeatureEnabled(model) === false) {
|
|
85
107
|
return ({
|
|
86
108
|
values
|
|
@@ -88,6 +110,7 @@ const createValueKeyFromStorageConverter = params => {
|
|
|
88
110
|
return values || {};
|
|
89
111
|
};
|
|
90
112
|
}
|
|
113
|
+
|
|
91
114
|
const converters = new _ConverterCollection.ConverterCollection({
|
|
92
115
|
plugins
|
|
93
116
|
});
|
|
@@ -102,7 +125,9 @@ const createValueKeyFromStorageConverter = params => {
|
|
|
102
125
|
return result || {};
|
|
103
126
|
};
|
|
104
127
|
};
|
|
128
|
+
|
|
105
129
|
exports.createValueKeyFromStorageConverter = createValueKeyFromStorageConverter;
|
|
130
|
+
|
|
106
131
|
const attachCmsModelFieldConverters = params => {
|
|
107
132
|
const {
|
|
108
133
|
model,
|
|
@@ -119,4 +144,5 @@ const attachCmsModelFieldConverters = params => {
|
|
|
119
144
|
})
|
|
120
145
|
});
|
|
121
146
|
};
|
|
147
|
+
|
|
122
148
|
exports.attachCmsModelFieldConverters = attachCmsModelFieldConverters;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["featureVersion","semver","coerce","isBetaOrNext","model","webinyVersion","match","isFeatureEnabled","process","env","NODE_ENV","modelVersion","console","log","modelId","compare","createValueKeyToStorageConverter","params","plugins","values","converters","ConverterCollection","fields","result","convertToStorage","createValueKeyFromStorageConverter","convertFromStorage","attachCmsModelFieldConverters","convertValueKeyToStorage","convertValueKeyFromStorage"],"sources":["valueKeyStorageConverter.ts"],"sourcesContent":["import { PluginsContainer } from \"@webiny/plugins\";\nimport {\n CmsModelConverterCallable,\n ConverterCollection,\n ConverterCollectionConvertParams as BaseConverterCollectionConvertParams\n} from \"~/utils/converters/ConverterCollection\";\nimport { CmsModel, StorageOperationsCmsModel } from \"~/types\";\nimport semver, { SemVer } from \"semver\";\n\nconst featureVersion = semver.coerce(\"5.33.0\") as SemVer;\n\nconst isBetaOrNext = (model: CmsModel): boolean => {\n if (!model.webinyVersion) {\n return false;\n }\n return model.webinyVersion.match(/next|beta/) !== null;\n};\n\nconst isFeatureEnabled = (model: CmsModel): boolean => {\n /**\n * In case of disabled webinyVersion value, we disable this feature.\n * This is only for testing...\n */\n if (model.webinyVersion === \"disable\") {\n return false;\n }\n /**\n * If is a test environment, always have this turned on.\n */\n if (process.env.NODE_ENV === \"test\" || isBetaOrNext(model) === true) {\n return true;\n }\n /**\n * Possibility that the version is not defined, this means it is a quite old system where models did not change.\n */\n if (!model.webinyVersion) {\n return false;\n }\n /**\n * In case feature version value is greater than the model version, feature is not enabled as it is an older model with no storageId.\n *\n * TODO change if necessary after the update to the system\n */\n const modelVersion = semver.coerce(model.webinyVersion);\n if (!modelVersion) {\n console.log(`Warning: Model \"${model.modelId}\" does not have valid Webiny version set.`);\n return true;\n } else if (semver.compare(modelVersion, featureVersion) === -1) {\n return false;\n }\n return true;\n};\n\ninterface Params {\n /**\n * We need a model to determine if the conversion feature is enabled.\n */\n model: CmsModel;\n plugins: PluginsContainer;\n}\n\n/**\n * In the first call of the converter we do not need the fields property as it will be taken directly from the model.\n */\ninterface ConverterCollectionConvertParams\n extends Omit<BaseConverterCollectionConvertParams, \"fields\"> {\n fields?: BaseConverterCollectionConvertParams[\"fields\"];\n}\n\nexport const createValueKeyToStorageConverter = (params: Params): CmsModelConverterCallable => {\n const { plugins, model } = params;\n\n if (isFeatureEnabled(model) === false) {\n return ({ values }: ConverterCollectionConvertParams) => {\n return values || {};\n };\n }\n\n const converters = new ConverterCollection({\n plugins\n });\n\n return ({ fields, values }: ConverterCollectionConvertParams) => {\n const result = converters.convertToStorage({\n fields: fields || model.fields,\n values\n });\n return result || {};\n };\n};\n\nexport const createValueKeyFromStorageConverter = (params: Params): CmsModelConverterCallable => {\n const { plugins, model } = params;\n\n if (isFeatureEnabled(model) === false) {\n return ({ values }: ConverterCollectionConvertParams) => {\n return values || {};\n };\n }\n\n const converters = new ConverterCollection({\n plugins\n });\n\n return ({ fields, values }: ConverterCollectionConvertParams) => {\n const result = converters.convertFromStorage({\n fields: fields || model.fields,\n values\n });\n return result || {};\n };\n};\n\ninterface AttachConvertersParams {\n plugins: PluginsContainer;\n model: CmsModel;\n}\nexport const attachCmsModelFieldConverters = (\n params: AttachConvertersParams\n): StorageOperationsCmsModel => {\n const { model, plugins } = params;\n return {\n ...model,\n convertValueKeyToStorage: createValueKeyToStorageConverter({\n model,\n plugins\n }),\n convertValueKeyFromStorage: createValueKeyFromStorageConverter({\n model,\n plugins\n })\n };\n};\n"],"mappings":"
|
|
1
|
+
{"version":3,"names":["featureVersion","semver","coerce","isBetaOrNext","model","webinyVersion","match","isFeatureEnabled","process","env","NODE_ENV","modelVersion","console","log","modelId","compare","createValueKeyToStorageConverter","params","plugins","values","converters","ConverterCollection","fields","result","convertToStorage","createValueKeyFromStorageConverter","convertFromStorage","attachCmsModelFieldConverters","convertValueKeyToStorage","convertValueKeyFromStorage"],"sources":["valueKeyStorageConverter.ts"],"sourcesContent":["import { PluginsContainer } from \"@webiny/plugins\";\nimport {\n CmsModelConverterCallable,\n ConverterCollection,\n ConverterCollectionConvertParams as BaseConverterCollectionConvertParams\n} from \"~/utils/converters/ConverterCollection\";\nimport { CmsModel, StorageOperationsCmsModel } from \"~/types\";\nimport semver, { SemVer } from \"semver\";\n\nconst featureVersion = semver.coerce(\"5.33.0\") as SemVer;\n\nconst isBetaOrNext = (model: CmsModel): boolean => {\n if (!model.webinyVersion) {\n return false;\n }\n return model.webinyVersion.match(/next|beta/) !== null;\n};\n\nconst isFeatureEnabled = (model: CmsModel): boolean => {\n /**\n * In case of disabled webinyVersion value, we disable this feature.\n * This is only for testing...\n */\n if (model.webinyVersion === \"disable\") {\n return false;\n }\n /**\n * If is a test environment, always have this turned on.\n */\n if (process.env.NODE_ENV === \"test\" || isBetaOrNext(model) === true) {\n return true;\n }\n /**\n * Possibility that the version is not defined, this means it is a quite old system where models did not change.\n */\n if (!model.webinyVersion) {\n return false;\n }\n /**\n * In case feature version value is greater than the model version, feature is not enabled as it is an older model with no storageId.\n *\n * TODO change if necessary after the update to the system\n */\n const modelVersion = semver.coerce(model.webinyVersion);\n if (!modelVersion) {\n console.log(`Warning: Model \"${model.modelId}\" does not have valid Webiny version set.`);\n return true;\n } else if (semver.compare(modelVersion, featureVersion) === -1) {\n return false;\n }\n return true;\n};\n\ninterface Params {\n /**\n * We need a model to determine if the conversion feature is enabled.\n */\n model: CmsModel;\n plugins: PluginsContainer;\n}\n\n/**\n * In the first call of the converter we do not need the fields property as it will be taken directly from the model.\n */\ninterface ConverterCollectionConvertParams\n extends Omit<BaseConverterCollectionConvertParams, \"fields\"> {\n fields?: BaseConverterCollectionConvertParams[\"fields\"];\n}\n\nexport const createValueKeyToStorageConverter = (params: Params): CmsModelConverterCallable => {\n const { plugins, model } = params;\n\n if (isFeatureEnabled(model) === false) {\n return ({ values }: ConverterCollectionConvertParams) => {\n return values || {};\n };\n }\n\n const converters = new ConverterCollection({\n plugins\n });\n\n return ({ fields, values }: ConverterCollectionConvertParams) => {\n const result = converters.convertToStorage({\n fields: fields || model.fields,\n values\n });\n return result || {};\n };\n};\n\nexport const createValueKeyFromStorageConverter = (params: Params): CmsModelConverterCallable => {\n const { plugins, model } = params;\n\n if (isFeatureEnabled(model) === false) {\n return ({ values }: ConverterCollectionConvertParams) => {\n return values || {};\n };\n }\n\n const converters = new ConverterCollection({\n plugins\n });\n\n return ({ fields, values }: ConverterCollectionConvertParams) => {\n const result = converters.convertFromStorage({\n fields: fields || model.fields,\n values\n });\n return result || {};\n };\n};\n\ninterface AttachConvertersParams {\n plugins: PluginsContainer;\n model: CmsModel;\n}\nexport const attachCmsModelFieldConverters = (\n params: AttachConvertersParams\n): StorageOperationsCmsModel => {\n const { model, plugins } = params;\n return {\n ...model,\n convertValueKeyToStorage: createValueKeyToStorageConverter({\n model,\n plugins\n }),\n convertValueKeyFromStorage: createValueKeyFromStorageConverter({\n model,\n plugins\n })\n };\n};\n"],"mappings":"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"}
|
package/utils/createTypeName.js
CHANGED
|
@@ -1,20 +1,28 @@
|
|
|
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.createTypeName = exports.createReadTypeName = exports.createManageTypeName = void 0;
|
|
9
|
+
|
|
8
10
|
var _upperFirst = _interopRequireDefault(require("lodash/upperFirst"));
|
|
11
|
+
|
|
9
12
|
const createTypeName = modelId => {
|
|
10
13
|
return (0, _upperFirst.default)(modelId);
|
|
11
14
|
};
|
|
15
|
+
|
|
12
16
|
exports.createTypeName = createTypeName;
|
|
17
|
+
|
|
13
18
|
const createReadTypeName = baseTypeName => {
|
|
14
19
|
return createTypeName(baseTypeName);
|
|
15
20
|
};
|
|
21
|
+
|
|
16
22
|
exports.createReadTypeName = createReadTypeName;
|
|
23
|
+
|
|
17
24
|
const createManageTypeName = baseTypeName => {
|
|
18
25
|
return createTypeName(baseTypeName);
|
|
19
26
|
};
|
|
27
|
+
|
|
20
28
|
exports.createManageTypeName = createManageTypeName;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["createTypeName","modelId","upperFirst","createReadTypeName","baseTypeName","createManageTypeName"],"sources":["createTypeName.ts"],"sourcesContent":["import upperFirst from \"lodash/upperFirst\";\n\nexport const createTypeName = (modelId: string): string => {\n return upperFirst(modelId);\n};\n\nexport const createReadTypeName = (baseTypeName: string): string => {\n return createTypeName(baseTypeName);\n};\n\nexport const createManageTypeName = (baseTypeName: string): string => {\n return createTypeName(baseTypeName);\n};\n"],"mappings":"
|
|
1
|
+
{"version":3,"names":["createTypeName","modelId","upperFirst","createReadTypeName","baseTypeName","createManageTypeName"],"sources":["createTypeName.ts"],"sourcesContent":["import upperFirst from \"lodash/upperFirst\";\n\nexport const createTypeName = (modelId: string): string => {\n return upperFirst(modelId);\n};\n\nexport const createReadTypeName = (baseTypeName: string): string => {\n return createTypeName(baseTypeName);\n};\n\nexport const createManageTypeName = (baseTypeName: string): string => {\n return createTypeName(baseTypeName);\n};\n"],"mappings":";;;;;;;;;AAAA;;AAEO,MAAMA,cAAc,GAAIC,OAAD,IAA6B;EACvD,OAAO,IAAAC,mBAAA,EAAWD,OAAX,CAAP;AACH,CAFM;;;;AAIA,MAAME,kBAAkB,GAAIC,YAAD,IAAkC;EAChE,OAAOJ,cAAc,CAACI,YAAD,CAArB;AACH,CAFM;;;;AAIA,MAAMC,oBAAoB,GAAID,YAAD,IAAkC;EAClE,OAAOJ,cAAc,CAACI,YAAD,CAArB;AACH,CAFM"}
|