@webiny/api-headless-cms 6.4.12-beta.4 → 6.5.0-beta.0
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.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.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 +3 -3
- package/features/contentEntry/entryDataFactories/CreateEntryRevisionFromDataFactory/CreateEntryRevisionFromDataFactory.js +10 -6
- package/features/contentEntry/entryDataFactories/CreateEntryRevisionFromDataFactory/CreateEntryRevisionFromDataFactory.js.map +1 -1
- package/features/contentEntry/entryDataFactories/UpdateEntryDataFactory/UpdateEntryDataFactory.d.ts +3 -1
- package/features/contentEntry/entryDataFactories/UpdateEntryDataFactory/UpdateEntryDataFactory.js +9 -3
- package/features/contentEntry/entryDataFactories/UpdateEntryDataFactory/UpdateEntryDataFactory.js.map +1 -1
- package/features/contentEntry/entryDataFactories/expiresAt.js +2 -2
- package/features/contentEntry/entryDataFactories/expiresAt.js.map +1 -1
- 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 +148 -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 +26 -29
- 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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"features/storage/fields/ObjectStorageTransform.js","sources":["../../../../src/features/storage/fields/ObjectStorageTransform.ts"],"sourcesContent":["import pReduce from \"p-reduce\";\nimport pMap from \"p-map\";\nimport type { CmsModel, CmsModelField } from \"~/types/index.js\";\nimport { StorageTransform } from \"../abstractions/StorageTransform.js\";\nimport { getBaseFieldType } from \"~/utils/getBaseFieldType.js\";\nimport type { GenericRecord } from \"@webiny/api/types.js\";\n\ninterface ProcessValueParams {\n fields: CmsModelField[];\n sourceValue: GenericRecord;\n getStorageTransform: (fieldType: string) => StorageTransform.Interface;\n model: CmsModel;\n operation: \"toStorage\" | \"fromStorage\";\n}\ninterface ProcessValue {\n (params: ProcessValueParams): Promise<GenericRecord>;\n}\n\nconst processValue: ProcessValue = async params => {\n const { fields, sourceValue, getStorageTransform, model, operation } = params;\n return await pReduce(\n fields,\n async (values, field) => {\n const baseType = getBaseFieldType(field);\n const storageTransform = getStorageTransform(baseType);\n if (!storageTransform) {\n throw new Error(`Missing storage transform for field type \"${baseType}\".`);\n }\n const input = sourceValue[field.fieldId];\n const value = await storageTransform[operation]({\n model,\n field,\n value: input,\n getStorageTransform\n });\n return { ...values, [field.fieldId]: value };\n },\n {}\n );\n};\n\nclass StorageTransformImpl implements StorageTransform.Interface {\n public readonly fieldType = \"object\";\n\n public async toStorage(\n params: StorageTransform.ToStorageParams\n ): StorageTransform.ToStorageResponse {\n const { value, field, getStorageTransform, model } = params;\n if (!value) {\n return null;\n }\n\n const fields = (field.settings?.fields || []) as CmsModelField[];\n\n if (field.list) {\n return await pMap(value as GenericRecord[],
|
|
1
|
+
{"version":3,"file":"features/storage/fields/ObjectStorageTransform.js","sources":["../../../../src/features/storage/fields/ObjectStorageTransform.ts"],"sourcesContent":["import pReduce from \"p-reduce\";\nimport pMap from \"p-map\";\nimport type { CmsModel, CmsModelField } from \"~/types/index.js\";\nimport { StorageTransform } from \"../abstractions/StorageTransform.js\";\nimport { getBaseFieldType } from \"~/utils/getBaseFieldType.js\";\nimport type { GenericRecord } from \"@webiny/api/types.js\";\n\ninterface ProcessValueParams {\n fields: CmsModelField[];\n sourceValue: GenericRecord;\n getStorageTransform: (fieldType: string) => StorageTransform.Interface;\n model: CmsModel;\n operation: \"toStorage\" | \"fromStorage\";\n}\ninterface ProcessValue {\n (params: ProcessValueParams): Promise<GenericRecord>;\n}\n\nconst processValue: ProcessValue = async params => {\n const { fields, sourceValue, getStorageTransform, model, operation } = params;\n return await pReduce(\n fields,\n async (values, field) => {\n const baseType = getBaseFieldType(field);\n const storageTransform = getStorageTransform(baseType);\n if (!storageTransform) {\n throw new Error(`Missing storage transform for field type \"${baseType}\".`);\n }\n const input = sourceValue[field.fieldId];\n const value = await storageTransform[operation]({\n model,\n field,\n value: input,\n getStorageTransform\n });\n return { ...values, [field.fieldId]: value };\n },\n {}\n );\n};\n\nclass StorageTransformImpl implements StorageTransform.Interface {\n public readonly fieldType = \"object\";\n\n public async toStorage(\n params: StorageTransform.ToStorageParams\n ): StorageTransform.ToStorageResponse {\n const { value, field, getStorageTransform, model } = params;\n if (!value) {\n return null;\n }\n\n const fields = (field.settings?.fields || []) as CmsModelField[];\n\n if (field.list) {\n return await pMap(value as GenericRecord[], async itemValue => {\n const processed = await processValue({\n sourceValue: itemValue,\n getStorageTransform,\n model,\n operation: \"toStorage\",\n fields\n });\n return itemValue._id ? { _id: itemValue._id, ...processed } : processed;\n });\n }\n\n const processed = await processValue({\n sourceValue: value,\n getStorageTransform,\n model,\n operation: \"toStorage\",\n fields\n });\n return value._id ? { _id: value._id, ...processed } : processed;\n }\n\n public async fromStorage(\n params: StorageTransform.FromStorageParams\n ): StorageTransform.FromStorageResponse {\n const { field, value: input, getStorageTransform, model } = params;\n if (!input) {\n return null;\n }\n\n const fields = (field.settings?.fields || []) as CmsModelField[];\n\n if (field.list) {\n const values = input as GenericRecord[];\n\n return await Promise.all(\n values.map(async value => {\n const processed = await processValue({\n sourceValue: value,\n getStorageTransform,\n model,\n operation: \"fromStorage\",\n fields\n });\n return value._id ? { _id: value._id, ...processed } : processed;\n })\n );\n }\n\n const processed = await processValue({\n sourceValue: input,\n getStorageTransform,\n model,\n operation: \"fromStorage\",\n fields\n });\n return input._id ? { _id: input._id, ...processed } : processed;\n }\n}\n\nexport const ObjectStorageTransform = StorageTransform.createImplementation({\n implementation: StorageTransformImpl,\n dependencies: []\n});\n"],"names":["processValue","params","fields","sourceValue","getStorageTransform","model","operation","pReduce","values","field","baseType","getBaseFieldType","storageTransform","Error","input","value","StorageTransformImpl","pMap","itemValue","processed","Promise","ObjectStorageTransform","StorageTransform"],"mappings":";;;;AAkBA,MAAMA,eAA6B,OAAMC;IACrC,MAAM,EAAEC,MAAM,EAAEC,WAAW,EAAEC,mBAAmB,EAAEC,KAAK,EAAEC,SAAS,EAAE,GAAGL;IACvE,OAAO,MAAMM,SACTL,QACA,OAAOM,QAAQC;QACX,MAAMC,WAAWC,iBAAiBF;QAClC,MAAMG,mBAAmBR,oBAAoBM;QAC7C,IAAI,CAACE,kBACD,MAAM,IAAIC,MAAM,CAAC,0CAA0C,EAAEH,SAAS,EAAE,CAAC;QAE7E,MAAMI,QAAQX,WAAW,CAACM,MAAM,OAAO,CAAC;QACxC,MAAMM,QAAQ,MAAMH,gBAAgB,CAACN,UAAU,CAAC;YAC5CD;YACAI;YACA,OAAOK;YACPV;QACJ;QACA,OAAO;YAAE,GAAGI,MAAM;YAAE,CAACC,MAAM,OAAO,CAAC,EAAEM;QAAM;IAC/C,GACA,CAAC;AAET;AAEA,MAAMC;IAGF,MAAa,UACTf,MAAwC,EACN;QAClC,MAAM,EAAEc,KAAK,EAAEN,KAAK,EAAEL,mBAAmB,EAAEC,KAAK,EAAE,GAAGJ;QACrD,IAAI,CAACc,OACD,OAAO;QAGX,MAAMb,SAAUO,MAAM,QAAQ,EAAE,UAAU,EAAE;QAE5C,IAAIA,MAAM,IAAI,EACV,OAAO,MAAMQ,MAAKF,OAA0B,OAAMG;YAC9C,MAAMC,YAAY,MAAMnB,aAAa;gBACjC,aAAakB;gBACbd;gBACAC;gBACA,WAAW;gBACXH;YACJ;YACA,OAAOgB,UAAU,GAAG,GAAG;gBAAE,KAAKA,UAAU,GAAG;gBAAE,GAAGC,SAAS;YAAC,IAAIA;QAClE;QAGJ,MAAMA,YAAY,MAAMnB,aAAa;YACjC,aAAae;YACbX;YACAC;YACA,WAAW;YACXH;QACJ;QACA,OAAOa,MAAM,GAAG,GAAG;YAAE,KAAKA,MAAM,GAAG;YAAE,GAAGI,SAAS;QAAC,IAAIA;IAC1D;IAEA,MAAa,YACTlB,MAA0C,EACN;QACpC,MAAM,EAAEQ,KAAK,EAAE,OAAOK,KAAK,EAAEV,mBAAmB,EAAEC,KAAK,EAAE,GAAGJ;QAC5D,IAAI,CAACa,OACD,OAAO;QAGX,MAAMZ,SAAUO,MAAM,QAAQ,EAAE,UAAU,EAAE;QAE5C,IAAIA,MAAM,IAAI,EAAE;YACZ,MAAMD,SAASM;YAEf,OAAO,MAAMM,QAAQ,GAAG,CACpBZ,OAAO,GAAG,CAAC,OAAMO;gBACb,MAAMI,YAAY,MAAMnB,aAAa;oBACjC,aAAae;oBACbX;oBACAC;oBACA,WAAW;oBACXH;gBACJ;gBACA,OAAOa,MAAM,GAAG,GAAG;oBAAE,KAAKA,MAAM,GAAG;oBAAE,GAAGI,SAAS;gBAAC,IAAIA;YAC1D;QAER;QAEA,MAAMA,YAAY,MAAMnB,aAAa;YACjC,aAAac;YACbV;YACAC;YACA,WAAW;YACXH;QACJ;QACA,OAAOY,MAAM,GAAG,GAAG;YAAE,KAAKA,MAAM,GAAG;YAAE,GAAGK,SAAS;QAAC,IAAIA;IAC1D;;aAtEgB,SAAS,GAAG;;AAuEhC;AAEO,MAAME,yBAAyBC,iBAAiB,oBAAoB,CAAC;IACxE,gBAAgBN;IAChB,cAAc,EAAE;AACpB"}
|
|
@@ -8,7 +8,7 @@ class RichTextStorageTransformImpl {
|
|
|
8
8
|
}
|
|
9
9
|
async fromStorage({ field, value: storageValue }) {
|
|
10
10
|
if (!storageValue) return storageValue;
|
|
11
|
-
|
|
11
|
+
if ("object" != typeof storageValue) throw new WebinyError(`RichText value received in "fromStorage" function is not an object in field "${field.storageId}" - ${field.fieldId}.`);
|
|
12
12
|
try {
|
|
13
13
|
return await this.compressionHandler.decompress(storageValue);
|
|
14
14
|
} catch {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"features/storage/fields/RichTextStorageTransform.js","sources":["../../../../src/features/storage/fields/RichTextStorageTransform.ts"],"sourcesContent":["import { StorageTransform } from \"../abstractions/StorageTransform.js\";\nimport { WebinyError } from \"@webiny/error\";\nimport { CompressionHandler } from \"@webiny/utils/exports/api.js\";\n\nclass RichTextStorageTransformImpl implements StorageTransform.Interface {\n public readonly fieldType = \"rich-text\";\n\n public constructor(private readonly compressionHandler: CompressionHandler.Interface) {}\n\n public async fromStorage({\n field,\n value: storageValue\n }: StorageTransform.FromStorageParams): StorageTransform.FromStorageResponse {\n if (!storageValue) {\n return storageValue;\n } else if (typeof storageValue !== \"object\") {\n throw new WebinyError(\n `RichText value received in \"fromStorage\" function is not an object in field \"${field.storageId}\" - ${field.fieldId}.`\n );\n }\n\n try {\n return await this.compressionHandler.decompress(storageValue);\n } catch {\n return storageValue;\n }\n }\n\n public async toStorage({\n value\n }: StorageTransform.ToStorageParams): StorageTransform.ToStorageResponse {\n try {\n return await this.compressionHandler.compress(value);\n } catch {\n return value;\n }\n }\n}\n\nexport const RichTextStorageTransform = StorageTransform.createImplementation({\n implementation: RichTextStorageTransformImpl,\n dependencies: [CompressionHandler]\n});\n"],"names":["RichTextStorageTransformImpl","compressionHandler","field","storageValue","WebinyError","value","RichTextStorageTransform","StorageTransform","CompressionHandler"],"mappings":";;;AAIA,MAAMA;IAGF,YAAoCC,kBAAgD,CAAE;aAAlDA,kBAAkB,GAAlBA;aAFpB,SAAS,GAAG;IAE2D;IAEvF,MAAa,YAAY,EACrBC,KAAK,EACL,OAAOC,YAAY,EACc,EAAwC;QACzE,IAAI,CAACA,cACD,OAAOA;
|
|
1
|
+
{"version":3,"file":"features/storage/fields/RichTextStorageTransform.js","sources":["../../../../src/features/storage/fields/RichTextStorageTransform.ts"],"sourcesContent":["import { StorageTransform } from \"../abstractions/StorageTransform.js\";\nimport { WebinyError } from \"@webiny/error\";\nimport { CompressionHandler } from \"@webiny/utils/exports/api.js\";\n\nclass RichTextStorageTransformImpl implements StorageTransform.Interface {\n public readonly fieldType = \"rich-text\";\n\n public constructor(private readonly compressionHandler: CompressionHandler.Interface) {}\n\n public async fromStorage({\n field,\n value: storageValue\n }: StorageTransform.FromStorageParams): StorageTransform.FromStorageResponse {\n if (!storageValue) {\n return storageValue;\n } else if (typeof storageValue !== \"object\") {\n throw new WebinyError(\n `RichText value received in \"fromStorage\" function is not an object in field \"${field.storageId}\" - ${field.fieldId}.`\n );\n }\n\n try {\n return await this.compressionHandler.decompress(storageValue);\n } catch {\n return storageValue;\n }\n }\n\n public async toStorage({\n value\n }: StorageTransform.ToStorageParams): StorageTransform.ToStorageResponse {\n try {\n return await this.compressionHandler.compress(value);\n } catch {\n return value;\n }\n }\n}\n\nexport const RichTextStorageTransform = StorageTransform.createImplementation({\n implementation: RichTextStorageTransformImpl,\n dependencies: [CompressionHandler]\n});\n"],"names":["RichTextStorageTransformImpl","compressionHandler","field","storageValue","WebinyError","value","RichTextStorageTransform","StorageTransform","CompressionHandler"],"mappings":";;;AAIA,MAAMA;IAGF,YAAoCC,kBAAgD,CAAE;aAAlDA,kBAAkB,GAAlBA;aAFpB,SAAS,GAAG;IAE2D;IAEvF,MAAa,YAAY,EACrBC,KAAK,EACL,OAAOC,YAAY,EACc,EAAwC;QACzE,IAAI,CAACA,cACD,OAAOA;QACJ,IAAI,AAAwB,YAAxB,OAAOA,cACd,MAAM,IAAIC,YACN,CAAC,6EAA6E,EAAEF,MAAM,SAAS,CAAC,IAAI,EAAEA,MAAM,OAAO,CAAC,CAAC,CAAC;QAI9H,IAAI;YACA,OAAO,MAAM,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAACC;QACpD,EAAE,OAAM;YACJ,OAAOA;QACX;IACJ;IAEA,MAAa,UAAU,EACnBE,KAAK,EAC0B,EAAsC;QACrE,IAAI;YACA,OAAO,MAAM,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAACA;QAClD,EAAE,OAAM;YACJ,OAAOA;QACX;IACJ;AACJ;AAEO,MAAMC,2BAA2BC,iBAAiB,oBAAoB,CAAC;IAC1E,gBAAgBP;IAChB,cAAc;QAACQ;KAAmB;AACtC"}
|
|
@@ -4,7 +4,7 @@ class DateGteValidatorImpl {
|
|
|
4
4
|
async validate({ value, validator }) {
|
|
5
5
|
const { value: gteValue, type } = validator.settings || {};
|
|
6
6
|
if (void 0 === gteValue) return true;
|
|
7
|
-
|
|
7
|
+
if ("time" === type) return validation.validate(value, `timeGte:${gteValue}`).then((v)=>true === v).catch(()=>false);
|
|
8
8
|
return validation.validate(value, `dateGte:${gteValue}`).then((v)=>true === v).catch(()=>false);
|
|
9
9
|
}
|
|
10
10
|
constructor(){
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"features/validation/validators/DateGteValidator.js","sources":["../../../../src/features/validation/validators/DateGteValidator.ts"],"sourcesContent":["import { validation } from \"@webiny/validation\";\nimport { CmsModelFieldValidator } from \"../abstractions/CmsModelFieldValidator.js\";\nimport type { CmsModelFieldValidatorValidateParams } from \"~/types/types.js\";\n\nclass DateGteValidatorImpl implements CmsModelFieldValidator.Interface {\n public readonly name = \"dateGte\";\n\n public async validate({\n value,\n validator\n }: CmsModelFieldValidatorValidateParams): Promise<boolean> {\n const { value: gteValue, type } = validator.settings || {};\n if (typeof gteValue === \"undefined\") {\n return true;\n } else if (type === \"time\") {\n return validation\n .validate(value, `timeGte:${gteValue}`)\n .then(v => v === true)\n .catch(() => false);\n }\n return validation\n .validate(value, `dateGte:${gteValue}`)\n .then(v => v === true)\n .catch(() => false);\n }\n}\n\nexport const DateGteValidator = CmsModelFieldValidator.createImplementation({\n implementation: DateGteValidatorImpl,\n dependencies: []\n});\n"],"names":["DateGteValidatorImpl","value","validator","gteValue","type","validation","v","DateGteValidator","CmsModelFieldValidator"],"mappings":";;AAIA,MAAMA;IAGF,MAAa,SAAS,EAClBC,KAAK,EACLC,SAAS,EAC0B,EAAoB;QACvD,MAAM,EAAE,OAAOC,QAAQ,EAAEC,IAAI,EAAE,GAAGF,UAAU,QAAQ,IAAI,CAAC;QACzD,IAAI,AAAoB,WAAbC,UACP,OAAO;
|
|
1
|
+
{"version":3,"file":"features/validation/validators/DateGteValidator.js","sources":["../../../../src/features/validation/validators/DateGteValidator.ts"],"sourcesContent":["import { validation } from \"@webiny/validation\";\nimport { CmsModelFieldValidator } from \"../abstractions/CmsModelFieldValidator.js\";\nimport type { CmsModelFieldValidatorValidateParams } from \"~/types/types.js\";\n\nclass DateGteValidatorImpl implements CmsModelFieldValidator.Interface {\n public readonly name = \"dateGte\";\n\n public async validate({\n value,\n validator\n }: CmsModelFieldValidatorValidateParams): Promise<boolean> {\n const { value: gteValue, type } = validator.settings || {};\n if (typeof gteValue === \"undefined\") {\n return true;\n } else if (type === \"time\") {\n return validation\n .validate(value, `timeGte:${gteValue}`)\n .then(v => v === true)\n .catch(() => false);\n }\n return validation\n .validate(value, `dateGte:${gteValue}`)\n .then(v => v === true)\n .catch(() => false);\n }\n}\n\nexport const DateGteValidator = CmsModelFieldValidator.createImplementation({\n implementation: DateGteValidatorImpl,\n dependencies: []\n});\n"],"names":["DateGteValidatorImpl","value","validator","gteValue","type","validation","v","DateGteValidator","CmsModelFieldValidator"],"mappings":";;AAIA,MAAMA;IAGF,MAAa,SAAS,EAClBC,KAAK,EACLC,SAAS,EAC0B,EAAoB;QACvD,MAAM,EAAE,OAAOC,QAAQ,EAAEC,IAAI,EAAE,GAAGF,UAAU,QAAQ,IAAI,CAAC;QACzD,IAAI,AAAoB,WAAbC,UACP,OAAO;QACJ,IAAIC,AAAS,WAATA,MACP,OAAOC,WAAAA,QACM,CAACJ,OAAO,CAAC,QAAQ,EAAEE,UAAU,EACrC,IAAI,CAACG,CAAAA,IAAKA,AAAM,SAANA,GACV,KAAK,CAAC,IAAM;QAErB,OAAOD,WAAAA,QACM,CAACJ,OAAO,CAAC,QAAQ,EAAEE,UAAU,EACrC,IAAI,CAACG,CAAAA,IAAKA,AAAM,SAANA,GACV,KAAK,CAAC,IAAM;IACrB;;aAnBgB,IAAI,GAAG;;AAoB3B;AAEO,MAAMC,mBAAmBC,uBAAuB,oBAAoB,CAAC;IACxE,gBAAgBR;IAChB,cAAc,EAAE;AACpB"}
|
|
@@ -4,7 +4,7 @@ class DateLteValidatorImpl {
|
|
|
4
4
|
async validate({ value, validator }) {
|
|
5
5
|
const { value: lteValue, type } = validator.settings || {};
|
|
6
6
|
if (void 0 === lteValue) return true;
|
|
7
|
-
|
|
7
|
+
if ("time" === type) return validation.validate(value, `timeLte:${lteValue}`).then((v)=>true === v).catch(()=>false);
|
|
8
8
|
return validation.validate(value, `dateLte:${lteValue}`).then((v)=>true === v).catch(()=>false);
|
|
9
9
|
}
|
|
10
10
|
constructor(){
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"features/validation/validators/DateLteValidator.js","sources":["../../../../src/features/validation/validators/DateLteValidator.ts"],"sourcesContent":["import { validation } from \"@webiny/validation\";\nimport { CmsModelFieldValidator } from \"../abstractions/CmsModelFieldValidator.js\";\nimport type { CmsModelFieldValidatorValidateParams } from \"~/types/types.js\";\n\nclass DateLteValidatorImpl implements CmsModelFieldValidator.Interface {\n public readonly name = \"dateLte\";\n\n public async validate({\n value,\n validator\n }: CmsModelFieldValidatorValidateParams): Promise<boolean> {\n const { value: lteValue, type } = validator.settings || {};\n if (typeof lteValue === \"undefined\") {\n return true;\n } else if (type === \"time\") {\n return validation\n .validate(value, `timeLte:${lteValue}`)\n .then(v => v === true)\n .catch(() => false);\n }\n return validation\n .validate(value, `dateLte:${lteValue}`)\n .then(v => v === true)\n .catch(() => false);\n }\n}\n\nexport const DateLteValidator = CmsModelFieldValidator.createImplementation({\n implementation: DateLteValidatorImpl,\n dependencies: []\n});\n"],"names":["DateLteValidatorImpl","value","validator","lteValue","type","validation","v","DateLteValidator","CmsModelFieldValidator"],"mappings":";;AAIA,MAAMA;IAGF,MAAa,SAAS,EAClBC,KAAK,EACLC,SAAS,EAC0B,EAAoB;QACvD,MAAM,EAAE,OAAOC,QAAQ,EAAEC,IAAI,EAAE,GAAGF,UAAU,QAAQ,IAAI,CAAC;QACzD,IAAI,AAAoB,WAAbC,UACP,OAAO;
|
|
1
|
+
{"version":3,"file":"features/validation/validators/DateLteValidator.js","sources":["../../../../src/features/validation/validators/DateLteValidator.ts"],"sourcesContent":["import { validation } from \"@webiny/validation\";\nimport { CmsModelFieldValidator } from \"../abstractions/CmsModelFieldValidator.js\";\nimport type { CmsModelFieldValidatorValidateParams } from \"~/types/types.js\";\n\nclass DateLteValidatorImpl implements CmsModelFieldValidator.Interface {\n public readonly name = \"dateLte\";\n\n public async validate({\n value,\n validator\n }: CmsModelFieldValidatorValidateParams): Promise<boolean> {\n const { value: lteValue, type } = validator.settings || {};\n if (typeof lteValue === \"undefined\") {\n return true;\n } else if (type === \"time\") {\n return validation\n .validate(value, `timeLte:${lteValue}`)\n .then(v => v === true)\n .catch(() => false);\n }\n return validation\n .validate(value, `dateLte:${lteValue}`)\n .then(v => v === true)\n .catch(() => false);\n }\n}\n\nexport const DateLteValidator = CmsModelFieldValidator.createImplementation({\n implementation: DateLteValidatorImpl,\n dependencies: []\n});\n"],"names":["DateLteValidatorImpl","value","validator","lteValue","type","validation","v","DateLteValidator","CmsModelFieldValidator"],"mappings":";;AAIA,MAAMA;IAGF,MAAa,SAAS,EAClBC,KAAK,EACLC,SAAS,EAC0B,EAAoB;QACvD,MAAM,EAAE,OAAOC,QAAQ,EAAEC,IAAI,EAAE,GAAGF,UAAU,QAAQ,IAAI,CAAC;QACzD,IAAI,AAAoB,WAAbC,UACP,OAAO;QACJ,IAAIC,AAAS,WAATA,MACP,OAAOC,WAAAA,QACM,CAACJ,OAAO,CAAC,QAAQ,EAAEE,UAAU,EACrC,IAAI,CAACG,CAAAA,IAAKA,AAAM,SAANA,GACV,KAAK,CAAC,IAAM;QAErB,OAAOD,WAAAA,QACM,CAACJ,OAAO,CAAC,QAAQ,EAAEE,UAAU,EACrC,IAAI,CAACG,CAAAA,IAAKA,AAAM,SAANA,GACV,KAAK,CAAC,IAAM;IACrB;;aAnBgB,IAAI,GAAG;;AAoB3B;AAEO,MAAMC,mBAAmBC,uBAAuB,oBAAoB,CAAC;IACxE,gBAAgBR;IAChB,cAAc,EAAE;AACpB"}
|
|
@@ -15,7 +15,7 @@ class PatternValidatorImpl {
|
|
|
15
15
|
if (patternValidator) pattern = patternValidator.pattern;
|
|
16
16
|
}
|
|
17
17
|
if (!pattern) return true;
|
|
18
|
-
return new RegExp(pattern.regex, pattern.flags).test(value);
|
|
18
|
+
return new RegExp(pattern.regex, pattern.flags || void 0).test(value);
|
|
19
19
|
}
|
|
20
20
|
}
|
|
21
21
|
const PatternValidator = CmsModelFieldValidator.createImplementation({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"features/validation/validators/PatternValidator.js","sources":["../../../../src/features/validation/validators/PatternValidator.ts"],"sourcesContent":["import { CmsModelFieldValidator } from \"../abstractions/CmsModelFieldValidator.js\";\nimport { CmsModelFieldPatternValidatorRegistry } from \"../abstractions/CmsModelFieldPatternValidatorRegistry.js\";\nimport type { CmsModelFieldValidatorValidateParams } from \"~/types/types.js\";\n\nclass PatternValidatorImpl implements CmsModelFieldValidator.Interface {\n public readonly name = \"pattern\";\n\n public constructor(\n private readonly patternRegistry: CmsModelFieldPatternValidatorRegistry.Interface\n ) {}\n\n public async validate({\n value,\n validator\n }: CmsModelFieldValidatorValidateParams): Promise<boolean> {\n if (typeof value !== \"string\" || !value) {\n return true;\n }\n\n const { settings } = validator;\n\n let pattern;\n if (settings?.preset === \"custom\") {\n pattern = settings;\n } else if (settings?.preset) {\n const patternValidator = this.patternRegistry.get(settings.preset);\n if (patternValidator) {\n pattern = patternValidator.pattern;\n }\n }\n\n if (!pattern) {\n return true;\n }\n\n return new RegExp(pattern.regex, pattern.flags).test(value);\n }\n}\n\nexport const PatternValidator = CmsModelFieldValidator.createImplementation({\n implementation: PatternValidatorImpl,\n dependencies: [CmsModelFieldPatternValidatorRegistry]\n});\n"],"names":["PatternValidatorImpl","patternRegistry","value","validator","settings","pattern","patternValidator","RegExp","PatternValidator","CmsModelFieldValidator","CmsModelFieldPatternValidatorRegistry"],"mappings":";;AAIA,MAAMA;IAGF,YACqBC,eAAgE,CACnF;aADmBA,eAAe,GAAfA;aAHL,IAAI,GAAG;IAIpB;IAEH,MAAa,SAAS,EAClBC,KAAK,EACLC,SAAS,EAC0B,EAAoB;QACvD,IAAI,AAAiB,YAAjB,OAAOD,SAAsB,CAACA,OAC9B,OAAO;QAGX,MAAM,EAAEE,QAAQ,EAAE,GAAGD;QAErB,IAAIE;QACJ,IAAID,UAAU,WAAW,UACrBC,UAAUD;aACP,IAAIA,UAAU,QAAQ;YACzB,MAAME,mBAAmB,IAAI,CAAC,eAAe,CAAC,GAAG,CAACF,SAAS,MAAM;YACjE,IAAIE,kBACAD,UAAUC,iBAAiB,OAAO;QAE1C;QAEA,IAAI,CAACD,SACD,OAAO;QAGX,OAAO,IAAIE,OAAOF,QAAQ,KAAK,EAAEA,QAAQ,KAAK,
|
|
1
|
+
{"version":3,"file":"features/validation/validators/PatternValidator.js","sources":["../../../../src/features/validation/validators/PatternValidator.ts"],"sourcesContent":["import { CmsModelFieldValidator } from \"../abstractions/CmsModelFieldValidator.js\";\nimport { CmsModelFieldPatternValidatorRegistry } from \"../abstractions/CmsModelFieldPatternValidatorRegistry.js\";\nimport type { CmsModelFieldValidatorValidateParams } from \"~/types/types.js\";\n\nclass PatternValidatorImpl implements CmsModelFieldValidator.Interface {\n public readonly name = \"pattern\";\n\n public constructor(\n private readonly patternRegistry: CmsModelFieldPatternValidatorRegistry.Interface\n ) {}\n\n public async validate({\n value,\n validator\n }: CmsModelFieldValidatorValidateParams): Promise<boolean> {\n if (typeof value !== \"string\" || !value) {\n return true;\n }\n\n const { settings } = validator;\n\n let pattern;\n if (settings?.preset === \"custom\") {\n pattern = settings;\n } else if (settings?.preset) {\n const patternValidator = this.patternRegistry.get(settings.preset);\n if (patternValidator) {\n pattern = patternValidator.pattern;\n }\n }\n\n if (!pattern) {\n return true;\n }\n\n return new RegExp(pattern.regex, pattern.flags || undefined).test(value);\n }\n}\n\nexport const PatternValidator = CmsModelFieldValidator.createImplementation({\n implementation: PatternValidatorImpl,\n dependencies: [CmsModelFieldPatternValidatorRegistry]\n});\n"],"names":["PatternValidatorImpl","patternRegistry","value","validator","settings","pattern","patternValidator","RegExp","undefined","PatternValidator","CmsModelFieldValidator","CmsModelFieldPatternValidatorRegistry"],"mappings":";;AAIA,MAAMA;IAGF,YACqBC,eAAgE,CACnF;aADmBA,eAAe,GAAfA;aAHL,IAAI,GAAG;IAIpB;IAEH,MAAa,SAAS,EAClBC,KAAK,EACLC,SAAS,EAC0B,EAAoB;QACvD,IAAI,AAAiB,YAAjB,OAAOD,SAAsB,CAACA,OAC9B,OAAO;QAGX,MAAM,EAAEE,QAAQ,EAAE,GAAGD;QAErB,IAAIE;QACJ,IAAID,UAAU,WAAW,UACrBC,UAAUD;aACP,IAAIA,UAAU,QAAQ;YACzB,MAAME,mBAAmB,IAAI,CAAC,eAAe,CAAC,GAAG,CAACF,SAAS,MAAM;YACjE,IAAIE,kBACAD,UAAUC,iBAAiB,OAAO;QAE1C;QAEA,IAAI,CAACD,SACD,OAAO;QAGX,OAAO,IAAIE,OAAOF,QAAQ,KAAK,EAAEA,QAAQ,KAAK,IAAIG,QAAW,IAAI,CAACN;IACtE;AACJ;AAEO,MAAMO,mBAAmBC,uBAAuB,oBAAoB,CAAC;IACxE,gBAAgBV;IAChB,cAAc;QAACW;KAAsC;AACzD"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { CmsWhereMapper } from "./abstractions.js";
|
|
2
2
|
const isPlainObject = (value)=>{
|
|
3
3
|
if (!value || "object" != typeof value) return false;
|
|
4
|
-
|
|
4
|
+
if (Array.isArray(value)) return false;
|
|
5
5
|
return true;
|
|
6
6
|
};
|
|
7
7
|
const isLogicalKey = (key)=>"AND" === key || "OR" === key;
|
|
@@ -9,11 +9,8 @@ class WhereMapperImpl {
|
|
|
9
9
|
map(params) {
|
|
10
10
|
const { fields: modelFields, input } = params;
|
|
11
11
|
if (!input) return;
|
|
12
|
-
const fields = modelFields.map((field)=>field.fieldId);
|
|
13
|
-
const isField = (key)=>{
|
|
14
|
-
const field = key.split("_")[0];
|
|
15
|
-
return fields.includes(field);
|
|
16
|
-
};
|
|
12
|
+
const fields = modelFields.map((field)=>field.fieldId).sort((a, b)=>b.length - a.length);
|
|
13
|
+
const isField = (key)=>fields.some((fieldId)=>key === fieldId || key.startsWith(`${fieldId}_`));
|
|
17
14
|
return this.mapWhere({
|
|
18
15
|
input,
|
|
19
16
|
isField
|
|
@@ -32,7 +29,13 @@ class WhereMapperImpl {
|
|
|
32
29
|
isField
|
|
33
30
|
}));
|
|
34
31
|
continue;
|
|
35
|
-
}
|
|
32
|
+
}
|
|
33
|
+
if ("values" === key && isPlainObject(value)) {
|
|
34
|
+
if (!out.values) out.values = {};
|
|
35
|
+
Object.assign(out.values, value);
|
|
36
|
+
continue;
|
|
37
|
+
}
|
|
38
|
+
if (isField(key)) {
|
|
36
39
|
if (!out.values) out.values = {};
|
|
37
40
|
out.values[key] = value;
|
|
38
41
|
continue;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"features/whereMapper/WhereMapper.js","sources":["../../../src/features/whereMapper/WhereMapper.ts"],"sourcesContent":["/**\n * Used to map a model with custom schema with fields in a root to values object.\n * eg. File Manager File model has \"title\" and \"tags\" fields in the root, but they should be\n * mapped to \"values.title\" and \"values.tags\" when creating the entry.\n */\nimport { GenericRecord } from \"@webiny/api/types.js\";\nimport { CmsEntryListWhere } from \"~/types/types.js\";\nimport { CmsWhereMapper, ICmsWhereMapperParams } from \"./abstractions.js\";\n\nconst isPlainObject = (value: unknown): value is Record<string, unknown> => {\n if (!value || typeof value !== \"object\") {\n return false;\n } else if (Array.isArray(value)) {\n return false;\n }\n return true;\n};\n\nconst isLogicalKey = (key: string): key is \"AND\" | \"OR\" => {\n return key === \"AND\" || key === \"OR\";\n};\n\ninterface IMapNodeWhereParams {\n input: GenericRecord;\n isField: (key: string) => boolean;\n}\n\nclass WhereMapperImpl implements CmsWhereMapper.Interface {\n map<T extends GenericRecord>(params: ICmsWhereMapperParams<T>): CmsEntryListWhere | undefined {\n const { fields: modelFields, input } = params;\n if (!input) {\n return undefined;\n }\n\n const fields = modelFields.map(field =>
|
|
1
|
+
{"version":3,"file":"features/whereMapper/WhereMapper.js","sources":["../../../src/features/whereMapper/WhereMapper.ts"],"sourcesContent":["/**\n * Used to map a model with custom schema with fields in a root to values object.\n * eg. File Manager File model has \"title\" and \"tags\" fields in the root, but they should be\n * mapped to \"values.title\" and \"values.tags\" when creating the entry.\n */\nimport { GenericRecord } from \"@webiny/api/types.js\";\nimport { CmsEntryListWhere } from \"~/types/types.js\";\nimport { CmsWhereMapper, ICmsWhereMapperParams } from \"./abstractions.js\";\n\nconst isPlainObject = (value: unknown): value is Record<string, unknown> => {\n if (!value || typeof value !== \"object\") {\n return false;\n } else if (Array.isArray(value)) {\n return false;\n }\n return true;\n};\n\nconst isLogicalKey = (key: string): key is \"AND\" | \"OR\" => {\n return key === \"AND\" || key === \"OR\";\n};\n\ninterface IMapNodeWhereParams {\n input: GenericRecord;\n isField: (key: string) => boolean;\n}\n\nclass WhereMapperImpl implements CmsWhereMapper.Interface {\n map<T extends GenericRecord>(params: ICmsWhereMapperParams<T>): CmsEntryListWhere | undefined {\n const { fields: modelFields, input } = params;\n if (!input) {\n return undefined;\n }\n\n /*\n * Longest fieldId first, so a key is attributed to the longest field it could belong to.\n * Taking the segment before the first `_` misreads any fieldId that contains one:\n * `on_sale_contains` resolves to a field named `on`, which does not exist, so the filter\n * silently stays at the top level and the CMS rejects it. Longest-first also keeps a model\n * with both `price` and `price_range` from being mis-routed.\n */\n const fields = modelFields.map(field => field.fieldId).sort((a, b) => b.length - a.length);\n\n const isField = (key: string): boolean => {\n return fields.some(fieldId => key === fieldId || key.startsWith(`${fieldId}_`));\n };\n\n return this.mapWhere({\n input,\n isField\n });\n }\n\n private mapWhere(params: IMapNodeWhereParams) {\n const { input, isField } = params;\n const out: CmsEntryListWhere = {};\n\n const keys = Object.keys(input) as (keyof typeof out)[];\n if (keys.length === 0) {\n return out;\n }\n\n for (const key of keys) {\n const value = input[key];\n\n if (isLogicalKey(key)) {\n if (Array.isArray(value)) {\n out[key] = value.filter(isPlainObject).map(child => {\n return this.mapWhere({\n input: child,\n isField\n });\n });\n }\n continue;\n } else if (key === \"values\" && isPlainObject(value)) {\n /*\n * A caller that already nested its model fields is taken at its word. Merged rather\n * than assigned, so an explicit `values` object and flat field keys can coexist:\n * assigning would drop whichever of the two arrived first.\n */\n if (!out.values) {\n out.values = {};\n }\n Object.assign(out.values, value);\n continue;\n } else if (isField(key)) {\n if (!out.values) {\n out.values = {};\n }\n out.values[key] = value;\n continue;\n }\n\n out[key] = value;\n }\n\n return out;\n }\n}\n\nexport const WhereMapper = CmsWhereMapper.createImplementation({\n implementation: WhereMapperImpl,\n dependencies: []\n});\n"],"names":["isPlainObject","value","Array","isLogicalKey","key","WhereMapperImpl","params","modelFields","input","fields","field","a","b","isField","fieldId","out","keys","Object","child","WhereMapper","CmsWhereMapper"],"mappings":";AASA,MAAMA,gBAAgB,CAACC;IACnB,IAAI,CAACA,SAAS,AAAiB,YAAjB,OAAOA,OACjB,OAAO;IACJ,IAAIC,MAAM,OAAO,CAACD,QACrB,OAAO;IAEX,OAAO;AACX;AAEA,MAAME,eAAe,CAACC,MACXA,AAAQ,UAARA,OAAiBA,AAAQ,SAARA;AAQ5B,MAAMC;IACF,IAA6BC,MAAgC,EAAiC;QAC1F,MAAM,EAAE,QAAQC,WAAW,EAAEC,KAAK,EAAE,GAAGF;QACvC,IAAI,CAACE,OACD;QAUJ,MAAMC,SAASF,YAAY,GAAG,CAACG,CAAAA,QAASA,MAAM,OAAO,EAAE,IAAI,CAAC,CAACC,GAAGC,IAAMA,EAAE,MAAM,GAAGD,EAAE,MAAM;QAEzF,MAAME,UAAU,CAACT,MACNK,OAAO,IAAI,CAACK,CAAAA,UAAWV,QAAQU,WAAWV,IAAI,UAAU,CAAC,GAAGU,QAAQ,CAAC,CAAC;QAGjF,OAAO,IAAI,CAAC,QAAQ,CAAC;YACjBN;YACAK;QACJ;IACJ;IAEQ,SAASP,MAA2B,EAAE;QAC1C,MAAM,EAAEE,KAAK,EAAEK,OAAO,EAAE,GAAGP;QAC3B,MAAMS,MAAyB,CAAC;QAEhC,MAAMC,OAAOC,OAAO,IAAI,CAACT;QACzB,IAAIQ,AAAgB,MAAhBA,KAAK,MAAM,EACX,OAAOD;QAGX,KAAK,MAAMX,OAAOY,KAAM;YACpB,MAAMf,QAAQO,KAAK,CAACJ,IAAI;YAExB,IAAID,aAAaC,MAAM;gBACnB,IAAIF,MAAM,OAAO,CAACD,QACdc,GAAG,CAACX,IAAI,GAAGH,MAAM,MAAM,CAACD,eAAe,GAAG,CAACkB,CAAAA,QAChC,IAAI,CAAC,QAAQ,CAAC;wBACjB,OAAOA;wBACPL;oBACJ;gBAGR;YACJ;YAAO,IAAIT,AAAQ,aAARA,OAAoBJ,cAAcC,QAAQ;gBAMjD,IAAI,CAACc,IAAI,MAAM,EACXA,IAAI,MAAM,GAAG,CAAC;gBAElBE,OAAO,MAAM,CAACF,IAAI,MAAM,EAAEd;gBAC1B;YACJ;YAAO,IAAIY,QAAQT,MAAM;gBACrB,IAAI,CAACW,IAAI,MAAM,EACXA,IAAI,MAAM,GAAG,CAAC;gBAElBA,IAAI,MAAM,CAACX,IAAI,GAAGH;gBAClB;YACJ;YAEAc,GAAG,CAACX,IAAI,GAAGH;QACf;QAEA,OAAOc;IACX;AACJ;AAEO,MAAMI,cAAcC,eAAe,oBAAoB,CAAC;IAC3D,gBAAgBf;IAChB,cAAc,EAAE;AACpB"}
|
|
@@ -47,7 +47,10 @@ class CmsModelDynamicZoneFieldConverterPlugin extends CmsModelFieldConverterPlug
|
|
|
47
47
|
Object.assign(values, converted);
|
|
48
48
|
return values;
|
|
49
49
|
}, {
|
|
50
|
-
_templateId: template.id
|
|
50
|
+
_templateId: template.id,
|
|
51
|
+
...value._id ? {
|
|
52
|
+
_id: value._id
|
|
53
|
+
} : {}
|
|
51
54
|
});
|
|
52
55
|
}
|
|
53
56
|
convertFromStorage(params) {
|
|
@@ -98,7 +101,10 @@ class CmsModelDynamicZoneFieldConverterPlugin extends CmsModelFieldConverterPlug
|
|
|
98
101
|
Object.assign(values, converted);
|
|
99
102
|
return values;
|
|
100
103
|
}, {
|
|
101
|
-
_templateId: template.id
|
|
104
|
+
_templateId: template.id,
|
|
105
|
+
...value._id ? {
|
|
106
|
+
_id: value._id
|
|
107
|
+
} : {}
|
|
102
108
|
});
|
|
103
109
|
}
|
|
104
110
|
constructor(...args){
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fieldConverters/CmsModelDynamicZoneFieldConverterPlugin.js","sources":["../../src/fieldConverters/CmsModelDynamicZoneFieldConverterPlugin.ts"],"sourcesContent":["import WebinyError from \"@webiny/error\";\nimport type { ConvertParams } from \"~/plugins/CmsModelFieldConverterPlugin.js\";\nimport { CmsModelFieldConverterPlugin } from \"~/plugins/CmsModelFieldConverterPlugin.js\";\nimport type {\n CmsDynamicZoneTemplate,\n CmsEntryValues,\n CmsModelDynamicZoneField\n} from \"~/types/index.js\";\nimport type { ConverterCollection } from \"~/utils/converters/ConverterCollection.js\";\nimport type { GenericRecord } from \"@webiny/api/types.js\";\n\ntype DynamicZoneValue = GenericRecord<string>;\n\ninterface ProcessValue {\n templates: CmsDynamicZoneTemplate[];\n value: DynamicZoneValue | null;\n converterCollection: ConverterCollection;\n}\n\nexport class CmsModelDynamicZoneFieldConverterPlugin extends CmsModelFieldConverterPlugin {\n public override name = \"cms.field.converter.dynamicZone\";\n\n public override getFieldType(): string {\n return \"dynamicZone\";\n }\n\n private getTemplates(field: CmsModelDynamicZoneField): CmsDynamicZoneTemplate[] {\n return field.settings?.templates || [];\n }\n\n public override convertToStorage(\n params: ConvertParams<CmsModelDynamicZoneField>\n ): CmsEntryValues {\n const { field, value, converterCollection } = params;\n\n const templates = this.getTemplates(field);\n\n if (templates.length === 0) {\n return {};\n }\n\n if (field.list) {\n if (Array.isArray(value)) {\n return {\n [field.storageId]: value.map(item => {\n return this.processToStorage({\n templates,\n converterCollection,\n value: item\n });\n })\n };\n }\n\n // If a multi-value dynamic zone receives anything other than an array, ignore the value.\n return {};\n }\n\n // If a single-value dynamic zone receives an array, ignore the value.\n if (Array.isArray(value)) {\n return {};\n }\n\n const processedValue = this.processToStorage({\n templates,\n converterCollection,\n value\n });\n\n return {\n [field.storageId]: processedValue\n };\n }\n\n private processToStorage(params: ProcessValue) {\n const { templates, converterCollection } = params;\n const { value } = params;\n if (value === null || value === undefined) {\n return undefined;\n }\n\n const templateId = value._templateId;\n const template = templates.find(t => {\n return templateId === t.id;\n });\n\n if (!template) {\n return undefined;\n }\n\n return template.fields.reduce<GenericRecord<string>>(\n (values, field) => {\n const converter = converterCollection.getConverter(field.type);\n const converted = converter.convertToStorage({\n field,\n value: value ? value[field.fieldId] : undefined\n });\n Object.assign(values, converted);\n return values;\n },\n {\n _templateId: template.id\n }\n );\n }\n\n public override convertFromStorage(\n params: ConvertParams<CmsModelDynamicZoneField>\n ): CmsEntryValues {\n const { field, value, converterCollection } = params;\n\n const templates = this.getTemplates(field);\n\n if (templates.length === 0) {\n return {};\n }\n\n if (field.list) {\n const arrayValue = Array.isArray(value) ? value : [];\n\n return {\n [field.fieldId]: arrayValue\n .map(item => {\n return this.processFromStorage({\n templates,\n converterCollection,\n value: item\n });\n })\n .filter(Boolean)\n };\n }\n\n if (Array.isArray(value)) {\n throw new WebinyError(\n `Dynamic zone field \"${field.fieldId}\" is expecting a non-array value.`,\n \"DYNAMIC_ZONE_EXPECTING_NON_ARRAY_VALUE\",\n {\n field,\n value\n }\n );\n }\n\n const processedValue = this.processFromStorage({\n templates,\n converterCollection,\n value\n });\n\n return {\n [field.fieldId]: processedValue\n };\n }\n\n private processFromStorage(params: ProcessValue) {\n const { templates, value, converterCollection } = params;\n if (value === null || value === undefined) {\n return undefined;\n }\n\n const { _templateId } = value;\n\n const template = templates.find(t => t.id === _templateId);\n if (!template) {\n // TODO Should we just return undefined?\n console.warn({\n message: \"Unknown template - converting from storage.\",\n code: \"UNKNOWN_TEMPLATE\",\n data: {\n templateId: _templateId\n }\n });\n return undefined;\n }\n\n return template.fields.reduce<GenericRecord<string>>(\n (values, field) => {\n const converter = converterCollection.getConverter(field.type);\n const converted = converter.convertFromStorage({\n field,\n value: value[field.storageId]\n });\n Object.assign(values, converted);\n return values;\n },\n {\n _templateId: template.id\n }\n );\n }\n}\n"],"names":["CmsModelDynamicZoneFieldConverterPlugin","CmsModelFieldConverterPlugin","field","params","value","converterCollection","templates","Array","item","processedValue","templateId","template","t","values","converter","converted","undefined","Object","arrayValue","Boolean","WebinyError","_templateId","console"],"mappings":";;AAmBO,MAAMA,gDAAgDC;IAGzC,eAAuB;QACnC,OAAO;IACX;IAEQ,aAAaC,KAA+B,EAA4B;QAC5E,OAAOA,MAAM,QAAQ,EAAE,aAAa,EAAE;IAC1C;IAEgB,iBACZC,MAA+C,EACjC;QACd,MAAM,EAAED,KAAK,EAAEE,KAAK,EAAEC,mBAAmB,EAAE,GAAGF;QAE9C,MAAMG,YAAY,IAAI,CAAC,YAAY,CAACJ;QAEpC,IAAII,AAAqB,MAArBA,UAAU,MAAM,EAChB,OAAO,CAAC;QAGZ,IAAIJ,MAAM,IAAI,EAAE;YACZ,IAAIK,MAAM,OAAO,CAACH,QACd,OAAO;gBACH,CAACF,MAAM,SAAS,CAAC,EAAEE,MAAM,GAAG,CAACI,CAAAA,OAClB,IAAI,CAAC,gBAAgB,CAAC;wBACzBF;wBACAD;wBACA,OAAOG;oBACX;YAER;YAIJ,OAAO,CAAC;QACZ;QAGA,IAAID,MAAM,OAAO,CAACH,QACd,OAAO,CAAC;QAGZ,MAAMK,iBAAiB,IAAI,CAAC,gBAAgB,CAAC;YACzCH;YACAD;YACAD;QACJ;QAEA,OAAO;YACH,CAACF,MAAM,SAAS,CAAC,EAAEO;QACvB;IACJ;IAEQ,iBAAiBN,MAAoB,EAAE;QAC3C,MAAM,EAAEG,SAAS,EAAED,mBAAmB,EAAE,GAAGF;QAC3C,MAAM,EAAEC,KAAK,EAAE,GAAGD;QAClB,IAAIC,QAAAA,OACA;QAGJ,MAAMM,aAAaN,MAAM,WAAW;QACpC,MAAMO,WAAWL,UAAU,IAAI,CAACM,CAAAA,IACrBF,eAAeE,EAAE,EAAE;QAG9B,IAAI,CAACD,UACD;QAGJ,OAAOA,SAAS,MAAM,CAAC,MAAM,CACzB,CAACE,QAAQX;YACL,MAAMY,YAAYT,oBAAoB,YAAY,CAACH,MAAM,IAAI;YAC7D,MAAMa,YAAYD,UAAU,gBAAgB,CAAC;gBACzCZ;gBACA,OAAOE,QAAQA,KAAK,CAACF,MAAM,OAAO,CAAC,GAAGc;YAC1C;YACAC,OAAO,MAAM,CAACJ,QAAQE;YACtB,OAAOF;QACX,GACA;YACI,aAAaF,SAAS,EAAE;
|
|
1
|
+
{"version":3,"file":"fieldConverters/CmsModelDynamicZoneFieldConverterPlugin.js","sources":["../../src/fieldConverters/CmsModelDynamicZoneFieldConverterPlugin.ts"],"sourcesContent":["import WebinyError from \"@webiny/error\";\nimport type { ConvertParams } from \"~/plugins/CmsModelFieldConverterPlugin.js\";\nimport { CmsModelFieldConverterPlugin } from \"~/plugins/CmsModelFieldConverterPlugin.js\";\nimport type {\n CmsDynamicZoneTemplate,\n CmsEntryValues,\n CmsModelDynamicZoneField\n} from \"~/types/index.js\";\nimport type { ConverterCollection } from \"~/utils/converters/ConverterCollection.js\";\nimport type { GenericRecord } from \"@webiny/api/types.js\";\n\ntype DynamicZoneValue = GenericRecord<string>;\n\ninterface ProcessValue {\n templates: CmsDynamicZoneTemplate[];\n value: DynamicZoneValue | null;\n converterCollection: ConverterCollection;\n}\n\nexport class CmsModelDynamicZoneFieldConverterPlugin extends CmsModelFieldConverterPlugin {\n public override name = \"cms.field.converter.dynamicZone\";\n\n public override getFieldType(): string {\n return \"dynamicZone\";\n }\n\n private getTemplates(field: CmsModelDynamicZoneField): CmsDynamicZoneTemplate[] {\n return field.settings?.templates || [];\n }\n\n public override convertToStorage(\n params: ConvertParams<CmsModelDynamicZoneField>\n ): CmsEntryValues {\n const { field, value, converterCollection } = params;\n\n const templates = this.getTemplates(field);\n\n if (templates.length === 0) {\n return {};\n }\n\n if (field.list) {\n if (Array.isArray(value)) {\n return {\n [field.storageId]: value.map(item => {\n return this.processToStorage({\n templates,\n converterCollection,\n value: item\n });\n })\n };\n }\n\n // If a multi-value dynamic zone receives anything other than an array, ignore the value.\n return {};\n }\n\n // If a single-value dynamic zone receives an array, ignore the value.\n if (Array.isArray(value)) {\n return {};\n }\n\n const processedValue = this.processToStorage({\n templates,\n converterCollection,\n value\n });\n\n return {\n [field.storageId]: processedValue\n };\n }\n\n private processToStorage(params: ProcessValue) {\n const { templates, converterCollection } = params;\n const { value } = params;\n if (value === null || value === undefined) {\n return undefined;\n }\n\n const templateId = value._templateId;\n const template = templates.find(t => {\n return templateId === t.id;\n });\n\n if (!template) {\n return undefined;\n }\n\n return template.fields.reduce<GenericRecord<string>>(\n (values, field) => {\n const converter = converterCollection.getConverter(field.type);\n const converted = converter.convertToStorage({\n field,\n value: value ? value[field.fieldId] : undefined\n });\n Object.assign(values, converted);\n return values;\n },\n {\n _templateId: template.id,\n ...(value._id ? { _id: value._id } : {})\n }\n );\n }\n\n public override convertFromStorage(\n params: ConvertParams<CmsModelDynamicZoneField>\n ): CmsEntryValues {\n const { field, value, converterCollection } = params;\n\n const templates = this.getTemplates(field);\n\n if (templates.length === 0) {\n return {};\n }\n\n if (field.list) {\n const arrayValue = Array.isArray(value) ? value : [];\n\n return {\n [field.fieldId]: arrayValue\n .map(item => {\n return this.processFromStorage({\n templates,\n converterCollection,\n value: item\n });\n })\n .filter(Boolean)\n };\n }\n\n if (Array.isArray(value)) {\n throw new WebinyError(\n `Dynamic zone field \"${field.fieldId}\" is expecting a non-array value.`,\n \"DYNAMIC_ZONE_EXPECTING_NON_ARRAY_VALUE\",\n {\n field,\n value\n }\n );\n }\n\n const processedValue = this.processFromStorage({\n templates,\n converterCollection,\n value\n });\n\n return {\n [field.fieldId]: processedValue\n };\n }\n\n private processFromStorage(params: ProcessValue) {\n const { templates, value, converterCollection } = params;\n if (value === null || value === undefined) {\n return undefined;\n }\n\n const { _templateId } = value;\n\n const template = templates.find(t => t.id === _templateId);\n if (!template) {\n // TODO Should we just return undefined?\n console.warn({\n message: \"Unknown template - converting from storage.\",\n code: \"UNKNOWN_TEMPLATE\",\n data: {\n templateId: _templateId\n }\n });\n return undefined;\n }\n\n return template.fields.reduce<GenericRecord<string>>(\n (values, field) => {\n const converter = converterCollection.getConverter(field.type);\n const converted = converter.convertFromStorage({\n field,\n value: value[field.storageId]\n });\n Object.assign(values, converted);\n return values;\n },\n {\n _templateId: template.id,\n ...(value._id ? { _id: value._id } : {})\n }\n );\n }\n}\n"],"names":["CmsModelDynamicZoneFieldConverterPlugin","CmsModelFieldConverterPlugin","field","params","value","converterCollection","templates","Array","item","processedValue","templateId","template","t","values","converter","converted","undefined","Object","arrayValue","Boolean","WebinyError","_templateId","console"],"mappings":"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"}
|
|
@@ -43,6 +43,9 @@ class CmsModelObjectFieldConverterPlugin extends CmsModelFieldConverterPlugin {
|
|
|
43
43
|
processChildFieldsToStorage(params) {
|
|
44
44
|
const { fields, value, converterCollection } = params;
|
|
45
45
|
if (null == value) return;
|
|
46
|
+
const initial = value._id ? {
|
|
47
|
+
_id: value._id
|
|
48
|
+
} : {};
|
|
46
49
|
return fields.reduce((output, field)=>{
|
|
47
50
|
if (void 0 === value[field.fieldId]) return output;
|
|
48
51
|
const converter = converterCollection.getConverter(field.type);
|
|
@@ -55,7 +58,7 @@ class CmsModelObjectFieldConverterPlugin extends CmsModelFieldConverterPlugin {
|
|
|
55
58
|
...output,
|
|
56
59
|
...newValue
|
|
57
60
|
};
|
|
58
|
-
},
|
|
61
|
+
}, initial);
|
|
59
62
|
}
|
|
60
63
|
convertFromStorage(params) {
|
|
61
64
|
const { field, value, converterCollection } = params;
|
|
@@ -94,6 +97,9 @@ class CmsModelObjectFieldConverterPlugin extends CmsModelFieldConverterPlugin {
|
|
|
94
97
|
processChildFieldsFromStorage(params) {
|
|
95
98
|
const { fields, value, converterCollection } = params;
|
|
96
99
|
if (null == value) return;
|
|
100
|
+
const initial = value._id ? {
|
|
101
|
+
_id: value._id
|
|
102
|
+
} : {};
|
|
97
103
|
return fields.reduce((output, field)=>{
|
|
98
104
|
if (void 0 === value[field.storageId]) return output;
|
|
99
105
|
const converter = converterCollection.getConverter(field.type);
|
|
@@ -107,7 +113,7 @@ class CmsModelObjectFieldConverterPlugin extends CmsModelFieldConverterPlugin {
|
|
|
107
113
|
...output,
|
|
108
114
|
...newValue
|
|
109
115
|
};
|
|
110
|
-
},
|
|
116
|
+
}, initial);
|
|
111
117
|
}
|
|
112
118
|
constructor(...args){
|
|
113
119
|
super(...args), this.name = "cms.field.converter.object";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fieldConverters/CmsModelObjectFieldConverterPlugin.js","sources":["../../src/fieldConverters/CmsModelObjectFieldConverterPlugin.ts"],"sourcesContent":["import type { ConvertParams } from \"~/plugins/CmsModelFieldConverterPlugin.js\";\nimport { CmsModelFieldConverterPlugin } from \"~/plugins/CmsModelFieldConverterPlugin.js\";\nimport type { CmsEntryValues, CmsModelFieldWithParent } from \"~/types/index.js\";\nimport type { ConverterCollection } from \"~/utils/converters/ConverterCollection.js\";\nimport type { GenericRecord } from \"@webiny/api/types.js\";\n\ninterface ProcessChildFieldsParams {\n fields: CmsModelFieldWithParent[];\n value?: GenericRecord<string> | null;\n converterCollection: ConverterCollection;\n}\n\ninterface GetChildFieldsParams {\n field?: CmsModelFieldWithParent | null;\n}\n\nexport class CmsModelObjectFieldConverterPlugin extends CmsModelFieldConverterPlugin {\n public override name = \"cms.field.converter.object\";\n\n public override getFieldType(): string {\n return \"object\";\n }\n\n private getChildFields({ field }: GetChildFieldsParams): CmsModelFieldWithParent[] {\n return field?.settings?.fields || [];\n }\n\n public override convertToStorage(params: ConvertParams): CmsEntryValues {\n const { field, value, converterCollection } = params;\n\n const childFields = this.getChildFields({\n field\n });\n if (childFields.length === 0) {\n return {};\n }\n\n if (field.list) {\n if (Array.isArray(value) === false) {\n return {\n [field.storageId]: null\n };\n }\n return {\n [field.storageId]: value.map((itemValue: GenericRecord) => {\n return this.processChildFieldsToStorage({\n fields: childFields.map(child => {\n return {\n ...child,\n parent: field\n };\n }),\n value: itemValue,\n converterCollection\n });\n })\n };\n }\n\n const values = this.processChildFieldsToStorage({\n fields: childFields.map(child => {\n return {\n ...child,\n parent: field\n };\n }),\n value,\n converterCollection\n });\n if (values === undefined) {\n return {};\n }\n\n return {\n [field.storageId]: values\n };\n }\n\n private processChildFieldsToStorage(\n params: ProcessChildFieldsParams\n ): CmsEntryValues | undefined {\n const { fields, value, converterCollection } = params;\n\n if (value === undefined || value === null) {\n return undefined;\n }\n\n return fields.reduce<CmsEntryValues>((output, field) => {\n if (value[field.fieldId] === undefined) {\n return output;\n }\n const converter = converterCollection.getConverter(field.type);\n\n const newValue = converter.convertToStorage({\n field,\n value: value[field.fieldId],\n parent: field.parent\n });\n\n return {\n ...output,\n ...newValue\n };\n },
|
|
1
|
+
{"version":3,"file":"fieldConverters/CmsModelObjectFieldConverterPlugin.js","sources":["../../src/fieldConverters/CmsModelObjectFieldConverterPlugin.ts"],"sourcesContent":["import type { ConvertParams } from \"~/plugins/CmsModelFieldConverterPlugin.js\";\nimport { CmsModelFieldConverterPlugin } from \"~/plugins/CmsModelFieldConverterPlugin.js\";\nimport type { CmsEntryValues, CmsModelFieldWithParent } from \"~/types/index.js\";\nimport type { ConverterCollection } from \"~/utils/converters/ConverterCollection.js\";\nimport type { GenericRecord } from \"@webiny/api/types.js\";\n\ninterface ProcessChildFieldsParams {\n fields: CmsModelFieldWithParent[];\n value?: GenericRecord<string> | null;\n converterCollection: ConverterCollection;\n}\n\ninterface GetChildFieldsParams {\n field?: CmsModelFieldWithParent | null;\n}\n\nexport class CmsModelObjectFieldConverterPlugin extends CmsModelFieldConverterPlugin {\n public override name = \"cms.field.converter.object\";\n\n public override getFieldType(): string {\n return \"object\";\n }\n\n private getChildFields({ field }: GetChildFieldsParams): CmsModelFieldWithParent[] {\n return field?.settings?.fields || [];\n }\n\n public override convertToStorage(params: ConvertParams): CmsEntryValues {\n const { field, value, converterCollection } = params;\n\n const childFields = this.getChildFields({\n field\n });\n if (childFields.length === 0) {\n return {};\n }\n\n if (field.list) {\n if (Array.isArray(value) === false) {\n return {\n [field.storageId]: null\n };\n }\n return {\n [field.storageId]: value.map((itemValue: GenericRecord) => {\n return this.processChildFieldsToStorage({\n fields: childFields.map(child => {\n return {\n ...child,\n parent: field\n };\n }),\n value: itemValue,\n converterCollection\n });\n })\n };\n }\n\n const values = this.processChildFieldsToStorage({\n fields: childFields.map(child => {\n return {\n ...child,\n parent: field\n };\n }),\n value,\n converterCollection\n });\n if (values === undefined) {\n return {};\n }\n\n return {\n [field.storageId]: values\n };\n }\n\n private processChildFieldsToStorage(\n params: ProcessChildFieldsParams\n ): CmsEntryValues | undefined {\n const { fields, value, converterCollection } = params;\n\n if (value === undefined || value === null) {\n return undefined;\n }\n\n const initial: CmsEntryValues = value._id ? { _id: value._id } : {};\n\n return fields.reduce<CmsEntryValues>((output, field) => {\n if (value[field.fieldId] === undefined) {\n return output;\n }\n const converter = converterCollection.getConverter(field.type);\n\n const newValue = converter.convertToStorage({\n field,\n value: value[field.fieldId],\n parent: field.parent\n });\n\n return {\n ...output,\n ...newValue\n };\n }, initial);\n }\n\n public override convertFromStorage(params: ConvertParams): CmsEntryValues {\n const { field, value, converterCollection } = params;\n\n const childFields = this.getChildFields({\n field\n });\n if (childFields.length === 0) {\n return {};\n }\n\n if (field.list) {\n if (Array.isArray(value) === false) {\n return {\n [field.fieldId]: null\n };\n }\n return {\n [field.fieldId]: value.map((itemValue: GenericRecord) => {\n return this.processChildFieldsFromStorage({\n fields: childFields.map(child => {\n return {\n ...child,\n parent: field\n };\n }),\n value: itemValue,\n converterCollection\n });\n })\n };\n }\n\n const values = this.processChildFieldsFromStorage({\n fields: childFields.map(child => {\n return {\n ...child,\n parent: field\n };\n }),\n value,\n converterCollection\n });\n\n if (values === undefined) {\n return {};\n }\n\n return {\n [field.fieldId]: values\n };\n }\n\n private processChildFieldsFromStorage(\n params: ProcessChildFieldsParams\n ): CmsEntryValues | undefined {\n const { fields, value, converterCollection } = params;\n\n if (value === undefined || value === null) {\n return undefined;\n }\n\n const initial: CmsEntryValues = value._id ? { _id: value._id } : {};\n\n return fields.reduce<CmsEntryValues>((output, field) => {\n if (value[field.storageId] === undefined) {\n return output;\n }\n\n const converter = converterCollection.getConverter(field.type);\n\n const newValue = converter.convertFromStorage({\n field,\n value: value[field.storageId],\n parent: field.parent\n });\n if (!newValue) {\n return output;\n }\n\n return {\n ...output,\n ...newValue\n };\n }, initial);\n }\n}\n"],"names":["CmsModelObjectFieldConverterPlugin","CmsModelFieldConverterPlugin","field","params","value","converterCollection","childFields","Array","itemValue","child","values","undefined","fields","initial","output","converter","newValue"],"mappings":"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"}
|
|
@@ -4,4 +4,4 @@
|
|
|
4
4
|
import { CmsModelObjectFieldConverterPlugin } from "../fieldConverters/CmsModelObjectFieldConverterPlugin.js";
|
|
5
5
|
import { CmsModelDefaultFieldConverterPlugin } from "../fieldConverters/CmsModelDefaultFieldConverterPlugin.js";
|
|
6
6
|
import { CmsModelDynamicZoneFieldConverterPlugin } from "../fieldConverters/CmsModelDynamicZoneFieldConverterPlugin.js";
|
|
7
|
-
export declare const createFieldConverters: () => (
|
|
7
|
+
export declare const createFieldConverters: () => (CmsModelDefaultFieldConverterPlugin | CmsModelDynamicZoneFieldConverterPlugin | CmsModelObjectFieldConverterPlugin)[];
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import crypto_0 from "crypto";
|
|
2
2
|
const getSavedOn = (input)=>{
|
|
3
3
|
if (!input) return "unknown";
|
|
4
|
-
|
|
4
|
+
if (input instanceof Date) return input.toISOString();
|
|
5
5
|
try {
|
|
6
6
|
const savedOn = new Date(input);
|
|
7
7
|
return savedOn.toISOString();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graphql/getSchema/generateCacheKey.js","sources":["../../../src/graphql/getSchema/generateCacheKey.ts"],"sourcesContent":["import type { CmsModel } from \"~/types/index.js\";\nimport crypto from \"crypto\";\n\ninterface GenerateCacheKeyParams {\n models: Pick<CmsModel, \"modelId\" | \"singularApiName\" | \"pluralApiName\" | \"savedOn\">[];\n}\n\nconst getSavedOn = (input: Date | string | undefined | null): string => {\n if (!input) {\n return \"unknown\";\n } else if (input instanceof Date) {\n return input.toISOString();\n }\n try {\n const savedOn = new Date(input);\n return savedOn.toISOString();\n } catch {\n return \"unknown\";\n }\n};\n/**\n * Method generates cache key based on last model change time.\n * Or sets \"unknown\" - possible when no models in database.\n */\nexport const generateCacheKey = async (params: GenerateCacheKeyParams): Promise<string> => {\n const { models } = params;\n\n const keys: string[] = [];\n for (const model of models) {\n const value = getSavedOn(model.savedOn);\n\n keys.push(model.modelId, model.singularApiName, model.pluralApiName, value);\n }\n const key = keys.join(\"#\");\n\n const hash = crypto.createHash(\"sha512\");\n hash.update(key);\n return hash.digest(\"hex\");\n};\n"],"names":["getSavedOn","input","Date","savedOn","generateCacheKey","params","models","keys","model","value","key","hash","crypto"],"mappings":";AAOA,MAAMA,aAAa,CAACC;IAChB,IAAI,CAACA,OACD,OAAO;
|
|
1
|
+
{"version":3,"file":"graphql/getSchema/generateCacheKey.js","sources":["../../../src/graphql/getSchema/generateCacheKey.ts"],"sourcesContent":["import type { CmsModel } from \"~/types/index.js\";\nimport crypto from \"crypto\";\n\ninterface GenerateCacheKeyParams {\n models: Pick<CmsModel, \"modelId\" | \"singularApiName\" | \"pluralApiName\" | \"savedOn\">[];\n}\n\nconst getSavedOn = (input: Date | string | undefined | null): string => {\n if (!input) {\n return \"unknown\";\n } else if (input instanceof Date) {\n return input.toISOString();\n }\n try {\n const savedOn = new Date(input);\n return savedOn.toISOString();\n } catch {\n return \"unknown\";\n }\n};\n/**\n * Method generates cache key based on last model change time.\n * Or sets \"unknown\" - possible when no models in database.\n */\nexport const generateCacheKey = async (params: GenerateCacheKeyParams): Promise<string> => {\n const { models } = params;\n\n const keys: string[] = [];\n for (const model of models) {\n const value = getSavedOn(model.savedOn);\n\n keys.push(model.modelId, model.singularApiName, model.pluralApiName, value);\n }\n const key = keys.join(\"#\");\n\n const hash = crypto.createHash(\"sha512\");\n hash.update(key);\n return hash.digest(\"hex\");\n};\n"],"names":["getSavedOn","input","Date","savedOn","generateCacheKey","params","models","keys","model","value","key","hash","crypto"],"mappings":";AAOA,MAAMA,aAAa,CAACC;IAChB,IAAI,CAACA,OACD,OAAO;IACJ,IAAIA,iBAAiBC,MACxB,OAAOD,MAAM,WAAW;IAE5B,IAAI;QACA,MAAME,UAAU,IAAID,KAAKD;QACzB,OAAOE,QAAQ,WAAW;IAC9B,EAAE,OAAM;QACJ,OAAO;IACX;AACJ;AAKO,MAAMC,mBAAmB,OAAOC;IACnC,MAAM,EAAEC,MAAM,EAAE,GAAGD;IAEnB,MAAME,OAAiB,EAAE;IACzB,KAAK,MAAMC,SAASF,OAAQ;QACxB,MAAMG,QAAQT,WAAWQ,MAAM,OAAO;QAEtCD,KAAK,IAAI,CAACC,MAAM,OAAO,EAAEA,MAAM,eAAe,EAAEA,MAAM,aAAa,EAAEC;IACzE;IACA,MAAMC,MAAMH,KAAK,IAAI,CAAC;IAEtB,MAAMI,OAAOC,SAAAA,UAAiB,CAAC;IAC/BD,KAAK,MAAM,CAACD;IACZ,OAAOC,KAAK,MAAM,CAAC;AACvB"}
|
|
@@ -5,7 +5,7 @@ const RevisionIdScalar = new GraphQLScalarType({
|
|
|
5
5
|
description: "A Headless CMS Reference field input type.",
|
|
6
6
|
parseValue: (value)=>{
|
|
7
7
|
if (!value) return null;
|
|
8
|
-
|
|
8
|
+
if ("string" != typeof value) throw new Error("RevisionId value must be a string!");
|
|
9
9
|
const result = parseIdentifier(value);
|
|
10
10
|
if (!result.version) throw new Error('RevisionId value must be a valid Revision ID property! Example: "abcdef#0001"');
|
|
11
11
|
return value;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graphql/scalars/RevisionId.js","sources":["../../../src/graphql/scalars/RevisionId.ts"],"sourcesContent":["import { GraphQLScalarType } from \"graphql\";\nimport { parseIdentifier } from \"@webiny/utils\";\n\nexport const RevisionIdScalar = new GraphQLScalarType({\n name: \"RevisionId\",\n description: \"A Headless CMS Reference field input type.\",\n parseValue: value => {\n if (!value) {\n return null;\n } else if (typeof value !== \"string\") {\n throw new Error(\"RevisionId value must be a string!\");\n }\n\n const result = parseIdentifier(value);\n if (!result.version) {\n throw new Error(\n `RevisionId value must be a valid Revision ID property! Example: \"abcdef#0001\"`\n );\n }\n return value;\n }\n});\n"],"names":["RevisionIdScalar","GraphQLScalarType","value","Error","result","parseIdentifier"],"mappings":";;AAGO,MAAMA,mBAAmB,IAAIC,kBAAkB;IAClD,MAAM;IACN,aAAa;IACb,YAAYC,CAAAA;QACR,IAAI,CAACA,OACD,OAAO;
|
|
1
|
+
{"version":3,"file":"graphql/scalars/RevisionId.js","sources":["../../../src/graphql/scalars/RevisionId.ts"],"sourcesContent":["import { GraphQLScalarType } from \"graphql\";\nimport { parseIdentifier } from \"@webiny/utils\";\n\nexport const RevisionIdScalar = new GraphQLScalarType({\n name: \"RevisionId\",\n description: \"A Headless CMS Reference field input type.\",\n parseValue: value => {\n if (!value) {\n return null;\n } else if (typeof value !== \"string\") {\n throw new Error(\"RevisionId value must be a string!\");\n }\n\n const result = parseIdentifier(value);\n if (!result.version) {\n throw new Error(\n `RevisionId value must be a valid Revision ID property! Example: \"abcdef#0001\"`\n );\n }\n return value;\n }\n});\n"],"names":["RevisionIdScalar","GraphQLScalarType","value","Error","result","parseIdentifier"],"mappings":";;AAGO,MAAMA,mBAAmB,IAAIC,kBAAkB;IAClD,MAAM;IACN,aAAa;IACb,YAAYC,CAAAA;QACR,IAAI,CAACA,OACD,OAAO;QACJ,IAAI,AAAiB,YAAjB,OAAOA,OACd,MAAM,IAAIC,MAAM;QAGpB,MAAMC,SAASC,gBAAgBH;QAC/B,IAAI,CAACE,OAAO,OAAO,EACf,MAAM,IAAID,MACN;QAGR,OAAOD;IACX;AACJ"}
|
|
@@ -1,25 +1,7 @@
|
|
|
1
1
|
import { createCmsGraphQLSchemaPlugin } from "../../plugins/index.js";
|
|
2
2
|
import { GraphQLSchemaPlugin } from "@webiny/handler-graphql";
|
|
3
3
|
import { ContextPlugin } from "@webiny/api";
|
|
4
|
-
|
|
5
|
-
import { CmsModelFieldValidatorRegistry } from "../../features/validation/index.js";
|
|
6
|
-
const createSkipValidatorEnum = (container)=>{
|
|
7
|
-
const registry = container.resolve(CmsModelFieldValidatorRegistry);
|
|
8
|
-
const names = registry.getAll().reduce((collection, validator)=>{
|
|
9
|
-
const name = camelCase(validator.name);
|
|
10
|
-
if (collection.includes(name)) return collection;
|
|
11
|
-
collection.push(name);
|
|
12
|
-
return collection;
|
|
13
|
-
}, []);
|
|
14
|
-
if (0 === names.length) names.push("_empty");
|
|
15
|
-
return `
|
|
16
|
-
enum SkipValidatorEnum {
|
|
17
|
-
${names.join("\n")}
|
|
18
|
-
}
|
|
19
|
-
`;
|
|
20
|
-
};
|
|
21
|
-
const createSchema = (context)=>{
|
|
22
|
-
const skipValidatorEnum = createSkipValidatorEnum(context.container);
|
|
4
|
+
const createSchema = ()=>{
|
|
23
5
|
const cmsPlugin = createCmsGraphQLSchemaPlugin({
|
|
24
6
|
typeDefs: `
|
|
25
7
|
type CmsIdentity {
|
|
@@ -89,18 +71,16 @@ const createSchema = (context)=>{
|
|
|
89
71
|
folderId_not_in: [ID!]
|
|
90
72
|
}
|
|
91
73
|
|
|
92
|
-
${skipValidatorEnum}
|
|
93
|
-
|
|
94
74
|
input CreateCmsEntryOptionsInput {
|
|
95
|
-
|
|
75
|
+
skipValidation: Boolean
|
|
96
76
|
}
|
|
97
77
|
|
|
98
78
|
input CreateRevisionCmsEntryOptionsInput {
|
|
99
|
-
|
|
79
|
+
skipValidation: Boolean
|
|
100
80
|
}
|
|
101
81
|
|
|
102
82
|
input UpdateCmsEntryOptionsInput {
|
|
103
|
-
|
|
83
|
+
skipValidation: Boolean
|
|
104
84
|
}
|
|
105
85
|
|
|
106
86
|
input CmsIdentityInput {
|
|
@@ -159,7 +139,7 @@ const createSchema = (context)=>{
|
|
|
159
139
|
};
|
|
160
140
|
const createBaseSchema = ()=>{
|
|
161
141
|
const plugin = new ContextPlugin(async (context)=>{
|
|
162
|
-
context.plugins.register(...createSchema(
|
|
142
|
+
context.plugins.register(...createSchema());
|
|
163
143
|
});
|
|
164
144
|
plugin.name = "headless-cms.graphql.createBaseSchema";
|
|
165
145
|
return plugin;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graphql/schema/baseSchema.js","sources":["../../../src/graphql/schema/baseSchema.ts"],"sourcesContent":["import type { CmsContext } from \"~/types/index.js\";\nimport { createCmsGraphQLSchemaPlugin } from \"~/plugins/index.js\";\nimport type { IGraphQLSchemaPlugin } from \"@webiny/handler-graphql\";\nimport { GraphQLSchemaPlugin } from \"@webiny/handler-graphql\";\nimport { ContextPlugin } from \"@webiny/api\";\
|
|
1
|
+
{"version":3,"file":"graphql/schema/baseSchema.js","sources":["../../../src/graphql/schema/baseSchema.ts"],"sourcesContent":["import type { CmsContext } from \"~/types/index.js\";\nimport { createCmsGraphQLSchemaPlugin } from \"~/plugins/index.js\";\nimport type { IGraphQLSchemaPlugin } from \"@webiny/handler-graphql\";\nimport { GraphQLSchemaPlugin } from \"@webiny/handler-graphql\";\nimport { ContextPlugin } from \"@webiny/api\";\n\nconst createSchema = (): IGraphQLSchemaPlugin<CmsContext>[] => {\n const cmsPlugin = createCmsGraphQLSchemaPlugin({\n typeDefs: /* GraphQL */ `\n type CmsIdentity {\n id: String\n displayName: String\n type: String\n }\n\n type CmsError {\n code: String\n message: String\n data: JSON\n stack: String\n }\n\n type CmsCursors {\n next: String\n previous: String\n }\n\n type CmsListMeta {\n cursor: String\n hasMoreItems: Boolean\n totalCount: Int\n }\n\n input CmsDeleteEntryOptions {\n # force delete an entry that might have some records left behind in the database\n # see CmsDeleteEntryOptions in types.ts\n force: Boolean\n # permanently delete an entry without moving it to the bin\n permanently: Boolean\n }\n\n type CmsDeleteResponse {\n data: Boolean\n error: CmsError\n }\n\n type CmsDeleteMultipleDataResponse {\n id: ID!\n }\n\n type CmsDeleteMultipleResponse {\n data: [CmsDeleteMultipleDataResponse!]\n error: CmsError\n }\n\n type CmsBooleanResponse {\n data: Boolean\n error: CmsError\n }\n\n # Advanced Content Organization\n type WbyAcoLocation {\n folderId: ID\n }\n\n input WbyAcoLocationInput {\n folderId: ID!\n }\n\n input WbyAcoLocationWhereInput {\n folderId: ID\n folderId_in: [ID!]\n folderId_not: ID\n folderId_not_in: [ID!]\n }\n\n input CreateCmsEntryOptionsInput {\n skipValidation: Boolean\n }\n\n input CreateRevisionCmsEntryOptionsInput {\n skipValidation: Boolean\n }\n\n input UpdateCmsEntryOptionsInput {\n skipValidation: Boolean\n }\n\n input CmsIdentityInput {\n id: String!\n displayName: String!\n type: String!\n }\n\n type CmsEntryValidationResponseData {\n error: String!\n id: String!\n fieldId: String!\n parents: [String!]!\n }\n\n type CmsEntryValidationResponse {\n data: [CmsEntryValidationResponseData!]\n error: CmsError\n }\n\n type CmsEntrySystem {\n _empty: String\n }\n\n type CmsEntryLive {\n version: Int!\n }\n\n input CmsEntryLiveWhereInput {\n version: Int\n version_gt: Int\n version_gte: Int\n version_lt: Int\n version_lte: Int\n version_not: Int\n version_in: [Int!]\n version_not_in: [Int!]\n }\n\n input ListWhereInputCmsEntrySystem {\n _empty: String\n }\n `,\n resolvers: {}\n });\n cmsPlugin.name = \"headless-cms.graphql.schema.base\";\n const corePlugin = new GraphQLSchemaPlugin<CmsContext>({\n typeDefs: cmsPlugin.schema.typeDefs,\n resolvers: cmsPlugin.schema.resolvers\n });\n corePlugin.name = \"headless-cms.graphql.core.schema.base\";\n /**\n * Due to splitting of CMS and Core schema plugins, we must have both defined for CMS to work.\n */\n return [cmsPlugin, corePlugin];\n};\n\nexport const createBaseSchema = () => {\n const plugin = new ContextPlugin<CmsContext>(async context => {\n context.plugins.register(...createSchema());\n });\n\n plugin.name = \"headless-cms.graphql.createBaseSchema\";\n\n return plugin;\n};\n"],"names":["createSchema","cmsPlugin","createCmsGraphQLSchemaPlugin","corePlugin","GraphQLSchemaPlugin","createBaseSchema","plugin","ContextPlugin","context"],"mappings":";;;AAMA,MAAMA,eAAe;IACjB,MAAMC,YAAYC,6BAA6B;QAC3C,UAAwB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAwHzB,CAAC;QACD,WAAW,CAAC;IAChB;IACAD,UAAU,IAAI,GAAG;IACjB,MAAME,aAAa,IAAIC,oBAAgC;QACnD,UAAUH,UAAU,MAAM,CAAC,QAAQ;QACnC,WAAWA,UAAU,MAAM,CAAC,SAAS;IACzC;IACAE,WAAW,IAAI,GAAG;IAIlB,OAAO;QAACF;QAAWE;KAAW;AAClC;AAEO,MAAME,mBAAmB;IAC5B,MAAMC,SAAS,IAAIC,cAA0B,OAAMC;QAC/CA,QAAQ,OAAO,CAAC,QAAQ,IAAIR;IAChC;IAEAM,OAAO,IAAI,GAAG;IAEd,OAAOA;AACX"}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
import { buildFieldsSelection, getErrorMessage, getModel } from "./helpers.js";
|
|
1
|
+
import { buildFieldsSelection, expandFieldWildcards, getErrorMessage, getModel } from "./helpers.js";
|
|
2
2
|
const createGetEntryResolver = ()=>async ({ args, context })=>{
|
|
3
3
|
const { modelId, where, fields, preview = false } = args;
|
|
4
4
|
try {
|
|
5
5
|
const model = await getModel(context, modelId);
|
|
6
6
|
const apiType = preview ? "preview" : "read";
|
|
7
7
|
const executeSchema = await context.cms.getExecutableSchema(apiType);
|
|
8
|
-
const
|
|
8
|
+
const expandedFields = expandFieldWildcards(fields, model, context);
|
|
9
|
+
const fieldsSelection = buildFieldsSelection(expandedFields);
|
|
9
10
|
const query = `
|
|
10
11
|
query Get${model.singularApiName}($where: ${model.singularApiName}GetWhereInput!) {
|
|
11
12
|
get${model.singularApiName}(where: $where) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graphql/schema/cms/getEntryResolver.js","sources":["../../../../src/graphql/schema/cms/getEntryResolver.ts"],"sourcesContent":["import type { CmsContext } from \"~/types/index.js\";\nimport type { ApiEndpoint } from \"~/types/index.js\";\nimport type { ExecutionResult } from \"graphql\";\nimport {
|
|
1
|
+
{"version":3,"file":"graphql/schema/cms/getEntryResolver.js","sources":["../../../../src/graphql/schema/cms/getEntryResolver.ts"],"sourcesContent":["import type { CmsContext } from \"~/types/index.js\";\nimport type { ApiEndpoint } from \"~/types/index.js\";\nimport type { ExecutionResult } from \"graphql\";\nimport {\n getModel,\n getErrorMessage,\n buildFieldsSelection,\n expandFieldWildcards\n} from \"./helpers.js\";\n\nexport interface GetEntryArgs {\n modelId: string;\n where: Record<string, unknown>;\n fields: string[];\n preview?: boolean;\n}\n\nexport const createGetEntryResolver = () => {\n return async ({ args, context }: { args: GetEntryArgs; context: CmsContext }) => {\n const { modelId, where, fields, preview = false } = args;\n\n try {\n const model = await getModel(context, modelId);\n\n // Determine which API to use based on the preview flag.\n // preview=true -> preview API, preview=false -> read API\n const apiType: ApiEndpoint = preview ? \"preview\" : \"read\";\n const executeSchema = await context.cms.getExecutableSchema(apiType);\n\n const expandedFields = expandFieldWildcards(fields, model, context);\n const fieldsSelection = buildFieldsSelection(expandedFields);\n\n const query = /* GraphQL */ `\n query Get${model.singularApiName}($where: ${model.singularApiName}GetWhereInput!) {\n get${model.singularApiName}(where: $where) {\n data {\n ${fieldsSelection}\n }\n error {\n message\n code\n data\n }\n }\n }\n `;\n\n const result = (await executeSchema({\n query,\n variables: { where }\n })) as ExecutionResult;\n\n if (result.errors && result.errors.length > 0) {\n return {\n data: null,\n error: {\n message: result.errors.map(e => e.message).join(\"; \"),\n code: \"GET_ENTRY_ERROR\"\n }\n };\n }\n\n const operationName = `get${model.singularApiName}`;\n return result.data?.[operationName] || { data: null, error: null };\n } catch (error) {\n return {\n data: null,\n error: {\n message: getErrorMessage(error, \"Failed to get entry\"),\n code: \"GET_ENTRY_ERROR\"\n }\n };\n }\n };\n};\n"],"names":["createGetEntryResolver","args","context","modelId","where","fields","preview","model","getModel","apiType","executeSchema","expandedFields","expandFieldWildcards","fieldsSelection","buildFieldsSelection","query","result","e","operationName","error","getErrorMessage"],"mappings":";AAiBO,MAAMA,yBAAyB,IAC3B,OAAO,EAAEC,IAAI,EAAEC,OAAO,EAA+C;QACxE,MAAM,EAAEC,OAAO,EAAEC,KAAK,EAAEC,MAAM,EAAEC,UAAU,KAAK,EAAE,GAAGL;QAEpD,IAAI;YACA,MAAMM,QAAQ,MAAMC,SAASN,SAASC;YAItC,MAAMM,UAAuBH,UAAU,YAAY;YACnD,MAAMI,gBAAgB,MAAMR,QAAQ,GAAG,CAAC,mBAAmB,CAACO;YAE5D,MAAME,iBAAiBC,qBAAqBP,QAAQE,OAAOL;YAC3D,MAAMW,kBAAkBC,qBAAqBH;YAE7C,MAAMI,QAAsB,CAAC;yBAChB,EAAER,MAAM,eAAe,CAAC,SAAS,EAAEA,MAAM,eAAe,CAAC;uBAC3D,EAAEA,MAAM,eAAe,CAAC;;4BAEnB,EAAEM,gBAAgB;;;;;;;;;YASlC,CAAC;YAED,MAAMG,SAAU,MAAMN,cAAc;gBAChCK;gBACA,WAAW;oBAAEX;gBAAM;YACvB;YAEA,IAAIY,OAAO,MAAM,IAAIA,OAAO,MAAM,CAAC,MAAM,GAAG,GACxC,OAAO;gBACH,MAAM;gBACN,OAAO;oBACH,SAASA,OAAO,MAAM,CAAC,GAAG,CAACC,CAAAA,IAAKA,EAAE,OAAO,EAAE,IAAI,CAAC;oBAChD,MAAM;gBACV;YACJ;YAGJ,MAAMC,gBAAgB,CAAC,GAAG,EAAEX,MAAM,eAAe,EAAE;YACnD,OAAOS,OAAO,IAAI,EAAE,CAACE,cAAc,IAAI;gBAAE,MAAM;gBAAM,OAAO;YAAK;QACrE,EAAE,OAAOC,OAAO;YACZ,OAAO;gBACH,MAAM;gBACN,OAAO;oBACH,SAASC,gBAAgBD,OAAO;oBAChC,MAAM;gBACV;YACJ;QACJ;IACJ"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { CmsContext } from "../../../types/index.js";
|
|
2
|
+
export interface GetModelArgs {
|
|
3
|
+
modelId: string;
|
|
4
|
+
}
|
|
5
|
+
export declare const createGetModelResolver: () => ({ args, context }: {
|
|
6
|
+
args: GetModelArgs;
|
|
7
|
+
context: CmsContext;
|
|
8
|
+
}) => Promise<{
|
|
9
|
+
data: {
|
|
10
|
+
name: string;
|
|
11
|
+
modelId: string;
|
|
12
|
+
singularApiName: string;
|
|
13
|
+
pluralApiName: string;
|
|
14
|
+
description: string | null;
|
|
15
|
+
titleFieldId: string;
|
|
16
|
+
descriptionFieldId: string | null | undefined;
|
|
17
|
+
imageFieldId: string | null | undefined;
|
|
18
|
+
fields: import("~/types/index.js").CmsModelField[];
|
|
19
|
+
layout: import("~/types/index.js").CmsModelLayout;
|
|
20
|
+
tags: string[] | undefined;
|
|
21
|
+
settings: import("../../../features/modelBuilder/abstractions.js").IModelSettings | null | undefined;
|
|
22
|
+
metadata: {
|
|
23
|
+
valuesSelection: string;
|
|
24
|
+
componentMap: Record<string, string>;
|
|
25
|
+
refModels: Record<string, import("~/features/contentModel/RefModelsGenerator/abstractions.js").RefModelMetadata>;
|
|
26
|
+
};
|
|
27
|
+
};
|
|
28
|
+
error: null;
|
|
29
|
+
} | {
|
|
30
|
+
data: null;
|
|
31
|
+
error: {
|
|
32
|
+
message: string;
|
|
33
|
+
code: string;
|
|
34
|
+
};
|
|
35
|
+
}>;
|