@webiny/api-headless-cms 0.0.0-unstable.c2780f51fe → 0.0.0-unstable.c7dec08bb0
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/constants.d.ts +1 -0
- package/constants.js +8 -0
- package/constants.js.map +1 -0
- package/context.js +37 -5
- package/context.js.map +1 -1
- package/crud/contentEntry/referenceFieldsMapping.js +34 -5
- package/crud/contentEntry/referenceFieldsMapping.js.map +1 -1
- package/crud/contentEntry.crud.d.ts +8 -4
- package/crud/contentEntry.crud.js +329 -64
- package/crud/contentEntry.crud.js.map +1 -1
- package/crud/contentModel/validateModelFields.js +1 -1
- package/crud/contentModel/validateModelFields.js.map +1 -1
- package/crud/contentModel/validation.d.ts +76 -76
- package/crud/contentModel.crud.d.ts +2 -0
- package/crud/contentModel.crud.js +22 -12
- package/crud/contentModel.crud.js.map +1 -1
- package/crud/contentModelGroup/validation.d.ts +4 -4
- package/crud/contentModelGroup.crud.d.ts +2 -0
- package/crud/contentModelGroup.crud.js +42 -27
- package/crud/contentModelGroup.crud.js.map +1 -1
- package/crud/settings.crud.d.ts +2 -0
- package/crud/settings.crud.js +2 -6
- package/crud/settings.crud.js.map +1 -1
- package/graphql/getSchema.js +1 -1
- package/graphql/getSchema.js.map +1 -1
- package/graphql/index.d.ts +1 -1
- package/graphql/schema/baseSchema.js +31 -0
- package/graphql/schema/baseSchema.js.map +1 -1
- package/graphql/schema/contentEntries.js +6 -1
- package/graphql/schema/contentEntries.js.map +1 -1
- package/graphql/schema/createFieldResolvers.d.ts +1 -1
- package/graphql/schema/createFieldResolvers.js +6 -12
- package/graphql/schema/createFieldResolvers.js.map +1 -1
- package/graphql/schema/createFieldTypePluginRecords.d.ts +3 -0
- package/graphql/schema/createFieldTypePluginRecords.js +13 -0
- package/graphql/schema/createFieldTypePluginRecords.js.map +1 -0
- package/graphql/schema/createManageResolvers.d.ts +1 -1
- package/graphql/schema/createManageResolvers.js +14 -0
- package/graphql/schema/createManageResolvers.js.map +1 -1
- package/graphql/schema/createManageSDL.js +51 -28
- package/graphql/schema/createManageSDL.js.map +1 -1
- package/graphql/schema/createReadSDL.js +23 -19
- package/graphql/schema/createReadSDL.js.map +1 -1
- package/graphql/schema/resolvers/manage/resolveDelete.d.ts +2 -1
- package/graphql/schema/resolvers/manage/resolveDelete.js +13 -3
- package/graphql/schema/resolvers/manage/resolveDelete.js.map +1 -1
- package/graphql/schema/resolvers/manage/resolveDeleteMultiple.d.ts +7 -0
- package/graphql/schema/resolvers/manage/resolveDeleteMultiple.js +20 -0
- package/graphql/schema/resolvers/manage/resolveDeleteMultiple.js.map +1 -0
- package/graphql/schema/resolvers/manage/resolveGetUniqueFieldValues.d.ts +4 -0
- package/graphql/schema/resolvers/manage/resolveGetUniqueFieldValues.js +18 -0
- package/graphql/schema/resolvers/manage/resolveGetUniqueFieldValues.js.map +1 -0
- package/graphql/schema/resolvers/manage/resolveMove.d.ts +8 -0
- package/graphql/schema/resolvers/manage/resolveMove.js +30 -0
- package/graphql/schema/resolvers/manage/resolveMove.js.map +1 -0
- package/graphql/schema/schemaPlugins.js +2 -11
- package/graphql/schema/schemaPlugins.js.map +1 -1
- package/graphql/system.d.ts +2 -5
- package/graphql/system.js +1 -11
- package/graphql/system.js.map +1 -1
- package/graphqlFields/dynamicZone/dynamicZoneField.js +43 -28
- package/graphqlFields/dynamicZone/dynamicZoneField.js.map +1 -1
- package/graphqlFields/number.js +1 -0
- package/graphqlFields/number.js.map +1 -1
- package/graphqlFields/object.js +2 -2
- package/graphqlFields/object.js.map +1 -1
- package/graphqlFields/text.js +2 -0
- package/graphqlFields/text.js.map +1 -1
- package/index.d.ts +1 -1
- package/package.json +31 -35
- package/plugins/CmsModelPlugin.d.ts +3 -1
- package/plugins/CmsModelPlugin.js.map +1 -1
- package/types.d.ts +101 -17
- package/types.js +11 -0
- package/types.js.map +1 -1
- package/utils/converters/valueKeyStorageConverter.js +5 -2
- package/utils/converters/valueKeyStorageConverter.js.map +1 -1
- package/utils/createTypeFromFields.js +1 -1
- package/utils/createTypeFromFields.js.map +1 -1
- package/utils/getBaseFieldType.d.ts +1 -3
- package/utils/getBaseFieldType.js.map +1 -1
- package/utils/getEntryDescription.d.ts +1 -1
- package/utils/getEntryDescription.js.map +1 -1
- package/utils/getEntryImage.d.ts +1 -1
- package/utils/getEntryImage.js.map +1 -1
- package/utils/getEntryTitle.d.ts +1 -1
- package/utils/getEntryTitle.js.map +1 -1
- package/utils/permissions/EntriesPermissions.d.ts +4 -0
- package/utils/permissions/EntriesPermissions.js +9 -0
- package/utils/permissions/EntriesPermissions.js.map +1 -0
- package/utils/permissions/ModelGroupsPermissions.d.ts +11 -0
- package/utils/permissions/ModelGroupsPermissions.js +48 -0
- package/utils/permissions/ModelGroupsPermissions.js.map +1 -0
- package/utils/permissions/ModelsPermissions.d.ts +20 -0
- package/utils/permissions/ModelsPermissions.js +91 -0
- package/utils/permissions/ModelsPermissions.js.map +1 -0
- package/utils/permissions/SettingsPermissions.d.ts +4 -0
- package/utils/permissions/SettingsPermissions.js +9 -0
- package/utils/permissions/SettingsPermissions.js.map +1 -0
- package/utils/renderFields.d.ts +2 -1
- package/utils/renderFields.js +2 -1
- package/utils/renderFields.js.map +1 -1
- package/utils/renderGetFilterFields.d.ts +2 -2
- package/utils/renderGetFilterFields.js +7 -20
- package/utils/renderGetFilterFields.js.map +1 -1
- package/utils/renderInputFields.d.ts +2 -1
- package/utils/renderInputFields.js +14 -6
- package/utils/renderInputFields.js.map +1 -1
- package/utils/renderListFilterFields.d.ts +3 -1
- package/utils/renderListFilterFields.js +16 -21
- package/utils/renderListFilterFields.js.map +1 -1
- package/utils/renderSortEnum.d.ts +3 -2
- package/utils/renderSortEnum.js +5 -1
- package/utils/renderSortEnum.js.map +1 -1
- package/crud/contentModel/createFieldModels.d.ts +0 -2
- package/crud/contentModel/createFieldModels.js +0 -26
- package/crud/contentModel/createFieldModels.js.map +0 -1
- package/crud/contentModel/fieldIdValidation.d.ts +0 -1
- package/crud/contentModel/fieldIdValidation.js +0 -25
- package/crud/contentModel/fieldIdValidation.js.map +0 -1
- package/crud/contentModel/idValidation.d.ts +0 -1
- package/crud/contentModel/idValidation.js +0 -22
- package/crud/contentModel/idValidation.js.map +0 -1
- package/crud/contentModel/models.d.ts +0 -4
- package/crud/contentModel/models.js +0 -192
- package/crud/contentModel/models.js.map +0 -1
- package/crud/contentModel/systemFields.d.ts +0 -1
- package/crud/contentModel/systemFields.js +0 -8
- package/crud/contentModel/systemFields.js.map +0 -1
- package/upgrades/5.33.0/index.d.ts +0 -3
- package/upgrades/5.33.0/index.js +0 -182
- package/upgrades/5.33.0/index.js.map +0 -1
- package/upgrades/index.d.ts +0 -1
- package/upgrades/index.js +0 -12
- package/upgrades/index.js.map +0 -1
- package/utils/access.d.ts +0 -8
- package/utils/access.js +0 -76
- package/utils/access.js.map +0 -1
- package/utils/ownership.d.ts +0 -8
- package/utils/ownership.js +0 -33
- package/utils/ownership.js.map +0 -1
- package/utils/permissions.d.ts +0 -7
- package/utils/permissions.js +0 -91
- package/utils/permissions.js.map +0 -1
- package/utils/pluralizedTypeName.d.ts +0 -1
- package/utils/pluralizedTypeName.js +0 -26
- package/utils/pluralizedTypeName.js.map +0 -1
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { AppPermissions } from "@webiny/api-security";
|
|
2
|
+
import { CmsGroup, CmsGroupPermission } from "../../types";
|
|
3
|
+
interface CanAccessGroupParams {
|
|
4
|
+
group: CmsGroup;
|
|
5
|
+
locale: string;
|
|
6
|
+
}
|
|
7
|
+
export declare class ModelGroupsPermissions extends AppPermissions<CmsGroupPermission> {
|
|
8
|
+
canAccessGroup({ group, locale }: CanAccessGroupParams): Promise<boolean>;
|
|
9
|
+
ensureCanAccessGroup(params: CanAccessGroupParams): Promise<void>;
|
|
10
|
+
}
|
|
11
|
+
export {};
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.ModelGroupsPermissions = void 0;
|
|
7
|
+
var _apiSecurity = require("@webiny/api-security");
|
|
8
|
+
class ModelGroupsPermissions extends _apiSecurity.AppPermissions {
|
|
9
|
+
async canAccessGroup({
|
|
10
|
+
group,
|
|
11
|
+
locale
|
|
12
|
+
}) {
|
|
13
|
+
if (await this.hasFullAccess()) {
|
|
14
|
+
return true;
|
|
15
|
+
}
|
|
16
|
+
const permissions = await this.getPermissions();
|
|
17
|
+
for (let i = 0; i < permissions.length; i++) {
|
|
18
|
+
const permission = permissions[i];
|
|
19
|
+
const {
|
|
20
|
+
groups
|
|
21
|
+
} = permission;
|
|
22
|
+
// When no groups defined on permission it means user has access to everything.
|
|
23
|
+
if (!groups) {
|
|
24
|
+
return true;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
// when there is no locale in groups, it means that no access was given
|
|
28
|
+
// this happens when access control was set but no models or groups were added
|
|
29
|
+
if (Array.isArray(groups[locale]) === false || groups[locale].includes(group.id) === false) {
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
return true;
|
|
33
|
+
}
|
|
34
|
+
return false;
|
|
35
|
+
}
|
|
36
|
+
async ensureCanAccessGroup(params) {
|
|
37
|
+
const canAccessModel = await this.canAccessGroup(params);
|
|
38
|
+
if (canAccessModel) {
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
throw new _apiSecurity.NotAuthorizedError({
|
|
42
|
+
data: {
|
|
43
|
+
reason: `Not allowed to access group "${params.group.id}".`
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
exports.ModelGroupsPermissions = ModelGroupsPermissions;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["ModelGroupsPermissions","AppPermissions","canAccessGroup","group","locale","hasFullAccess","permissions","getPermissions","i","length","permission","groups","Array","isArray","includes","id","ensureCanAccessGroup","params","canAccessModel","NotAuthorizedError","data","reason"],"sources":["ModelGroupsPermissions.ts"],"sourcesContent":["import { AppPermissions, NotAuthorizedError } from \"@webiny/api-security\";\nimport { CmsGroup, CmsGroupPermission } from \"~/types\";\n\ninterface CanAccessGroupParams {\n group: CmsGroup;\n locale: string;\n}\n\nexport class ModelGroupsPermissions extends AppPermissions<CmsGroupPermission> {\n async canAccessGroup({ group, locale }: CanAccessGroupParams) {\n if (await this.hasFullAccess()) {\n return true;\n }\n\n const permissions = await this.getPermissions();\n\n for (let i = 0; i < permissions.length; i++) {\n const permission = permissions[i];\n const { groups } = permission;\n // When no groups defined on permission it means user has access to everything.\n if (!groups) {\n return true;\n }\n\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 (\n Array.isArray(groups[locale]) === false ||\n groups[locale].includes(group.id) === false\n ) {\n return false;\n }\n return true;\n }\n\n return false;\n }\n\n async ensureCanAccessGroup(params: CanAccessGroupParams) {\n const canAccessModel = await this.canAccessGroup(params);\n if (canAccessModel) {\n return;\n }\n\n throw new NotAuthorizedError({\n data: {\n reason: `Not allowed to access group \"${params.group.id}\".`\n }\n });\n }\n}\n"],"mappings":";;;;;;AAAA;AAQO,MAAMA,sBAAsB,SAASC,2BAAc,CAAqB;EAC3E,MAAMC,cAAc,CAAC;IAAEC,KAAK;IAAEC;EAA6B,CAAC,EAAE;IAC1D,IAAI,MAAM,IAAI,CAACC,aAAa,EAAE,EAAE;MAC5B,OAAO,IAAI;IACf;IAEA,MAAMC,WAAW,GAAG,MAAM,IAAI,CAACC,cAAc,EAAE;IAE/C,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGF,WAAW,CAACG,MAAM,EAAED,CAAC,EAAE,EAAE;MACzC,MAAME,UAAU,GAAGJ,WAAW,CAACE,CAAC,CAAC;MACjC,MAAM;QAAEG;MAAO,CAAC,GAAGD,UAAU;MAC7B;MACA,IAAI,CAACC,MAAM,EAAE;QACT,OAAO,IAAI;MACf;;MAEA;MACA;MACA,IACIC,KAAK,CAACC,OAAO,CAACF,MAAM,CAACP,MAAM,CAAC,CAAC,KAAK,KAAK,IACvCO,MAAM,CAACP,MAAM,CAAC,CAACU,QAAQ,CAACX,KAAK,CAACY,EAAE,CAAC,KAAK,KAAK,EAC7C;QACE,OAAO,KAAK;MAChB;MACA,OAAO,IAAI;IACf;IAEA,OAAO,KAAK;EAChB;EAEA,MAAMC,oBAAoB,CAACC,MAA4B,EAAE;IACrD,MAAMC,cAAc,GAAG,MAAM,IAAI,CAAChB,cAAc,CAACe,MAAM,CAAC;IACxD,IAAIC,cAAc,EAAE;MAChB;IACJ;IAEA,MAAM,IAAIC,+BAAkB,CAAC;MACzBC,IAAI,EAAE;QACFC,MAAM,EAAG,gCAA+BJ,MAAM,CAACd,KAAK,CAACY,EAAG;MAC5D;IACJ,CAAC,CAAC;EACN;AACJ;AAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { AppPermissions, AppPermissionsParams } from "@webiny/api-security";
|
|
2
|
+
import { CmsGroupPermission, CmsModel, CmsModelPermission } from "../../types";
|
|
3
|
+
import { ModelGroupsPermissions } from "./ModelGroupsPermissions";
|
|
4
|
+
export interface ModelsPermissionsParams extends AppPermissionsParams<CmsGroupPermission> {
|
|
5
|
+
modelGroupsPermissions: ModelGroupsPermissions;
|
|
6
|
+
}
|
|
7
|
+
export interface CanAccessModelParams {
|
|
8
|
+
model: CmsModel;
|
|
9
|
+
locale: string;
|
|
10
|
+
}
|
|
11
|
+
export interface EnsureModelAccessParams {
|
|
12
|
+
model: CmsModel;
|
|
13
|
+
locale: string;
|
|
14
|
+
}
|
|
15
|
+
export declare class ModelsPermissions extends AppPermissions<CmsModelPermission> {
|
|
16
|
+
private modelGroupsPermissions;
|
|
17
|
+
constructor(params: ModelsPermissionsParams);
|
|
18
|
+
canAccessModel({ model, locale }: CanAccessModelParams): Promise<boolean>;
|
|
19
|
+
ensureCanAccessModel(params: EnsureModelAccessParams): Promise<void>;
|
|
20
|
+
}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.ModelsPermissions = void 0;
|
|
8
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
9
|
+
var _apiSecurity = require("@webiny/api-security");
|
|
10
|
+
class ModelsPermissions extends _apiSecurity.AppPermissions {
|
|
11
|
+
constructor(params) {
|
|
12
|
+
super(params);
|
|
13
|
+
(0, _defineProperty2.default)(this, "modelGroupsPermissions", void 0);
|
|
14
|
+
this.modelGroupsPermissions = params.modelGroupsPermissions;
|
|
15
|
+
}
|
|
16
|
+
async canAccessModel({
|
|
17
|
+
model,
|
|
18
|
+
locale
|
|
19
|
+
}) {
|
|
20
|
+
if (await this.hasFullAccess()) {
|
|
21
|
+
return true;
|
|
22
|
+
}
|
|
23
|
+
const modelGroupsPermissions = this.modelGroupsPermissions;
|
|
24
|
+
|
|
25
|
+
// eslint-disable-next-line
|
|
26
|
+
const modelsPermissions = this;
|
|
27
|
+
const canReadGroups = await modelGroupsPermissions.ensure({
|
|
28
|
+
rwd: "r"
|
|
29
|
+
}, {
|
|
30
|
+
throw: false
|
|
31
|
+
});
|
|
32
|
+
if (!canReadGroups) {
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
const canReadModels = await modelsPermissions.ensure({
|
|
36
|
+
rwd: "r"
|
|
37
|
+
}, {
|
|
38
|
+
throw: false
|
|
39
|
+
});
|
|
40
|
+
if (!canReadModels) {
|
|
41
|
+
return false;
|
|
42
|
+
}
|
|
43
|
+
const modelGroupsPermissionsList = await modelGroupsPermissions.getPermissions();
|
|
44
|
+
const modelsPermissionsList = await this.getPermissions();
|
|
45
|
+
for (let i = 0; i < modelGroupsPermissionsList.length; i++) {
|
|
46
|
+
const modelGroupPermission = modelGroupsPermissionsList[i];
|
|
47
|
+
const {
|
|
48
|
+
groups
|
|
49
|
+
} = modelGroupPermission;
|
|
50
|
+
for (let j = 0; j < modelsPermissionsList.length; j++) {
|
|
51
|
+
const modelPermission = modelsPermissionsList[j];
|
|
52
|
+
const {
|
|
53
|
+
models
|
|
54
|
+
} = modelPermission;
|
|
55
|
+
// when no models or groups defined on permission
|
|
56
|
+
// it means user has access to everything
|
|
57
|
+
if (!models && !groups) {
|
|
58
|
+
return true;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
// Does the model belong to a group for which user has permission?
|
|
62
|
+
if (groups) {
|
|
63
|
+
if (Array.isArray(groups[locale]) === false || groups[locale].includes(model.group.id) === false) {
|
|
64
|
+
continue;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
// Does the user have access to the specific model?
|
|
69
|
+
if (models) {
|
|
70
|
+
if (Array.isArray(models[locale]) === false || models[locale].includes(model.modelId) === false) {
|
|
71
|
+
continue;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
return true;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
return false;
|
|
78
|
+
}
|
|
79
|
+
async ensureCanAccessModel(params) {
|
|
80
|
+
const canAccessModel = await this.canAccessModel(params);
|
|
81
|
+
if (canAccessModel) {
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
throw new _apiSecurity.NotAuthorizedError({
|
|
85
|
+
data: {
|
|
86
|
+
reason: `Not allowed to access model "${params.model.modelId}".`
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
exports.ModelsPermissions = ModelsPermissions;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["ModelsPermissions","AppPermissions","constructor","params","modelGroupsPermissions","canAccessModel","model","locale","hasFullAccess","modelsPermissions","canReadGroups","ensure","rwd","throw","canReadModels","modelGroupsPermissionsList","getPermissions","modelsPermissionsList","i","length","modelGroupPermission","groups","j","modelPermission","models","Array","isArray","includes","group","id","modelId","ensureCanAccessModel","NotAuthorizedError","data","reason"],"sources":["ModelsPermissions.ts"],"sourcesContent":["import { AppPermissions, AppPermissionsParams, NotAuthorizedError } from \"@webiny/api-security\";\nimport { CmsGroupPermission, CmsModel, CmsModelPermission } from \"~/types\";\nimport { ModelGroupsPermissions } from \"~/utils/permissions/ModelGroupsPermissions\";\n\nexport interface ModelsPermissionsParams extends AppPermissionsParams<CmsGroupPermission> {\n modelGroupsPermissions: ModelGroupsPermissions;\n}\n\nexport interface CanAccessModelParams {\n model: CmsModel;\n locale: string;\n}\n\nexport interface EnsureModelAccessParams {\n model: CmsModel;\n locale: string;\n}\n\nexport class ModelsPermissions extends AppPermissions<CmsModelPermission> {\n private modelGroupsPermissions: ModelGroupsPermissions;\n\n constructor(params: ModelsPermissionsParams) {\n super(params);\n this.modelGroupsPermissions = params.modelGroupsPermissions;\n }\n\n async canAccessModel({ model, locale }: CanAccessModelParams) {\n if (await this.hasFullAccess()) {\n return true;\n }\n\n const modelGroupsPermissions = this.modelGroupsPermissions;\n\n // eslint-disable-next-line\n const modelsPermissions = this;\n\n const canReadGroups = await modelGroupsPermissions.ensure({ rwd: \"r\" }, { throw: false });\n if (!canReadGroups) {\n return false;\n }\n\n const canReadModels = await modelsPermissions.ensure({ rwd: \"r\" }, { throw: false });\n if (!canReadModels) {\n return false;\n }\n\n const modelGroupsPermissionsList = await modelGroupsPermissions.getPermissions();\n const modelsPermissionsList = await this.getPermissions();\n\n for (let i = 0; i < modelGroupsPermissionsList.length; i++) {\n const modelGroupPermission = modelGroupsPermissionsList[i];\n\n const { groups } = modelGroupPermission;\n\n for (let j = 0; j < modelsPermissionsList.length; j++) {\n const modelPermission = modelsPermissionsList[j];\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\n // Does the model belong to a group 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 continue;\n }\n }\n\n // Does the user have access to the specific model?\n if (models) {\n if (\n Array.isArray(models[locale]) === false ||\n models[locale].includes(model.modelId) === false\n ) {\n continue;\n }\n }\n\n return true;\n }\n }\n\n return false;\n }\n\n async ensureCanAccessModel(params: EnsureModelAccessParams) {\n const canAccessModel = await this.canAccessModel(params);\n if (canAccessModel) {\n return;\n }\n\n throw new NotAuthorizedError({\n data: {\n reason: `Not allowed to access model \"${params.model.modelId}\".`\n }\n });\n }\n}\n"],"mappings":";;;;;;;;AAAA;AAkBO,MAAMA,iBAAiB,SAASC,2BAAc,CAAqB;EAGtEC,WAAW,CAACC,MAA+B,EAAE;IACzC,KAAK,CAACA,MAAM,CAAC;IAAC;IACd,IAAI,CAACC,sBAAsB,GAAGD,MAAM,CAACC,sBAAsB;EAC/D;EAEA,MAAMC,cAAc,CAAC;IAAEC,KAAK;IAAEC;EAA6B,CAAC,EAAE;IAC1D,IAAI,MAAM,IAAI,CAACC,aAAa,EAAE,EAAE;MAC5B,OAAO,IAAI;IACf;IAEA,MAAMJ,sBAAsB,GAAG,IAAI,CAACA,sBAAsB;;IAE1D;IACA,MAAMK,iBAAiB,GAAG,IAAI;IAE9B,MAAMC,aAAa,GAAG,MAAMN,sBAAsB,CAACO,MAAM,CAAC;MAAEC,GAAG,EAAE;IAAI,CAAC,EAAE;MAAEC,KAAK,EAAE;IAAM,CAAC,CAAC;IACzF,IAAI,CAACH,aAAa,EAAE;MAChB,OAAO,KAAK;IAChB;IAEA,MAAMI,aAAa,GAAG,MAAML,iBAAiB,CAACE,MAAM,CAAC;MAAEC,GAAG,EAAE;IAAI,CAAC,EAAE;MAAEC,KAAK,EAAE;IAAM,CAAC,CAAC;IACpF,IAAI,CAACC,aAAa,EAAE;MAChB,OAAO,KAAK;IAChB;IAEA,MAAMC,0BAA0B,GAAG,MAAMX,sBAAsB,CAACY,cAAc,EAAE;IAChF,MAAMC,qBAAqB,GAAG,MAAM,IAAI,CAACD,cAAc,EAAE;IAEzD,KAAK,IAAIE,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGH,0BAA0B,CAACI,MAAM,EAAED,CAAC,EAAE,EAAE;MACxD,MAAME,oBAAoB,GAAGL,0BAA0B,CAACG,CAAC,CAAC;MAE1D,MAAM;QAAEG;MAAO,CAAC,GAAGD,oBAAoB;MAEvC,KAAK,IAAIE,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGL,qBAAqB,CAACE,MAAM,EAAEG,CAAC,EAAE,EAAE;QACnD,MAAMC,eAAe,GAAGN,qBAAqB,CAACK,CAAC,CAAC;QAEhD,MAAM;UAAEE;QAAO,CAAC,GAAGD,eAAe;QAClC;QACA;QACA,IAAI,CAACC,MAAM,IAAI,CAACH,MAAM,EAAE;UACpB,OAAO,IAAI;QACf;;QAEA;QACA,IAAIA,MAAM,EAAE;UACR,IACII,KAAK,CAACC,OAAO,CAACL,MAAM,CAACd,MAAM,CAAC,CAAC,KAAK,KAAK,IACvCc,MAAM,CAACd,MAAM,CAAC,CAACoB,QAAQ,CAACrB,KAAK,CAACsB,KAAK,CAACC,EAAE,CAAC,KAAK,KAAK,EACnD;YACE;UACJ;QACJ;;QAEA;QACA,IAAIL,MAAM,EAAE;UACR,IACIC,KAAK,CAACC,OAAO,CAACF,MAAM,CAACjB,MAAM,CAAC,CAAC,KAAK,KAAK,IACvCiB,MAAM,CAACjB,MAAM,CAAC,CAACoB,QAAQ,CAACrB,KAAK,CAACwB,OAAO,CAAC,KAAK,KAAK,EAClD;YACE;UACJ;QACJ;QAEA,OAAO,IAAI;MACf;IACJ;IAEA,OAAO,KAAK;EAChB;EAEA,MAAMC,oBAAoB,CAAC5B,MAA+B,EAAE;IACxD,MAAME,cAAc,GAAG,MAAM,IAAI,CAACA,cAAc,CAACF,MAAM,CAAC;IACxD,IAAIE,cAAc,EAAE;MAChB;IACJ;IAEA,MAAM,IAAI2B,+BAAkB,CAAC;MACzBC,IAAI,EAAE;QACFC,MAAM,EAAG,gCAA+B/B,MAAM,CAACG,KAAK,CAACwB,OAAQ;MACjE;IACJ,CAAC,CAAC;EACN;AACJ;AAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.SettingsPermissions = void 0;
|
|
7
|
+
var _apiSecurity = require("@webiny/api-security");
|
|
8
|
+
class SettingsPermissions extends _apiSecurity.AppPermissions {}
|
|
9
|
+
exports.SettingsPermissions = SettingsPermissions;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["SettingsPermissions","AppPermissions"],"sources":["SettingsPermissions.ts"],"sourcesContent":["import { CmsSettingsPermission } from \"~/types\";\nimport { AppPermissions } from \"@webiny/api-security\";\n\nexport class SettingsPermissions extends AppPermissions<CmsSettingsPermission> {}\n"],"mappings":";;;;;;AACA;AAEO,MAAMA,mBAAmB,SAASC,2BAAc,CAAwB;AAAE"}
|
package/utils/renderFields.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ import { ApiEndpoint, CmsFieldTypePlugins, CmsModel, CmsModelField, CmsModelFiel
|
|
|
2
2
|
interface RenderFieldsParams {
|
|
3
3
|
models: CmsModel[];
|
|
4
4
|
model: CmsModel;
|
|
5
|
+
fields: CmsModelField[];
|
|
5
6
|
type: ApiEndpoint;
|
|
6
7
|
fieldTypePlugins: CmsFieldTypePlugins;
|
|
7
8
|
}
|
|
@@ -9,7 +10,7 @@ interface RenderFields {
|
|
|
9
10
|
(params: RenderFieldsParams): CmsModelFieldDefinition[];
|
|
10
11
|
}
|
|
11
12
|
export declare const renderFields: RenderFields;
|
|
12
|
-
interface RenderFieldParams extends RenderFieldsParams {
|
|
13
|
+
interface RenderFieldParams extends Omit<RenderFieldsParams, "fields"> {
|
|
13
14
|
field: CmsModelField;
|
|
14
15
|
}
|
|
15
16
|
export declare const renderField: ({ models, model, type, field, fieldTypePlugins }: RenderFieldParams) => CmsModelFieldDefinition | null;
|
package/utils/renderFields.js
CHANGED
|
@@ -8,10 +8,11 @@ var _getBaseFieldType = require("./getBaseFieldType");
|
|
|
8
8
|
const renderFields = ({
|
|
9
9
|
models,
|
|
10
10
|
model,
|
|
11
|
+
fields,
|
|
11
12
|
type,
|
|
12
13
|
fieldTypePlugins
|
|
13
14
|
}) => {
|
|
14
|
-
return
|
|
15
|
+
return fields.map(field => renderField({
|
|
15
16
|
models,
|
|
16
17
|
model,
|
|
17
18
|
type,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["renderFields","models","model","
|
|
1
|
+
{"version":3,"names":["renderFields","models","model","fields","type","fieldTypePlugins","map","field","renderField","filter","Boolean","plugin","getBaseFieldType","createTypeField","defs"],"sources":["renderFields.ts"],"sourcesContent":["import {\n ApiEndpoint,\n CmsFieldTypePlugins,\n CmsModel,\n CmsModelField,\n CmsModelFieldDefinition,\n CmsModelFieldToGraphQLPlugin\n} from \"~/types\";\nimport { getBaseFieldType } from \"~/utils/getBaseFieldType\";\n\ninterface RenderFieldsParams {\n models: CmsModel[];\n model: CmsModel;\n fields: CmsModelField[];\n type: ApiEndpoint;\n fieldTypePlugins: CmsFieldTypePlugins;\n}\n\ninterface RenderFields {\n (params: RenderFieldsParams): CmsModelFieldDefinition[];\n}\n\nexport const renderFields: RenderFields = ({\n models,\n model,\n fields,\n type,\n fieldTypePlugins\n}): CmsModelFieldDefinition[] => {\n return fields\n .map(field => renderField({ models, model, type, field, fieldTypePlugins }))\n .filter(Boolean) as CmsModelFieldDefinition[];\n};\n\ninterface RenderFieldParams extends Omit<RenderFieldsParams, \"fields\"> {\n field: CmsModelField;\n}\n\nexport const renderField = ({\n models,\n model,\n type,\n field,\n fieldTypePlugins\n}: RenderFieldParams): CmsModelFieldDefinition | null => {\n const plugin = fieldTypePlugins[getBaseFieldType(field)];\n if (!plugin) {\n // Let's not render the field if it does not exist in the field plugins.\n return null;\n }\n const { createTypeField } = plugin[type] as CmsModelFieldToGraphQLPlugin[\"manage\"];\n const defs = createTypeField({\n models,\n model,\n field,\n fieldTypePlugins\n });\n\n if (!defs) {\n return null;\n } else if (typeof defs === \"string\") {\n return {\n fields: defs\n };\n }\n\n return defs;\n};\n"],"mappings":";;;;;;AAQA;AAcO,MAAMA,YAA0B,GAAG,CAAC;EACvCC,MAAM;EACNC,KAAK;EACLC,MAAM;EACNC,IAAI;EACJC;AACJ,CAAC,KAAgC;EAC7B,OAAOF,MAAM,CACRG,GAAG,CAACC,KAAK,IAAIC,WAAW,CAAC;IAAEP,MAAM;IAAEC,KAAK;IAAEE,IAAI;IAAEG,KAAK;IAAEF;EAAiB,CAAC,CAAC,CAAC,CAC3EI,MAAM,CAACC,OAAO,CAAC;AACxB,CAAC;AAAC;AAMK,MAAMF,WAAW,GAAG,CAAC;EACxBP,MAAM;EACNC,KAAK;EACLE,IAAI;EACJG,KAAK;EACLF;AACe,CAAC,KAAqC;EACrD,MAAMM,MAAM,GAAGN,gBAAgB,CAAC,IAAAO,kCAAgB,EAACL,KAAK,CAAC,CAAC;EACxD,IAAI,CAACI,MAAM,EAAE;IACT;IACA,OAAO,IAAI;EACf;EACA,MAAM;IAAEE;EAAgB,CAAC,GAAGF,MAAM,CAACP,IAAI,CAA2C;EAClF,MAAMU,IAAI,GAAGD,eAAe,CAAC;IACzBZ,MAAM;IACNC,KAAK;IACLK,KAAK;IACLF;EACJ,CAAC,CAAC;EAEF,IAAI,CAACS,IAAI,EAAE;IACP,OAAO,IAAI;EACf,CAAC,MAAM,IAAI,OAAOA,IAAI,KAAK,QAAQ,EAAE;IACjC,OAAO;MACHX,MAAM,EAAEW;IACZ,CAAC;EACL;EAEA,OAAOA,IAAI;AACf,CAAC;AAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { CmsFieldTypePlugins,
|
|
1
|
+
import { CmsFieldTypePlugins, CmsModelField } from "../types";
|
|
2
2
|
interface RenderGetFilterFieldsParams {
|
|
3
|
-
|
|
3
|
+
fields: CmsModelField[];
|
|
4
4
|
fieldTypePlugins: CmsFieldTypePlugins;
|
|
5
5
|
}
|
|
6
6
|
interface RenderGetFilterFields {
|
|
@@ -5,41 +5,28 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.renderGetFilterFields = void 0;
|
|
7
7
|
var _getBaseFieldType = require("./getBaseFieldType");
|
|
8
|
-
const getCreateFilters = (plugins, fieldType) => {
|
|
9
|
-
if (!plugins[fieldType] || !plugins[fieldType].read.createGetFilters) {
|
|
10
|
-
return null;
|
|
11
|
-
}
|
|
12
|
-
return plugins[fieldType].read.createGetFilters;
|
|
13
|
-
};
|
|
14
8
|
const renderGetFilterFields = ({
|
|
15
|
-
|
|
9
|
+
fields,
|
|
16
10
|
fieldTypePlugins
|
|
17
11
|
}) => {
|
|
18
|
-
const
|
|
12
|
+
const filters = ["id: ID", "entryId: String"];
|
|
13
|
+
for (const field of fields) {
|
|
14
|
+
var _plugin$read;
|
|
19
15
|
// Every time a client updates content model's fields, we check the type of each field. If a field plugin
|
|
20
16
|
// for a particular "field.type" doesn't exist on the backend yet, we throw an error. But still, we also
|
|
21
17
|
// want to be careful when accessing the field plugin here too. It is still possible to have a content model
|
|
22
18
|
// that contains a field, for which we don't have a plugin registered on the backend. For example, user
|
|
23
19
|
// could've just removed the plugin from the backend.
|
|
24
20
|
const baseType = (0, _getBaseFieldType.getBaseFieldType)(field);
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
}
|
|
28
|
-
return fieldTypePlugins[baseType].isSearchable;
|
|
29
|
-
}).map(f => f.fieldId);
|
|
30
|
-
const filters = ["id: ID", "entryId: String"];
|
|
31
|
-
for (const fieldId of fieldIdList) {
|
|
32
|
-
const field = model.fields.find(item => item.fieldId === fieldId);
|
|
33
|
-
if (!field) {
|
|
21
|
+
const plugin = fieldTypePlugins[baseType];
|
|
22
|
+
if (!(plugin !== null && plugin !== void 0 && plugin.isSearchable)) {
|
|
34
23
|
continue;
|
|
35
24
|
}
|
|
36
|
-
const
|
|
37
|
-
const createGetFilters = getCreateFilters(fieldTypePlugins, baseType);
|
|
25
|
+
const createGetFilters = (_plugin$read = plugin.read) === null || _plugin$read === void 0 ? void 0 : _plugin$read.createGetFilters;
|
|
38
26
|
if (typeof createGetFilters !== "function") {
|
|
39
27
|
continue;
|
|
40
28
|
}
|
|
41
29
|
filters.push(createGetFilters({
|
|
42
|
-
model,
|
|
43
30
|
field
|
|
44
31
|
}));
|
|
45
32
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["renderGetFilterFields","fields","fieldTypePlugins","filters","field","baseType","getBaseFieldType","plugin","isSearchable","createGetFilters","read","push","filter","Boolean","join"],"sources":["renderGetFilterFields.ts"],"sourcesContent":["import { CmsFieldTypePlugins, CmsModelField } from \"~/types\";\nimport { getBaseFieldType } from \"~/utils/getBaseFieldType\";\n\ninterface RenderGetFilterFieldsParams {\n fields: CmsModelField[];\n fieldTypePlugins: CmsFieldTypePlugins;\n}\ninterface RenderGetFilterFields {\n (params: RenderGetFilterFieldsParams): string;\n}\n\nexport const renderGetFilterFields: RenderGetFilterFields = ({ fields, fieldTypePlugins }) => {\n const filters: string[] = [\"id: ID\", \"entryId: String\"];\n\n for (const field of fields) {\n // Every time a client updates content model's fields, we check the type of each field. If a field plugin\n // for a particular \"field.type\" doesn't exist on the backend yet, we throw an error. But still, we also\n // want to be careful when accessing the field plugin here too. It is still possible to have a content model\n // that contains a field, for which we don't have a plugin registered on the backend. For example, user\n // could've just removed the plugin from the backend.\n const baseType = getBaseFieldType(field);\n const plugin = fieldTypePlugins[baseType];\n if (!plugin?.isSearchable) {\n continue;\n }\n const createGetFilters = plugin.read?.createGetFilters;\n if (typeof createGetFilters !== \"function\") {\n continue;\n }\n filters.push(createGetFilters({ field }));\n }\n\n return filters.filter(Boolean).join(\"\\n\");\n};\n"],"mappings":";;;;;;AACA;AAUO,MAAMA,qBAA4C,GAAG,CAAC;EAAEC,MAAM;EAAEC;AAAiB,CAAC,KAAK;EAC1F,MAAMC,OAAiB,GAAG,CAAC,QAAQ,EAAE,iBAAiB,CAAC;EAEvD,KAAK,MAAMC,KAAK,IAAIH,MAAM,EAAE;IAAA;IACxB;IACA;IACA;IACA;IACA;IACA,MAAMI,QAAQ,GAAG,IAAAC,kCAAgB,EAACF,KAAK,CAAC;IACxC,MAAMG,MAAM,GAAGL,gBAAgB,CAACG,QAAQ,CAAC;IACzC,IAAI,EAACE,MAAM,aAANA,MAAM,eAANA,MAAM,CAAEC,YAAY,GAAE;MACvB;IACJ;IACA,MAAMC,gBAAgB,mBAAGF,MAAM,CAACG,IAAI,iDAAX,aAAaD,gBAAgB;IACtD,IAAI,OAAOA,gBAAgB,KAAK,UAAU,EAAE;MACxC;IACJ;IACAN,OAAO,CAACQ,IAAI,CAACF,gBAAgB,CAAC;MAAEL;IAAM,CAAC,CAAC,CAAC;EAC7C;EAEA,OAAOD,OAAO,CAACS,MAAM,CAACC,OAAO,CAAC,CAACC,IAAI,CAAC,IAAI,CAAC;AAC7C,CAAC;AAAC"}
|
|
@@ -2,9 +2,10 @@ import { CmsFieldTypePlugins, CmsModel, CmsModelField, CmsModelFieldDefinition }
|
|
|
2
2
|
interface RenderInputFieldsParams {
|
|
3
3
|
models: CmsModel[];
|
|
4
4
|
model: CmsModel;
|
|
5
|
+
fields: CmsModelField[];
|
|
5
6
|
fieldTypePlugins: CmsFieldTypePlugins;
|
|
6
7
|
}
|
|
7
|
-
interface RenderInputFieldParams extends RenderInputFieldsParams {
|
|
8
|
+
interface RenderInputFieldParams extends Omit<RenderInputFieldsParams, "fields"> {
|
|
8
9
|
field: CmsModelField;
|
|
9
10
|
}
|
|
10
11
|
interface RenderInputFields {
|
|
@@ -8,14 +8,22 @@ var _getBaseFieldType = require("./getBaseFieldType");
|
|
|
8
8
|
const renderInputFields = ({
|
|
9
9
|
models,
|
|
10
10
|
model,
|
|
11
|
+
fields,
|
|
11
12
|
fieldTypePlugins
|
|
12
13
|
}) => {
|
|
13
|
-
return
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
14
|
+
return fields.reduce((result, field) => {
|
|
15
|
+
const input = renderInputField({
|
|
16
|
+
models,
|
|
17
|
+
model,
|
|
18
|
+
field,
|
|
19
|
+
fieldTypePlugins
|
|
20
|
+
});
|
|
21
|
+
if (!input) {
|
|
22
|
+
return result;
|
|
23
|
+
}
|
|
24
|
+
result.push(input);
|
|
25
|
+
return result;
|
|
26
|
+
}, []);
|
|
19
27
|
};
|
|
20
28
|
exports.renderInputFields = renderInputFields;
|
|
21
29
|
const renderInputField = ({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["renderInputFields","models","model","fieldTypePlugins","
|
|
1
|
+
{"version":3,"names":["renderInputFields","models","model","fields","fieldTypePlugins","reduce","result","field","input","renderInputField","push","plugin","getBaseFieldType","def","manage","createInputField"],"sources":["renderInputFields.ts"],"sourcesContent":["import { CmsFieldTypePlugins, CmsModel, CmsModelField, CmsModelFieldDefinition } from \"~/types\";\nimport { getBaseFieldType } from \"~/utils/getBaseFieldType\";\n\ninterface RenderInputFieldsParams {\n models: CmsModel[];\n model: CmsModel;\n fields: CmsModelField[];\n fieldTypePlugins: CmsFieldTypePlugins;\n}\n\ninterface RenderInputFieldParams extends Omit<RenderInputFieldsParams, \"fields\"> {\n field: CmsModelField;\n}\n\ninterface RenderInputFields {\n (params: RenderInputFieldsParams): CmsModelFieldDefinition[];\n}\n\nexport const renderInputFields: RenderInputFields = ({\n models,\n model,\n fields,\n fieldTypePlugins\n}): CmsModelFieldDefinition[] => {\n return fields.reduce<CmsModelFieldDefinition[]>((result, field) => {\n const input = renderInputField({ models, model, field, fieldTypePlugins });\n if (!input) {\n return result;\n }\n result.push(input);\n return result;\n }, []);\n};\n\nexport const renderInputField = ({\n models,\n model,\n field,\n fieldTypePlugins\n}: RenderInputFieldParams): CmsModelFieldDefinition | null => {\n // Every time a client updates content model's fields, we check the type of each field. If a field plugin\n // for a particular \"field.type\" doesn't exist on the backend yet, we throw an error. But still, we also\n // want to be careful when accessing the field plugin here too. It is still possible to have a content model\n // that contains a field, for which we don't have a plugin registered on the backend. For example, user\n // could've just removed the plugin from the backend.\n const plugin = fieldTypePlugins[getBaseFieldType(field)];\n\n if (!plugin) {\n // Let's not render the field if it does not exist in the field plugins.\n return null;\n }\n\n const def = plugin.manage.createInputField({\n models,\n model,\n field,\n fieldTypePlugins\n });\n if (typeof def === \"string\") {\n return {\n fields: def\n };\n }\n\n return def;\n};\n"],"mappings":";;;;;;AACA;AAiBO,MAAMA,iBAAoC,GAAG,CAAC;EACjDC,MAAM;EACNC,KAAK;EACLC,MAAM;EACNC;AACJ,CAAC,KAAgC;EAC7B,OAAOD,MAAM,CAACE,MAAM,CAA4B,CAACC,MAAM,EAAEC,KAAK,KAAK;IAC/D,MAAMC,KAAK,GAAGC,gBAAgB,CAAC;MAAER,MAAM;MAAEC,KAAK;MAAEK,KAAK;MAAEH;IAAiB,CAAC,CAAC;IAC1E,IAAI,CAACI,KAAK,EAAE;MACR,OAAOF,MAAM;IACjB;IACAA,MAAM,CAACI,IAAI,CAACF,KAAK,CAAC;IAClB,OAAOF,MAAM;EACjB,CAAC,EAAE,EAAE,CAAC;AACV,CAAC;AAAC;AAEK,MAAMG,gBAAgB,GAAG,CAAC;EAC7BR,MAAM;EACNC,KAAK;EACLK,KAAK;EACLH;AACoB,CAAC,KAAqC;EAC1D;EACA;EACA;EACA;EACA;EACA,MAAMO,MAAM,GAAGP,gBAAgB,CAAC,IAAAQ,kCAAgB,EAACL,KAAK,CAAC,CAAC;EAExD,IAAI,CAACI,MAAM,EAAE;IACT;IACA,OAAO,IAAI;EACf;EAEA,MAAME,GAAG,GAAGF,MAAM,CAACG,MAAM,CAACC,gBAAgB,CAAC;IACvCd,MAAM;IACNC,KAAK;IACLK,KAAK;IACLH;EACJ,CAAC,CAAC;EACF,IAAI,OAAOS,GAAG,KAAK,QAAQ,EAAE;IACzB,OAAO;MACHV,MAAM,EAAEU;IACZ,CAAC;EACL;EAEA,OAAOA,GAAG;AACd,CAAC;AAAC"}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
import { ApiEndpoint, CmsFieldTypePlugins, CmsModel } from "../types";
|
|
1
|
+
import { ApiEndpoint, CmsFieldTypePlugins, CmsModel, CmsModelField } from "../types";
|
|
2
2
|
interface RenderListFilterFieldsParams {
|
|
3
3
|
model: CmsModel;
|
|
4
|
+
fields: CmsModelField[];
|
|
4
5
|
type: ApiEndpoint;
|
|
5
6
|
fieldTypePlugins: CmsFieldTypePlugins;
|
|
7
|
+
excludeFields?: string[];
|
|
6
8
|
}
|
|
7
9
|
interface RenderListFilterFields {
|
|
8
10
|
(params: RenderListFilterFieldsParams): string;
|
|
@@ -5,49 +5,44 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.renderListFilterFields = void 0;
|
|
7
7
|
var _getBaseFieldType = require("./getBaseFieldType");
|
|
8
|
-
/**
|
|
9
|
-
* We cast as read type, because input and output of read and manage are same. This way we ease things.
|
|
10
|
-
* Internal stuff so it should be ok.
|
|
11
|
-
* TODO note that if changing read/manage types, change this as well.
|
|
12
|
-
*/
|
|
13
|
-
const getCreateListFilters = (plugins, fieldType, type) => {
|
|
14
|
-
if (!plugins[fieldType]) {
|
|
15
|
-
return null;
|
|
16
|
-
} else if (!plugins[fieldType][type]) {
|
|
17
|
-
return null;
|
|
18
|
-
}
|
|
19
|
-
return plugins[fieldType][type].createListFilters;
|
|
20
|
-
};
|
|
21
8
|
const renderListFilterFields = params => {
|
|
22
9
|
const {
|
|
23
10
|
model,
|
|
11
|
+
fields,
|
|
24
12
|
type,
|
|
25
|
-
fieldTypePlugins
|
|
13
|
+
fieldTypePlugins,
|
|
14
|
+
excludeFields = []
|
|
26
15
|
} = params;
|
|
27
|
-
const
|
|
16
|
+
const result = ["id: ID", "id_not: ID", "id_in: [ID!]", "id_not_in: [ID!]", "entryId: String", "entryId_not: String", "entryId_in: [String!]", "entryId_not_in: [String!]", "createdOn: DateTime", "createdOn_gt: DateTime", "createdOn_gte: DateTime", "createdOn_lt: DateTime", "createdOn_lte: DateTime", "createdOn_between: [DateTime!]", "createdOn_not_between: [DateTime!]", "savedOn: DateTime", "savedOn_gt: DateTime", "savedOn_gte: DateTime", "savedOn_lt: DateTime", "savedOn_lte: DateTime", "savedOn_between: [DateTime!]", "savedOn_not_between: [DateTime!]", "createdBy: String", "createdBy_not: String", "createdBy_in: [String!]", "createdBy_not_in: [String!]", "ownedBy: String", "ownedBy_not: String", "ownedBy_in: [String!]", "ownedBy_not_in: [String!]"];
|
|
28
17
|
/**
|
|
29
18
|
* We can find different statuses only in the manage API endpoint.
|
|
30
19
|
*/
|
|
31
20
|
if (type === "manage") {
|
|
32
|
-
|
|
21
|
+
result.push("status: String", "status_not: String", "status_in: [String!]", "status_not_in: [String!]");
|
|
33
22
|
}
|
|
34
|
-
|
|
23
|
+
const finalFields = result.filter(field => {
|
|
24
|
+
return !excludeFields.some(excl => {
|
|
25
|
+
return field.startsWith(`${excl}_`) || field.startsWith(`${excl}: `);
|
|
26
|
+
});
|
|
27
|
+
});
|
|
28
|
+
for (const field of fields) {
|
|
29
|
+
var _fieldTypePlugins$bas, _fieldTypePlugins$bas2;
|
|
35
30
|
// Every time a client updates content model's fields, we check the type of each field. If a field plugin
|
|
36
31
|
// for a particular "field.type" doesn't exist on the backend yet, we throw an error. But still, we also
|
|
37
32
|
// want to be careful when accessing the field plugin here too. It is still possible to have a content model
|
|
38
33
|
// that contains a field, for which we don't have a plugin registered on the backend. For example, user
|
|
39
34
|
// could've just removed the plugin from the backend.
|
|
40
|
-
|
|
41
|
-
const createListFilters =
|
|
35
|
+
const baseType = (0, _getBaseFieldType.getBaseFieldType)(field);
|
|
36
|
+
const createListFilters = (_fieldTypePlugins$bas = fieldTypePlugins[baseType]) === null || _fieldTypePlugins$bas === void 0 ? void 0 : (_fieldTypePlugins$bas2 = _fieldTypePlugins$bas[type]) === null || _fieldTypePlugins$bas2 === void 0 ? void 0 : _fieldTypePlugins$bas2.createListFilters;
|
|
42
37
|
if (typeof createListFilters !== "function") {
|
|
43
38
|
continue;
|
|
44
39
|
}
|
|
45
|
-
|
|
40
|
+
finalFields.push(createListFilters({
|
|
46
41
|
model,
|
|
47
42
|
field,
|
|
48
43
|
plugins: fieldTypePlugins
|
|
49
44
|
}));
|
|
50
45
|
}
|
|
51
|
-
return
|
|
46
|
+
return finalFields.filter(Boolean).join("\n");
|
|
52
47
|
};
|
|
53
48
|
exports.renderListFilterFields = renderListFilterFields;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["renderListFilterFields","params","model","fields","type","fieldTypePlugins","excludeFields","result","push","finalFields","filter","field","some","excl","startsWith","baseType","getBaseFieldType","createListFilters","plugins","Boolean","join"],"sources":["renderListFilterFields.ts"],"sourcesContent":["import {\n ApiEndpoint,\n CmsFieldTypePlugins,\n CmsModel,\n CmsModelField,\n CmsModelFieldToGraphQLPlugin\n} from \"~/types\";\nimport { getBaseFieldType } from \"~/utils/getBaseFieldType\";\n\ninterface RenderListFilterFieldsParams {\n model: CmsModel;\n fields: CmsModelField[];\n type: ApiEndpoint;\n fieldTypePlugins: CmsFieldTypePlugins;\n excludeFields?: string[];\n}\ninterface RenderListFilterFields {\n (params: RenderListFilterFieldsParams): string;\n}\n\ntype CreateListFiltersType =\n | CmsModelFieldToGraphQLPlugin[\"read\"][\"createListFilters\"]\n | CmsModelFieldToGraphQLPlugin[\"manage\"][\"createListFilters\"];\n\nexport const renderListFilterFields: RenderListFilterFields = (params): string => {\n const { model, fields, type, fieldTypePlugins, excludeFields = [] } = params;\n const result: string[] = [\n \"id: ID\",\n \"id_not: ID\",\n \"id_in: [ID!]\",\n \"id_not_in: [ID!]\",\n \"entryId: String\",\n \"entryId_not: String\",\n \"entryId_in: [String!]\",\n \"entryId_not_in: [String!]\",\n \"createdOn: DateTime\",\n \"createdOn_gt: DateTime\",\n \"createdOn_gte: DateTime\",\n \"createdOn_lt: DateTime\",\n \"createdOn_lte: DateTime\",\n \"createdOn_between: [DateTime!]\",\n \"createdOn_not_between: [DateTime!]\",\n \"savedOn: DateTime\",\n \"savedOn_gt: DateTime\",\n \"savedOn_gte: DateTime\",\n \"savedOn_lt: DateTime\",\n \"savedOn_lte: DateTime\",\n \"savedOn_between: [DateTime!]\",\n \"savedOn_not_between: [DateTime!]\",\n \"createdBy: String\",\n \"createdBy_not: String\",\n \"createdBy_in: [String!]\",\n \"createdBy_not_in: [String!]\",\n \"ownedBy: String\",\n \"ownedBy_not: String\",\n \"ownedBy_in: [String!]\",\n \"ownedBy_not_in: [String!]\"\n ];\n /**\n * We can find different statuses only in the manage API endpoint.\n */\n if (type === \"manage\") {\n result.push(\n \"status: String\",\n \"status_not: String\",\n \"status_in: [String!]\",\n \"status_not_in: [String!]\"\n );\n }\n\n const finalFields = result.filter(field => {\n return !excludeFields.some(excl => {\n return field.startsWith(`${excl}_`) || field.startsWith(`${excl}: `);\n });\n });\n\n for (const field of fields) {\n // Every time a client updates content model's fields, we check the type of each field. If a field plugin\n // for a particular \"field.type\" doesn't exist on the backend yet, we throw an error. But still, we also\n // want to be careful when accessing the field plugin here too. It is still possible to have a content model\n // that contains a field, for which we don't have a plugin registered on the backend. For example, user\n // could've just removed the plugin from the backend.\n const baseType = getBaseFieldType(field);\n const createListFilters: CreateListFiltersType | undefined =\n fieldTypePlugins[baseType]?.[type]?.createListFilters;\n if (typeof createListFilters !== \"function\") {\n continue;\n }\n finalFields.push(createListFilters({ model, field, plugins: fieldTypePlugins }));\n }\n\n return finalFields.filter(Boolean).join(\"\\n\");\n};\n"],"mappings":";;;;;;AAOA;AAiBO,MAAMA,sBAA8C,GAAIC,MAAM,IAAa;EAC9E,MAAM;IAAEC,KAAK;IAAEC,MAAM;IAAEC,IAAI;IAAEC,gBAAgB;IAAEC,aAAa,GAAG;EAAG,CAAC,GAAGL,MAAM;EAC5E,MAAMM,MAAgB,GAAG,CACrB,QAAQ,EACR,YAAY,EACZ,cAAc,EACd,kBAAkB,EAClB,iBAAiB,EACjB,qBAAqB,EACrB,uBAAuB,EACvB,2BAA2B,EAC3B,qBAAqB,EACrB,wBAAwB,EACxB,yBAAyB,EACzB,wBAAwB,EACxB,yBAAyB,EACzB,gCAAgC,EAChC,oCAAoC,EACpC,mBAAmB,EACnB,sBAAsB,EACtB,uBAAuB,EACvB,sBAAsB,EACtB,uBAAuB,EACvB,8BAA8B,EAC9B,kCAAkC,EAClC,mBAAmB,EACnB,uBAAuB,EACvB,yBAAyB,EACzB,6BAA6B,EAC7B,iBAAiB,EACjB,qBAAqB,EACrB,uBAAuB,EACvB,2BAA2B,CAC9B;EACD;AACJ;AACA;EACI,IAAIH,IAAI,KAAK,QAAQ,EAAE;IACnBG,MAAM,CAACC,IAAI,CACP,gBAAgB,EAChB,oBAAoB,EACpB,sBAAsB,EACtB,0BAA0B,CAC7B;EACL;EAEA,MAAMC,WAAW,GAAGF,MAAM,CAACG,MAAM,CAACC,KAAK,IAAI;IACvC,OAAO,CAACL,aAAa,CAACM,IAAI,CAACC,IAAI,IAAI;MAC/B,OAAOF,KAAK,CAACG,UAAU,CAAE,GAAED,IAAK,GAAE,CAAC,IAAIF,KAAK,CAACG,UAAU,CAAE,GAAED,IAAK,IAAG,CAAC;IACxE,CAAC,CAAC;EACN,CAAC,CAAC;EAEF,KAAK,MAAMF,KAAK,IAAIR,MAAM,EAAE;IAAA;IACxB;IACA;IACA;IACA;IACA;IACA,MAAMY,QAAQ,GAAG,IAAAC,kCAAgB,EAACL,KAAK,CAAC;IACxC,MAAMM,iBAAoD,4BACtDZ,gBAAgB,CAACU,QAAQ,CAAC,oFAA1B,sBAA6BX,IAAI,CAAC,2DAAlC,uBAAoCa,iBAAiB;IACzD,IAAI,OAAOA,iBAAiB,KAAK,UAAU,EAAE;MACzC;IACJ;IACAR,WAAW,CAACD,IAAI,CAACS,iBAAiB,CAAC;MAAEf,KAAK;MAAES,KAAK;MAAEO,OAAO,EAAEb;IAAiB,CAAC,CAAC,CAAC;EACpF;EAEA,OAAOI,WAAW,CAACC,MAAM,CAACS,OAAO,CAAC,CAACC,IAAI,CAAC,IAAI,CAAC;AACjD,CAAC;AAAC"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import { CmsFieldTypePlugins, CmsModel } from "../types";
|
|
1
|
+
import { CmsFieldTypePlugins, CmsModel, CmsModelField } from "../types";
|
|
2
2
|
import { CmsGraphQLSchemaSorterPlugin } from "../plugins/CmsGraphQLSchemaSorterPlugin";
|
|
3
3
|
interface RenderSortEnumParams {
|
|
4
4
|
model: CmsModel;
|
|
5
|
+
fields: CmsModelField[];
|
|
5
6
|
fieldTypePlugins: CmsFieldTypePlugins;
|
|
6
|
-
sorterPlugins
|
|
7
|
+
sorterPlugins?: CmsGraphQLSchemaSorterPlugin[];
|
|
7
8
|
}
|
|
8
9
|
interface RenderSortEnum {
|
|
9
10
|
(params: RenderSortEnumParams): string;
|
package/utils/renderSortEnum.js
CHANGED
|
@@ -7,11 +7,12 @@ exports.renderSortEnum = void 0;
|
|
|
7
7
|
var _getBaseFieldType = require("./getBaseFieldType");
|
|
8
8
|
const renderSortEnum = ({
|
|
9
9
|
model,
|
|
10
|
+
fields,
|
|
10
11
|
fieldTypePlugins,
|
|
11
12
|
sorterPlugins
|
|
12
13
|
}) => {
|
|
13
14
|
let sorters = [`id_ASC`, `id_DESC`, "savedOn_ASC", "savedOn_DESC", "createdOn_ASC", "createdOn_DESC"];
|
|
14
|
-
for (const field of
|
|
15
|
+
for (const field of fields) {
|
|
15
16
|
const plugin = fieldTypePlugins[(0, _getBaseFieldType.getBaseFieldType)(field)];
|
|
16
17
|
if (!plugin) {
|
|
17
18
|
continue;
|
|
@@ -32,6 +33,9 @@ const renderSortEnum = ({
|
|
|
32
33
|
sorters.push(`${field.fieldId}_ASC`);
|
|
33
34
|
sorters.push(`${field.fieldId}_DESC`);
|
|
34
35
|
}
|
|
36
|
+
if (!sorterPlugins) {
|
|
37
|
+
return sorters.join("\n");
|
|
38
|
+
}
|
|
35
39
|
return sorterPlugins.reduce((result, plugin) => {
|
|
36
40
|
return plugin.createSorter({
|
|
37
41
|
model,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["renderSortEnum","model","fieldTypePlugins","sorterPlugins","sorters","field","
|
|
1
|
+
{"version":3,"names":["renderSortEnum","model","fields","fieldTypePlugins","sorterPlugins","sorters","field","plugin","getBaseFieldType","createSorters","result","isSortable","push","fieldId","join","reduce","createSorter"],"sources":["renderSortEnum.ts"],"sourcesContent":["import { CmsFieldTypePlugins, CmsModel, CmsModelField } from \"~/types\";\nimport { getBaseFieldType } from \"~/utils/getBaseFieldType\";\nimport { CmsGraphQLSchemaSorterPlugin } from \"~/plugins/CmsGraphQLSchemaSorterPlugin\";\n\ninterface RenderSortEnumParams {\n model: CmsModel;\n fields: CmsModelField[];\n fieldTypePlugins: CmsFieldTypePlugins;\n sorterPlugins?: CmsGraphQLSchemaSorterPlugin[];\n}\ninterface RenderSortEnum {\n (params: RenderSortEnumParams): string;\n}\n\nexport const renderSortEnum: RenderSortEnum = ({\n model,\n fields,\n fieldTypePlugins,\n sorterPlugins\n}): string => {\n let sorters: string[] = [\n `id_ASC`,\n `id_DESC`,\n \"savedOn_ASC\",\n \"savedOn_DESC\",\n \"createdOn_ASC\",\n \"createdOn_DESC\"\n ];\n\n for (const field of fields) {\n const plugin = fieldTypePlugins[getBaseFieldType(field)];\n if (!plugin) {\n continue;\n } else if (plugin.createSorters) {\n const result = plugin.createSorters({\n model,\n field,\n sorters\n });\n if (result) {\n sorters = result;\n continue;\n }\n }\n if (!plugin.isSortable) {\n continue;\n }\n sorters.push(`${field.fieldId}_ASC`);\n sorters.push(`${field.fieldId}_DESC`);\n }\n if (!sorterPlugins) {\n return sorters.join(\"\\n\");\n }\n\n return sorterPlugins\n .reduce((result, plugin) => {\n return plugin.createSorter({\n model,\n sorters: result\n });\n }, sorters)\n .join(\"\\n\");\n};\n"],"mappings":";;;;;;AACA;AAaO,MAAMA,cAA8B,GAAG,CAAC;EAC3CC,KAAK;EACLC,MAAM;EACNC,gBAAgB;EAChBC;AACJ,CAAC,KAAa;EACV,IAAIC,OAAiB,GAAG,CACnB,QAAO,EACP,SAAQ,EACT,aAAa,EACb,cAAc,EACd,eAAe,EACf,gBAAgB,CACnB;EAED,KAAK,MAAMC,KAAK,IAAIJ,MAAM,EAAE;IACxB,MAAMK,MAAM,GAAGJ,gBAAgB,CAAC,IAAAK,kCAAgB,EAACF,KAAK,CAAC,CAAC;IACxD,IAAI,CAACC,MAAM,EAAE;MACT;IACJ,CAAC,MAAM,IAAIA,MAAM,CAACE,aAAa,EAAE;MAC7B,MAAMC,MAAM,GAAGH,MAAM,CAACE,aAAa,CAAC;QAChCR,KAAK;QACLK,KAAK;QACLD;MACJ,CAAC,CAAC;MACF,IAAIK,MAAM,EAAE;QACRL,OAAO,GAAGK,MAAM;QAChB;MACJ;IACJ;IACA,IAAI,CAACH,MAAM,CAACI,UAAU,EAAE;MACpB;IACJ;IACAN,OAAO,CAACO,IAAI,CAAE,GAAEN,KAAK,CAACO,OAAQ,MAAK,CAAC;IACpCR,OAAO,CAACO,IAAI,CAAE,GAAEN,KAAK,CAACO,OAAQ,OAAM,CAAC;EACzC;EACA,IAAI,CAACT,aAAa,EAAE;IAChB,OAAOC,OAAO,CAACS,IAAI,CAAC,IAAI,CAAC;EAC7B;EAEA,OAAOV,aAAa,CACfW,MAAM,CAAC,CAACL,MAAM,EAAEH,MAAM,KAAK;IACxB,OAAOA,MAAM,CAACS,YAAY,CAAC;MACvBf,KAAK;MACLI,OAAO,EAAEK;IACb,CAAC,CAAC;EACN,CAAC,EAAEL,OAAO,CAAC,CACVS,IAAI,CAAC,IAAI,CAAC;AACnB,CAAC;AAAC"}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.createFieldModels = void 0;
|
|
7
|
-
|
|
8
|
-
var _models = require("./models");
|
|
9
|
-
|
|
10
|
-
const createFieldModels = async input => {
|
|
11
|
-
if (!input || input.length === 0) {
|
|
12
|
-
return [];
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
const fields = [];
|
|
16
|
-
|
|
17
|
-
for (const field of input) {
|
|
18
|
-
const fieldData = new _models.ContentModelFieldModel().populate(field);
|
|
19
|
-
await fieldData.validate();
|
|
20
|
-
fields.push(await fieldData.toJSON());
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
return fields;
|
|
24
|
-
};
|
|
25
|
-
|
|
26
|
-
exports.createFieldModels = createFieldModels;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["createFieldModels","input","length","fields","field","fieldData","ContentModelFieldModel","populate","validate","push","toJSON"],"sources":["createFieldModels.ts"],"sourcesContent":["import { CmsModelField, CmsModelFieldInput } from \"~/types\";\nimport { ContentModelFieldModel } from \"./models\";\n\nexport const createFieldModels = async (input?: CmsModelFieldInput[]): Promise<CmsModelField[]> => {\n if (!input || input.length === 0) {\n return [];\n }\n const fields: CmsModelField[] = [];\n for (const field of input) {\n const fieldData = new ContentModelFieldModel().populate(field);\n await fieldData.validate();\n fields.push(await fieldData.toJSON());\n }\n return fields;\n};\n"],"mappings":";;;;;;;AACA;;AAEO,MAAMA,iBAAiB,GAAG,MAAOC,KAAP,IAAkE;EAC/F,IAAI,CAACA,KAAD,IAAUA,KAAK,CAACC,MAAN,KAAiB,CAA/B,EAAkC;IAC9B,OAAO,EAAP;EACH;;EACD,MAAMC,MAAuB,GAAG,EAAhC;;EACA,KAAK,MAAMC,KAAX,IAAoBH,KAApB,EAA2B;IACvB,MAAMI,SAAS,GAAG,IAAIC,8BAAJ,GAA6BC,QAA7B,CAAsCH,KAAtC,CAAlB;IACA,MAAMC,SAAS,CAACG,QAAV,EAAN;IACAL,MAAM,CAACM,IAAP,CAAY,MAAMJ,SAAS,CAACK,MAAV,EAAlB;EACH;;EACD,OAAOP,MAAP;AACH,CAXM"}
|