@webiny/api-headless-cms 6.4.12-beta.5 → 6.5.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/crud/contentEntry/entryDataValidation.d.ts +1 -1
- package/crud/contentEntry/entryDataValidation.js +33 -18
- package/crud/contentEntry/entryDataValidation.js.map +1 -1
- package/crud/contentEntry.crud.js +12 -39
- package/crud/contentEntry.crud.js.map +1 -1
- package/crud/contentModel/defaultFields.js +3 -2
- package/crud/contentModel/defaultFields.js.map +1 -1
- package/crud/contentModel/validate/endingAllowed.js +1 -1
- package/crud/contentModel/validate/endingAllowed.js.map +1 -1
- package/crud/contentModel/validate/pluralApiName.js +1 -1
- package/crud/contentModel/validate/pluralApiName.js.map +1 -1
- package/crud/contentModel/validate/singularApiName.js +1 -1
- package/crud/contentModel/validate/singularApiName.js.map +1 -1
- package/crud/contentModel/validation.js +2 -2
- package/crud/contentModel/validation.js.map +1 -1
- package/domain/contentModel/schemas.d.ts +4 -0
- package/domain/contentModel/schemas.js +5 -2
- package/domain/contentModel/schemas.js.map +1 -1
- package/domain/contentModel/validation/endingAllowed.js +1 -1
- package/domain/contentModel/validation/endingAllowed.js.map +1 -1
- package/domain/contentModel/validation/pluralApiName.js +1 -1
- package/domain/contentModel/validation/pluralApiName.js.map +1 -1
- package/domain/contentModel/validation/singularApiName.js +1 -1
- package/domain/contentModel/validation/singularApiName.js.map +1 -1
- package/export/crud/exporting.js +2 -2
- package/export/crud/exporting.js.map +1 -1
- package/export/crud/imports/importGroups.js +2 -1
- package/export/crud/imports/importGroups.js.map +1 -1
- package/export/crud/imports/validateModels.js +1 -1
- package/export/crud/imports/validateModels.js.map +1 -1
- package/exports/api/cms/model.d.ts +4 -1
- package/exports/api/cms/model.js +2 -0
- package/extension.d.ts +3 -0
- package/extension.js +19 -0
- package/extension.js.map +1 -0
- package/features/contentEntry/ContentEntriesFeature.js +2 -0
- package/features/contentEntry/ContentEntriesFeature.js.map +1 -1
- package/features/contentEntry/CreateEntry/CreateEntryUseCase.js +1 -2
- package/features/contentEntry/CreateEntry/CreateEntryUseCase.js.map +1 -1
- package/features/contentEntry/CreateEntryRevisionFrom/CreateEntryRevisionFromUseCase.d.ts +1 -3
- package/features/contentEntry/CreateEntryRevisionFrom/CreateEntryRevisionFromUseCase.js +4 -12
- package/features/contentEntry/CreateEntryRevisionFrom/CreateEntryRevisionFromUseCase.js.map +1 -1
- package/features/contentEntry/CreateEntryRevisionFrom/abstractions.d.ts +2 -0
- package/features/contentEntry/CreateEntryRevisionFrom/abstractions.js.map +1 -1
- package/features/contentEntry/DeleteEntryRevision/DeleteEntryRevisionRepository.js +1 -0
- package/features/contentEntry/DeleteEntryRevision/DeleteEntryRevisionRepository.js.map +1 -1
- package/features/contentEntry/GetSingletonEntry/GetSingletonEntryUseCase.js +1 -3
- package/features/contentEntry/GetSingletonEntry/GetSingletonEntryUseCase.js.map +1 -1
- package/features/contentEntry/PublishEntry/PublishEntryUseCase.d.ts +1 -3
- package/features/contentEntry/PublishEntry/PublishEntryUseCase.js +4 -10
- package/features/contentEntry/PublishEntry/PublishEntryUseCase.js.map +1 -1
- package/features/contentEntry/RepublishEntry/RepublishEntryUseCase.js +3 -1
- package/features/contentEntry/RepublishEntry/RepublishEntryUseCase.js.map +1 -1
- package/features/contentEntry/UnpublishEntry/UnpublishEntryUseCase.js +3 -1
- package/features/contentEntry/UnpublishEntry/UnpublishEntryUseCase.js.map +1 -1
- package/features/contentEntry/UpdateEntry/UpdateEntryUseCase.js +3 -1
- package/features/contentEntry/UpdateEntry/UpdateEntryUseCase.js.map +1 -1
- package/features/contentEntry/UpdateRevision/UpdateRevisionRepository.d.ts +14 -0
- package/features/contentEntry/UpdateRevision/UpdateRevisionRepository.js +34 -0
- package/features/contentEntry/UpdateRevision/UpdateRevisionRepository.js.map +1 -0
- package/features/contentEntry/UpdateRevision/abstractions.d.ts +10 -0
- package/features/contentEntry/UpdateRevision/abstractions.js +5 -0
- package/features/contentEntry/UpdateRevision/abstractions.js.map +1 -0
- package/features/contentEntry/UpdateRevision/feature.d.ts +4 -0
- package/features/contentEntry/UpdateRevision/feature.js +11 -0
- package/features/contentEntry/UpdateRevision/feature.js.map +1 -0
- package/features/contentEntry/UpdateRevision/index.d.ts +1 -0
- package/features/contentEntry/UpdateRevision/index.js +1 -0
- package/features/contentEntry/UpdateRevisionDescription/UpdateRevisionDescriptionUseCase.d.ts +2 -2
- package/features/contentEntry/UpdateRevisionDescription/UpdateRevisionDescriptionUseCase.js +2 -2
- package/features/contentEntry/UpdateRevisionDescription/UpdateRevisionDescriptionUseCase.js.map +1 -1
- package/features/contentEntry/ensureItemIds.d.ts +13 -0
- package/features/contentEntry/ensureItemIds.js +22 -0
- package/features/contentEntry/ensureItemIds.js.map +1 -0
- package/features/contentEntry/entryDataFactories/CreateEntryDataFactory/CreateEntryDataFactory.d.ts +3 -1
- package/features/contentEntry/entryDataFactories/CreateEntryDataFactory/CreateEntryDataFactory.js +9 -3
- package/features/contentEntry/entryDataFactories/CreateEntryDataFactory/CreateEntryDataFactory.js.map +1 -1
- package/features/contentEntry/entryDataFactories/CreateEntryRevisionFromDataFactory/CreateEntryRevisionFromDataFactory.d.ts +7 -5
- package/features/contentEntry/entryDataFactories/CreateEntryRevisionFromDataFactory/CreateEntryRevisionFromDataFactory.js +48 -18
- package/features/contentEntry/entryDataFactories/CreateEntryRevisionFromDataFactory/CreateEntryRevisionFromDataFactory.js.map +1 -1
- package/features/contentEntry/entryDataFactories/CreateEntryRevisionFromDataFactory/abstractions.d.ts +17 -1
- package/features/contentEntry/entryDataFactories/CreateEntryRevisionFromDataFactory/abstractions.js.map +1 -1
- package/features/contentEntry/entryDataFactories/CreatePublishEntryDataFactory/CreatePublishEntryDataFactory.d.ts +5 -3
- package/features/contentEntry/entryDataFactories/CreatePublishEntryDataFactory/CreatePublishEntryDataFactory.js +22 -16
- package/features/contentEntry/entryDataFactories/CreatePublishEntryDataFactory/CreatePublishEntryDataFactory.js.map +1 -1
- package/features/contentEntry/entryDataFactories/CreatePublishEntryDataFactory/abstractions.d.ts +15 -1
- package/features/contentEntry/entryDataFactories/CreatePublishEntryDataFactory/abstractions.js.map +1 -1
- package/features/contentEntry/entryDataFactories/CreateRepublishEntryDataFactory/CreateRepublishEntryDataFactory.d.ts +5 -3
- package/features/contentEntry/entryDataFactories/CreateRepublishEntryDataFactory/CreateRepublishEntryDataFactory.js +17 -13
- package/features/contentEntry/entryDataFactories/CreateRepublishEntryDataFactory/CreateRepublishEntryDataFactory.js.map +1 -1
- package/features/contentEntry/entryDataFactories/CreateRepublishEntryDataFactory/abstractions.d.ts +13 -1
- package/features/contentEntry/entryDataFactories/CreateRepublishEntryDataFactory/abstractions.js.map +1 -1
- package/features/contentEntry/entryDataFactories/CreateUnpublishEntryDataFactory/CreateUnpublishEntryDataFactory.d.ts +6 -6
- package/features/contentEntry/entryDataFactories/CreateUnpublishEntryDataFactory/CreateUnpublishEntryDataFactory.js +17 -18
- package/features/contentEntry/entryDataFactories/CreateUnpublishEntryDataFactory/CreateUnpublishEntryDataFactory.js.map +1 -1
- package/features/contentEntry/entryDataFactories/CreateUnpublishEntryDataFactory/abstractions.d.ts +14 -2
- package/features/contentEntry/entryDataFactories/CreateUnpublishEntryDataFactory/abstractions.js.map +1 -1
- package/features/contentEntry/entryDataFactories/UpdateEntryDataFactory/UpdateEntryDataFactory.d.ts +7 -3
- package/features/contentEntry/entryDataFactories/UpdateEntryDataFactory/UpdateEntryDataFactory.js +73 -30
- package/features/contentEntry/entryDataFactories/UpdateEntryDataFactory/UpdateEntryDataFactory.js.map +1 -1
- package/features/contentEntry/entryDataFactories/UpdateEntryDataFactory/abstractions.d.ts +15 -1
- package/features/contentEntry/entryDataFactories/UpdateEntryDataFactory/abstractions.js.map +1 -1
- package/features/contentEntry/entryDataFactories/expiresAt.js +2 -2
- package/features/contentEntry/entryDataFactories/expiresAt.js.map +1 -1
- package/features/contentEntry/entryDataFactories/hasEntryContentChanged.d.ts +24 -0
- package/features/contentEntry/entryDataFactories/hasEntryContentChanged.js +13 -0
- package/features/contentEntry/entryDataFactories/hasEntryContentChanged.js.map +1 -0
- package/features/contentModel/ComponentMapGenerator/ComponentMapGenerator.d.ts +14 -0
- package/features/contentModel/ComponentMapGenerator/ComponentMapGenerator.js +32 -0
- package/features/contentModel/ComponentMapGenerator/ComponentMapGenerator.js.map +1 -0
- package/features/contentModel/ComponentMapGenerator/abstractions.d.ts +8 -0
- package/features/contentModel/ComponentMapGenerator/abstractions.js +5 -0
- package/features/contentModel/ComponentMapGenerator/abstractions.js.map +1 -0
- package/features/contentModel/ComponentMapGenerator/feature.d.ts +4 -0
- package/features/contentModel/ComponentMapGenerator/feature.js +11 -0
- package/features/contentModel/ComponentMapGenerator/feature.js.map +1 -0
- package/features/contentModel/ComponentMapGenerator/index.d.ts +2 -0
- package/features/contentModel/ComponentMapGenerator/index.js +2 -0
- package/features/contentModel/ContentModelFeature.js +6 -0
- package/features/contentModel/ContentModelFeature.js.map +1 -1
- package/features/contentModel/CreateModel/CreateModelRepository.js +2 -1
- package/features/contentModel/CreateModel/CreateModelRepository.js.map +1 -1
- package/features/contentModel/CreateModelFrom/CreateModelFromRepository.js +2 -1
- package/features/contentModel/CreateModelFrom/CreateModelFromRepository.js.map +1 -1
- package/features/contentModel/RefModelsGenerator/RefModelsGenerator.d.ts +19 -0
- package/features/contentModel/RefModelsGenerator/RefModelsGenerator.js +56 -0
- package/features/contentModel/RefModelsGenerator/RefModelsGenerator.js.map +1 -0
- package/features/contentModel/RefModelsGenerator/abstractions.d.ts +11 -0
- package/features/contentModel/RefModelsGenerator/abstractions.js +5 -0
- package/features/contentModel/RefModelsGenerator/abstractions.js.map +1 -0
- package/features/contentModel/RefModelsGenerator/feature.d.ts +4 -0
- package/features/contentModel/RefModelsGenerator/feature.js +11 -0
- package/features/contentModel/RefModelsGenerator/feature.js.map +1 -0
- package/features/contentModel/RefModelsGenerator/index.d.ts +2 -0
- package/features/contentModel/RefModelsGenerator/index.js +2 -0
- package/features/contentModel/ValuesSelectionGenerator/ValuesSelectionGenerator.d.ts +16 -0
- package/features/contentModel/ValuesSelectionGenerator/ValuesSelectionGenerator.js +54 -0
- package/features/contentModel/ValuesSelectionGenerator/ValuesSelectionGenerator.js.map +1 -0
- package/features/contentModel/ValuesSelectionGenerator/abstractions.d.ts +8 -0
- package/features/contentModel/ValuesSelectionGenerator/abstractions.js +5 -0
- package/features/contentModel/ValuesSelectionGenerator/abstractions.js.map +1 -0
- package/features/contentModel/ValuesSelectionGenerator/feature.d.ts +4 -0
- package/features/contentModel/ValuesSelectionGenerator/feature.js +11 -0
- package/features/contentModel/ValuesSelectionGenerator/feature.js.map +1 -0
- package/features/contentModel/ValuesSelectionGenerator/index.d.ts +1 -0
- package/features/contentModel/ValuesSelectionGenerator/index.js +1 -0
- package/features/graphql/feature.js +2 -0
- package/features/graphql/feature.js.map +1 -1
- package/features/graphql/fields/base/AssetToGraphQL.d.ts +26 -0
- package/features/graphql/fields/base/AssetToGraphQL.js +153 -0
- package/features/graphql/fields/base/AssetToGraphQL.js.map +1 -0
- package/features/graphql/fields/base/DynamicZoneToGraphQL.js +12 -2
- package/features/graphql/fields/base/DynamicZoneToGraphQL.js.map +1 -1
- package/features/graphql/fields/base/ObjectToGraphQL.js +8 -5
- package/features/graphql/fields/base/ObjectToGraphQL.js.map +1 -1
- package/features/modelBuilder/abstractions.d.ts +9 -0
- package/features/modelBuilder/abstractions.js.map +1 -1
- package/features/modelBuilder/feature.js +2 -0
- package/features/modelBuilder/feature.js.map +1 -1
- package/features/modelBuilder/fields/AssetFieldType.d.ts +20 -0
- package/features/modelBuilder/fields/AssetFieldType.js +46 -0
- package/features/modelBuilder/fields/AssetFieldType.js.map +1 -0
- package/features/modelBuilder/fields/DataFieldBuilder.d.ts +62 -18
- package/features/modelBuilder/fields/DataFieldBuilder.js +8 -0
- package/features/modelBuilder/fields/DataFieldBuilder.js.map +1 -1
- package/features/modelBuilder/fields/DynamicZoneFieldType.d.ts +1 -0
- package/features/modelBuilder/fields/DynamicZoneFieldType.js +2 -6
- package/features/modelBuilder/fields/DynamicZoneFieldType.js.map +1 -1
- package/features/modelBuilder/fields/resolveAssetUrl.d.ts +35 -0
- package/features/modelBuilder/fields/resolveAssetUrl.js +26 -0
- package/features/modelBuilder/fields/resolveAssetUrl.js.map +1 -0
- package/features/modelBuilder/index.d.ts +1 -1
- package/features/modelBuilder/models/BaseModelBuilder.d.ts +3 -1
- package/features/modelBuilder/models/BaseModelBuilder.js +7 -0
- package/features/modelBuilder/models/BaseModelBuilder.js.map +1 -1
- package/features/modelBuilder/models/PrivateModelBuilder.js +2 -1
- package/features/modelBuilder/models/PrivateModelBuilder.js.map +1 -1
- package/features/modelBuilder/models/PublicModelBuilder.js +2 -1
- package/features/modelBuilder/models/PublicModelBuilder.js.map +1 -1
- package/features/sortMapper/SortMapper.js +2 -5
- package/features/sortMapper/SortMapper.js.map +1 -1
- package/features/storage/fields/CompressedTextStorageTransform.js +1 -1
- package/features/storage/fields/CompressedTextStorageTransform.js.map +1 -1
- package/features/storage/fields/DateStorageTransform.js +4 -3
- package/features/storage/fields/DateStorageTransform.js.map +1 -1
- package/features/storage/fields/DynamicZoneStorageTransform.js +2 -2
- package/features/storage/fields/DynamicZoneStorageTransform.js.map +1 -1
- package/features/storage/fields/JsonStorageTransform.js +1 -1
- package/features/storage/fields/JsonStorageTransform.js.map +1 -1
- package/features/storage/fields/LongTextStorageTransform.js +1 -1
- package/features/storage/fields/LongTextStorageTransform.js.map +1 -1
- package/features/storage/fields/ObjectStorageTransform.js +27 -7
- package/features/storage/fields/ObjectStorageTransform.js.map +1 -1
- package/features/storage/fields/RichTextStorageTransform.js +1 -1
- package/features/storage/fields/RichTextStorageTransform.js.map +1 -1
- package/features/validation/validators/DateGteValidator.js +1 -1
- package/features/validation/validators/DateGteValidator.js.map +1 -1
- package/features/validation/validators/DateLteValidator.js +1 -1
- package/features/validation/validators/DateLteValidator.js.map +1 -1
- package/features/validation/validators/PatternValidator.js +1 -1
- package/features/validation/validators/PatternValidator.js.map +1 -1
- package/features/whereMapper/WhereMapper.js +10 -7
- package/features/whereMapper/WhereMapper.js.map +1 -1
- package/fieldConverters/CmsModelDynamicZoneFieldConverterPlugin.js +8 -2
- package/fieldConverters/CmsModelDynamicZoneFieldConverterPlugin.js.map +1 -1
- package/fieldConverters/CmsModelObjectFieldConverterPlugin.js +8 -2
- package/fieldConverters/CmsModelObjectFieldConverterPlugin.js.map +1 -1
- package/fieldConverters/index.d.ts +1 -1
- package/graphql/getSchema/generateCacheKey.js +1 -1
- package/graphql/getSchema/generateCacheKey.js.map +1 -1
- package/graphql/scalars/RevisionId.js +1 -1
- package/graphql/scalars/RevisionId.js.map +1 -1
- package/graphql/schema/baseSchema.js +5 -25
- package/graphql/schema/baseSchema.js.map +1 -1
- package/graphql/schema/cms/getEntryResolver.js +3 -2
- package/graphql/schema/cms/getEntryResolver.js.map +1 -1
- package/graphql/schema/cms/getModelResolver.d.ts +35 -0
- package/graphql/schema/cms/getModelResolver.js +49 -0
- package/graphql/schema/cms/getModelResolver.js.map +1 -0
- package/graphql/schema/cms/helpers/buildFieldsSelection.js +9 -2
- package/graphql/schema/cms/helpers/buildFieldsSelection.js.map +1 -1
- package/graphql/schema/cms/helpers/expandFieldWildcards.d.ts +2 -0
- package/graphql/schema/cms/helpers/expandFieldWildcards.js +13 -0
- package/graphql/schema/cms/helpers/expandFieldWildcards.js.map +1 -0
- package/graphql/schema/cms/helpers/index.d.ts +1 -0
- package/graphql/schema/cms/helpers/index.js +1 -0
- package/graphql/schema/cms/helpers.d.ts +1 -0
- package/graphql/schema/cms/helpers.js +1 -0
- package/graphql/schema/cms/index.js +2 -1
- package/graphql/schema/cms/index.js.map +1 -1
- package/graphql/schema/cms/listEntriesResolver.js +3 -2
- package/graphql/schema/cms/listEntriesResolver.js.map +1 -1
- package/graphql/schema/cms/resolvers/getModel.d.ts +8 -0
- package/graphql/schema/cms/resolvers/getModel.js +18 -0
- package/graphql/schema/cms/resolvers/getModel.js.map +1 -0
- package/graphql/schema/cms/resolvers/index.d.ts +1 -0
- package/graphql/schema/cms/resolvers/index.js +1 -0
- package/graphql/schema/cms/typeDefs/query.js +1 -0
- package/graphql/schema/cms/typeDefs/query.js.map +1 -1
- package/graphql/schema/cms/typeDefs/responses.js +5 -0
- package/graphql/schema/cms/typeDefs/responses.js.map +1 -1
- package/graphql/schema/contentModels.js +40 -1
- package/graphql/schema/contentModels.js.map +1 -1
- package/graphql/schema/createFieldResolvers.js +1 -1
- package/graphql/schema/createFieldResolvers.js.map +1 -1
- package/index.d.ts +2 -5
- package/index.js +1 -21
- package/package.json +27 -30
- package/plugins/CmsModelPlugin.js +12 -10
- package/plugins/CmsModelPlugin.js.map +1 -1
- package/types/fields/dynamicZoneField.d.ts +1 -0
- package/types/model.d.ts +6 -0
- package/types/modelField.d.ts +13 -0
- package/types/types.d.ts +8 -4
- package/types/types.js.map +1 -1
- package/utils/caching/Cache.js +1 -1
- package/utils/caching/Cache.js.map +1 -1
- package/utils/contentModelToJsonSchema/CmsModelToJsonSchemaConverter.d.ts +28 -0
- package/utils/contentModelToJsonSchema/CmsModelToJsonSchemaConverter.js +324 -0
- package/utils/contentModelToJsonSchema/CmsModelToJsonSchemaConverter.js.map +1 -0
- package/utils/contentModelToJsonSchema/index.d.ts +2 -0
- package/utils/contentModelToJsonSchema/index.js +1 -0
- package/utils/contentModelToJsonSchema/types.d.ts +24 -0
- package/utils/contentModelToJsonSchema/types.js +0 -0
- package/utils/createModelField.js +2 -1
- package/utils/createModelField.js.map +1 -1
- package/utils/date.js +1 -1
- package/utils/date.js.map +1 -1
- package/utils/entryStorage.js +1 -1
- package/utils/entryStorage.js.map +1 -1
- package/utils/index.d.ts +1 -0
- package/utils/index.js +1 -0
- package/utils/renderFields.js +1 -1
- package/utils/renderFields.js.map +1 -1
- package/index.js.map +0 -1
|
@@ -4,7 +4,7 @@ interface IValidateModelEntryDataParams<TValues extends CmsEntryValues = CmsEntr
|
|
|
4
4
|
model: CmsModel;
|
|
5
5
|
values: TValues;
|
|
6
6
|
entry?: CmsEntry<TValues>;
|
|
7
|
-
|
|
7
|
+
skipValidation?: boolean;
|
|
8
8
|
}
|
|
9
9
|
export declare const validateModelEntryData: <TValues extends CmsEntryValues = CmsEntryValues>(params: IValidateModelEntryDataParams<TValues>) => Promise<FieldError[]>;
|
|
10
10
|
export declare const validateModelEntryDataOrThrow: <TValues extends CmsEntryValues = CmsEntryValues>(params: IValidateModelEntryDataParams<TValues>) => Promise<void>;
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import camelCase from "lodash/camelCase.js";
|
|
2
1
|
import { EntryValidationError } from "../../domain/contentEntry/errors.js";
|
|
3
2
|
import { CmsModelFieldValidatorRegistry } from "../../features/validation/index.js";
|
|
4
3
|
const validateValue = async (params, fieldValidators, value)=>{
|
|
@@ -29,11 +28,34 @@ const validateValue = async (params, fieldValidators, value)=>{
|
|
|
29
28
|
const validatePredefinedValue = (field, value)=>{
|
|
30
29
|
const { enabled = false, values: predefinedValues = [] } = field.predefinedValues || {};
|
|
31
30
|
if (!enabled) return null;
|
|
32
|
-
|
|
33
|
-
|
|
31
|
+
if (false === Array.isArray(predefinedValues) || 0 === predefinedValues.length) return "Missing predefined values to validate against.";
|
|
32
|
+
if ("" === value || null == value) return null;
|
|
34
33
|
for (const predefinedValue of predefinedValues)if (predefinedValue.value == value) return null;
|
|
35
34
|
return "Value sent does not match any of the available predefined values.";
|
|
36
35
|
};
|
|
36
|
+
const DATE_RE = /^\d{4}-\d{2}-\d{2}$/;
|
|
37
|
+
const TIME_RE = /^\d{2}:\d{2}(:\d{2})?$/;
|
|
38
|
+
const DATETIME_RE = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}/;
|
|
39
|
+
const validateDatetimeFormat = (field, value)=>{
|
|
40
|
+
if ("datetime" !== field.type) return null;
|
|
41
|
+
if (null == value || "" === value) return null;
|
|
42
|
+
if ("string" != typeof value) return null;
|
|
43
|
+
const dateType = field.settings?.type;
|
|
44
|
+
switch(dateType){
|
|
45
|
+
case "date":
|
|
46
|
+
if (!DATE_RE.test(value)) return `Invalid date format for field "${field.fieldId}". Expected YYYY-MM-DD.`;
|
|
47
|
+
return null;
|
|
48
|
+
case "time":
|
|
49
|
+
if (!TIME_RE.test(value)) return `Invalid time format for field "${field.fieldId}". Expected HH:mm or HH:mm:ss.`;
|
|
50
|
+
return null;
|
|
51
|
+
case "dateTimeWithTimezone":
|
|
52
|
+
case "dateTimeWithoutTimezone":
|
|
53
|
+
if (!DATETIME_RE.test(value)) return `Invalid dateTime format for field "${field.fieldId}". Expected ISO 8601 dateTime.`;
|
|
54
|
+
return null;
|
|
55
|
+
default:
|
|
56
|
+
return null;
|
|
57
|
+
}
|
|
58
|
+
};
|
|
37
59
|
const getFieldValidation = (listValidation)=>{
|
|
38
60
|
if (!listValidation?.length) return [];
|
|
39
61
|
return listValidation.filter((item)=>"dynamicZone" !== item.name);
|
|
@@ -45,6 +67,8 @@ const runFieldMultipleValuesValidations = async (params)=>{
|
|
|
45
67
|
if (valuesError) return valuesError;
|
|
46
68
|
if (null == values) return null;
|
|
47
69
|
for (const value of values){
|
|
70
|
+
const datetimeError = validateDatetimeFormat(field, value);
|
|
71
|
+
if (datetimeError) return datetimeError;
|
|
48
72
|
const valueError = await validateValue(params, getFieldValidation(field.validation), value);
|
|
49
73
|
if (valueError) return valueError;
|
|
50
74
|
const predefinedValueError = validatePredefinedValue(field, value);
|
|
@@ -55,6 +79,8 @@ const runFieldMultipleValuesValidations = async (params)=>{
|
|
|
55
79
|
const runFieldValueValidations = async (params)=>{
|
|
56
80
|
const { values, field } = params;
|
|
57
81
|
const value = values[field.fieldId];
|
|
82
|
+
const datetimeError = validateDatetimeFormat(field, value);
|
|
83
|
+
if (datetimeError) return datetimeError;
|
|
58
84
|
const error = await validateValue(params, field.validation || [], value);
|
|
59
85
|
if (error) return error;
|
|
60
86
|
return validatePredefinedValue(field, value);
|
|
@@ -65,28 +91,16 @@ const execValidation = async (params)=>{
|
|
|
65
91
|
return await runFieldValueValidations(params);
|
|
66
92
|
};
|
|
67
93
|
const validateModelEntryData = async (params)=>{
|
|
68
|
-
const { context, model, entry, values,
|
|
69
|
-
|
|
70
|
-
if (!skipValidators) return false;
|
|
71
|
-
return skipValidators.includes(camelCase(validator.name));
|
|
72
|
-
};
|
|
73
|
-
const skippedValidators = new Set();
|
|
94
|
+
const { context, model, entry, values, skipValidation } = params;
|
|
95
|
+
if (skipValidation) return [];
|
|
74
96
|
const validatorList = {};
|
|
75
97
|
const registry = context.container.resolve(CmsModelFieldValidatorRegistry);
|
|
76
98
|
const validators = registry.getAll();
|
|
77
99
|
for (const validator of validators){
|
|
78
100
|
const name = validator.name;
|
|
79
101
|
if (!validatorList[name]) validatorList[name] = [];
|
|
80
|
-
const isSkipped = isValidatorSkipped(validator);
|
|
81
|
-
if (isSkipped) {
|
|
82
|
-
skippedValidators.add(name);
|
|
83
|
-
validatorList[name].push(async ()=>true);
|
|
84
|
-
continue;
|
|
85
|
-
}
|
|
86
102
|
validatorList[name].push((params)=>validator.validate(params));
|
|
87
103
|
}
|
|
88
|
-
const keys = Object.keys(validatorList);
|
|
89
|
-
if (keys.length === skippedValidators.size) return [];
|
|
90
104
|
return await entryDataValidation_validate({
|
|
91
105
|
validatorList,
|
|
92
106
|
context,
|
|
@@ -146,7 +160,8 @@ const executeFieldValidation = async (params)=>{
|
|
|
146
160
|
}
|
|
147
161
|
}
|
|
148
162
|
return validations;
|
|
149
|
-
}
|
|
163
|
+
}
|
|
164
|
+
if ("dynamicZone" === field.type) {
|
|
150
165
|
const validations = [];
|
|
151
166
|
const error = await execValidation({
|
|
152
167
|
...params,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"crud/contentEntry/entryDataValidation.js","sources":["../../../src/crud/contentEntry/entryDataValidation.ts"],"sourcesContent":["import type {\n CmsContext,\n CmsDynamicZoneTemplate,\n CmsEntry,\n CmsEntryValues,\n CmsModel,\n CmsModelField,\n CmsModelFieldValidation\n} from \"~/types/index.js\";\nimport camelCase from \"lodash/camelCase.js\";\nimport { EntryValidationError } from \"~/domain/contentEntry/errors.js\";\nimport {\n type CmsModelFieldValidator,\n CmsModelFieldValidatorRegistry\n} from \"~/features/validation/index.js\";\n\ntype PluginValidationCallable = (\n params: CmsModelFieldValidator.Params\n) => CmsModelFieldValidator.Response;\ntype PluginValidationList = Record<string, PluginValidationCallable[]>;\n\ninterface ExecuteValidationParams<TValues extends CmsEntryValues = CmsEntryValues> {\n validatorList: PluginValidationList;\n field: CmsModelField;\n model: CmsModel;\n values: TValues;\n context: CmsContext;\n entry?: CmsEntry<TValues>;\n}\n\ntype PossibleValue = boolean | number | string | null | undefined;\n\nconst validateValue = async <TValues extends CmsEntryValues = CmsEntryValues>(\n params: ExecuteValidationParams<TValues>,\n fieldValidators: CmsModelFieldValidation[],\n value: PossibleValue | PossibleValue[]\n): Promise<string | null> => {\n if (!fieldValidators) {\n return null;\n }\n const { validatorList, context, field, model, entry } = params;\n try {\n for (const fieldValidator of fieldValidators) {\n const name = fieldValidator.name;\n const validations = validatorList[name];\n if (!validations || validations.length === 0) {\n return `There are no \"${name}\" validators defined.`;\n }\n for (const validate of validations) {\n const result = await validate({\n value,\n context,\n validator: fieldValidator,\n field,\n model,\n entry\n });\n if (!result) {\n return fieldValidator.message;\n }\n }\n }\n } catch (ex) {\n return ex.message;\n }\n\n return null;\n};\n\nconst validatePredefinedValue = (field: CmsModelField, value: any | any[]): string | null => {\n const { enabled = false, values: predefinedValues = [] } = field.predefinedValues || {};\n if (!enabled) {\n return null;\n } else if (Array.isArray(predefinedValues) === false || predefinedValues.length === 0) {\n return \"Missing predefined values to validate against.\";\n } else if (value === \"\" || value === null || value === undefined) {\n return null;\n }\n for (const predefinedValue of predefinedValues) {\n /**\n * No strict compare because the value sent can be 12345 (number) and predefinedValue can be \"12345\" (string),\n * and we want it to match.\n */\n if (predefinedValue.value == value) {\n return null;\n }\n }\n return \"Value sent does not match any of the available predefined values.\";\n};\n\nconst getFieldValidation = (\n listValidation?: CmsModelFieldValidation[]\n): CmsModelFieldValidation[] => {\n if (!listValidation?.length) {\n return [];\n }\n return listValidation.filter(item => item.name !== \"dynamicZone\");\n};\n/**\n * When multiple values is selected we must run validations on the array containing the values\n * And then on each value in the array\n */\nconst runFieldMultipleValuesValidations = async <TValues extends CmsEntryValues = CmsEntryValues>(\n params: ExecuteValidationParams<TValues>\n): Promise<string | null> => {\n const { field, values: initialValues } = params;\n const values = initialValues[field.fieldId as keyof TValues] as\n | PossibleValue[]\n | null\n | undefined;\n const valuesError = await validateValue(\n params,\n getFieldValidation(field.listValidation),\n values\n );\n if (valuesError) {\n return valuesError;\n }\n if (values === null || values === undefined) {\n return null;\n }\n for (const value of values) {\n const valueError = await validateValue(params, getFieldValidation(field.validation), value);\n if (valueError) {\n return valueError;\n }\n const predefinedValueError = validatePredefinedValue(field, value);\n if (predefinedValueError) {\n return predefinedValueError;\n }\n }\n return null;\n};\n/**\n * Runs validation on given value.\n */\nconst runFieldValueValidations = async <TValues extends CmsEntryValues = CmsEntryValues>(\n params: ExecuteValidationParams<TValues>\n): Promise<string | null> => {\n const { values, field } = params;\n const value = values[field.fieldId as keyof TValues];\n const error = await validateValue(params, field.validation || [], value);\n if (error) {\n return error;\n }\n return validatePredefinedValue(field, value);\n};\n\nconst execValidation = async (params: ExecuteValidationParams): Promise<string | null> => {\n const { field } = params;\n if (field.list) {\n return await runFieldMultipleValuesValidations(params);\n }\n return await runFieldValueValidations(params);\n};\n\ninterface IValidateModelEntryDataParams<TValues extends CmsEntryValues = CmsEntryValues> {\n context: CmsContext;\n model: CmsModel;\n values: TValues;\n entry?: CmsEntry<TValues>;\n skipValidators?: string[];\n}\n\nexport const validateModelEntryData = async <TValues extends CmsEntryValues = CmsEntryValues>(\n params: IValidateModelEntryDataParams<TValues>\n) => {\n const { context, model, entry, values, skipValidators } = params;\n\n const isValidatorSkipped = (validator: CmsModelFieldValidator.Interface) => {\n if (!skipValidators) {\n return false;\n }\n return skipValidators.includes(camelCase(validator.name));\n };\n\n const skippedValidators = new Set<string>();\n\n const validatorList: PluginValidationList = {};\n const registry = context.container.resolve(CmsModelFieldValidatorRegistry);\n const validators = registry.getAll();\n for (const validator of validators) {\n const name = validator.name;\n if (!validatorList[name]) {\n validatorList[name] = [];\n }\n const isSkipped = isValidatorSkipped(validator);\n if (isSkipped) {\n skippedValidators.add(name);\n validatorList[name].push(async () => {\n return true;\n });\n continue;\n }\n validatorList[name].push(params => {\n return validator.validate(params);\n });\n }\n /**\n * No point in continuing if all validators are skipped.\n */\n const keys = Object.keys(validatorList);\n if (keys.length === skippedValidators.size) {\n return [];\n }\n\n return await validate<TValues>({\n validatorList,\n context,\n model,\n entry,\n parents: [],\n fields: model.fields,\n values: {\n ...entry?.values,\n ...values\n }\n });\n};\n\nexport const validateModelEntryDataOrThrow = async <\n TValues extends CmsEntryValues = CmsEntryValues\n>(\n params: IValidateModelEntryDataParams<TValues>\n) => {\n const invalidFields = await validateModelEntryData(params);\n if (invalidFields.length === 0) {\n return;\n }\n throw new EntryValidationError(\"Validation failed.\", invalidFields);\n};\n\n/**\n *\n */\ninterface FieldError {\n id: string;\n fieldId: string;\n storageId: string;\n error: any;\n parents: string[];\n}\n\ninterface ValidateFieldParams<TValues extends CmsEntryValues = CmsEntryValues> {\n validatorList: PluginValidationList;\n parents: string[];\n model: CmsModel;\n values: TValues;\n context: CmsContext;\n field: CmsModelField;\n entry?: CmsEntry<TValues>;\n}\n\nconst executeFieldValidation = async <TValues extends CmsEntryValues = CmsEntryValues>(\n params: ValidateFieldParams<TValues>\n): Promise<FieldError[]> => {\n // TODO put per-field validation into plugins.\n const { field } = params;\n /**\n * Object field.\n */\n if (field.type === \"object\") {\n const fields = field.settings?.fields;\n if (!Array.isArray(fields)) {\n return [];\n }\n const validations: FieldError[] = [];\n /**\n * We need to validate the object field as well.\n */\n const error = await execValidation({\n ...params,\n field\n });\n if (error) {\n validations.push({\n id: field.id,\n fieldId: field.fieldId,\n storageId: field.storageId,\n error,\n parents: params.parents\n });\n }\n const objectValue = params.values[field.fieldId as keyof TValues];\n if (!objectValue) {\n return validations;\n }\n const values = (Array.isArray(objectValue) ? objectValue : [objectValue]) as TValues[];\n for (const index in values) {\n const parents = field.list ? [field.fieldId, index] : [field.fieldId];\n const value = values[index] as TValues;\n for (const childField of fields) {\n const errors = await executeFieldValidation<typeof value>({\n ...params,\n parents: params.parents.concat(parents),\n field: childField,\n values: value\n });\n if (errors.length === 0) {\n continue;\n }\n validations.push(...errors);\n }\n }\n return validations;\n }\n /**\n * Dynamic Zone Field\n */\n //\n else if (field.type === \"dynamicZone\") {\n const validations: FieldError[] = [];\n\n const error = await execValidation({\n ...params,\n field\n });\n if (error) {\n validations.push({\n id: field.id,\n fieldId: field.fieldId,\n storageId: field.storageId,\n error,\n parents: params.parents\n });\n }\n\n const templates = (field.settings?.templates || []) as CmsDynamicZoneTemplate[];\n for (const template of templates) {\n const fields = template.fields;\n const fieldData = params.values[field.fieldId as keyof TValues];\n if (!fieldData) {\n continue;\n }\n const values: TValues[keyof TValues][] = Array.isArray(fieldData)\n ? fieldData\n : [fieldData];\n for (const index in values) {\n const templateValue = values[index]?.[template.gqlTypeName];\n if (!templateValue) {\n continue;\n }\n /**\n * Order of the parents must be\n * - fieldId\n * - index (if multiple values)\n * - gqlTypeName\n */\n const parents = [field.fieldId];\n if (field.list) {\n parents.push(index);\n }\n parents.push(template.gqlTypeName);\n for (const childField of fields) {\n const errors = await executeFieldValidation({\n ...params,\n parents: params.parents.concat(parents),\n field: childField,\n values: templateValue\n });\n if (errors.length === 0) {\n continue;\n }\n validations.push(...errors);\n }\n }\n }\n\n return validations;\n }\n const error = await execValidation({\n ...params\n });\n if (!error) {\n return [];\n }\n return [\n {\n id: field.id,\n fieldId: field.fieldId,\n storageId: field.storageId,\n error,\n parents: params.parents\n }\n ];\n};\n\ninterface ValidateFieldsParams<TValues extends CmsEntryValues = CmsEntryValues> {\n validatorList: PluginValidationList;\n parents: string[];\n model: CmsModel;\n values: TValues;\n fields: CmsModelField[];\n context: CmsContext;\n entry?: CmsEntry<TValues>;\n}\n\nconst validate = async <TValues extends CmsEntryValues = CmsEntryValues>(\n params: ValidateFieldsParams<TValues>\n): Promise<FieldError[]> => {\n const { fields } = params;\n const errors: FieldError[] = [];\n\n const results = await Promise.all(\n fields.map(async field => {\n return await executeFieldValidation<TValues>({\n ...params,\n field\n });\n })\n );\n\n for (const result of results) {\n if (result.length === 0) {\n continue;\n }\n errors.push(...result);\n }\n return errors;\n};\n"],"names":["validateValue","params","fieldValidators","value","validatorList","context","field","model","entry","fieldValidator","name","validations","validate","result","ex","validatePredefinedValue","enabled","predefinedValues","Array","predefinedValue","getFieldValidation","listValidation","item","runFieldMultipleValuesValidations","initialValues","values","valuesError","valueError","predefinedValueError","runFieldValueValidations","error","execValidation","validateModelEntryData","skipValidators","isValidatorSkipped","validator","camelCase","skippedValidators","Set","registry","CmsModelFieldValidatorRegistry","validators","isSkipped","keys","Object","validateModelEntryDataOrThrow","invalidFields","EntryValidationError","executeFieldValidation","fields","objectValue","index","parents","childField","errors","templates","template","fieldData","templateValue","results","Promise"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"crud/contentEntry/entryDataValidation.js","sources":["../../../src/crud/contentEntry/entryDataValidation.ts"],"sourcesContent":["import type {\n CmsContext,\n CmsDynamicZoneTemplate,\n CmsEntry,\n CmsEntryValues,\n CmsModel,\n CmsModelField,\n CmsModelFieldValidation\n} from \"~/types/index.js\";\nimport { EntryValidationError } from \"~/domain/contentEntry/errors.js\";\nimport {\n type CmsModelFieldValidator,\n CmsModelFieldValidatorRegistry\n} from \"~/features/validation/index.js\";\n\ntype PluginValidationCallable = (\n params: CmsModelFieldValidator.Params\n) => CmsModelFieldValidator.Response;\ntype PluginValidationList = Record<string, PluginValidationCallable[]>;\n\ninterface ExecuteValidationParams<TValues extends CmsEntryValues = CmsEntryValues> {\n validatorList: PluginValidationList;\n field: CmsModelField;\n model: CmsModel;\n values: TValues;\n context: CmsContext;\n entry?: CmsEntry<TValues>;\n}\n\ntype PossibleValue = boolean | number | string | null | undefined;\n\nconst validateValue = async <TValues extends CmsEntryValues = CmsEntryValues>(\n params: ExecuteValidationParams<TValues>,\n fieldValidators: CmsModelFieldValidation[],\n value: PossibleValue | PossibleValue[]\n): Promise<string | null> => {\n if (!fieldValidators) {\n return null;\n }\n const { validatorList, context, field, model, entry } = params;\n try {\n for (const fieldValidator of fieldValidators) {\n const name = fieldValidator.name;\n const validations = validatorList[name];\n if (!validations || validations.length === 0) {\n return `There are no \"${name}\" validators defined.`;\n }\n for (const validate of validations) {\n const result = await validate({\n value,\n context,\n validator: fieldValidator,\n field,\n model,\n entry\n });\n if (!result) {\n return fieldValidator.message;\n }\n }\n }\n } catch (ex) {\n return ex.message;\n }\n\n return null;\n};\n\nconst validatePredefinedValue = (field: CmsModelField, value: any | any[]): string | null => {\n const { enabled = false, values: predefinedValues = [] } = field.predefinedValues || {};\n if (!enabled) {\n return null;\n } else if (Array.isArray(predefinedValues) === false || predefinedValues.length === 0) {\n return \"Missing predefined values to validate against.\";\n } else if (value === \"\" || value === null || value === undefined) {\n return null;\n }\n for (const predefinedValue of predefinedValues) {\n /**\n * No strict compare because the value sent can be 12345 (number) and predefinedValue can be \"12345\" (string),\n * and we want it to match.\n */\n if (predefinedValue.value == value) {\n return null;\n }\n }\n return \"Value sent does not match any of the available predefined values.\";\n};\n\nconst DATE_RE = /^\\d{4}-\\d{2}-\\d{2}$/;\nconst TIME_RE = /^\\d{2}:\\d{2}(:\\d{2})?$/;\nconst DATETIME_RE = /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}/;\n\nconst validateDatetimeFormat = (field: CmsModelField, value: any): string | null => {\n if (field.type !== \"datetime\") {\n return null;\n }\n if (value === null || value === undefined || value === \"\") {\n return null;\n }\n if (typeof value !== \"string\") {\n return null;\n }\n\n const dateType = field.settings?.type;\n\n switch (dateType) {\n case \"date\":\n if (!DATE_RE.test(value)) {\n return `Invalid date format for field \"${field.fieldId}\". Expected YYYY-MM-DD.`;\n }\n return null;\n case \"time\":\n if (!TIME_RE.test(value)) {\n return `Invalid time format for field \"${field.fieldId}\". Expected HH:mm or HH:mm:ss.`;\n }\n return null;\n case \"dateTimeWithTimezone\":\n case \"dateTimeWithoutTimezone\":\n if (!DATETIME_RE.test(value)) {\n return `Invalid dateTime format for field \"${field.fieldId}\". Expected ISO 8601 dateTime.`;\n }\n return null;\n default:\n return null;\n }\n};\n\nconst getFieldValidation = (\n listValidation?: CmsModelFieldValidation[]\n): CmsModelFieldValidation[] => {\n if (!listValidation?.length) {\n return [];\n }\n // Filter out the legacy \"dynamicZone\" validator that was never implemented.\n // Existing models may still have it in their persisted listValidation data.\n return listValidation.filter(item => item.name !== \"dynamicZone\");\n};\n/**\n * When multiple values is selected we must run validations on the array containing the values\n * And then on each value in the array\n */\nconst runFieldMultipleValuesValidations = async <TValues extends CmsEntryValues = CmsEntryValues>(\n params: ExecuteValidationParams<TValues>\n): Promise<string | null> => {\n const { field, values: initialValues } = params;\n const values = initialValues[field.fieldId as keyof TValues] as\n | PossibleValue[]\n | null\n | undefined;\n const valuesError = await validateValue(\n params,\n getFieldValidation(field.listValidation),\n values\n );\n if (valuesError) {\n return valuesError;\n }\n if (values === null || values === undefined) {\n return null;\n }\n for (const value of values) {\n const datetimeError = validateDatetimeFormat(field, value);\n if (datetimeError) {\n return datetimeError;\n }\n const valueError = await validateValue(params, getFieldValidation(field.validation), value);\n if (valueError) {\n return valueError;\n }\n const predefinedValueError = validatePredefinedValue(field, value);\n if (predefinedValueError) {\n return predefinedValueError;\n }\n }\n return null;\n};\n/**\n * Runs validation on given value.\n */\nconst runFieldValueValidations = async <TValues extends CmsEntryValues = CmsEntryValues>(\n params: ExecuteValidationParams<TValues>\n): Promise<string | null> => {\n const { values, field } = params;\n const value = values[field.fieldId as keyof TValues];\n const datetimeError = validateDatetimeFormat(field, value);\n if (datetimeError) {\n return datetimeError;\n }\n const error = await validateValue(params, field.validation || [], value);\n if (error) {\n return error;\n }\n return validatePredefinedValue(field, value);\n};\n\nconst execValidation = async (params: ExecuteValidationParams): Promise<string | null> => {\n const { field } = params;\n if (field.list) {\n return await runFieldMultipleValuesValidations(params);\n }\n return await runFieldValueValidations(params);\n};\n\ninterface IValidateModelEntryDataParams<TValues extends CmsEntryValues = CmsEntryValues> {\n context: CmsContext;\n model: CmsModel;\n values: TValues;\n entry?: CmsEntry<TValues>;\n skipValidation?: boolean;\n}\n\nexport const validateModelEntryData = async <TValues extends CmsEntryValues = CmsEntryValues>(\n params: IValidateModelEntryDataParams<TValues>\n) => {\n const { context, model, entry, values, skipValidation } = params;\n\n if (skipValidation) {\n return [];\n }\n\n const validatorList: PluginValidationList = {};\n const registry = context.container.resolve(CmsModelFieldValidatorRegistry);\n const validators = registry.getAll();\n for (const validator of validators) {\n const name = validator.name;\n if (!validatorList[name]) {\n validatorList[name] = [];\n }\n validatorList[name].push(params => {\n return validator.validate(params);\n });\n }\n\n return await validate<TValues>({\n validatorList,\n context,\n model,\n entry,\n parents: [],\n fields: model.fields,\n values: {\n ...entry?.values,\n ...values\n }\n });\n};\n\nexport const validateModelEntryDataOrThrow = async <\n TValues extends CmsEntryValues = CmsEntryValues\n>(\n params: IValidateModelEntryDataParams<TValues>\n) => {\n const invalidFields = await validateModelEntryData(params);\n if (invalidFields.length === 0) {\n return;\n }\n throw new EntryValidationError(\"Validation failed.\", invalidFields);\n};\n\n/**\n *\n */\ninterface FieldError {\n id: string;\n fieldId: string;\n storageId: string;\n error: any;\n parents: string[];\n}\n\ninterface ValidateFieldParams<TValues extends CmsEntryValues = CmsEntryValues> {\n validatorList: PluginValidationList;\n parents: string[];\n model: CmsModel;\n values: TValues;\n context: CmsContext;\n field: CmsModelField;\n entry?: CmsEntry<TValues>;\n}\n\nconst executeFieldValidation = async <TValues extends CmsEntryValues = CmsEntryValues>(\n params: ValidateFieldParams<TValues>\n): Promise<FieldError[]> => {\n // TODO put per-field validation into plugins.\n const { field } = params;\n /**\n * Object field.\n */\n if (field.type === \"object\") {\n const fields = field.settings?.fields;\n if (!Array.isArray(fields)) {\n return [];\n }\n const validations: FieldError[] = [];\n /**\n * We need to validate the object field as well.\n */\n const error = await execValidation({\n ...params,\n field\n });\n if (error) {\n validations.push({\n id: field.id,\n fieldId: field.fieldId,\n storageId: field.storageId,\n error,\n parents: params.parents\n });\n }\n const objectValue = params.values[field.fieldId as keyof TValues];\n if (!objectValue) {\n return validations;\n }\n const values = (Array.isArray(objectValue) ? objectValue : [objectValue]) as TValues[];\n for (const index in values) {\n const parents = field.list ? [field.fieldId, index] : [field.fieldId];\n const value = values[index] as TValues;\n for (const childField of fields) {\n const errors = await executeFieldValidation<typeof value>({\n ...params,\n parents: params.parents.concat(parents),\n field: childField,\n values: value\n });\n if (errors.length === 0) {\n continue;\n }\n validations.push(...errors);\n }\n }\n return validations;\n }\n /**\n * Dynamic Zone Field\n */\n //\n else if (field.type === \"dynamicZone\") {\n const validations: FieldError[] = [];\n\n const error = await execValidation({\n ...params,\n field\n });\n if (error) {\n validations.push({\n id: field.id,\n fieldId: field.fieldId,\n storageId: field.storageId,\n error,\n parents: params.parents\n });\n }\n\n const templates = (field.settings?.templates || []) as CmsDynamicZoneTemplate[];\n for (const template of templates) {\n const fields = template.fields;\n const fieldData = params.values[field.fieldId as keyof TValues];\n if (!fieldData) {\n continue;\n }\n const values: TValues[keyof TValues][] = Array.isArray(fieldData)\n ? fieldData\n : [fieldData];\n for (const index in values) {\n const templateValue = values[index]?.[template.gqlTypeName];\n if (!templateValue) {\n continue;\n }\n /**\n * Order of the parents must be\n * - fieldId\n * - index (if multiple values)\n * - gqlTypeName\n */\n const parents = [field.fieldId];\n if (field.list) {\n parents.push(index);\n }\n parents.push(template.gqlTypeName);\n for (const childField of fields) {\n const errors = await executeFieldValidation({\n ...params,\n parents: params.parents.concat(parents),\n field: childField,\n values: templateValue\n });\n if (errors.length === 0) {\n continue;\n }\n validations.push(...errors);\n }\n }\n }\n\n return validations;\n }\n const error = await execValidation({\n ...params\n });\n if (!error) {\n return [];\n }\n return [\n {\n id: field.id,\n fieldId: field.fieldId,\n storageId: field.storageId,\n error,\n parents: params.parents\n }\n ];\n};\n\ninterface ValidateFieldsParams<TValues extends CmsEntryValues = CmsEntryValues> {\n validatorList: PluginValidationList;\n parents: string[];\n model: CmsModel;\n values: TValues;\n fields: CmsModelField[];\n context: CmsContext;\n entry?: CmsEntry<TValues>;\n}\n\nconst validate = async <TValues extends CmsEntryValues = CmsEntryValues>(\n params: ValidateFieldsParams<TValues>\n): Promise<FieldError[]> => {\n const { fields } = params;\n const errors: FieldError[] = [];\n\n const results = await Promise.all(\n fields.map(async field => {\n return await executeFieldValidation<TValues>({\n ...params,\n field\n });\n })\n );\n\n for (const result of results) {\n if (result.length === 0) {\n continue;\n }\n errors.push(...result);\n }\n return errors;\n};\n"],"names":["validateValue","params","fieldValidators","value","validatorList","context","field","model","entry","fieldValidator","name","validations","validate","result","ex","validatePredefinedValue","enabled","predefinedValues","Array","predefinedValue","DATE_RE","TIME_RE","DATETIME_RE","validateDatetimeFormat","dateType","getFieldValidation","listValidation","item","runFieldMultipleValuesValidations","initialValues","values","valuesError","datetimeError","valueError","predefinedValueError","runFieldValueValidations","error","execValidation","validateModelEntryData","skipValidation","registry","CmsModelFieldValidatorRegistry","validators","validator","validateModelEntryDataOrThrow","invalidFields","EntryValidationError","executeFieldValidation","fields","objectValue","index","parents","childField","errors","templates","template","fieldData","templateValue","results","Promise"],"mappings":"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"}
|
|
@@ -26,99 +26,72 @@ const createContentEntryCrud = (params)=>{
|
|
|
26
26
|
const createEntry = async (model, rawInput, options)=>{
|
|
27
27
|
const useCase = context.container.resolve(CreateEntryUseCase);
|
|
28
28
|
const result = await useCase.execute(model, rawInput, options);
|
|
29
|
-
if (result.isFail())
|
|
30
|
-
const error = result.error;
|
|
31
|
-
throw new _webiny_error(error.message || "Could not create content entry.", error.code || "CREATE_ENTRY_ERROR", error.data);
|
|
32
|
-
}
|
|
29
|
+
if (result.isFail()) throw result.error;
|
|
33
30
|
return result.value;
|
|
34
31
|
};
|
|
35
32
|
const createEntryRevisionFrom = async (model, sourceId, rawInput, options)=>{
|
|
36
33
|
const useCase = context.container.resolve(CreateEntryRevisionFromUseCase);
|
|
37
34
|
const result = await useCase.execute(model, sourceId, rawInput, options);
|
|
38
|
-
if (result.isFail())
|
|
39
|
-
const error = result.error;
|
|
40
|
-
throw new _webiny_error(error.message || "Could not create entry from existing one.", error.code || "CREATE_FROM_REVISION_ERROR", error.data);
|
|
41
|
-
}
|
|
35
|
+
if (result.isFail()) throw result.error;
|
|
42
36
|
return result.value;
|
|
43
37
|
};
|
|
44
38
|
const updateEntry = async (model, id, rawInput, options)=>{
|
|
45
39
|
const useCase = context.container.resolve(UpdateEntryUseCase);
|
|
46
40
|
const result = await useCase.execute(model, id, rawInput, options);
|
|
47
|
-
if (result.isFail())
|
|
48
|
-
const error = result.error;
|
|
49
|
-
throw new _webiny_error(error.message || "Could not update existing entry.", error.code || "UPDATE_ERROR");
|
|
50
|
-
}
|
|
41
|
+
if (result.isFail()) throw result.error;
|
|
51
42
|
return result.value;
|
|
52
43
|
};
|
|
53
44
|
const updateRevisionDescription = async (model, id, revisionDescription)=>{
|
|
54
45
|
const useCase = context.container.resolve(UpdateRevisionDescriptionUseCase);
|
|
55
46
|
const result = await useCase.execute(model, id, revisionDescription);
|
|
56
|
-
if (result.isFail())
|
|
57
|
-
const error = result.error;
|
|
58
|
-
throw new _webiny_error(error.message || "Could not update revision description of the revision.", error.code || "UPDATE_REVISION_DESCRIPTION_ERROR");
|
|
59
|
-
}
|
|
47
|
+
if (result.isFail()) throw result.error;
|
|
60
48
|
return result.value;
|
|
61
49
|
};
|
|
62
50
|
const validateEntry = async (model, id, input)=>{
|
|
63
51
|
const useCase = context.container.resolve(ValidateEntryUseCase);
|
|
64
52
|
const result = await useCase.execute(model, id || null, input);
|
|
65
|
-
if (result.isFail())
|
|
66
|
-
const error = result.error;
|
|
67
|
-
throw new _webiny_error(error.message || "Could not validate entry.", error.code || "VALIDATION_ERROR", error.data);
|
|
68
|
-
}
|
|
53
|
+
if (result.isFail()) throw result.error;
|
|
69
54
|
return result.value;
|
|
70
55
|
};
|
|
71
56
|
const moveEntry = async (model, id, folderId)=>{
|
|
72
57
|
const useCase = context.container.resolve(MoveEntryUseCase);
|
|
73
58
|
const result = await useCase.execute(model, id, folderId);
|
|
74
|
-
if (result.isFail())
|
|
75
|
-
const error = result.error;
|
|
76
|
-
throw new _webiny_error(error.message || `Could not move entry "${id}" of model "${model.modelId}".`, error.code || "MOVE_ENTRY_ERROR", error.data);
|
|
77
|
-
}
|
|
59
|
+
if (result.isFail()) throw result.error;
|
|
78
60
|
return result.value;
|
|
79
61
|
};
|
|
80
62
|
const republishEntry = async (model, id)=>{
|
|
81
63
|
const useCase = context.container.resolve(RepublishEntryUseCase);
|
|
82
64
|
const result = await useCase.execute(model, id);
|
|
83
|
-
if (result.isFail())
|
|
84
|
-
const error = result.error;
|
|
85
|
-
throw new _webiny_error(error.message || "Could not republish entry.", error.code || "REPUBLISH_ERROR", error.data);
|
|
86
|
-
}
|
|
65
|
+
if (result.isFail()) throw result.error;
|
|
87
66
|
return result.value;
|
|
88
67
|
};
|
|
89
68
|
const deleteEntryRevision = async (model, revisionId)=>{
|
|
90
69
|
const useCase = context.container.resolve(DeleteEntryRevisionUseCase);
|
|
91
70
|
const result = await useCase.execute(model, revisionId);
|
|
92
|
-
if (result.isFail()) throw
|
|
71
|
+
if (result.isFail()) throw result.error;
|
|
93
72
|
};
|
|
94
73
|
const deleteMultipleEntries = async (model, params)=>{
|
|
95
74
|
const useCase = context.container.resolve(DeleteMultipleEntriesUseCase);
|
|
96
75
|
const result = await useCase.execute(model, params);
|
|
97
|
-
if (result.isFail())
|
|
98
|
-
const error = result.error;
|
|
99
|
-
throw new _webiny_error(error.message || "Could not delete multiple entries.", error.code || "DELETE_ENTRIES_MULTIPLE_ERROR", error.data);
|
|
100
|
-
}
|
|
76
|
+
if (result.isFail()) throw result.error;
|
|
101
77
|
return result.value;
|
|
102
78
|
};
|
|
103
79
|
const publishEntry = async (model, id)=>{
|
|
104
80
|
const useCase = context.container.resolve(PublishEntryUseCase);
|
|
105
81
|
const result = await useCase.execute(model, id);
|
|
106
|
-
if (result.isFail()) throw
|
|
82
|
+
if (result.isFail()) throw result.error;
|
|
107
83
|
return result.value;
|
|
108
84
|
};
|
|
109
85
|
const unpublishEntry = async (model, id)=>{
|
|
110
86
|
const useCase = context.container.resolve(UnpublishEntryUseCase);
|
|
111
87
|
const result = await useCase.execute(model, id);
|
|
112
|
-
if (result.isFail())
|
|
113
|
-
const error = result.error;
|
|
114
|
-
throw new _webiny_error(error.message || "Could not unpublish entry.", error.code || "UNPUBLISH_ERROR", error.data);
|
|
115
|
-
}
|
|
88
|
+
if (result.isFail()) throw result.error;
|
|
116
89
|
return result.value;
|
|
117
90
|
};
|
|
118
91
|
const getUniqueFieldValues = async (model, params)=>{
|
|
119
92
|
const useCase = context.container.resolve(GetUniqueFieldValuesUseCase);
|
|
120
93
|
const result = await useCase.execute(model, params);
|
|
121
|
-
if (result.isFail()) throw
|
|
94
|
+
if (result.isFail()) throw result.error;
|
|
122
95
|
return result.value;
|
|
123
96
|
};
|
|
124
97
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"crud/contentEntry.crud.js","sources":["../../src/crud/contentEntry.crud.ts"],"sourcesContent":["import WebinyError from \"@webiny/error\";\nimport type {\n CmsContext,\n CmsEntry,\n CmsEntryContext,\n CmsEntryGetParams,\n CmsEntryListParams,\n CmsEntryMeta,\n CmsEntryValues,\n CmsModel,\n CreateCmsEntryInput,\n CreateCmsEntryOptionsInput,\n CreateFromCmsEntryInput,\n CreateRevisionCmsEntryOptionsInput,\n UpdateCmsEntryInput,\n UpdateCmsEntryOptionsInput\n} from \"~/types/index.js\";\nimport { CreateEntryUseCase } from \"~/features/contentEntry/CreateEntry/index.js\";\nimport { CreateEntryRevisionFromUseCase } from \"~/features/contentEntry/CreateEntryRevisionFrom/abstractions.js\";\nimport { UpdateEntryUseCase } from \"~/features/contentEntry/UpdateEntry/index.js\";\nimport { ValidateEntryUseCase } from \"~/features/contentEntry/ValidateEntry/abstractions.js\";\nimport { MoveEntryUseCase } from \"~/features/contentEntry/MoveEntry/abstractions.js\";\nimport { RepublishEntryUseCase } from \"~/features/contentEntry/RepublishEntry/abstractions.js\";\nimport { PublishEntryUseCase } from \"~/features/contentEntry/PublishEntry/abstractions.js\";\nimport {\n ListDeletedEntriesUseCase,\n ListLatestEntriesUseCase,\n ListPublishedEntriesUseCase\n} from \"~/features/contentEntry/ListEntries/index.js\";\nimport { ListEntriesUseCase } from \"~/features/contentEntry/ListEntries/abstractions.js\";\nimport { GetEntriesByIdsUseCase } from \"~/features/contentEntry/GetEntriesByIds/index.js\";\nimport { GetEntryByIdUseCase } from \"~/features/contentEntry/GetEntryById/index.js\";\nimport { GetPublishedEntriesByIdsUseCase } from \"~/features/contentEntry/GetPublishedEntriesByIds/index.js\";\nimport { GetLatestEntriesByIdsUseCase } from \"~/features/contentEntry/GetLatestEntriesByIds/index.js\";\nimport { GetRevisionsByEntryIdUseCase } from \"~/features/contentEntry/GetRevisionsByEntryId/index.js\";\nimport { GetEntryUseCase } from \"~/features/contentEntry/GetEntry/index.js\";\nimport { DeleteEntryRevisionUseCase } from \"~/features/contentEntry/DeleteEntryRevision/index.js\";\nimport { DeleteEntryUseCase } from \"~/features/contentEntry/DeleteEntry/index.js\";\nimport { DeleteMultipleEntriesUseCase } from \"~/features/contentEntry/DeleteMultipleEntries/abstractions.js\";\nimport { RestoreEntryFromBinUseCase } from \"~/features/contentEntry/RestoreEntryFromBin/abstractions.js\";\nimport { UnpublishEntryUseCase } from \"~/features/contentEntry/UnpublishEntry/index.js\";\nimport { GetUniqueFieldValuesUseCase } from \"~/features/contentEntry/GetUniqueFieldValues/index.js\";\nimport { UpdateRevisionDescriptionUseCase } from \"~/features/contentEntry/UpdateRevisionDescription/index.js\";\n\ninterface CreateContentEntryCrudParams {\n context: CmsContext;\n}\n\nexport const createContentEntryCrud = (params: CreateContentEntryCrudParams): CmsEntryContext => {\n const { context } = params;\n\n const createEntry: CmsEntryContext[\"createEntry\"] = async <\n T extends CmsEntryValues = CmsEntryValues\n >(\n model: CmsModel,\n rawInput: CreateCmsEntryInput<T>,\n options?: CreateCmsEntryOptionsInput\n ): Promise<CmsEntry<T>> => {\n // Delegate to new CreateEntry use case\n const useCase = context.container.resolve(CreateEntryUseCase);\n const result = await useCase.execute<T>(model, rawInput, options);\n\n if (result.isFail()) {\n // Convert Result error to WebinyError for backward compatibility\n const error = result.error;\n throw new WebinyError(\n error.message || \"Could not create content entry.\",\n error.code || \"CREATE_ENTRY_ERROR\",\n error.data\n );\n }\n\n return result.value;\n };\n\n const createEntryRevisionFrom: CmsEntryContext[\"createEntryRevisionFrom\"] = async <\n T extends CmsEntryValues = CmsEntryValues\n >(\n model: CmsModel,\n sourceId: string,\n rawInput: CreateFromCmsEntryInput<T>,\n options?: CreateRevisionCmsEntryOptionsInput\n ) => {\n // Delegate to new CreateEntryRevisionFrom use case\n const useCase = context.container.resolve(CreateEntryRevisionFromUseCase);\n const result = await useCase.execute<T>(model, sourceId, rawInput, options);\n\n if (result.isFail()) {\n // Convert Result error to WebinyError for backward compatibility\n const error = result.error;\n throw new WebinyError(\n error.message || \"Could not create entry from existing one.\",\n error.code || \"CREATE_FROM_REVISION_ERROR\",\n error.data\n );\n }\n\n return result.value;\n };\n\n const updateEntry: CmsEntryContext[\"updateEntry\"] = async <\n T extends CmsEntryValues = CmsEntryValues\n >(\n model: CmsModel,\n id: string,\n rawInput: UpdateCmsEntryInput<T>,\n options?: UpdateCmsEntryOptionsInput\n ): Promise<CmsEntry<T>> => {\n // Delegate to new UpdateEntry use case\n const useCase = context.container.resolve(UpdateEntryUseCase);\n const result = await useCase.execute<T>(model, id, rawInput, options);\n\n if (result.isFail()) {\n // Convert Result error to WebinyError for backward compatibility\n const error = result.error;\n throw new WebinyError(\n error.message || \"Could not update existing entry.\",\n error.code || \"UPDATE_ERROR\"\n );\n }\n\n return result.value;\n };\n\n const updateRevisionDescription: CmsEntryContext[\"updateRevisionDescription\"] = async <\n T extends CmsEntryValues = CmsEntryValues\n >(\n model: CmsModel,\n id: string,\n revisionDescription: string | undefined\n ) => {\n const useCase = context.container.resolve(UpdateRevisionDescriptionUseCase);\n const result = await useCase.execute<T>(model, id, revisionDescription);\n\n if (result.isFail()) {\n // Convert Result error to WebinyError for backward compatibility\n const error = result.error;\n throw new WebinyError(\n error.message || \"Could not update revision description of the revision.\",\n error.code || \"UPDATE_REVISION_DESCRIPTION_ERROR\"\n );\n }\n\n return result.value;\n };\n\n const validateEntry = async <T extends CmsEntryValues = CmsEntryValues>(\n model: CmsModel,\n id: string,\n input: UpdateCmsEntryInput<T>\n ) => {\n // Delegate to new ValidateEntry use case\n const useCase = context.container.resolve(ValidateEntryUseCase);\n const result = await useCase.execute<T>(model, id || null, input);\n\n if (result.isFail()) {\n // Convert Result error to WebinyError for backward compatibility\n const error = result.error;\n throw new WebinyError(\n error.message || \"Could not validate entry.\",\n error.code || \"VALIDATION_ERROR\",\n error.data\n );\n }\n\n return result.value;\n };\n\n const moveEntry = async <T extends CmsEntryValues = CmsEntryValues>(\n model: CmsModel,\n id: string,\n folderId: string\n ) => {\n // Delegate to new MoveEntry use case\n const useCase = context.container.resolve(MoveEntryUseCase);\n const result = await useCase.execute<T>(model, id, folderId);\n\n if (result.isFail()) {\n // Convert Result error to WebinyError for backward compatibility\n const error = result.error;\n throw new WebinyError(\n error.message || `Could not move entry \"${id}\" of model \"${model.modelId}\".`,\n error.code || \"MOVE_ENTRY_ERROR\",\n error.data\n );\n }\n\n return result.value;\n };\n\n const republishEntry = async <T extends CmsEntryValues = CmsEntryValues>(\n model: CmsModel,\n id: string\n ) => {\n // Delegate to new RepublishEntry use case\n const useCase = context.container.resolve(RepublishEntryUseCase);\n const result = await useCase.execute<T>(model, id);\n\n if (result.isFail()) {\n // Convert Result error to WebinyError for backward compatibility\n const error = result.error;\n throw new WebinyError(\n error.message || \"Could not republish entry.\",\n error.code || \"REPUBLISH_ERROR\",\n error.data\n );\n }\n\n return result.value;\n };\n\n const deleteEntryRevision: CmsEntryContext[\"deleteEntryRevision\"] = async (\n model,\n revisionId\n ) => {\n const useCase = context.container.resolve(DeleteEntryRevisionUseCase);\n const result = await useCase.execute(model, revisionId);\n\n if (result.isFail()) {\n throw new WebinyError(result.error.message, result.error.code, result.error.data);\n }\n };\n const deleteMultipleEntries: CmsEntryContext[\"deleteMultipleEntries\"] = async (\n model,\n params\n ) => {\n // Delegate to new DeleteMultipleEntries use case\n const useCase = context.container.resolve(DeleteMultipleEntriesUseCase);\n const result = await useCase.execute(model, params);\n\n if (result.isFail()) {\n // Convert Result error to WebinyError for backward compatibility\n const error = result.error;\n throw new WebinyError(\n error.message || \"Could not delete multiple entries.\",\n error.code || \"DELETE_ENTRIES_MULTIPLE_ERROR\",\n error.data\n );\n }\n\n return result.value;\n };\n\n const publishEntry = async <T extends CmsEntryValues = CmsEntryValues>(\n model: CmsModel,\n id: string\n ) => {\n // Delegate to new PublishEntry use case\n const useCase = context.container.resolve(PublishEntryUseCase);\n const result = await useCase.execute<T>(model, id);\n\n if (result.isFail()) {\n // Convert Result error to WebinyError for backward compatibility\n throw new WebinyError(\n result.error.message || \"Could not publish entry.\",\n result.error.code || \"PUBLISH_ERROR\",\n result.error.data\n );\n }\n\n return result.value;\n };\n const unpublishEntry = async <T extends CmsEntryValues = CmsEntryValues>(\n model: CmsModel,\n id: string\n ) => {\n // Delegate to new UnpublishEntry use case\n const useCase = context.container.resolve(UnpublishEntryUseCase);\n const result = await useCase.execute<T>(model, id);\n\n if (result.isFail()) {\n const error = result.error;\n throw new WebinyError(\n error.message || \"Could not unpublish entry.\",\n error.code || \"UNPUBLISH_ERROR\",\n error.data\n );\n }\n\n return result.value;\n };\n\n const getUniqueFieldValues: CmsEntryContext[\"getUniqueFieldValues\"] = async (model, params) => {\n const useCase = context.container.resolve(GetUniqueFieldValuesUseCase);\n const result = await useCase.execute(model, params);\n\n if (result.isFail()) {\n throw new WebinyError(result.error.message, result.error.code, result.error.data);\n }\n\n return result.value;\n };\n\n return {\n /**\n * Get entries by exact revision IDs from the database.\n */\n async getEntriesByIds<T extends CmsEntryValues = CmsEntryValues>(\n model: CmsModel,\n ids: string[]\n ) {\n return context.benchmark.measure(\n \"headlessCms.crud.entries.getEntriesByIds\",\n async () => {\n const useCase = context.container.resolve(GetEntriesByIdsUseCase);\n const result = await useCase.execute<T>(model, ids);\n\n if (result.isFail()) {\n const error = result.error;\n throw new WebinyError(\n error.message || \"Could not get entries by IDs.\",\n error.code || \"GET_ENTRIES_BY_IDS_ERROR\",\n {\n error,\n ids,\n model\n }\n );\n }\n\n return result.value;\n }\n );\n },\n /**\n * Get a single entry by revision ID from the database.\n */\n async getEntryById<T extends CmsEntryValues = CmsEntryValues>(model: CmsModel, id: string) {\n return context.benchmark.measure(\"headlessCms.crud.entries.getEntryById\", async () => {\n const useCase = context.container.resolve(GetEntryByIdUseCase);\n const result = await useCase.execute<T>(model, id);\n\n if (result.isFail()) {\n const error = result.error;\n throw new WebinyError(\n error.message || `Entry by ID \"${id}\" not found.`,\n error.code || \"GET_ENTRY_BY_ID_ERROR\",\n error.data\n );\n }\n\n return result.value;\n });\n },\n /**\n * Get published revisions by entry IDs.\n */\n async getPublishedEntriesByIds<T extends CmsEntryValues = CmsEntryValues>(\n model: CmsModel,\n ids: string[]\n ) {\n return context.benchmark.measure(\n \"headlessCms.crud.entries.getPublishedEntriesByIds\",\n async () => {\n const useCase = context.container.resolve(GetPublishedEntriesByIdsUseCase);\n const result = await useCase.execute<T>(model, ids);\n\n if (result.isFail()) {\n const error = result.error;\n throw new WebinyError(\n error.message || \"Could not get published entries by IDs.\",\n error.code || \"GET_PUBLISHED_ENTRIES_BY_IDS_ERROR\",\n {\n error,\n ids,\n model\n }\n );\n }\n\n return result.value;\n }\n );\n },\n /**\n * Get the latest revisions by entry IDs.\n */\n async getLatestEntriesByIds<T extends CmsEntryValues = CmsEntryValues>(\n model: CmsModel,\n ids: string[]\n ) {\n return context.benchmark.measure(\n \"headlessCms.crud.entries.getLatestEntriesByIds\",\n async () => {\n const useCase = context.container.resolve(GetLatestEntriesByIdsUseCase);\n const result = await useCase.execute<T>(model, ids);\n\n if (result.isFail()) {\n const error = result.error;\n throw new WebinyError(\n error.message || \"Could not get latest entries by IDs.\",\n error.code || \"GET_LATEST_ENTRIES_BY_IDS_ERROR\",\n {\n error,\n ids,\n model\n }\n );\n }\n\n return result.value;\n }\n );\n },\n async getEntryRevisions<T extends CmsEntryValues = CmsEntryValues>(\n model: CmsModel,\n entryId: string\n ) {\n return context.benchmark.measure(\n \"headlessCms.crud.entries.getEntryRevisions\",\n async () => {\n const useCase = context.container.resolve(GetRevisionsByEntryIdUseCase);\n const result = await useCase.execute<T>(model, entryId);\n\n if (result.isFail()) {\n const error = result.error;\n throw new WebinyError(\n error.message || \"Could not get entry revisions.\",\n error.code || \"GET_ENTRY_REVISIONS_ERROR\",\n {\n error,\n entryId,\n model\n }\n );\n }\n\n return result.value;\n }\n );\n },\n /**\n * @internal\n */\n async getEntry<T extends CmsEntryValues = CmsEntryValues>(\n model: CmsModel,\n params: CmsEntryGetParams\n ): Promise<CmsEntry<T>> {\n return context.benchmark.measure(\"headlessCms.crud.entries.getEntry\", async () => {\n const useCase = context.container.resolve(GetEntryUseCase);\n const result = await useCase.execute<T>(model, params);\n\n if (result.isFail()) {\n const error = result.error;\n throw new WebinyError(\n error.message || \"Entry not found!\",\n error.code || \"GET_ENTRY_ERROR\",\n {\n error,\n params,\n model\n }\n );\n }\n\n return result.value;\n });\n },\n /**\n * @description Should not be used directly. Internal use only!\n *\n * @internal\n */\n async listEntries<T extends CmsEntryValues = CmsEntryValues>(\n model: CmsModel,\n params: CmsEntryListParams\n ): Promise<[CmsEntry<T>[], CmsEntryMeta]> {\n const useCase = context.container.resolve(ListEntriesUseCase);\n const result = await useCase.execute<T>(model, params);\n\n if (result.isFail()) {\n const error = result.error;\n throw new WebinyError(\n error.message || \"Could not list entries.\",\n error.code || \"LIST_ENTRIES_ERROR\",\n {\n error,\n params,\n model\n }\n );\n }\n\n const { entries, meta } = result.value;\n\n return [entries, meta];\n },\n async listLatestEntries<T extends CmsEntryValues = CmsEntryValues>(\n model: CmsModel,\n params?: CmsEntryListParams\n ): Promise<[CmsEntry<T>[], CmsEntryMeta]> {\n const useCase = context.container.resolve(ListLatestEntriesUseCase);\n const result = await useCase.execute<T>(model, params);\n\n if (result.isFail()) {\n const error = result.error;\n throw new WebinyError(\n error.message || \"Could not list latest entries.\",\n error.code || \"LIST_LATEST_ENTRIES_ERROR\",\n {\n error,\n params,\n model\n }\n );\n }\n\n const { entries, meta } = result.value;\n\n return [entries, meta];\n },\n async listDeletedEntries<T extends CmsEntryValues = CmsEntryValues>(\n model: CmsModel,\n params?: CmsEntryListParams\n ): Promise<[CmsEntry<T>[], CmsEntryMeta]> {\n const useCase = context.container.resolve(ListDeletedEntriesUseCase);\n const result = await useCase.execute<T>(model, params);\n\n if (result.isFail()) {\n const error = result.error;\n throw new WebinyError(\n error.message || \"Could not list deleted entries.\",\n error.code || \"LIST_DELETED_ENTRIES_ERROR\",\n {\n error,\n params,\n model\n }\n );\n }\n\n const { entries, meta } = result.value;\n\n return [entries, meta];\n },\n async listPublishedEntries<T extends CmsEntryValues = CmsEntryValues>(\n model: CmsModel,\n params?: CmsEntryListParams\n ): Promise<[CmsEntry<T>[], CmsEntryMeta]> {\n const useCase = context.container.resolve(ListPublishedEntriesUseCase);\n const result = await useCase.execute<T>(model, params);\n\n if (result.isFail()) {\n const error = result.error;\n throw new WebinyError(\n error.message || \"Could not list published entries.\",\n error.code || \"LIST_PUBLISHED_ENTRIES_ERROR\",\n {\n error,\n params,\n model\n }\n );\n }\n\n const { entries, meta } = result.value;\n return [entries, meta];\n },\n async createEntry<T extends CmsEntryValues = CmsEntryValues>(\n model: CmsModel,\n input: CreateCmsEntryInput<T>,\n options?: CreateCmsEntryOptionsInput\n ): Promise<CmsEntry<T>> {\n return context.benchmark.measure(\"headlessCms.crud.entries.createEntry\", async () => {\n return createEntry(model, input, options);\n });\n },\n async createEntryRevisionFrom<T extends CmsEntryValues = CmsEntryValues>(\n model: CmsModel,\n sourceId: string,\n input: CreateFromCmsEntryInput<T>,\n options?: CreateRevisionCmsEntryOptionsInput\n ) {\n return context.benchmark.measure(\n \"headlessCms.crud.entries.createEntryRevisionFrom\",\n async () => {\n return createEntryRevisionFrom<T>(model, sourceId, input, options);\n }\n );\n },\n async updateEntry<T extends CmsEntryValues = CmsEntryValues>(\n model: CmsModel,\n id: string,\n input: UpdateCmsEntryInput<T>,\n options?: UpdateCmsEntryOptionsInput\n ) {\n return context.benchmark.measure(\"headlessCms.crud.entries.updateEntry\", async () => {\n return updateEntry<T>(model, id, input, options);\n });\n },\n\n async updateRevisionDescription(model, id, revisionDescription) {\n return context.benchmark.measure(\n \"headlessCms.crud.entries.updateRevisionDescription\",\n async () => {\n return updateRevisionDescription(model, id, revisionDescription);\n }\n );\n },\n async validateEntry<T extends CmsEntryValues = CmsEntryValues>(\n model: CmsModel,\n id: string,\n input: UpdateCmsEntryInput<T>\n ) {\n return context.benchmark.measure(\"headlessCms.crud.entries.validateEntry\", async () => {\n return validateEntry<T>(model, id, input);\n });\n },\n async moveEntry<T extends CmsEntryValues = CmsEntryValues>(\n model: CmsModel,\n id: string,\n folderId: string\n ) {\n return context.benchmark.measure(\"headlessCms.crud.entries.moveEntry\", async () => {\n return moveEntry<T>(model, id, folderId);\n });\n },\n /**\n * Method used internally. Not documented and should not be used in users systems.\n * @internal\n */\n async republishEntry<T extends CmsEntryValues = CmsEntryValues>(\n model: CmsModel,\n id: string\n ) {\n return context.benchmark.measure(\n \"headlessCms.crud.entries.republishEntry\",\n async () => {\n return republishEntry<T>(model, id);\n }\n );\n },\n async deleteEntryRevision(model, id) {\n return context.benchmark.measure(\n \"headlessCms.crud.entries.deleteEntryRevision\",\n async () => {\n return deleteEntryRevision(model, id);\n }\n );\n },\n async deleteEntry(model, entryId, options) {\n const deleteEntryUseCase = context.container.resolve(DeleteEntryUseCase);\n return context.benchmark.measure(\"headlessCms.crud.entries.deleteEntry\", async () => {\n const result = await deleteEntryUseCase.execute(model, entryId, options ?? {});\n\n if (result.isFail()) {\n throw new WebinyError(\n result.error.message,\n result.error.code,\n result.error.data\n );\n }\n });\n },\n async restoreEntryFromBin<T extends CmsEntryValues = CmsEntryValues>(\n model: CmsModel,\n entryId: string\n ) {\n return context.benchmark.measure(\n \"headlessCms.crud.entries.restoreEntryFromBin\",\n async () => {\n const useCase = context.container.resolve(RestoreEntryFromBinUseCase);\n const result = await useCase.execute<T>(model, entryId);\n if (result.isFail()) {\n throw new WebinyError(\n result.error.message,\n result.error.code,\n result.error.data\n );\n }\n return result.value;\n }\n );\n },\n async deleteMultipleEntries(model, ids) {\n return context.benchmark.measure(\n \"headlessCms.crud.entries.deleteMultipleEntries\",\n async () => {\n return deleteMultipleEntries(model, ids);\n }\n );\n },\n async publishEntry<T extends CmsEntryValues = CmsEntryValues>(model: CmsModel, id: string) {\n return context.benchmark.measure(\"headlessCms.crud.entries.publishEntry\", async () => {\n return publishEntry<T>(model, id);\n });\n },\n async unpublishEntry<T extends CmsEntryValues = CmsEntryValues>(\n model: CmsModel,\n id: string\n ) {\n return context.benchmark.measure(\n \"headlessCms.crud.entries.unpublishEntry\",\n async () => {\n return unpublishEntry<T>(model, id);\n }\n );\n },\n async getUniqueFieldValues(model, params) {\n return context.benchmark.measure(\n \"headlessCms.crud.entries.getUniqueFieldValues\",\n async () => {\n return getUniqueFieldValues(model, params);\n }\n );\n }\n };\n};\n"],"names":["createContentEntryCrud","params","context","createEntry","model","rawInput","options","useCase","CreateEntryUseCase","result","error","WebinyError","createEntryRevisionFrom","sourceId","CreateEntryRevisionFromUseCase","updateEntry","id","UpdateEntryUseCase","updateRevisionDescription","revisionDescription","UpdateRevisionDescriptionUseCase","validateEntry","input","ValidateEntryUseCase","moveEntry","folderId","MoveEntryUseCase","republishEntry","RepublishEntryUseCase","deleteEntryRevision","revisionId","DeleteEntryRevisionUseCase","deleteMultipleEntries","DeleteMultipleEntriesUseCase","publishEntry","PublishEntryUseCase","unpublishEntry","UnpublishEntryUseCase","getUniqueFieldValues","GetUniqueFieldValuesUseCase","ids","GetEntriesByIdsUseCase","GetEntryByIdUseCase","GetPublishedEntriesByIdsUseCase","GetLatestEntriesByIdsUseCase","entryId","GetRevisionsByEntryIdUseCase","GetEntryUseCase","ListEntriesUseCase","entries","meta","ListLatestEntriesUseCase","ListDeletedEntriesUseCase","ListPublishedEntriesUseCase","deleteEntryUseCase","DeleteEntryUseCase","RestoreEntryFromBinUseCase"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"crud/contentEntry.crud.js","sources":["../../src/crud/contentEntry.crud.ts"],"sourcesContent":["import WebinyError from \"@webiny/error\";\nimport type {\n CmsContext,\n CmsEntry,\n CmsEntryContext,\n CmsEntryGetParams,\n CmsEntryListParams,\n CmsEntryMeta,\n CmsEntryValues,\n CmsModel,\n CreateCmsEntryInput,\n CreateCmsEntryOptionsInput,\n CreateFromCmsEntryInput,\n CreateRevisionCmsEntryOptionsInput,\n UpdateCmsEntryInput,\n UpdateCmsEntryOptionsInput\n} from \"~/types/index.js\";\nimport { CreateEntryUseCase } from \"~/features/contentEntry/CreateEntry/index.js\";\nimport { CreateEntryRevisionFromUseCase } from \"~/features/contentEntry/CreateEntryRevisionFrom/abstractions.js\";\nimport { UpdateEntryUseCase } from \"~/features/contentEntry/UpdateEntry/index.js\";\nimport { ValidateEntryUseCase } from \"~/features/contentEntry/ValidateEntry/abstractions.js\";\nimport { MoveEntryUseCase } from \"~/features/contentEntry/MoveEntry/abstractions.js\";\nimport { RepublishEntryUseCase } from \"~/features/contentEntry/RepublishEntry/abstractions.js\";\nimport { PublishEntryUseCase } from \"~/features/contentEntry/PublishEntry/abstractions.js\";\nimport {\n ListDeletedEntriesUseCase,\n ListLatestEntriesUseCase,\n ListPublishedEntriesUseCase\n} from \"~/features/contentEntry/ListEntries/index.js\";\nimport { ListEntriesUseCase } from \"~/features/contentEntry/ListEntries/abstractions.js\";\nimport { GetEntriesByIdsUseCase } from \"~/features/contentEntry/GetEntriesByIds/index.js\";\nimport { GetEntryByIdUseCase } from \"~/features/contentEntry/GetEntryById/index.js\";\nimport { GetPublishedEntriesByIdsUseCase } from \"~/features/contentEntry/GetPublishedEntriesByIds/index.js\";\nimport { GetLatestEntriesByIdsUseCase } from \"~/features/contentEntry/GetLatestEntriesByIds/index.js\";\nimport { GetRevisionsByEntryIdUseCase } from \"~/features/contentEntry/GetRevisionsByEntryId/index.js\";\nimport { GetEntryUseCase } from \"~/features/contentEntry/GetEntry/index.js\";\nimport { DeleteEntryRevisionUseCase } from \"~/features/contentEntry/DeleteEntryRevision/index.js\";\nimport { DeleteEntryUseCase } from \"~/features/contentEntry/DeleteEntry/index.js\";\nimport { DeleteMultipleEntriesUseCase } from \"~/features/contentEntry/DeleteMultipleEntries/abstractions.js\";\nimport { RestoreEntryFromBinUseCase } from \"~/features/contentEntry/RestoreEntryFromBin/abstractions.js\";\nimport { UnpublishEntryUseCase } from \"~/features/contentEntry/UnpublishEntry/index.js\";\nimport { GetUniqueFieldValuesUseCase } from \"~/features/contentEntry/GetUniqueFieldValues/index.js\";\nimport { UpdateRevisionDescriptionUseCase } from \"~/features/contentEntry/UpdateRevisionDescription/index.js\";\n\ninterface CreateContentEntryCrudParams {\n context: CmsContext;\n}\n\nexport const createContentEntryCrud = (params: CreateContentEntryCrudParams): CmsEntryContext => {\n const { context } = params;\n\n const createEntry: CmsEntryContext[\"createEntry\"] = async <\n T extends CmsEntryValues = CmsEntryValues\n >(\n model: CmsModel,\n rawInput: CreateCmsEntryInput<T>,\n options?: CreateCmsEntryOptionsInput\n ): Promise<CmsEntry<T>> => {\n // Delegate to new CreateEntry use case\n const useCase = context.container.resolve(CreateEntryUseCase);\n const result = await useCase.execute<T>(model, rawInput, options);\n\n if (result.isFail()) {\n throw result.error;\n }\n\n return result.value;\n };\n\n const createEntryRevisionFrom: CmsEntryContext[\"createEntryRevisionFrom\"] = async <\n T extends CmsEntryValues = CmsEntryValues\n >(\n model: CmsModel,\n sourceId: string,\n rawInput: CreateFromCmsEntryInput<T>,\n options?: CreateRevisionCmsEntryOptionsInput\n ) => {\n // Delegate to new CreateEntryRevisionFrom use case\n const useCase = context.container.resolve(CreateEntryRevisionFromUseCase);\n const result = await useCase.execute<T>(model, sourceId, rawInput, options);\n\n if (result.isFail()) {\n throw result.error;\n }\n\n return result.value;\n };\n\n const updateEntry: CmsEntryContext[\"updateEntry\"] = async <\n T extends CmsEntryValues = CmsEntryValues\n >(\n model: CmsModel,\n id: string,\n rawInput: UpdateCmsEntryInput<T>,\n options?: UpdateCmsEntryOptionsInput\n ): Promise<CmsEntry<T>> => {\n // Delegate to new UpdateEntry use case\n const useCase = context.container.resolve(UpdateEntryUseCase);\n const result = await useCase.execute<T>(model, id, rawInput, options);\n\n if (result.isFail()) {\n throw result.error;\n }\n\n return result.value;\n };\n\n const updateRevisionDescription: CmsEntryContext[\"updateRevisionDescription\"] = async <\n T extends CmsEntryValues = CmsEntryValues\n >(\n model: CmsModel,\n id: string,\n revisionDescription: string | undefined\n ) => {\n const useCase = context.container.resolve(UpdateRevisionDescriptionUseCase);\n const result = await useCase.execute<T>(model, id, revisionDescription);\n\n if (result.isFail()) {\n throw result.error;\n }\n\n return result.value;\n };\n\n const validateEntry = async <T extends CmsEntryValues = CmsEntryValues>(\n model: CmsModel,\n id: string,\n input: UpdateCmsEntryInput<T>\n ) => {\n // Delegate to new ValidateEntry use case\n const useCase = context.container.resolve(ValidateEntryUseCase);\n const result = await useCase.execute<T>(model, id || null, input);\n\n if (result.isFail()) {\n throw result.error;\n }\n\n return result.value;\n };\n\n const moveEntry = async <T extends CmsEntryValues = CmsEntryValues>(\n model: CmsModel,\n id: string,\n folderId: string\n ) => {\n // Delegate to new MoveEntry use case\n const useCase = context.container.resolve(MoveEntryUseCase);\n const result = await useCase.execute<T>(model, id, folderId);\n\n if (result.isFail()) {\n throw result.error;\n }\n\n return result.value;\n };\n\n const republishEntry = async <T extends CmsEntryValues = CmsEntryValues>(\n model: CmsModel,\n id: string\n ) => {\n // Delegate to new RepublishEntry use case\n const useCase = context.container.resolve(RepublishEntryUseCase);\n const result = await useCase.execute<T>(model, id);\n\n if (result.isFail()) {\n throw result.error;\n }\n\n return result.value;\n };\n\n const deleteEntryRevision: CmsEntryContext[\"deleteEntryRevision\"] = async (\n model,\n revisionId\n ) => {\n const useCase = context.container.resolve(DeleteEntryRevisionUseCase);\n const result = await useCase.execute(model, revisionId);\n\n if (result.isFail()) {\n throw result.error;\n }\n };\n const deleteMultipleEntries: CmsEntryContext[\"deleteMultipleEntries\"] = async (\n model,\n params\n ) => {\n // Delegate to new DeleteMultipleEntries use case\n const useCase = context.container.resolve(DeleteMultipleEntriesUseCase);\n const result = await useCase.execute(model, params);\n\n if (result.isFail()) {\n throw result.error;\n }\n\n return result.value;\n };\n\n const publishEntry = async <T extends CmsEntryValues = CmsEntryValues>(\n model: CmsModel,\n id: string\n ) => {\n // Delegate to new PublishEntry use case\n const useCase = context.container.resolve(PublishEntryUseCase);\n const result = await useCase.execute<T>(model, id);\n\n if (result.isFail()) {\n throw result.error;\n }\n\n return result.value;\n };\n const unpublishEntry = async <T extends CmsEntryValues = CmsEntryValues>(\n model: CmsModel,\n id: string\n ) => {\n // Delegate to new UnpublishEntry use case\n const useCase = context.container.resolve(UnpublishEntryUseCase);\n const result = await useCase.execute<T>(model, id);\n\n if (result.isFail()) {\n throw result.error;\n }\n\n return result.value;\n };\n\n const getUniqueFieldValues: CmsEntryContext[\"getUniqueFieldValues\"] = async (model, params) => {\n const useCase = context.container.resolve(GetUniqueFieldValuesUseCase);\n const result = await useCase.execute(model, params);\n\n if (result.isFail()) {\n throw result.error;\n }\n\n return result.value;\n };\n\n return {\n /**\n * Get entries by exact revision IDs from the database.\n */\n async getEntriesByIds<T extends CmsEntryValues = CmsEntryValues>(\n model: CmsModel,\n ids: string[]\n ) {\n return context.benchmark.measure(\n \"headlessCms.crud.entries.getEntriesByIds\",\n async () => {\n const useCase = context.container.resolve(GetEntriesByIdsUseCase);\n const result = await useCase.execute<T>(model, ids);\n\n if (result.isFail()) {\n const error = result.error;\n throw new WebinyError(\n error.message || \"Could not get entries by IDs.\",\n error.code || \"GET_ENTRIES_BY_IDS_ERROR\",\n {\n error,\n ids,\n model\n }\n );\n }\n\n return result.value;\n }\n );\n },\n /**\n * Get a single entry by revision ID from the database.\n */\n async getEntryById<T extends CmsEntryValues = CmsEntryValues>(model: CmsModel, id: string) {\n return context.benchmark.measure(\"headlessCms.crud.entries.getEntryById\", async () => {\n const useCase = context.container.resolve(GetEntryByIdUseCase);\n const result = await useCase.execute<T>(model, id);\n\n if (result.isFail()) {\n const error = result.error;\n throw new WebinyError(\n error.message || `Entry by ID \"${id}\" not found.`,\n error.code || \"GET_ENTRY_BY_ID_ERROR\",\n error.data\n );\n }\n\n return result.value;\n });\n },\n /**\n * Get published revisions by entry IDs.\n */\n async getPublishedEntriesByIds<T extends CmsEntryValues = CmsEntryValues>(\n model: CmsModel,\n ids: string[]\n ) {\n return context.benchmark.measure(\n \"headlessCms.crud.entries.getPublishedEntriesByIds\",\n async () => {\n const useCase = context.container.resolve(GetPublishedEntriesByIdsUseCase);\n const result = await useCase.execute<T>(model, ids);\n\n if (result.isFail()) {\n const error = result.error;\n throw new WebinyError(\n error.message || \"Could not get published entries by IDs.\",\n error.code || \"GET_PUBLISHED_ENTRIES_BY_IDS_ERROR\",\n {\n error,\n ids,\n model\n }\n );\n }\n\n return result.value;\n }\n );\n },\n /**\n * Get the latest revisions by entry IDs.\n */\n async getLatestEntriesByIds<T extends CmsEntryValues = CmsEntryValues>(\n model: CmsModel,\n ids: string[]\n ) {\n return context.benchmark.measure(\n \"headlessCms.crud.entries.getLatestEntriesByIds\",\n async () => {\n const useCase = context.container.resolve(GetLatestEntriesByIdsUseCase);\n const result = await useCase.execute<T>(model, ids);\n\n if (result.isFail()) {\n const error = result.error;\n throw new WebinyError(\n error.message || \"Could not get latest entries by IDs.\",\n error.code || \"GET_LATEST_ENTRIES_BY_IDS_ERROR\",\n {\n error,\n ids,\n model\n }\n );\n }\n\n return result.value;\n }\n );\n },\n async getEntryRevisions<T extends CmsEntryValues = CmsEntryValues>(\n model: CmsModel,\n entryId: string\n ) {\n return context.benchmark.measure(\n \"headlessCms.crud.entries.getEntryRevisions\",\n async () => {\n const useCase = context.container.resolve(GetRevisionsByEntryIdUseCase);\n const result = await useCase.execute<T>(model, entryId);\n\n if (result.isFail()) {\n const error = result.error;\n throw new WebinyError(\n error.message || \"Could not get entry revisions.\",\n error.code || \"GET_ENTRY_REVISIONS_ERROR\",\n {\n error,\n entryId,\n model\n }\n );\n }\n\n return result.value;\n }\n );\n },\n /**\n * @internal\n */\n async getEntry<T extends CmsEntryValues = CmsEntryValues>(\n model: CmsModel,\n params: CmsEntryGetParams\n ): Promise<CmsEntry<T>> {\n return context.benchmark.measure(\"headlessCms.crud.entries.getEntry\", async () => {\n const useCase = context.container.resolve(GetEntryUseCase);\n const result = await useCase.execute<T>(model, params);\n\n if (result.isFail()) {\n const error = result.error;\n throw new WebinyError(\n error.message || \"Entry not found!\",\n error.code || \"GET_ENTRY_ERROR\",\n {\n error,\n params,\n model\n }\n );\n }\n\n return result.value;\n });\n },\n /**\n * @description Should not be used directly. Internal use only!\n *\n * @internal\n */\n async listEntries<T extends CmsEntryValues = CmsEntryValues>(\n model: CmsModel,\n params: CmsEntryListParams\n ): Promise<[CmsEntry<T>[], CmsEntryMeta]> {\n const useCase = context.container.resolve(ListEntriesUseCase);\n const result = await useCase.execute<T>(model, params);\n\n if (result.isFail()) {\n const error = result.error;\n throw new WebinyError(\n error.message || \"Could not list entries.\",\n error.code || \"LIST_ENTRIES_ERROR\",\n {\n error,\n params,\n model\n }\n );\n }\n\n const { entries, meta } = result.value;\n\n return [entries, meta];\n },\n async listLatestEntries<T extends CmsEntryValues = CmsEntryValues>(\n model: CmsModel,\n params?: CmsEntryListParams\n ): Promise<[CmsEntry<T>[], CmsEntryMeta]> {\n const useCase = context.container.resolve(ListLatestEntriesUseCase);\n const result = await useCase.execute<T>(model, params);\n\n if (result.isFail()) {\n const error = result.error;\n throw new WebinyError(\n error.message || \"Could not list latest entries.\",\n error.code || \"LIST_LATEST_ENTRIES_ERROR\",\n {\n error,\n params,\n model\n }\n );\n }\n\n const { entries, meta } = result.value;\n\n return [entries, meta];\n },\n async listDeletedEntries<T extends CmsEntryValues = CmsEntryValues>(\n model: CmsModel,\n params?: CmsEntryListParams\n ): Promise<[CmsEntry<T>[], CmsEntryMeta]> {\n const useCase = context.container.resolve(ListDeletedEntriesUseCase);\n const result = await useCase.execute<T>(model, params);\n\n if (result.isFail()) {\n const error = result.error;\n throw new WebinyError(\n error.message || \"Could not list deleted entries.\",\n error.code || \"LIST_DELETED_ENTRIES_ERROR\",\n {\n error,\n params,\n model\n }\n );\n }\n\n const { entries, meta } = result.value;\n\n return [entries, meta];\n },\n async listPublishedEntries<T extends CmsEntryValues = CmsEntryValues>(\n model: CmsModel,\n params?: CmsEntryListParams\n ): Promise<[CmsEntry<T>[], CmsEntryMeta]> {\n const useCase = context.container.resolve(ListPublishedEntriesUseCase);\n const result = await useCase.execute<T>(model, params);\n\n if (result.isFail()) {\n const error = result.error;\n throw new WebinyError(\n error.message || \"Could not list published entries.\",\n error.code || \"LIST_PUBLISHED_ENTRIES_ERROR\",\n {\n error,\n params,\n model\n }\n );\n }\n\n const { entries, meta } = result.value;\n return [entries, meta];\n },\n async createEntry<T extends CmsEntryValues = CmsEntryValues>(\n model: CmsModel,\n input: CreateCmsEntryInput<T>,\n options?: CreateCmsEntryOptionsInput\n ): Promise<CmsEntry<T>> {\n return context.benchmark.measure(\"headlessCms.crud.entries.createEntry\", async () => {\n return createEntry(model, input, options);\n });\n },\n async createEntryRevisionFrom<T extends CmsEntryValues = CmsEntryValues>(\n model: CmsModel,\n sourceId: string,\n input: CreateFromCmsEntryInput<T>,\n options?: CreateRevisionCmsEntryOptionsInput\n ) {\n return context.benchmark.measure(\n \"headlessCms.crud.entries.createEntryRevisionFrom\",\n async () => {\n return createEntryRevisionFrom<T>(model, sourceId, input, options);\n }\n );\n },\n async updateEntry<T extends CmsEntryValues = CmsEntryValues>(\n model: CmsModel,\n id: string,\n input: UpdateCmsEntryInput<T>,\n options?: UpdateCmsEntryOptionsInput\n ) {\n return context.benchmark.measure(\"headlessCms.crud.entries.updateEntry\", async () => {\n return updateEntry<T>(model, id, input, options);\n });\n },\n\n async updateRevisionDescription(model, id, revisionDescription) {\n return context.benchmark.measure(\n \"headlessCms.crud.entries.updateRevisionDescription\",\n async () => {\n return updateRevisionDescription(model, id, revisionDescription);\n }\n );\n },\n async validateEntry<T extends CmsEntryValues = CmsEntryValues>(\n model: CmsModel,\n id: string,\n input: UpdateCmsEntryInput<T>\n ) {\n return context.benchmark.measure(\"headlessCms.crud.entries.validateEntry\", async () => {\n return validateEntry<T>(model, id, input);\n });\n },\n async moveEntry<T extends CmsEntryValues = CmsEntryValues>(\n model: CmsModel,\n id: string,\n folderId: string\n ) {\n return context.benchmark.measure(\"headlessCms.crud.entries.moveEntry\", async () => {\n return moveEntry<T>(model, id, folderId);\n });\n },\n /**\n * Method used internally. Not documented and should not be used in users systems.\n * @internal\n */\n async republishEntry<T extends CmsEntryValues = CmsEntryValues>(\n model: CmsModel,\n id: string\n ) {\n return context.benchmark.measure(\n \"headlessCms.crud.entries.republishEntry\",\n async () => {\n return republishEntry<T>(model, id);\n }\n );\n },\n async deleteEntryRevision(model, id) {\n return context.benchmark.measure(\n \"headlessCms.crud.entries.deleteEntryRevision\",\n async () => {\n return deleteEntryRevision(model, id);\n }\n );\n },\n async deleteEntry(model, entryId, options) {\n const deleteEntryUseCase = context.container.resolve(DeleteEntryUseCase);\n return context.benchmark.measure(\"headlessCms.crud.entries.deleteEntry\", async () => {\n const result = await deleteEntryUseCase.execute(model, entryId, options ?? {});\n\n if (result.isFail()) {\n throw new WebinyError(\n result.error.message,\n result.error.code,\n result.error.data\n );\n }\n });\n },\n async restoreEntryFromBin<T extends CmsEntryValues = CmsEntryValues>(\n model: CmsModel,\n entryId: string\n ) {\n return context.benchmark.measure(\n \"headlessCms.crud.entries.restoreEntryFromBin\",\n async () => {\n const useCase = context.container.resolve(RestoreEntryFromBinUseCase);\n const result = await useCase.execute<T>(model, entryId);\n if (result.isFail()) {\n throw new WebinyError(\n result.error.message,\n result.error.code,\n result.error.data\n );\n }\n return result.value;\n }\n );\n },\n async deleteMultipleEntries(model, ids) {\n return context.benchmark.measure(\n \"headlessCms.crud.entries.deleteMultipleEntries\",\n async () => {\n return deleteMultipleEntries(model, ids);\n }\n );\n },\n async publishEntry<T extends CmsEntryValues = CmsEntryValues>(model: CmsModel, id: string) {\n return context.benchmark.measure(\"headlessCms.crud.entries.publishEntry\", async () => {\n return publishEntry<T>(model, id);\n });\n },\n async unpublishEntry<T extends CmsEntryValues = CmsEntryValues>(\n model: CmsModel,\n id: string\n ) {\n return context.benchmark.measure(\n \"headlessCms.crud.entries.unpublishEntry\",\n async () => {\n return unpublishEntry<T>(model, id);\n }\n );\n },\n async getUniqueFieldValues(model, params) {\n return context.benchmark.measure(\n \"headlessCms.crud.entries.getUniqueFieldValues\",\n async () => {\n return getUniqueFieldValues(model, params);\n }\n );\n }\n };\n};\n"],"names":["createContentEntryCrud","params","context","createEntry","model","rawInput","options","useCase","CreateEntryUseCase","result","createEntryRevisionFrom","sourceId","CreateEntryRevisionFromUseCase","updateEntry","id","UpdateEntryUseCase","updateRevisionDescription","revisionDescription","UpdateRevisionDescriptionUseCase","validateEntry","input","ValidateEntryUseCase","moveEntry","folderId","MoveEntryUseCase","republishEntry","RepublishEntryUseCase","deleteEntryRevision","revisionId","DeleteEntryRevisionUseCase","deleteMultipleEntries","DeleteMultipleEntriesUseCase","publishEntry","PublishEntryUseCase","unpublishEntry","UnpublishEntryUseCase","getUniqueFieldValues","GetUniqueFieldValuesUseCase","ids","GetEntriesByIdsUseCase","error","WebinyError","GetEntryByIdUseCase","GetPublishedEntriesByIdsUseCase","GetLatestEntriesByIdsUseCase","entryId","GetRevisionsByEntryIdUseCase","GetEntryUseCase","ListEntriesUseCase","entries","meta","ListLatestEntriesUseCase","ListDeletedEntriesUseCase","ListPublishedEntriesUseCase","deleteEntryUseCase","DeleteEntryUseCase","RestoreEntryFromBinUseCase"],"mappings":"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"}
|
|
@@ -30,13 +30,14 @@ const createDefaultFields = ()=>[
|
|
|
30
30
|
{
|
|
31
31
|
id: generateAlphaNumericLowerCaseId(8),
|
|
32
32
|
fieldId: "image",
|
|
33
|
-
type: "
|
|
33
|
+
type: "asset",
|
|
34
34
|
label: "Image",
|
|
35
35
|
validation: [],
|
|
36
36
|
listValidation: [],
|
|
37
37
|
renderer: {
|
|
38
|
-
name: "
|
|
38
|
+
name: "asset-input"
|
|
39
39
|
},
|
|
40
|
+
tags: [],
|
|
40
41
|
settings: {
|
|
41
42
|
imagesOnly: true
|
|
42
43
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"crud/contentModel/defaultFields.js","sources":["../../../src/crud/contentModel/defaultFields.ts"],"sourcesContent":["import type { CmsModelCreateInput, CmsModelFieldInput } from \"~/types/index.js\";\nimport { generateAlphaNumericLowerCaseId } from \"@webiny/utils\";\n\nconst createDefaultFields = (): CmsModelFieldInput[] => {\n return [\n {\n id: generateAlphaNumericLowerCaseId(8),\n fieldId: \"title\",\n type: \"text\",\n label: \"Title\",\n validation: [\n {\n name: \"required\",\n message: \"Title is a required field.\"\n }\n ],\n listValidation: [],\n renderer: {\n name: \"text-input\"\n }\n },\n {\n id: generateAlphaNumericLowerCaseId(8),\n fieldId: \"description\",\n type: \"long-text\",\n label: \"Description\",\n validation: [],\n listValidation: [],\n renderer: {\n name: \"long-text-text-area\"\n }\n },\n {\n id: generateAlphaNumericLowerCaseId(8),\n fieldId: \"image\",\n type: \"
|
|
1
|
+
{"version":3,"file":"crud/contentModel/defaultFields.js","sources":["../../../src/crud/contentModel/defaultFields.ts"],"sourcesContent":["import type { CmsModelCreateInput, CmsModelFieldInput } from \"~/types/index.js\";\nimport { generateAlphaNumericLowerCaseId } from \"@webiny/utils\";\n\nconst createDefaultFields = (): CmsModelFieldInput[] => {\n return [\n {\n id: generateAlphaNumericLowerCaseId(8),\n fieldId: \"title\",\n type: \"text\",\n label: \"Title\",\n validation: [\n {\n name: \"required\",\n message: \"Title is a required field.\"\n }\n ],\n listValidation: [],\n renderer: {\n name: \"text-input\"\n }\n },\n {\n id: generateAlphaNumericLowerCaseId(8),\n fieldId: \"description\",\n type: \"long-text\",\n label: \"Description\",\n validation: [],\n listValidation: [],\n renderer: {\n name: \"long-text-text-area\"\n }\n },\n {\n id: generateAlphaNumericLowerCaseId(8),\n fieldId: \"image\",\n type: \"asset\",\n label: \"Image\",\n validation: [],\n listValidation: [],\n renderer: {\n name: \"asset-input\"\n },\n tags: [],\n settings: {\n imagesOnly: true\n }\n }\n ];\n};\n\n/**\n * We only assign default fields if there are no fields in the model already.\n */\nexport const assignModelDefaultFields = (model: CmsModelCreateInput): void => {\n if (model.fields && model.fields.length !== 0) {\n return;\n }\n\n model.fields = createDefaultFields();\n model.layout = [[model.fields[0].id], [model.fields[1].id, model.fields[2].id]];\n};\n"],"names":["createDefaultFields","generateAlphaNumericLowerCaseId","assignModelDefaultFields","model"],"mappings":";AAGA,MAAMA,sBAAsB,IACjB;QACH;YACI,IAAIC,gCAAgC;YACpC,SAAS;YACT,MAAM;YACN,OAAO;YACP,YAAY;gBACR;oBACI,MAAM;oBACN,SAAS;gBACb;aACH;YACD,gBAAgB,EAAE;YAClB,UAAU;gBACN,MAAM;YACV;QACJ;QACA;YACI,IAAIA,gCAAgC;YACpC,SAAS;YACT,MAAM;YACN,OAAO;YACP,YAAY,EAAE;YACd,gBAAgB,EAAE;YAClB,UAAU;gBACN,MAAM;YACV;QACJ;QACA;YACI,IAAIA,gCAAgC;YACpC,SAAS;YACT,MAAM;YACN,OAAO;YACP,YAAY,EAAE;YACd,gBAAgB,EAAE;YAClB,UAAU;gBACN,MAAM;YACV;YACA,MAAM,EAAE;YACR,UAAU;gBACN,YAAY;YAChB;QACJ;KACH;AAME,MAAMC,2BAA2B,CAACC;IACrC,IAAIA,MAAM,MAAM,IAAIA,AAAwB,MAAxBA,MAAM,MAAM,CAAC,MAAM,EACnC;IAGJA,MAAM,MAAM,GAAGH;IACfG,MAAM,MAAM,GAAG;QAAC;YAACA,MAAM,MAAM,CAAC,EAAE,CAAC,EAAE;SAAC;QAAE;YAACA,MAAM,MAAM,CAAC,EAAE,CAAC,EAAE;YAAEA,MAAM,MAAM,CAAC,EAAE,CAAC,EAAE;SAAC;KAAC;AACnF"}
|
|
@@ -6,7 +6,7 @@ const validateEndingAllowed = (params)=>{
|
|
|
6
6
|
input: model.singularApiName,
|
|
7
7
|
disallowedEnding: disallowedEnding
|
|
8
8
|
});
|
|
9
|
-
|
|
9
|
+
if (false === isModelEndingAllowed(model.pluralApiName)) throw new error(`Content model with pluralApiName "${model.pluralApiName}" is not allowed, as it ends in disallowed value.`, "MODEL_PLURAL_API_NAME_NOT_ENDING_ALLOWED", {
|
|
10
10
|
input: model.pluralApiName,
|
|
11
11
|
disallowedEnding: disallowedEnding
|
|
12
12
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"crud/contentModel/validate/endingAllowed.js","sources":["../../../../src/crud/contentModel/validate/endingAllowed.ts"],"sourcesContent":["import WebinyError from \"@webiny/error\";\nimport { disallowedEnding, isModelEndingAllowed } from \"./isModelEndingAllowed.js\";\nimport type { CmsModel } from \"~/types/index.js\";\n\ninterface Params {\n model: Pick<CmsModel, \"singularApiName\" | \"pluralApiName\">;\n}\n\nexport const validateEndingAllowed = (params: Params): void => {\n const { model } = params;\n if (isModelEndingAllowed(model.singularApiName) === false) {\n throw new WebinyError(\n `Content model with singularApiName \"${model.singularApiName}\" is not allowed, as it ends in disallowed value.`,\n \"MODEL_SINGULAR_API_NAME_ENDING_NOT_ALLOWED\",\n {\n input: model.singularApiName,\n disallowedEnding\n }\n );\n } else if (isModelEndingAllowed(model.pluralApiName) === false) {\n throw new WebinyError(\n `Content model with pluralApiName \"${model.pluralApiName}\" is not allowed, as it ends in disallowed value.`,\n \"MODEL_PLURAL_API_NAME_NOT_ENDING_ALLOWED\",\n {\n input: model.pluralApiName,\n disallowedEnding: disallowedEnding\n }\n );\n }\n};\n"],"names":["validateEndingAllowed","params","model","isModelEndingAllowed","WebinyError","disallowedEnding"],"mappings":";;AAQO,MAAMA,wBAAwB,CAACC;IAClC,MAAM,EAAEC,KAAK,EAAE,GAAGD;IAClB,IAAIE,AAAgD,UAAhDA,qBAAqBD,MAAM,eAAe,GAC1C,MAAM,IAAIE,MACN,CAAC,oCAAoC,EAAEF,MAAM,eAAe,CAAC,iDAAiD,CAAC,EAC/G,8CACA;QACI,OAAOA,MAAM,eAAe;QAC5BG,kBAAgBA;IACpB;
|
|
1
|
+
{"version":3,"file":"crud/contentModel/validate/endingAllowed.js","sources":["../../../../src/crud/contentModel/validate/endingAllowed.ts"],"sourcesContent":["import WebinyError from \"@webiny/error\";\nimport { disallowedEnding, isModelEndingAllowed } from \"./isModelEndingAllowed.js\";\nimport type { CmsModel } from \"~/types/index.js\";\n\ninterface Params {\n model: Pick<CmsModel, \"singularApiName\" | \"pluralApiName\">;\n}\n\nexport const validateEndingAllowed = (params: Params): void => {\n const { model } = params;\n if (isModelEndingAllowed(model.singularApiName) === false) {\n throw new WebinyError(\n `Content model with singularApiName \"${model.singularApiName}\" is not allowed, as it ends in disallowed value.`,\n \"MODEL_SINGULAR_API_NAME_ENDING_NOT_ALLOWED\",\n {\n input: model.singularApiName,\n disallowedEnding\n }\n );\n } else if (isModelEndingAllowed(model.pluralApiName) === false) {\n throw new WebinyError(\n `Content model with pluralApiName \"${model.pluralApiName}\" is not allowed, as it ends in disallowed value.`,\n \"MODEL_PLURAL_API_NAME_NOT_ENDING_ALLOWED\",\n {\n input: model.pluralApiName,\n disallowedEnding: disallowedEnding\n }\n );\n }\n};\n"],"names":["validateEndingAllowed","params","model","isModelEndingAllowed","WebinyError","disallowedEnding"],"mappings":";;AAQO,MAAMA,wBAAwB,CAACC;IAClC,MAAM,EAAEC,KAAK,EAAE,GAAGD;IAClB,IAAIE,AAAgD,UAAhDA,qBAAqBD,MAAM,eAAe,GAC1C,MAAM,IAAIE,MACN,CAAC,oCAAoC,EAAEF,MAAM,eAAe,CAAC,iDAAiD,CAAC,EAC/G,8CACA;QACI,OAAOA,MAAM,eAAe;QAC5BG,kBAAgBA;IACpB;IAED,IAAIF,AAA8C,UAA9CA,qBAAqBD,MAAM,aAAa,GAC/C,MAAM,IAAIE,MACN,CAAC,kCAAkC,EAAEF,MAAM,aAAa,CAAC,iDAAiD,CAAC,EAC3G,4CACA;QACI,OAAOA,MAAM,aAAa;QAC1B,kBAAkBG;IACtB;AAGZ"}
|
|
@@ -4,7 +4,7 @@ const validatePluralApiName = (params)=>{
|
|
|
4
4
|
if (existingModel.singularApiName === model.pluralApiName) throw new error(`Content model with singularApiName "${model.pluralApiName}" already exists.`, "MODEL_SINGULAR_API_NAME_EXISTS", {
|
|
5
5
|
input: model.pluralApiName
|
|
6
6
|
});
|
|
7
|
-
|
|
7
|
+
if (existingModel.pluralApiName === model.pluralApiName) throw new error(`Content model with pluralApiName "${model.pluralApiName}" already exists.`, "MODEL_PLURAL_API_NAME_EXISTS", {
|
|
8
8
|
input: model.pluralApiName
|
|
9
9
|
});
|
|
10
10
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"crud/contentModel/validate/pluralApiName.js","sources":["../../../../src/crud/contentModel/validate/pluralApiName.ts"],"sourcesContent":["import WebinyError from \"@webiny/error\";\nimport type { CmsModel } from \"~/types/index.js\";\n\ninterface Params {\n existingModel: Pick<CmsModel, \"singularApiName\" | \"pluralApiName\">;\n model: Pick<CmsModel, \"singularApiName\" | \"pluralApiName\">;\n}\n\nexport const validatePluralApiName = (params: Params): void => {\n const { existingModel, model } = params;\n\n if (existingModel.singularApiName === model.pluralApiName) {\n throw new WebinyError(\n `Content model with singularApiName \"${model.pluralApiName}\" already exists.`,\n \"MODEL_SINGULAR_API_NAME_EXISTS\",\n {\n input: model.pluralApiName\n }\n );\n } else if (existingModel.pluralApiName === model.pluralApiName) {\n throw new WebinyError(\n `Content model with pluralApiName \"${model.pluralApiName}\" already exists.`,\n \"MODEL_PLURAL_API_NAME_EXISTS\",\n {\n input: model.pluralApiName\n }\n );\n }\n};\n"],"names":["validatePluralApiName","params","existingModel","model","WebinyError"],"mappings":";AAQO,MAAMA,wBAAwB,CAACC;IAClC,MAAM,EAAEC,aAAa,EAAEC,KAAK,EAAE,GAAGF;IAEjC,IAAIC,cAAc,eAAe,KAAKC,MAAM,aAAa,EACrD,MAAM,IAAIC,MACN,CAAC,oCAAoC,EAAED,MAAM,aAAa,CAAC,iBAAiB,CAAC,EAC7E,kCACA;QACI,OAAOA,MAAM,aAAa;IAC9B;
|
|
1
|
+
{"version":3,"file":"crud/contentModel/validate/pluralApiName.js","sources":["../../../../src/crud/contentModel/validate/pluralApiName.ts"],"sourcesContent":["import WebinyError from \"@webiny/error\";\nimport type { CmsModel } from \"~/types/index.js\";\n\ninterface Params {\n existingModel: Pick<CmsModel, \"singularApiName\" | \"pluralApiName\">;\n model: Pick<CmsModel, \"singularApiName\" | \"pluralApiName\">;\n}\n\nexport const validatePluralApiName = (params: Params): void => {\n const { existingModel, model } = params;\n\n if (existingModel.singularApiName === model.pluralApiName) {\n throw new WebinyError(\n `Content model with singularApiName \"${model.pluralApiName}\" already exists.`,\n \"MODEL_SINGULAR_API_NAME_EXISTS\",\n {\n input: model.pluralApiName\n }\n );\n } else if (existingModel.pluralApiName === model.pluralApiName) {\n throw new WebinyError(\n `Content model with pluralApiName \"${model.pluralApiName}\" already exists.`,\n \"MODEL_PLURAL_API_NAME_EXISTS\",\n {\n input: model.pluralApiName\n }\n );\n }\n};\n"],"names":["validatePluralApiName","params","existingModel","model","WebinyError"],"mappings":";AAQO,MAAMA,wBAAwB,CAACC;IAClC,MAAM,EAAEC,aAAa,EAAEC,KAAK,EAAE,GAAGF;IAEjC,IAAIC,cAAc,eAAe,KAAKC,MAAM,aAAa,EACrD,MAAM,IAAIC,MACN,CAAC,oCAAoC,EAAED,MAAM,aAAa,CAAC,iBAAiB,CAAC,EAC7E,kCACA;QACI,OAAOA,MAAM,aAAa;IAC9B;IAED,IAAID,cAAc,aAAa,KAAKC,MAAM,aAAa,EAC1D,MAAM,IAAIC,MACN,CAAC,kCAAkC,EAAED,MAAM,aAAa,CAAC,iBAAiB,CAAC,EAC3E,gCACA;QACI,OAAOA,MAAM,aAAa;IAC9B;AAGZ"}
|
|
@@ -4,7 +4,7 @@ const validateSingularApiName = (params)=>{
|
|
|
4
4
|
if (existingModel.singularApiName === model.singularApiName) throw new error(`Content model with singularApiName "${model.singularApiName}" already exists.`, "MODEL_SINGULAR_API_NAME_EXISTS", {
|
|
5
5
|
input: model.singularApiName
|
|
6
6
|
});
|
|
7
|
-
|
|
7
|
+
if (existingModel.pluralApiName === model.singularApiName) throw new error(`Content model with pluralApiName "${model.singularApiName}" already exists.`, "MODEL_PLURAL_API_NAME_EXISTS", {
|
|
8
8
|
input: model.singularApiName
|
|
9
9
|
});
|
|
10
10
|
};
|