@webiny/api-headless-cms 6.4.0-beta.2 → 6.4.0-beta.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/context.js +2 -0
  2. package/context.js.map +1 -1
  3. package/features/contentEntry/entryDataFactories/CreateEntryDataFactory/CreateEntryDataFactory.js +5 -1
  4. package/features/contentEntry/entryDataFactories/CreateEntryDataFactory/CreateEntryDataFactory.js.map +1 -1
  5. package/features/contentEntry/entryDataFactories/CreateEntryRevisionFromDataFactory/CreateEntryRevisionFromDataFactory.js +2 -1
  6. package/features/contentEntry/entryDataFactories/CreateEntryRevisionFromDataFactory/CreateEntryRevisionFromDataFactory.js.map +1 -1
  7. package/features/contentEntry/entryDataFactories/UpdateEntryDataFactory/UpdateEntryDataFactory.js +5 -1
  8. package/features/contentEntry/entryDataFactories/UpdateEntryDataFactory/UpdateEntryDataFactory.js.map +1 -1
  9. package/features/contentEntry/entryDataFactories/expiresAt.d.ts +5 -0
  10. package/features/contentEntry/entryDataFactories/expiresAt.js +9 -0
  11. package/features/contentEntry/entryDataFactories/expiresAt.js.map +1 -0
  12. package/features/modelBuilder/fields/TextFieldType.d.ts +11 -1
  13. package/features/modelBuilder/fields/TextFieldType.js +20 -2
  14. package/features/modelBuilder/fields/TextFieldType.js.map +1 -1
  15. package/features/modelBuilder/index.d.ts +1 -0
  16. package/features/modelBuilder/index.js +2 -2
  17. package/features/storage/feature.js +2 -0
  18. package/features/storage/feature.js.map +1 -1
  19. package/features/storage/fields/CompressedTextStorageTransform.d.ts +2 -1
  20. package/features/storage/fields/CompressedTextStorageTransform.js +2 -1
  21. package/features/storage/fields/CompressedTextStorageTransform.js.map +1 -1
  22. package/features/storage/fields/EncryptedTextStorageTransform.d.ts +14 -0
  23. package/features/storage/fields/EncryptedTextStorageTransform.js +36 -0
  24. package/features/storage/fields/EncryptedTextStorageTransform.js.map +1 -0
  25. package/features/webhooks/CmsWebhookFactory.d.ts +11 -0
  26. package/features/webhooks/CmsWebhookFactory.js +44 -0
  27. package/features/webhooks/CmsWebhookFactory.js.map +1 -0
  28. package/features/webhooks/feature.d.ts +4 -0
  29. package/features/webhooks/feature.js +25 -0
  30. package/features/webhooks/feature.js.map +1 -0
  31. package/features/webhooks/handlers/OnEntryCreatedHandler.d.ts +11 -0
  32. package/features/webhooks/handlers/OnEntryCreatedHandler.js +22 -0
  33. package/features/webhooks/handlers/OnEntryCreatedHandler.js.map +1 -0
  34. package/features/webhooks/handlers/OnEntryDeletedHandler.d.ts +11 -0
  35. package/features/webhooks/handlers/OnEntryDeletedHandler.js +23 -0
  36. package/features/webhooks/handlers/OnEntryDeletedHandler.js.map +1 -0
  37. package/features/webhooks/handlers/OnEntryPublishedHandler.d.ts +11 -0
  38. package/features/webhooks/handlers/OnEntryPublishedHandler.js +22 -0
  39. package/features/webhooks/handlers/OnEntryPublishedHandler.js.map +1 -0
  40. package/features/webhooks/handlers/OnEntryRestoredHandler.d.ts +11 -0
  41. package/features/webhooks/handlers/OnEntryRestoredHandler.js +22 -0
  42. package/features/webhooks/handlers/OnEntryRestoredHandler.js.map +1 -0
  43. package/features/webhooks/handlers/OnEntryTrashedHandler.d.ts +11 -0
  44. package/features/webhooks/handlers/OnEntryTrashedHandler.js +23 -0
  45. package/features/webhooks/handlers/OnEntryTrashedHandler.js.map +1 -0
  46. package/features/webhooks/handlers/OnEntryUnpublishedHandler.d.ts +11 -0
  47. package/features/webhooks/handlers/OnEntryUnpublishedHandler.js +22 -0
  48. package/features/webhooks/handlers/OnEntryUnpublishedHandler.js.map +1 -0
  49. package/features/webhooks/handlers/OnEntryUpdatedHandler.d.ts +11 -0
  50. package/features/webhooks/handlers/OnEntryUpdatedHandler.js +23 -0
  51. package/features/webhooks/handlers/OnEntryUpdatedHandler.js.map +1 -0
  52. package/graphql/schema/createSingularSDL.js +2 -0
  53. package/graphql/schema/createSingularSDL.js.map +1 -1
  54. package/package.json +27 -25
  55. package/types/types.d.ts +6 -0
  56. package/types/types.js.map +1 -1
  57. package/utils/entryStorage.js +6 -6
  58. package/utils/entryStorage.js.map +1 -1
package/context.js CHANGED
@@ -25,6 +25,7 @@ import { CmsSortMapperFeature } from "./features/sortMapper/feature.js";
25
25
  import { GraphQLFeature } from "./features/graphql/index.js";
26
26
  import { ValidationFeature } from "./features/validation/index.js";
27
27
  import { StorageFeature } from "./features/storage/index.js";
28
+ import { CmsWebhooksFeature } from "./features/webhooks/feature.js";
28
29
  const getParameters = async (context)=>{
29
30
  const plugins = context.plugins.byType(CmsParametersPlugin.type);
30
31
  for (const plugin of plugins){
@@ -118,6 +119,7 @@ const createContextPlugin = ()=>{
118
119
  ModelBuilderFeature.register(context.container);
119
120
  CmsWhereMapperFeature.register(context.container);
120
121
  CmsSortMapperFeature.register(context.container);
122
+ CmsWebhooksFeature.register(context.container);
121
123
  if (!storageOperations.init) return;
122
124
  await storageOperations.init(context);
123
125
  });
package/context.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","sources":["../src/context.ts"],"sourcesContent":["import type { ApiEndpoint, CmsContext } from \"~/types/index.js\";\nimport WebinyError from \"@webiny/error\";\nimport { ContextPlugin } from \"@webiny/api\";\nimport type { GraphQLRequestBody } from \"@webiny/handler-graphql/types.js\";\nimport { processRequestBody } from \"@webiny/handler-graphql\";\nimport type { CmsParametersPluginResponse } from \"~/plugins/CmsParametersPlugin.js\";\nimport { CmsParametersPlugin } from \"~/plugins/CmsParametersPlugin.js\";\nimport { AccessControl } from \"~/crud/AccessControl/AccessControl.js\";\nimport { createModelGroupsCrud } from \"~/crud/contentModelGroup.crud.js\";\nimport { createModelsCrud } from \"~/crud/contentModel.crud.js\";\nimport { createContentEntryCrud } from \"~/crud/contentEntry.crud.js\";\nimport { StorageOperationsCmsModelPlugin } from \"~/plugins/index.js\";\nimport { createCmsModelFieldConvertersAttachFactory } from \"~/utils/converters/valueKeyStorageConverter.js\";\nimport { createExportCrud } from \"~/export/index.js\";\nimport { createImportCrud } from \"~/export/crud/importing.js\";\nimport { getSchema } from \"~/graphql/getSchema.js\";\nimport { CmsInstallerFeature } from \"~/features/installer/feature.js\";\nimport { ContentEntriesFeature } from \"~/features/contentEntry/ContentEntriesFeature.js\";\nimport {\n AccessControl as AccessControlAbstraction,\n CmsContext as CmsContextAbstraction,\n StorageOperations,\n StorageOperationsFactory\n} from \"~/features/shared/abstractions.js\";\nimport {\n EntryFromStorageTransform,\n EntryToStorageTransform,\n PluginsContainer,\n SearchableFieldsProvider\n} from \"./legacy/abstractions.js\";\nimport { entryFromStorageTransform, entryToStorageTransform } from \"~/utils/entryStorage.js\";\nimport { getSearchableFields } from \"~/crud/contentEntry/searchableFields.js\";\nimport { ContentModelGroupFeature } from \"~/features/contentModelGroup/ContentModelGroupFeature.js\";\nimport { ContentModelFeature } from \"~/features/contentModel/ContentModelFeature.js\";\nimport { ModelBuilderFeature } from \"~/features/modelBuilder/index.js\";\nimport { CmsWhereMapperFeature } from \"~/features/whereMapper/feature.js\";\nimport { CmsSortMapperFeature } from \"~/features/sortMapper/feature.js\";\nimport { GraphQLFeature } from \"~/features/graphql/index.js\";\nimport { ValidationFeature } from \"~/features/validation/index.js\";\nimport { StorageFeature } from \"~/features/storage/index.js\";\n\nconst getParameters = async (context: CmsContext): Promise<CmsParametersPluginResponse> => {\n const plugins = context.plugins.byType<CmsParametersPlugin>(CmsParametersPlugin.type);\n\n for (const plugin of plugins) {\n const result = await plugin.getParameters(context);\n if (result !== null) {\n return result;\n }\n }\n throw new WebinyError(\"Could not determine type of the CMS.\", \"CMS_TYPE_ERROR\");\n};\n\nexport const createContextPlugin = () => {\n const plugin = new ContextPlugin<CmsContext>(async context => {\n const { type } = await getParameters(context);\n\n const getTenant = () => {\n return context.tenancy.getCurrentTenant();\n };\n\n const setSchemaType = (type: ApiEndpoint | null) => {\n if (!type) {\n return;\n }\n\n context.cms.type = type;\n\n switch (type) {\n case \"read\":\n context.cms.READ = true;\n break;\n case \"preview\":\n context.cms.PREVIEW = true;\n break;\n default:\n context.cms.MANAGE = true;\n }\n };\n\n // TODO figure out a better way. maybe this stuff should be on before handler?\n // GraphQL fields must be loaded before anything else\n GraphQLFeature.register(context.container);\n ValidationFeature.register(context.container);\n StorageFeature.register(context.container);\n\n async function getExecutableSchema(type: ApiEndpoint) {\n const originalType = context.cms.type;\n setSchemaType(type);\n\n const schema = await context.security.withoutAuthorization(() => {\n return getSchema({\n context,\n getTenant,\n type\n });\n });\n\n setSchemaType(originalType);\n\n return async <TData, TExtensions>(input: GraphQLRequestBody | GraphQLRequestBody[]) => {\n return processRequestBody<TData, TExtensions>(input, schema, context);\n };\n }\n\n context.plugins.register(\n new StorageOperationsCmsModelPlugin(createCmsModelFieldConvertersAttachFactory(context))\n );\n\n const accessControl = new AccessControl({\n getIdentity: async () => context.security.getIdentity(),\n getGroupsPermissions: () => context.security.getPermissions(\"cms.contentModelGroup\"),\n getModelsPermissions: () => context.security.getPermissions(\"cms.contentModel\"),\n getEntriesPermissions: () => context.security.getPermissions(\"cms.contentEntry\"),\n listAllGroups: () => {\n return context.security.withoutAuthorization(() => {\n return context.cms.listGroups();\n });\n }\n });\n\n const storageOperationsFactory = context.container.resolve(StorageOperationsFactory);\n\n const storageOperations = await storageOperationsFactory.create(context);\n await storageOperations.beforeInit(context);\n\n context.cms = {\n type,\n READ: type === \"read\",\n PREVIEW: type === \"preview\",\n MANAGE: type === \"manage\",\n storageOperations,\n accessControl,\n getExecutableSchema,\n ...createModelGroupsCrud({\n context\n }),\n ...createModelsCrud({\n context\n }),\n ...createContentEntryCrud({\n context\n }),\n export: {\n ...createExportCrud(context)\n },\n importing: {\n ...createImportCrud(context)\n }\n };\n\n // Register legacy dependencies\n context.container.registerInstance(StorageOperations, storageOperations);\n context.container.registerInstance(AccessControlAbstraction, accessControl);\n context.container.registerInstance(CmsContextAbstraction, context);\n context.container.registerInstance(PluginsContainer, context.plugins);\n context.container.registerInstance(EntryToStorageTransform, (model, entry) => {\n return entryToStorageTransform(context, model, entry);\n });\n context.container.registerInstance(EntryFromStorageTransform, (model, entry) => {\n return entryFromStorageTransform(context, model, entry);\n });\n context.container.registerInstance(SearchableFieldsProvider, params => {\n return getSearchableFields({\n context,\n fields: params.fields,\n input: []\n });\n });\n\n // Register features\n CmsInstallerFeature.register(context.container);\n ContentEntriesFeature.register(context.container);\n ContentModelFeature.register(context.container);\n ContentModelGroupFeature.register(context.container);\n ModelBuilderFeature.register(context.container);\n CmsWhereMapperFeature.register(context.container);\n CmsSortMapperFeature.register(context.container);\n\n if (!storageOperations.init) {\n return;\n }\n await storageOperations.init(context);\n });\n\n plugin.name = \"cms.createContext\";\n\n return plugin;\n};\n"],"names":["getParameters","context","plugins","CmsParametersPlugin","plugin","result","WebinyError","createContextPlugin","ContextPlugin","type","getTenant","setSchemaType","GraphQLFeature","ValidationFeature","StorageFeature","getExecutableSchema","originalType","schema","getSchema","input","processRequestBody","StorageOperationsCmsModelPlugin","createCmsModelFieldConvertersAttachFactory","accessControl","AccessControl","storageOperationsFactory","StorageOperationsFactory","storageOperations","createModelGroupsCrud","createModelsCrud","createContentEntryCrud","createExportCrud","createImportCrud","StorageOperations","AccessControlAbstraction","CmsContextAbstraction","PluginsContainer","EntryToStorageTransform","model","entry","entryToStorageTransform","EntryFromStorageTransform","entryFromStorageTransform","SearchableFieldsProvider","params","getSearchableFields","CmsInstallerFeature","ContentEntriesFeature","ContentModelFeature","ContentModelGroupFeature","ModelBuilderFeature","CmsWhereMapperFeature","CmsSortMapperFeature"],"mappings":"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"}
1
+ {"version":3,"file":"context.js","sources":["../src/context.ts"],"sourcesContent":["import type { ApiEndpoint, CmsContext } from \"~/types/index.js\";\nimport WebinyError from \"@webiny/error\";\nimport { ContextPlugin } from \"@webiny/api\";\nimport type { GraphQLRequestBody } from \"@webiny/handler-graphql/types.js\";\nimport { processRequestBody } from \"@webiny/handler-graphql\";\nimport type { CmsParametersPluginResponse } from \"~/plugins/CmsParametersPlugin.js\";\nimport { CmsParametersPlugin } from \"~/plugins/CmsParametersPlugin.js\";\nimport { AccessControl } from \"~/crud/AccessControl/AccessControl.js\";\nimport { createModelGroupsCrud } from \"~/crud/contentModelGroup.crud.js\";\nimport { createModelsCrud } from \"~/crud/contentModel.crud.js\";\nimport { createContentEntryCrud } from \"~/crud/contentEntry.crud.js\";\nimport { StorageOperationsCmsModelPlugin } from \"~/plugins/index.js\";\nimport { createCmsModelFieldConvertersAttachFactory } from \"~/utils/converters/valueKeyStorageConverter.js\";\nimport { createExportCrud } from \"~/export/index.js\";\nimport { createImportCrud } from \"~/export/crud/importing.js\";\nimport { getSchema } from \"~/graphql/getSchema.js\";\nimport { CmsInstallerFeature } from \"~/features/installer/feature.js\";\nimport { ContentEntriesFeature } from \"~/features/contentEntry/ContentEntriesFeature.js\";\nimport {\n AccessControl as AccessControlAbstraction,\n CmsContext as CmsContextAbstraction,\n StorageOperations,\n StorageOperationsFactory\n} from \"~/features/shared/abstractions.js\";\nimport {\n EntryFromStorageTransform,\n EntryToStorageTransform,\n PluginsContainer,\n SearchableFieldsProvider\n} from \"./legacy/abstractions.js\";\nimport { entryFromStorageTransform, entryToStorageTransform } from \"~/utils/entryStorage.js\";\nimport { getSearchableFields } from \"~/crud/contentEntry/searchableFields.js\";\nimport { ContentModelGroupFeature } from \"~/features/contentModelGroup/ContentModelGroupFeature.js\";\nimport { ContentModelFeature } from \"~/features/contentModel/ContentModelFeature.js\";\nimport { ModelBuilderFeature } from \"~/features/modelBuilder/index.js\";\nimport { CmsWhereMapperFeature } from \"~/features/whereMapper/feature.js\";\nimport { CmsSortMapperFeature } from \"~/features/sortMapper/feature.js\";\nimport { GraphQLFeature } from \"~/features/graphql/index.js\";\nimport { ValidationFeature } from \"~/features/validation/index.js\";\nimport { StorageFeature } from \"~/features/storage/index.js\";\nimport { CmsWebhooksFeature } from \"~/features/webhooks/feature.js\";\n\nconst getParameters = async (context: CmsContext): Promise<CmsParametersPluginResponse> => {\n const plugins = context.plugins.byType<CmsParametersPlugin>(CmsParametersPlugin.type);\n\n for (const plugin of plugins) {\n const result = await plugin.getParameters(context);\n if (result !== null) {\n return result;\n }\n }\n throw new WebinyError(\"Could not determine type of the CMS.\", \"CMS_TYPE_ERROR\");\n};\n\nexport const createContextPlugin = () => {\n const plugin = new ContextPlugin<CmsContext>(async context => {\n const { type } = await getParameters(context);\n\n const getTenant = () => {\n return context.tenancy.getCurrentTenant();\n };\n\n const setSchemaType = (type: ApiEndpoint | null) => {\n if (!type) {\n return;\n }\n\n context.cms.type = type;\n\n switch (type) {\n case \"read\":\n context.cms.READ = true;\n break;\n case \"preview\":\n context.cms.PREVIEW = true;\n break;\n default:\n context.cms.MANAGE = true;\n }\n };\n\n // TODO figure out a better way. maybe this stuff should be on before handler?\n // GraphQL fields must be loaded before anything else\n GraphQLFeature.register(context.container);\n ValidationFeature.register(context.container);\n StorageFeature.register(context.container);\n\n async function getExecutableSchema(type: ApiEndpoint) {\n const originalType = context.cms.type;\n setSchemaType(type);\n\n const schema = await context.security.withoutAuthorization(() => {\n return getSchema({\n context,\n getTenant,\n type\n });\n });\n\n setSchemaType(originalType);\n\n return async <TData, TExtensions>(input: GraphQLRequestBody | GraphQLRequestBody[]) => {\n return processRequestBody<TData, TExtensions>(input, schema, context);\n };\n }\n\n context.plugins.register(\n new StorageOperationsCmsModelPlugin(createCmsModelFieldConvertersAttachFactory(context))\n );\n\n const accessControl = new AccessControl({\n getIdentity: async () => context.security.getIdentity(),\n getGroupsPermissions: () => context.security.getPermissions(\"cms.contentModelGroup\"),\n getModelsPermissions: () => context.security.getPermissions(\"cms.contentModel\"),\n getEntriesPermissions: () => context.security.getPermissions(\"cms.contentEntry\"),\n listAllGroups: () => {\n return context.security.withoutAuthorization(() => {\n return context.cms.listGroups();\n });\n }\n });\n\n const storageOperationsFactory = context.container.resolve(StorageOperationsFactory);\n\n const storageOperations = await storageOperationsFactory.create(context);\n await storageOperations.beforeInit(context);\n\n context.cms = {\n type,\n READ: type === \"read\",\n PREVIEW: type === \"preview\",\n MANAGE: type === \"manage\",\n storageOperations,\n accessControl,\n getExecutableSchema,\n ...createModelGroupsCrud({\n context\n }),\n ...createModelsCrud({\n context\n }),\n ...createContentEntryCrud({\n context\n }),\n export: {\n ...createExportCrud(context)\n },\n importing: {\n ...createImportCrud(context)\n }\n };\n\n // Register legacy dependencies\n context.container.registerInstance(StorageOperations, storageOperations);\n context.container.registerInstance(AccessControlAbstraction, accessControl);\n context.container.registerInstance(CmsContextAbstraction, context);\n context.container.registerInstance(PluginsContainer, context.plugins);\n context.container.registerInstance(EntryToStorageTransform, (model, entry) => {\n return entryToStorageTransform(context, model, entry);\n });\n context.container.registerInstance(EntryFromStorageTransform, (model, entry) => {\n return entryFromStorageTransform(context, model, entry);\n });\n context.container.registerInstance(SearchableFieldsProvider, params => {\n return getSearchableFields({\n context,\n fields: params.fields,\n input: []\n });\n });\n\n // Register features\n CmsInstallerFeature.register(context.container);\n ContentEntriesFeature.register(context.container);\n ContentModelFeature.register(context.container);\n ContentModelGroupFeature.register(context.container);\n ModelBuilderFeature.register(context.container);\n CmsWhereMapperFeature.register(context.container);\n CmsSortMapperFeature.register(context.container);\n CmsWebhooksFeature.register(context.container);\n\n if (!storageOperations.init) {\n return;\n }\n await storageOperations.init(context);\n });\n\n plugin.name = \"cms.createContext\";\n\n return plugin;\n};\n"],"names":["getParameters","context","plugins","CmsParametersPlugin","plugin","result","WebinyError","createContextPlugin","ContextPlugin","type","getTenant","setSchemaType","GraphQLFeature","ValidationFeature","StorageFeature","getExecutableSchema","originalType","schema","getSchema","input","processRequestBody","StorageOperationsCmsModelPlugin","createCmsModelFieldConvertersAttachFactory","accessControl","AccessControl","storageOperationsFactory","StorageOperationsFactory","storageOperations","createModelGroupsCrud","createModelsCrud","createContentEntryCrud","createExportCrud","createImportCrud","StorageOperations","AccessControlAbstraction","CmsContextAbstraction","PluginsContainer","EntryToStorageTransform","model","entry","entryToStorageTransform","EntryFromStorageTransform","entryFromStorageTransform","SearchableFieldsProvider","params","getSearchableFields","CmsInstallerFeature","ContentEntriesFeature","ContentModelFeature","ContentModelGroupFeature","ModelBuilderFeature","CmsWhereMapperFeature","CmsSortMapperFeature","CmsWebhooksFeature"],"mappings":"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"}
@@ -13,6 +13,7 @@ import { STATUS_DRAFT, STATUS_PUBLISHED, STATUS_UNPUBLISHED } from "../statuses.
13
13
  import { getIdentity } from "../../../../utils/identity.js";
14
14
  import { NotAuthorizedError } from "../../../../utils/errors.js";
15
15
  import { getSystem } from "../system.js";
16
+ import { getExpiresAt } from "../expiresAt.js";
16
17
  const convertDefaultValue = (field, value)=>{
17
18
  switch(field.type){
18
19
  case "boolean":
@@ -169,7 +170,10 @@ class CreateEntryDataFactoryImpl {
169
170
  live: status === STATUS_PUBLISHED ? {
170
171
  version
171
172
  } : null,
172
- revisionDescription: ""
173
+ revisionDescription: "",
174
+ expiresAt: getExpiresAt({
175
+ expiresAt: rawInput.expiresAt
176
+ })
173
177
  };
174
178
  if (status !== STATUS_DRAFT) {
175
179
  if (status === STATUS_PUBLISHED) {
@@ -1 +1 @@
1
- {"version":3,"file":"features/contentEntry/entryDataFactories/CreateEntryDataFactory/CreateEntryDataFactory.js","sources":["../../../../../src/features/contentEntry/entryDataFactories/CreateEntryDataFactory/CreateEntryDataFactory.ts"],"sourcesContent":["import { createImplementation } from \"@webiny/feature/api\";\nimport {\n CreateEntryDataFactory as FactoryAbstraction,\n type ICreateEntryDataFactory,\n type ICreateEntryDataResponse\n} from \"./abstractions.js\";\nimport { AccessControl, CmsContext } from \"~/features/shared/abstractions.js\";\nimport { TenantContext } from \"@webiny/api-core/features/tenancy/TenantContext/index.js\";\nimport { IdentityContext } from \"@webiny/api-core/features/security/IdentityContext/index.js\";\nimport type {\n CmsEntry,\n CmsEntryValues,\n CmsModel,\n CmsModelField,\n CreateCmsEntryInput,\n CreateCmsEntryOptionsInput\n} from \"~/types/index.js\";\nimport { getDate } from \"~/utils/date.js\";\nimport { ROOT_FOLDER } from \"~/constants.js\";\nimport WebinyError from \"@webiny/error\";\nimport { validateModelEntryDataOrThrow } from \"~/crud/contentEntry/entryDataValidation.js\";\nimport { referenceFieldsMapping } from \"~/crud/contentEntry/referenceFieldsMapping.js\";\nimport { createIdentifier, mdbid } from \"@webiny/utils\";\nimport { STATUS_DRAFT, STATUS_PUBLISHED, STATUS_UNPUBLISHED } from \"../statuses.js\";\nimport { getIdentity } from \"~/utils/identity.js\";\nimport { NotAuthorizedError } from \"~/utils/errors.js\";\nimport { getSystem } from \"../system.js\";\n\ntype DefaultValue = boolean | number | string | null;\n\nconst convertDefaultValue = (field: CmsModelField, value: DefaultValue): DefaultValue => {\n switch (field.type) {\n case \"boolean\":\n return Boolean(value);\n case \"number\":\n return Number(value);\n default:\n return value;\n }\n};\n\nconst getDefaultValue = (field: CmsModelField): (DefaultValue | DefaultValue[]) | undefined => {\n const { settings, list } = field;\n if (settings && settings.defaultValue !== undefined) {\n return convertDefaultValue(field, settings.defaultValue);\n }\n const { predefinedValues } = field;\n if (\n !predefinedValues ||\n !predefinedValues.enabled ||\n Array.isArray(predefinedValues.values) === false\n ) {\n return undefined;\n }\n if (!list) {\n const selectedValue = predefinedValues.values.find(value => {\n return !!value.selected;\n });\n if (selectedValue) {\n return convertDefaultValue(field, selectedValue.value);\n }\n return undefined;\n }\n return predefinedValues.values\n .filter(({ selected }) => !!selected)\n .map(({ value }) => {\n return convertDefaultValue(field, value);\n });\n};\n\nconst cleanInputValues = <TValues extends CmsEntryValues = CmsEntryValues>(\n model: CmsModel,\n input: TValues\n) => {\n return model.fields.reduce<TValues>((acc, field) => {\n if (!field.fieldId) {\n throw new WebinyError(\"Field does not have an fieldId.\", \"MISSING_FIELD_ID\", {\n field\n });\n }\n const key = field.fieldId as keyof TValues;\n const value = input[key] as TValues[keyof TValues];\n acc[key] = value === undefined ? (getDefaultValue(field) as TValues[keyof TValues]) : value;\n return acc;\n }, {} as TValues);\n};\n\nconst createEntryId = (input: CreateCmsEntryInput) => {\n let entryId = mdbid();\n if (input.id) {\n if (input.id.match(/^([a-zA-Z0-9])([a-zA-Z0-9-]+)([a-zA-Z0-9])$/) === null) {\n throw new WebinyError(\n \"The provided ID is not valid. It must be a string which can be A-Z, a-z, 0-9, - and it cannot start or end with a -.\",\n \"INVALID_ID\",\n {\n id: input.id\n }\n );\n }\n entryId = input.id;\n }\n const version = 1;\n return {\n entryId,\n version,\n id: createIdentifier({\n id: entryId,\n version\n })\n };\n};\n\nclass CreateEntryDataFactoryImpl implements ICreateEntryDataFactory {\n public constructor(\n private readonly cmsContext: CmsContext.Interface,\n private readonly identityContext: IdentityContext.Interface,\n private readonly tenantContext: TenantContext.Interface,\n private readonly accessControl: AccessControl.Interface\n ) {}\n\n public async create<TValues extends CmsEntryValues = CmsEntryValues>(\n model: CmsModel,\n rawInput: CreateCmsEntryInput<TValues>,\n options?: CreateCmsEntryOptionsInput\n ): Promise<ICreateEntryDataResponse<TValues>> {\n const initialValues = cleanInputValues<TValues>(model, rawInput.values || ({} as TValues));\n\n await validateModelEntryDataOrThrow({\n context: this.cmsContext,\n model,\n values: initialValues,\n skipValidators: options?.skipValidators\n });\n\n const values = await referenceFieldsMapping<TValues>({\n context: this.cmsContext,\n model,\n values: initialValues,\n validateEntries: true\n });\n\n const { id, entryId, version } = createEntryId(rawInput);\n\n const currentIdentity = this.identityContext.getIdentity();\n const currentDateTime = new Date();\n\n const status = rawInput.status || STATUS_DRAFT;\n if (status !== STATUS_DRAFT) {\n if (status === STATUS_PUBLISHED) {\n const canPublish = await this.accessControl.canAccessEntry({ model, pw: \"p\" });\n if (!canPublish) {\n throw new NotAuthorizedError(\n `Not allowed to access \"${model.modelId}\" entries.`\n );\n }\n } else if (status === STATUS_UNPUBLISHED) {\n const canUnpublish = await this.accessControl.canAccessEntry({ model, pw: \"u\" });\n if (!canUnpublish) {\n throw new NotAuthorizedError(\n `Not allowed to access \"${model.modelId}\" entries.`\n );\n }\n }\n }\n\n const locked = status !== STATUS_DRAFT;\n\n let revisionLevelPublishingMetaFields: Pick<\n CmsEntry,\n | \"revisionFirstPublishedOn\"\n | \"revisionLastPublishedOn\"\n | \"revisionFirstPublishedBy\"\n | \"revisionLastPublishedBy\"\n > = {\n revisionFirstPublishedOn: null,\n revisionLastPublishedOn: null,\n revisionFirstPublishedBy: null,\n revisionLastPublishedBy: null\n };\n\n let entryLevelPublishingMetaFields: Pick<\n CmsEntry,\n \"firstPublishedOn\" | \"lastPublishedOn\" | \"firstPublishedBy\" | \"lastPublishedBy\"\n > = {\n firstPublishedOn: null,\n lastPublishedOn: null,\n firstPublishedBy: null,\n lastPublishedBy: null\n };\n\n if (status === STATUS_PUBLISHED) {\n revisionLevelPublishingMetaFields = {\n revisionFirstPublishedOn: getDate(\n rawInput.revisionFirstPublishedOn,\n currentDateTime\n ),\n revisionLastPublishedOn: getDate(rawInput.revisionLastPublishedOn, currentDateTime),\n revisionFirstPublishedBy: getIdentity(\n rawInput.revisionFirstPublishedBy,\n currentIdentity\n ),\n revisionLastPublishedBy: getIdentity(\n rawInput.revisionLastPublishedBy,\n currentIdentity\n )\n };\n\n entryLevelPublishingMetaFields = {\n firstPublishedOn: getDate(rawInput.firstPublishedOn, currentDateTime),\n lastPublishedOn: getDate(rawInput.lastPublishedOn, currentDateTime),\n firstPublishedBy: getIdentity(rawInput.firstPublishedBy, currentIdentity),\n lastPublishedBy: getIdentity(rawInput.lastPublishedBy, currentIdentity)\n };\n }\n\n const entry: CmsEntry<TValues> = {\n tenant: this.tenantContext.getTenant().id,\n entryId,\n id,\n modelId: model.modelId,\n createdOn: getDate(rawInput.createdOn, currentDateTime),\n modifiedOn: getDate(rawInput.modifiedOn, null),\n savedOn: getDate(rawInput.savedOn, currentDateTime),\n deletedOn: getDate(rawInput.deletedOn, null),\n restoredOn: getDate(rawInput.restoredOn, null),\n createdBy: getIdentity(rawInput.createdBy, currentIdentity)!,\n modifiedBy: getIdentity(rawInput.modifiedBy, null),\n savedBy: getIdentity(rawInput.savedBy, currentIdentity)!,\n deletedBy: getIdentity(rawInput.deletedBy, null),\n restoredBy: getIdentity(rawInput.restoredBy, null),\n ...entryLevelPublishingMetaFields,\n revisionCreatedOn: getDate(rawInput.revisionCreatedOn, currentDateTime),\n revisionModifiedOn: getDate(rawInput.revisionModifiedOn, null),\n revisionSavedOn: getDate(rawInput.revisionSavedOn, currentDateTime),\n revisionDeletedOn: getDate(rawInput.revisionDeletedOn, null),\n revisionRestoredOn: getDate(rawInput.revisionRestoredOn, null),\n revisionCreatedBy: getIdentity(rawInput.revisionCreatedBy, currentIdentity)!,\n revisionModifiedBy: getIdentity(rawInput.revisionModifiedBy, null),\n revisionSavedBy: getIdentity(rawInput.revisionSavedBy, currentIdentity)!,\n revisionDeletedBy: getIdentity(rawInput.revisionDeletedBy, null),\n revisionRestoredBy: getIdentity(rawInput.revisionRestoredBy, null),\n ...revisionLevelPublishingMetaFields,\n version,\n status,\n locked,\n values,\n location: {\n folderId:\n rawInput.location?.folderId || rawInput.wbyAco_location?.folderId || ROOT_FOLDER\n },\n system: getSystem({\n input: rawInput\n }),\n live:\n status === STATUS_PUBLISHED\n ? {\n version\n }\n : null,\n revisionDescription: \"\"\n };\n\n if (status !== STATUS_DRAFT) {\n if (status === STATUS_PUBLISHED) {\n const canPublish = await this.accessControl.canAccessEntry({\n model,\n entry,\n pw: \"p\"\n });\n if (!canPublish) {\n throw new NotAuthorizedError(`Not allowed to access entry \"${entry.entryId}\".`);\n }\n } else if (status === STATUS_UNPUBLISHED) {\n const canUnpublish = await this.accessControl.canAccessEntry({\n model,\n entry,\n pw: \"u\"\n });\n if (!canUnpublish) {\n throw new NotAuthorizedError(`Not allowed to access entry \"${entry.entryId}\".`);\n }\n }\n }\n\n return {\n entry,\n input: {\n ...rawInput,\n values: structuredClone(values)\n }\n };\n }\n}\n\nexport const CreateEntryDataFactory = createImplementation({\n abstraction: FactoryAbstraction,\n implementation: CreateEntryDataFactoryImpl,\n dependencies: [CmsContext, IdentityContext, TenantContext, AccessControl]\n});\n"],"names":["convertDefaultValue","field","value","Boolean","Number","getDefaultValue","settings","list","undefined","predefinedValues","Array","selectedValue","selected","cleanInputValues","model","input","acc","WebinyError","key","createEntryId","entryId","mdbid","version","createIdentifier","CreateEntryDataFactoryImpl","cmsContext","identityContext","tenantContext","accessControl","rawInput","options","initialValues","validateModelEntryDataOrThrow","values","referenceFieldsMapping","id","currentIdentity","currentDateTime","Date","status","STATUS_DRAFT","STATUS_PUBLISHED","canPublish","NotAuthorizedError","STATUS_UNPUBLISHED","canUnpublish","locked","revisionLevelPublishingMetaFields","entryLevelPublishingMetaFields","getDate","getIdentity","entry","ROOT_FOLDER","getSystem","structuredClone","CreateEntryDataFactory","createImplementation","FactoryAbstraction","CmsContext","IdentityContext","TenantContext","AccessControl"],"mappings":"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"}
1
+ {"version":3,"file":"features/contentEntry/entryDataFactories/CreateEntryDataFactory/CreateEntryDataFactory.js","sources":["../../../../../src/features/contentEntry/entryDataFactories/CreateEntryDataFactory/CreateEntryDataFactory.ts"],"sourcesContent":["import { createImplementation } from \"@webiny/feature/api\";\nimport {\n CreateEntryDataFactory as FactoryAbstraction,\n type ICreateEntryDataFactory,\n type ICreateEntryDataResponse\n} from \"./abstractions.js\";\nimport { AccessControl, CmsContext } from \"~/features/shared/abstractions.js\";\nimport { TenantContext } from \"@webiny/api-core/features/tenancy/TenantContext/index.js\";\nimport { IdentityContext } from \"@webiny/api-core/features/security/IdentityContext/index.js\";\nimport type {\n CmsEntry,\n CmsEntryValues,\n CmsModel,\n CmsModelField,\n CreateCmsEntryInput,\n CreateCmsEntryOptionsInput\n} from \"~/types/index.js\";\nimport { getDate } from \"~/utils/date.js\";\nimport { ROOT_FOLDER } from \"~/constants.js\";\nimport WebinyError from \"@webiny/error\";\nimport { validateModelEntryDataOrThrow } from \"~/crud/contentEntry/entryDataValidation.js\";\nimport { referenceFieldsMapping } from \"~/crud/contentEntry/referenceFieldsMapping.js\";\nimport { createIdentifier, mdbid } from \"@webiny/utils\";\nimport { STATUS_DRAFT, STATUS_PUBLISHED, STATUS_UNPUBLISHED } from \"../statuses.js\";\nimport { getIdentity } from \"~/utils/identity.js\";\nimport { NotAuthorizedError } from \"~/utils/errors.js\";\nimport { getSystem } from \"../system.js\";\nimport { getExpiresAt } from \"../expiresAt.js\";\n\ntype DefaultValue = boolean | number | string | null;\n\nconst convertDefaultValue = (field: CmsModelField, value: DefaultValue): DefaultValue => {\n switch (field.type) {\n case \"boolean\":\n return Boolean(value);\n case \"number\":\n return Number(value);\n default:\n return value;\n }\n};\n\nconst getDefaultValue = (field: CmsModelField): (DefaultValue | DefaultValue[]) | undefined => {\n const { settings, list } = field;\n if (settings && settings.defaultValue !== undefined) {\n return convertDefaultValue(field, settings.defaultValue);\n }\n const { predefinedValues } = field;\n if (\n !predefinedValues ||\n !predefinedValues.enabled ||\n Array.isArray(predefinedValues.values) === false\n ) {\n return undefined;\n }\n if (!list) {\n const selectedValue = predefinedValues.values.find(value => {\n return !!value.selected;\n });\n if (selectedValue) {\n return convertDefaultValue(field, selectedValue.value);\n }\n return undefined;\n }\n return predefinedValues.values\n .filter(({ selected }) => !!selected)\n .map(({ value }) => {\n return convertDefaultValue(field, value);\n });\n};\n\nconst cleanInputValues = <TValues extends CmsEntryValues = CmsEntryValues>(\n model: CmsModel,\n input: TValues\n) => {\n return model.fields.reduce<TValues>((acc, field) => {\n if (!field.fieldId) {\n throw new WebinyError(\"Field does not have an fieldId.\", \"MISSING_FIELD_ID\", {\n field\n });\n }\n const key = field.fieldId as keyof TValues;\n const value = input[key] as TValues[keyof TValues];\n acc[key] = value === undefined ? (getDefaultValue(field) as TValues[keyof TValues]) : value;\n return acc;\n }, {} as TValues);\n};\n\nconst createEntryId = (input: CreateCmsEntryInput) => {\n let entryId = mdbid();\n if (input.id) {\n if (input.id.match(/^([a-zA-Z0-9])([a-zA-Z0-9-]+)([a-zA-Z0-9])$/) === null) {\n throw new WebinyError(\n \"The provided ID is not valid. It must be a string which can be A-Z, a-z, 0-9, - and it cannot start or end with a -.\",\n \"INVALID_ID\",\n {\n id: input.id\n }\n );\n }\n entryId = input.id;\n }\n const version = 1;\n return {\n entryId,\n version,\n id: createIdentifier({\n id: entryId,\n version\n })\n };\n};\n\nclass CreateEntryDataFactoryImpl implements ICreateEntryDataFactory {\n public constructor(\n private readonly cmsContext: CmsContext.Interface,\n private readonly identityContext: IdentityContext.Interface,\n private readonly tenantContext: TenantContext.Interface,\n private readonly accessControl: AccessControl.Interface\n ) {}\n\n public async create<TValues extends CmsEntryValues = CmsEntryValues>(\n model: CmsModel,\n rawInput: CreateCmsEntryInput<TValues>,\n options?: CreateCmsEntryOptionsInput\n ): Promise<ICreateEntryDataResponse<TValues>> {\n const initialValues = cleanInputValues<TValues>(model, rawInput.values || ({} as TValues));\n\n await validateModelEntryDataOrThrow({\n context: this.cmsContext,\n model,\n values: initialValues,\n skipValidators: options?.skipValidators\n });\n\n const values = await referenceFieldsMapping<TValues>({\n context: this.cmsContext,\n model,\n values: initialValues,\n validateEntries: true\n });\n\n const { id, entryId, version } = createEntryId(rawInput);\n\n const currentIdentity = this.identityContext.getIdentity();\n const currentDateTime = new Date();\n\n const status = rawInput.status || STATUS_DRAFT;\n if (status !== STATUS_DRAFT) {\n if (status === STATUS_PUBLISHED) {\n const canPublish = await this.accessControl.canAccessEntry({ model, pw: \"p\" });\n if (!canPublish) {\n throw new NotAuthorizedError(\n `Not allowed to access \"${model.modelId}\" entries.`\n );\n }\n } else if (status === STATUS_UNPUBLISHED) {\n const canUnpublish = await this.accessControl.canAccessEntry({ model, pw: \"u\" });\n if (!canUnpublish) {\n throw new NotAuthorizedError(\n `Not allowed to access \"${model.modelId}\" entries.`\n );\n }\n }\n }\n\n const locked = status !== STATUS_DRAFT;\n\n let revisionLevelPublishingMetaFields: Pick<\n CmsEntry,\n | \"revisionFirstPublishedOn\"\n | \"revisionLastPublishedOn\"\n | \"revisionFirstPublishedBy\"\n | \"revisionLastPublishedBy\"\n > = {\n revisionFirstPublishedOn: null,\n revisionLastPublishedOn: null,\n revisionFirstPublishedBy: null,\n revisionLastPublishedBy: null\n };\n\n let entryLevelPublishingMetaFields: Pick<\n CmsEntry,\n \"firstPublishedOn\" | \"lastPublishedOn\" | \"firstPublishedBy\" | \"lastPublishedBy\"\n > = {\n firstPublishedOn: null,\n lastPublishedOn: null,\n firstPublishedBy: null,\n lastPublishedBy: null\n };\n\n if (status === STATUS_PUBLISHED) {\n revisionLevelPublishingMetaFields = {\n revisionFirstPublishedOn: getDate(\n rawInput.revisionFirstPublishedOn,\n currentDateTime\n ),\n revisionLastPublishedOn: getDate(rawInput.revisionLastPublishedOn, currentDateTime),\n revisionFirstPublishedBy: getIdentity(\n rawInput.revisionFirstPublishedBy,\n currentIdentity\n ),\n revisionLastPublishedBy: getIdentity(\n rawInput.revisionLastPublishedBy,\n currentIdentity\n )\n };\n\n entryLevelPublishingMetaFields = {\n firstPublishedOn: getDate(rawInput.firstPublishedOn, currentDateTime),\n lastPublishedOn: getDate(rawInput.lastPublishedOn, currentDateTime),\n firstPublishedBy: getIdentity(rawInput.firstPublishedBy, currentIdentity),\n lastPublishedBy: getIdentity(rawInput.lastPublishedBy, currentIdentity)\n };\n }\n\n const entry: CmsEntry<TValues> = {\n tenant: this.tenantContext.getTenant().id,\n entryId,\n id,\n modelId: model.modelId,\n createdOn: getDate(rawInput.createdOn, currentDateTime),\n modifiedOn: getDate(rawInput.modifiedOn, null),\n savedOn: getDate(rawInput.savedOn, currentDateTime),\n deletedOn: getDate(rawInput.deletedOn, null),\n restoredOn: getDate(rawInput.restoredOn, null),\n createdBy: getIdentity(rawInput.createdBy, currentIdentity)!,\n modifiedBy: getIdentity(rawInput.modifiedBy, null),\n savedBy: getIdentity(rawInput.savedBy, currentIdentity)!,\n deletedBy: getIdentity(rawInput.deletedBy, null),\n restoredBy: getIdentity(rawInput.restoredBy, null),\n ...entryLevelPublishingMetaFields,\n revisionCreatedOn: getDate(rawInput.revisionCreatedOn, currentDateTime),\n revisionModifiedOn: getDate(rawInput.revisionModifiedOn, null),\n revisionSavedOn: getDate(rawInput.revisionSavedOn, currentDateTime),\n revisionDeletedOn: getDate(rawInput.revisionDeletedOn, null),\n revisionRestoredOn: getDate(rawInput.revisionRestoredOn, null),\n revisionCreatedBy: getIdentity(rawInput.revisionCreatedBy, currentIdentity)!,\n revisionModifiedBy: getIdentity(rawInput.revisionModifiedBy, null),\n revisionSavedBy: getIdentity(rawInput.revisionSavedBy, currentIdentity)!,\n revisionDeletedBy: getIdentity(rawInput.revisionDeletedBy, null),\n revisionRestoredBy: getIdentity(rawInput.revisionRestoredBy, null),\n ...revisionLevelPublishingMetaFields,\n version,\n status,\n locked,\n values,\n location: {\n folderId:\n rawInput.location?.folderId || rawInput.wbyAco_location?.folderId || ROOT_FOLDER\n },\n system: getSystem({\n input: rawInput\n }),\n live:\n status === STATUS_PUBLISHED\n ? {\n version\n }\n : null,\n revisionDescription: \"\",\n expiresAt: getExpiresAt({ expiresAt: rawInput.expiresAt })\n };\n\n if (status !== STATUS_DRAFT) {\n if (status === STATUS_PUBLISHED) {\n const canPublish = await this.accessControl.canAccessEntry({\n model,\n entry,\n pw: \"p\"\n });\n if (!canPublish) {\n throw new NotAuthorizedError(`Not allowed to access entry \"${entry.entryId}\".`);\n }\n } else if (status === STATUS_UNPUBLISHED) {\n const canUnpublish = await this.accessControl.canAccessEntry({\n model,\n entry,\n pw: \"u\"\n });\n if (!canUnpublish) {\n throw new NotAuthorizedError(`Not allowed to access entry \"${entry.entryId}\".`);\n }\n }\n }\n\n return {\n entry,\n input: {\n ...rawInput,\n values: structuredClone(values)\n }\n };\n }\n}\n\nexport const CreateEntryDataFactory = createImplementation({\n abstraction: FactoryAbstraction,\n implementation: CreateEntryDataFactoryImpl,\n dependencies: [CmsContext, IdentityContext, TenantContext, AccessControl]\n});\n"],"names":["convertDefaultValue","field","value","Boolean","Number","getDefaultValue","settings","list","undefined","predefinedValues","Array","selectedValue","selected","cleanInputValues","model","input","acc","WebinyError","key","createEntryId","entryId","mdbid","version","createIdentifier","CreateEntryDataFactoryImpl","cmsContext","identityContext","tenantContext","accessControl","rawInput","options","initialValues","validateModelEntryDataOrThrow","values","referenceFieldsMapping","id","currentIdentity","currentDateTime","Date","status","STATUS_DRAFT","STATUS_PUBLISHED","canPublish","NotAuthorizedError","STATUS_UNPUBLISHED","canUnpublish","locked","revisionLevelPublishingMetaFields","entryLevelPublishingMetaFields","getDate","getIdentity","entry","ROOT_FOLDER","getSystem","getExpiresAt","structuredClone","CreateEntryDataFactory","createImplementation","FactoryAbstraction","CmsContext","IdentityContext","TenantContext","AccessControl"],"mappings":"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"}
@@ -124,7 +124,8 @@ class CreateEntryRevisionFromDataFactoryImpl {
124
124
  input: rawInput,
125
125
  original: originalEntry
126
126
  }),
127
- live: originalEntry.live
127
+ live: originalEntry.live,
128
+ expiresAt: null
128
129
  };
129
130
  return {
130
131
  entry,
@@ -1 +1 @@
1
- {"version":3,"file":"features/contentEntry/entryDataFactories/CreateEntryRevisionFromDataFactory/CreateEntryRevisionFromDataFactory.js","sources":["../../../../../src/features/contentEntry/entryDataFactories/CreateEntryRevisionFromDataFactory/CreateEntryRevisionFromDataFactory.ts"],"sourcesContent":["import { createImplementation } from \"@webiny/feature/api\";\nimport {\n CreateEntryRevisionFromDataFactory as FactoryAbstraction,\n type ICreateEntryRevisionFromDataFactory,\n type ICreateEntryRevisionFromDataResponse\n} from \"./abstractions.js\";\nimport { AccessControl, CmsContext } from \"~/features/shared/abstractions.js\";\nimport { TenantContext } from \"@webiny/api-core/features/tenancy/TenantContext/index.js\";\nimport { IdentityContext } from \"@webiny/api-core/features/security/IdentityContext/index.js\";\nimport type {\n CmsEntry,\n CmsEntryValues,\n CmsModel,\n CreateCmsEntryInput,\n CreateCmsEntryOptionsInput\n} from \"~/types/index.js\";\nimport { getDate } from \"~/utils/date.js\";\nimport { getIdentity } from \"~/utils/identity.js\";\nimport { mapAndCleanUpdatedInputData } from \"../mapAndCleanUpdatedInputData.js\";\nimport { validateModelEntryDataOrThrow } from \"~/crud/contentEntry/entryDataValidation.js\";\nimport { referenceFieldsMapping } from \"~/crud/contentEntry/referenceFieldsMapping.js\";\nimport { createIdentifier, parseIdentifier } from \"@webiny/utils\";\nimport WebinyError from \"@webiny/error\";\nimport { STATUS_DRAFT, STATUS_PUBLISHED, STATUS_UNPUBLISHED } from \"../statuses.js\";\nimport { NotAuthorizedError } from \"~/utils/errors.js\";\nimport { getSystem } from \"../system.js\";\n\nconst increaseEntryIdVersion = (id: string) => {\n const { id: entryId, version } = parseIdentifier(id);\n if (!version) {\n throw new WebinyError(\n \"Cannot increase version on the ID without the version part.\",\n \"WRONG_ID\",\n {\n id\n }\n );\n }\n return {\n entryId,\n version: version + 1,\n id: createIdentifier({\n id: entryId,\n version: version + 1\n })\n };\n};\n\nclass CreateEntryRevisionFromDataFactoryImpl implements ICreateEntryRevisionFromDataFactory {\n public constructor(\n private readonly cmsContext: CmsContext.Interface,\n private readonly identityContext: IdentityContext.Interface,\n private readonly tenantContext: TenantContext.Interface,\n private readonly accessControl: AccessControl.Interface\n ) {}\n\n public async create<TValues extends CmsEntryValues = CmsEntryValues>(\n sourceId: string,\n model: CmsModel,\n rawInput: CreateCmsEntryInput<TValues>,\n originalEntry: CmsEntry<TValues>,\n latestStorageEntry: CmsEntry<TValues>,\n options?: CreateCmsEntryOptionsInput\n ): Promise<ICreateEntryRevisionFromDataResponse<TValues>> {\n const initialValues = {\n ...originalEntry.values,\n ...mapAndCleanUpdatedInputData<TValues>(model, rawInput.values)\n };\n\n await validateModelEntryDataOrThrow({\n context: this.cmsContext,\n model,\n values: initialValues,\n entry: originalEntry,\n skipValidators: options?.skipValidators\n });\n\n const values = await referenceFieldsMapping<TValues>({\n context: this.cmsContext,\n model,\n values: initialValues,\n validateEntries: false\n });\n\n const latestId = latestStorageEntry ? latestStorageEntry.id : sourceId;\n const { id, version: nextVersion } = increaseEntryIdVersion(latestId);\n\n const currentIdentity = this.identityContext.getIdentity();\n const currentDateTime = new Date();\n\n const status = rawInput.status || STATUS_DRAFT;\n if (status !== STATUS_DRAFT) {\n if (status === STATUS_PUBLISHED) {\n const canPublish = await this.accessControl.canAccessEntry({ model, pw: \"p\" });\n if (!canPublish) {\n throw new NotAuthorizedError(\n `Not allowed to access \"${model.modelId}\" entries.`\n );\n }\n } else if (status === STATUS_UNPUBLISHED) {\n const canUnpublish = await this.accessControl.canAccessEntry({ model, pw: \"u\" });\n if (!canUnpublish) {\n throw new NotAuthorizedError(\n `Not allowed to access \"${model.modelId}\" entries.`\n );\n }\n }\n }\n\n const locked = status !== STATUS_DRAFT;\n\n let revisionLevelPublishingMetaFields: Pick<\n CmsEntry,\n | \"revisionFirstPublishedOn\"\n | \"revisionLastPublishedOn\"\n | \"revisionFirstPublishedBy\"\n | \"revisionLastPublishedBy\"\n > = {\n revisionFirstPublishedOn: getDate(rawInput.revisionFirstPublishedOn, null),\n revisionLastPublishedOn: getDate(rawInput.revisionLastPublishedOn, null),\n revisionFirstPublishedBy: getIdentity(rawInput.revisionFirstPublishedBy, null),\n revisionLastPublishedBy: getIdentity(rawInput.revisionLastPublishedBy, null)\n };\n\n let entryLevelPublishingMetaFields: Pick<\n CmsEntry,\n \"firstPublishedOn\" | \"lastPublishedOn\" | \"firstPublishedBy\" | \"lastPublishedBy\"\n > = {\n firstPublishedOn: getDate(\n rawInput.firstPublishedOn,\n latestStorageEntry.firstPublishedOn\n ),\n lastPublishedOn: getDate(rawInput.lastPublishedOn, latestStorageEntry.lastPublishedOn),\n firstPublishedBy: getIdentity(\n rawInput.firstPublishedBy,\n latestStorageEntry.firstPublishedBy\n ),\n lastPublishedBy: getIdentity(\n rawInput.lastPublishedBy,\n latestStorageEntry.lastPublishedBy\n )\n };\n\n if (status === STATUS_PUBLISHED) {\n revisionLevelPublishingMetaFields = {\n revisionFirstPublishedOn: getDate(\n rawInput.revisionFirstPublishedOn,\n currentDateTime\n ),\n revisionLastPublishedOn: getDate(rawInput.revisionLastPublishedOn, currentDateTime),\n revisionFirstPublishedBy: getIdentity(\n rawInput.revisionFirstPublishedBy,\n currentIdentity\n ),\n revisionLastPublishedBy: getIdentity(\n rawInput.revisionLastPublishedBy,\n currentIdentity\n )\n };\n\n entryLevelPublishingMetaFields = {\n firstPublishedOn: getDate(\n rawInput.firstPublishedOn,\n latestStorageEntry.firstPublishedOn\n ),\n lastPublishedOn: getDate(rawInput.lastPublishedOn, currentDateTime),\n firstPublishedBy: getIdentity(\n rawInput.firstPublishedBy,\n latestStorageEntry.firstPublishedBy\n ),\n lastPublishedBy: getIdentity(rawInput.lastPublishedBy, currentIdentity)\n };\n }\n\n const entry: CmsEntry<TValues> = {\n ...originalEntry,\n id,\n version: nextVersion,\n createdOn: getDate(rawInput.createdOn, latestStorageEntry.createdOn),\n savedOn: getDate(rawInput.savedOn, currentDateTime),\n modifiedOn: getDate(rawInput.modifiedOn, currentDateTime),\n createdBy: getIdentity(rawInput.createdBy, latestStorageEntry.createdBy)!,\n savedBy: getIdentity(rawInput.savedBy, currentIdentity)!,\n modifiedBy: getIdentity(rawInput.modifiedBy, currentIdentity),\n ...entryLevelPublishingMetaFields,\n revisionCreatedOn: getDate(rawInput.revisionCreatedOn, currentDateTime),\n revisionSavedOn: getDate(rawInput.revisionSavedOn, currentDateTime),\n revisionModifiedOn: getDate(rawInput.revisionModifiedOn, null),\n revisionCreatedBy: getIdentity(rawInput.revisionCreatedBy, currentIdentity)!,\n revisionSavedBy: getIdentity(rawInput.revisionSavedBy, currentIdentity)!,\n revisionModifiedBy: getIdentity(rawInput.revisionModifiedBy, null),\n ...revisionLevelPublishingMetaFields,\n locked,\n status,\n values,\n system: getSystem({\n input: rawInput,\n original: originalEntry\n }),\n live: originalEntry.live\n };\n\n return {\n entry,\n input: {\n ...rawInput,\n values: structuredClone(values)\n }\n };\n }\n}\n\nexport const CreateEntryRevisionFromDataFactory = createImplementation({\n abstraction: FactoryAbstraction,\n implementation: CreateEntryRevisionFromDataFactoryImpl,\n dependencies: [CmsContext, IdentityContext, TenantContext, AccessControl]\n});\n"],"names":["increaseEntryIdVersion","id","entryId","version","parseIdentifier","WebinyError","createIdentifier","CreateEntryRevisionFromDataFactoryImpl","cmsContext","identityContext","tenantContext","accessControl","sourceId","model","rawInput","originalEntry","latestStorageEntry","options","initialValues","mapAndCleanUpdatedInputData","validateModelEntryDataOrThrow","values","referenceFieldsMapping","latestId","nextVersion","currentIdentity","currentDateTime","Date","status","STATUS_DRAFT","STATUS_PUBLISHED","canPublish","NotAuthorizedError","STATUS_UNPUBLISHED","canUnpublish","locked","revisionLevelPublishingMetaFields","getDate","getIdentity","entryLevelPublishingMetaFields","entry","getSystem","structuredClone","CreateEntryRevisionFromDataFactory","createImplementation","FactoryAbstraction","CmsContext","IdentityContext","TenantContext","AccessControl"],"mappings":"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"}
1
+ {"version":3,"file":"features/contentEntry/entryDataFactories/CreateEntryRevisionFromDataFactory/CreateEntryRevisionFromDataFactory.js","sources":["../../../../../src/features/contentEntry/entryDataFactories/CreateEntryRevisionFromDataFactory/CreateEntryRevisionFromDataFactory.ts"],"sourcesContent":["import { createImplementation } from \"@webiny/feature/api\";\nimport {\n CreateEntryRevisionFromDataFactory as FactoryAbstraction,\n type ICreateEntryRevisionFromDataFactory,\n type ICreateEntryRevisionFromDataResponse\n} from \"./abstractions.js\";\nimport { AccessControl, CmsContext } from \"~/features/shared/abstractions.js\";\nimport { TenantContext } from \"@webiny/api-core/features/tenancy/TenantContext/index.js\";\nimport { IdentityContext } from \"@webiny/api-core/features/security/IdentityContext/index.js\";\nimport type {\n CmsEntry,\n CmsEntryValues,\n CmsModel,\n CreateCmsEntryInput,\n CreateCmsEntryOptionsInput\n} from \"~/types/index.js\";\nimport { getDate } from \"~/utils/date.js\";\nimport { getIdentity } from \"~/utils/identity.js\";\nimport { mapAndCleanUpdatedInputData } from \"../mapAndCleanUpdatedInputData.js\";\nimport { validateModelEntryDataOrThrow } from \"~/crud/contentEntry/entryDataValidation.js\";\nimport { referenceFieldsMapping } from \"~/crud/contentEntry/referenceFieldsMapping.js\";\nimport { createIdentifier, parseIdentifier } from \"@webiny/utils\";\nimport WebinyError from \"@webiny/error\";\nimport { STATUS_DRAFT, STATUS_PUBLISHED, STATUS_UNPUBLISHED } from \"../statuses.js\";\nimport { NotAuthorizedError } from \"~/utils/errors.js\";\nimport { getSystem } from \"../system.js\";\n\nconst increaseEntryIdVersion = (id: string) => {\n const { id: entryId, version } = parseIdentifier(id);\n if (!version) {\n throw new WebinyError(\n \"Cannot increase version on the ID without the version part.\",\n \"WRONG_ID\",\n {\n id\n }\n );\n }\n return {\n entryId,\n version: version + 1,\n id: createIdentifier({\n id: entryId,\n version: version + 1\n })\n };\n};\n\nclass CreateEntryRevisionFromDataFactoryImpl implements ICreateEntryRevisionFromDataFactory {\n public constructor(\n private readonly cmsContext: CmsContext.Interface,\n private readonly identityContext: IdentityContext.Interface,\n private readonly tenantContext: TenantContext.Interface,\n private readonly accessControl: AccessControl.Interface\n ) {}\n\n public async create<TValues extends CmsEntryValues = CmsEntryValues>(\n sourceId: string,\n model: CmsModel,\n rawInput: CreateCmsEntryInput<TValues>,\n originalEntry: CmsEntry<TValues>,\n latestStorageEntry: CmsEntry<TValues>,\n options?: CreateCmsEntryOptionsInput\n ): Promise<ICreateEntryRevisionFromDataResponse<TValues>> {\n const initialValues = {\n ...originalEntry.values,\n ...mapAndCleanUpdatedInputData<TValues>(model, rawInput.values)\n };\n\n await validateModelEntryDataOrThrow({\n context: this.cmsContext,\n model,\n values: initialValues,\n entry: originalEntry,\n skipValidators: options?.skipValidators\n });\n\n const values = await referenceFieldsMapping<TValues>({\n context: this.cmsContext,\n model,\n values: initialValues,\n validateEntries: false\n });\n\n const latestId = latestStorageEntry ? latestStorageEntry.id : sourceId;\n const { id, version: nextVersion } = increaseEntryIdVersion(latestId);\n\n const currentIdentity = this.identityContext.getIdentity();\n const currentDateTime = new Date();\n\n const status = rawInput.status || STATUS_DRAFT;\n if (status !== STATUS_DRAFT) {\n if (status === STATUS_PUBLISHED) {\n const canPublish = await this.accessControl.canAccessEntry({ model, pw: \"p\" });\n if (!canPublish) {\n throw new NotAuthorizedError(\n `Not allowed to access \"${model.modelId}\" entries.`\n );\n }\n } else if (status === STATUS_UNPUBLISHED) {\n const canUnpublish = await this.accessControl.canAccessEntry({ model, pw: \"u\" });\n if (!canUnpublish) {\n throw new NotAuthorizedError(\n `Not allowed to access \"${model.modelId}\" entries.`\n );\n }\n }\n }\n\n const locked = status !== STATUS_DRAFT;\n\n let revisionLevelPublishingMetaFields: Pick<\n CmsEntry,\n | \"revisionFirstPublishedOn\"\n | \"revisionLastPublishedOn\"\n | \"revisionFirstPublishedBy\"\n | \"revisionLastPublishedBy\"\n > = {\n revisionFirstPublishedOn: getDate(rawInput.revisionFirstPublishedOn, null),\n revisionLastPublishedOn: getDate(rawInput.revisionLastPublishedOn, null),\n revisionFirstPublishedBy: getIdentity(rawInput.revisionFirstPublishedBy, null),\n revisionLastPublishedBy: getIdentity(rawInput.revisionLastPublishedBy, null)\n };\n\n let entryLevelPublishingMetaFields: Pick<\n CmsEntry,\n \"firstPublishedOn\" | \"lastPublishedOn\" | \"firstPublishedBy\" | \"lastPublishedBy\"\n > = {\n firstPublishedOn: getDate(\n rawInput.firstPublishedOn,\n latestStorageEntry.firstPublishedOn\n ),\n lastPublishedOn: getDate(rawInput.lastPublishedOn, latestStorageEntry.lastPublishedOn),\n firstPublishedBy: getIdentity(\n rawInput.firstPublishedBy,\n latestStorageEntry.firstPublishedBy\n ),\n lastPublishedBy: getIdentity(\n rawInput.lastPublishedBy,\n latestStorageEntry.lastPublishedBy\n )\n };\n\n if (status === STATUS_PUBLISHED) {\n revisionLevelPublishingMetaFields = {\n revisionFirstPublishedOn: getDate(\n rawInput.revisionFirstPublishedOn,\n currentDateTime\n ),\n revisionLastPublishedOn: getDate(rawInput.revisionLastPublishedOn, currentDateTime),\n revisionFirstPublishedBy: getIdentity(\n rawInput.revisionFirstPublishedBy,\n currentIdentity\n ),\n revisionLastPublishedBy: getIdentity(\n rawInput.revisionLastPublishedBy,\n currentIdentity\n )\n };\n\n entryLevelPublishingMetaFields = {\n firstPublishedOn: getDate(\n rawInput.firstPublishedOn,\n latestStorageEntry.firstPublishedOn\n ),\n lastPublishedOn: getDate(rawInput.lastPublishedOn, currentDateTime),\n firstPublishedBy: getIdentity(\n rawInput.firstPublishedBy,\n latestStorageEntry.firstPublishedBy\n ),\n lastPublishedBy: getIdentity(rawInput.lastPublishedBy, currentIdentity)\n };\n }\n\n const entry: CmsEntry<TValues> = {\n ...originalEntry,\n id,\n version: nextVersion,\n createdOn: getDate(rawInput.createdOn, latestStorageEntry.createdOn),\n savedOn: getDate(rawInput.savedOn, currentDateTime),\n modifiedOn: getDate(rawInput.modifiedOn, currentDateTime),\n createdBy: getIdentity(rawInput.createdBy, latestStorageEntry.createdBy)!,\n savedBy: getIdentity(rawInput.savedBy, currentIdentity)!,\n modifiedBy: getIdentity(rawInput.modifiedBy, currentIdentity),\n ...entryLevelPublishingMetaFields,\n revisionCreatedOn: getDate(rawInput.revisionCreatedOn, currentDateTime),\n revisionSavedOn: getDate(rawInput.revisionSavedOn, currentDateTime),\n revisionModifiedOn: getDate(rawInput.revisionModifiedOn, null),\n revisionCreatedBy: getIdentity(rawInput.revisionCreatedBy, currentIdentity)!,\n revisionSavedBy: getIdentity(rawInput.revisionSavedBy, currentIdentity)!,\n revisionModifiedBy: getIdentity(rawInput.revisionModifiedBy, null),\n ...revisionLevelPublishingMetaFields,\n locked,\n status,\n values,\n system: getSystem({\n input: rawInput,\n original: originalEntry\n }),\n live: originalEntry.live,\n expiresAt: null\n };\n\n return {\n entry,\n input: {\n ...rawInput,\n values: structuredClone(values)\n }\n };\n }\n}\n\nexport const CreateEntryRevisionFromDataFactory = createImplementation({\n abstraction: FactoryAbstraction,\n implementation: CreateEntryRevisionFromDataFactoryImpl,\n dependencies: [CmsContext, IdentityContext, TenantContext, AccessControl]\n});\n"],"names":["increaseEntryIdVersion","id","entryId","version","parseIdentifier","WebinyError","createIdentifier","CreateEntryRevisionFromDataFactoryImpl","cmsContext","identityContext","tenantContext","accessControl","sourceId","model","rawInput","originalEntry","latestStorageEntry","options","initialValues","mapAndCleanUpdatedInputData","validateModelEntryDataOrThrow","values","referenceFieldsMapping","latestId","nextVersion","currentIdentity","currentDateTime","Date","status","STATUS_DRAFT","STATUS_PUBLISHED","canPublish","NotAuthorizedError","STATUS_UNPUBLISHED","canUnpublish","locked","revisionLevelPublishingMetaFields","getDate","getIdentity","entryLevelPublishingMetaFields","entry","getSystem","structuredClone","CreateEntryRevisionFromDataFactory","createImplementation","FactoryAbstraction","CmsContext","IdentityContext","TenantContext","AccessControl"],"mappings":"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"}
@@ -8,6 +8,7 @@ import { validateModelEntryDataOrThrow } from "../../../../crud/contentEntry/ent
8
8
  import { referenceFieldsMapping } from "../../../../crud/contentEntry/referenceFieldsMapping.js";
9
9
  import { mapAndCleanUpdatedInputData } from "../mapAndCleanUpdatedInputData.js";
10
10
  import { getSystem } from "../system.js";
11
+ import { getExpiresAt } from "../expiresAt.js";
11
12
  const allowedEntryStatus = [
12
13
  "draft",
13
14
  "published",
@@ -76,7 +77,10 @@ class UpdateEntryDataFactoryImpl {
76
77
  input: rawInput,
77
78
  original: originalEntry
78
79
  }),
79
- live: originalEntry.live
80
+ live: originalEntry.live,
81
+ expiresAt: getExpiresAt({
82
+ expiresAt: rawInput.expiresAt
83
+ }, originalEntry)
80
84
  };
81
85
  const folderId = rawInput.wbyAco_location?.folderId;
82
86
  if (folderId) entry.location = {
@@ -1 +1 @@
1
- {"version":3,"file":"features/contentEntry/entryDataFactories/UpdateEntryDataFactory/UpdateEntryDataFactory.js","sources":["../../../../../src/features/contentEntry/entryDataFactories/UpdateEntryDataFactory/UpdateEntryDataFactory.ts"],"sourcesContent":["import { createImplementation } from \"@webiny/feature/api\";\nimport {\n type IUpdateEntryDataFactory,\n type IUpdateEntryDataResponse,\n UpdateEntryDataFactory as FactoryAbstraction\n} from \"./abstractions.js\";\nimport { CmsContext } from \"~/features/shared/abstractions.js\";\nimport { IdentityContext } from \"@webiny/api-core/features/security/IdentityContext/index.js\";\nimport type {\n CmsEntry,\n CmsEntryStatus,\n CmsEntryValues,\n CmsModel,\n UpdateCmsEntryInput,\n UpdateCmsEntryOptionsInput\n} from \"~/types/index.js\";\nimport { getDate } from \"~/utils/date.js\";\nimport { getIdentity } from \"~/utils/identity.js\";\nimport { validateModelEntryDataOrThrow } from \"~/crud/contentEntry/entryDataValidation.js\";\nimport { referenceFieldsMapping } from \"~/crud/contentEntry/referenceFieldsMapping.js\";\nimport { mapAndCleanUpdatedInputData } from \"../mapAndCleanUpdatedInputData.js\";\nimport { getSystem } from \"../system.js\";\n\nconst allowedEntryStatus: string[] = [\"draft\", \"published\", \"unpublished\"];\n\nconst transformEntryStatus = (status: CmsEntryStatus | string): CmsEntryStatus => {\n return allowedEntryStatus.includes(status) ? (status as CmsEntryStatus) : \"draft\";\n};\n\nclass UpdateEntryDataFactoryImpl implements IUpdateEntryDataFactory {\n public constructor(\n private readonly cmsContext: CmsContext.Interface,\n private readonly identityContext: IdentityContext.Interface\n ) {}\n\n public async create<TValues extends CmsEntryValues = CmsEntryValues>(\n model: CmsModel,\n rawInput: UpdateCmsEntryInput<TValues>,\n originalEntry: CmsEntry<TValues>,\n options?: UpdateCmsEntryOptionsInput\n ): Promise<IUpdateEntryDataResponse<TValues>> {\n const cleanedValues = mapAndCleanUpdatedInputData<TValues>(\n model,\n rawInput?.values || ({} as TValues)\n );\n\n await validateModelEntryDataOrThrow({\n context: this.cmsContext,\n model,\n values: cleanedValues,\n entry: originalEntry,\n skipValidators: options?.skipValidators\n });\n\n const mergedValues: TValues = {\n ...originalEntry.values,\n ...cleanedValues\n };\n\n const values = await referenceFieldsMapping<TValues>({\n context: this.cmsContext,\n model,\n values: mergedValues,\n validateEntries: false\n });\n\n const currentIdentity = this.identityContext.getIdentity();\n const currentDateTime = new Date();\n\n const entry: CmsEntry<TValues> = {\n ...originalEntry,\n revisionCreatedOn: getDate(rawInput.revisionCreatedOn, originalEntry.revisionCreatedOn),\n revisionModifiedOn: getDate(rawInput.revisionModifiedOn, currentDateTime),\n revisionSavedOn: getDate(rawInput.revisionSavedOn, currentDateTime),\n revisionDeletedOn: getDate(rawInput.revisionDeletedOn, null),\n revisionRestoredOn: getDate(rawInput.revisionRestoredOn, null),\n revisionFirstPublishedOn: getDate(\n rawInput.revisionFirstPublishedOn,\n originalEntry.revisionFirstPublishedOn\n ),\n revisionLastPublishedOn: getDate(\n rawInput.revisionLastPublishedOn,\n originalEntry.revisionLastPublishedOn\n ),\n revisionCreatedBy: getIdentity(\n rawInput.revisionCreatedBy,\n originalEntry.revisionCreatedBy\n )!,\n revisionModifiedBy: getIdentity(rawInput.revisionModifiedBy, currentIdentity),\n revisionSavedBy: getIdentity(rawInput.revisionSavedBy, currentIdentity)!,\n revisionDeletedBy: getIdentity(rawInput.revisionSavedBy, null),\n revisionRestoredBy: getIdentity(rawInput.revisionRestoredBy, null),\n revisionFirstPublishedBy: getIdentity(\n rawInput.revisionFirstPublishedBy,\n originalEntry.revisionFirstPublishedBy\n ),\n revisionLastPublishedBy: getIdentity(\n rawInput.revisionLastPublishedBy,\n originalEntry.revisionLastPublishedBy\n ),\n createdOn: getDate(rawInput.createdOn, originalEntry.createdOn),\n savedOn: getDate(rawInput.savedOn, currentDateTime),\n modifiedOn: getDate(rawInput.modifiedOn, currentDateTime),\n deletedOn: getDate(rawInput.deletedOn, null),\n restoredOn: getDate(rawInput.restoredOn, null),\n firstPublishedOn: getDate(rawInput.firstPublishedOn, originalEntry.firstPublishedOn),\n lastPublishedOn: getDate(rawInput.lastPublishedOn, originalEntry.lastPublishedOn),\n createdBy: getIdentity(rawInput.createdBy, originalEntry.createdBy)!,\n savedBy: getIdentity(rawInput.savedBy, currentIdentity)!,\n modifiedBy: getIdentity(rawInput.modifiedBy, currentIdentity),\n deletedBy: getIdentity(rawInput.deletedBy, null),\n restoredBy: getIdentity(rawInput.restoredBy, null),\n firstPublishedBy: getIdentity(\n rawInput.firstPublishedBy,\n originalEntry.firstPublishedBy\n ),\n lastPublishedBy: getIdentity(rawInput.lastPublishedBy, originalEntry.lastPublishedBy),\n values,\n status: transformEntryStatus(originalEntry.status),\n system: getSystem({\n input: rawInput,\n original: originalEntry\n }),\n live: originalEntry.live\n };\n\n const folderId = rawInput.wbyAco_location?.folderId;\n if (folderId) {\n entry.location = {\n folderId\n };\n }\n\n return {\n entry,\n input: {\n ...rawInput,\n values: structuredClone(values)\n }\n };\n }\n}\n\nexport const UpdateEntryDataFactory = createImplementation({\n abstraction: FactoryAbstraction,\n implementation: UpdateEntryDataFactoryImpl,\n dependencies: [CmsContext, IdentityContext]\n});\n"],"names":["allowedEntryStatus","transformEntryStatus","status","UpdateEntryDataFactoryImpl","cmsContext","identityContext","model","rawInput","originalEntry","options","cleanedValues","mapAndCleanUpdatedInputData","validateModelEntryDataOrThrow","mergedValues","values","referenceFieldsMapping","currentIdentity","currentDateTime","Date","entry","getDate","getIdentity","getSystem","folderId","structuredClone","UpdateEntryDataFactory","createImplementation","FactoryAbstraction","CmsContext","IdentityContext"],"mappings":"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"}
1
+ {"version":3,"file":"features/contentEntry/entryDataFactories/UpdateEntryDataFactory/UpdateEntryDataFactory.js","sources":["../../../../../src/features/contentEntry/entryDataFactories/UpdateEntryDataFactory/UpdateEntryDataFactory.ts"],"sourcesContent":["import { createImplementation } from \"@webiny/feature/api\";\nimport {\n type IUpdateEntryDataFactory,\n type IUpdateEntryDataResponse,\n UpdateEntryDataFactory as FactoryAbstraction\n} from \"./abstractions.js\";\nimport { CmsContext } from \"~/features/shared/abstractions.js\";\nimport { IdentityContext } from \"@webiny/api-core/features/security/IdentityContext/index.js\";\nimport type {\n CmsEntry,\n CmsEntryStatus,\n CmsEntryValues,\n CmsModel,\n UpdateCmsEntryInput,\n UpdateCmsEntryOptionsInput\n} from \"~/types/index.js\";\nimport { getDate } from \"~/utils/date.js\";\nimport { getIdentity } from \"~/utils/identity.js\";\nimport { validateModelEntryDataOrThrow } from \"~/crud/contentEntry/entryDataValidation.js\";\nimport { referenceFieldsMapping } from \"~/crud/contentEntry/referenceFieldsMapping.js\";\nimport { mapAndCleanUpdatedInputData } from \"../mapAndCleanUpdatedInputData.js\";\nimport { getSystem } from \"../system.js\";\nimport { getExpiresAt } from \"../expiresAt.js\";\n\nconst allowedEntryStatus: string[] = [\"draft\", \"published\", \"unpublished\"];\n\nconst transformEntryStatus = (status: CmsEntryStatus | string): CmsEntryStatus => {\n return allowedEntryStatus.includes(status) ? (status as CmsEntryStatus) : \"draft\";\n};\n\nclass UpdateEntryDataFactoryImpl implements IUpdateEntryDataFactory {\n public constructor(\n private readonly cmsContext: CmsContext.Interface,\n private readonly identityContext: IdentityContext.Interface\n ) {}\n\n public async create<TValues extends CmsEntryValues = CmsEntryValues>(\n model: CmsModel,\n rawInput: UpdateCmsEntryInput<TValues>,\n originalEntry: CmsEntry<TValues>,\n options?: UpdateCmsEntryOptionsInput\n ): Promise<IUpdateEntryDataResponse<TValues>> {\n const cleanedValues = mapAndCleanUpdatedInputData<TValues>(\n model,\n rawInput?.values || ({} as TValues)\n );\n\n await validateModelEntryDataOrThrow({\n context: this.cmsContext,\n model,\n values: cleanedValues,\n entry: originalEntry,\n skipValidators: options?.skipValidators\n });\n\n const mergedValues: TValues = {\n ...originalEntry.values,\n ...cleanedValues\n };\n\n const values = await referenceFieldsMapping<TValues>({\n context: this.cmsContext,\n model,\n values: mergedValues,\n validateEntries: false\n });\n\n const currentIdentity = this.identityContext.getIdentity();\n const currentDateTime = new Date();\n\n const entry: CmsEntry<TValues> = {\n ...originalEntry,\n revisionCreatedOn: getDate(rawInput.revisionCreatedOn, originalEntry.revisionCreatedOn),\n revisionModifiedOn: getDate(rawInput.revisionModifiedOn, currentDateTime),\n revisionSavedOn: getDate(rawInput.revisionSavedOn, currentDateTime),\n revisionDeletedOn: getDate(rawInput.revisionDeletedOn, null),\n revisionRestoredOn: getDate(rawInput.revisionRestoredOn, null),\n revisionFirstPublishedOn: getDate(\n rawInput.revisionFirstPublishedOn,\n originalEntry.revisionFirstPublishedOn\n ),\n revisionLastPublishedOn: getDate(\n rawInput.revisionLastPublishedOn,\n originalEntry.revisionLastPublishedOn\n ),\n revisionCreatedBy: getIdentity(\n rawInput.revisionCreatedBy,\n originalEntry.revisionCreatedBy\n )!,\n revisionModifiedBy: getIdentity(rawInput.revisionModifiedBy, currentIdentity),\n revisionSavedBy: getIdentity(rawInput.revisionSavedBy, currentIdentity)!,\n revisionDeletedBy: getIdentity(rawInput.revisionSavedBy, null),\n revisionRestoredBy: getIdentity(rawInput.revisionRestoredBy, null),\n revisionFirstPublishedBy: getIdentity(\n rawInput.revisionFirstPublishedBy,\n originalEntry.revisionFirstPublishedBy\n ),\n revisionLastPublishedBy: getIdentity(\n rawInput.revisionLastPublishedBy,\n originalEntry.revisionLastPublishedBy\n ),\n createdOn: getDate(rawInput.createdOn, originalEntry.createdOn),\n savedOn: getDate(rawInput.savedOn, currentDateTime),\n modifiedOn: getDate(rawInput.modifiedOn, currentDateTime),\n deletedOn: getDate(rawInput.deletedOn, null),\n restoredOn: getDate(rawInput.restoredOn, null),\n firstPublishedOn: getDate(rawInput.firstPublishedOn, originalEntry.firstPublishedOn),\n lastPublishedOn: getDate(rawInput.lastPublishedOn, originalEntry.lastPublishedOn),\n createdBy: getIdentity(rawInput.createdBy, originalEntry.createdBy)!,\n savedBy: getIdentity(rawInput.savedBy, currentIdentity)!,\n modifiedBy: getIdentity(rawInput.modifiedBy, currentIdentity),\n deletedBy: getIdentity(rawInput.deletedBy, null),\n restoredBy: getIdentity(rawInput.restoredBy, null),\n firstPublishedBy: getIdentity(\n rawInput.firstPublishedBy,\n originalEntry.firstPublishedBy\n ),\n lastPublishedBy: getIdentity(rawInput.lastPublishedBy, originalEntry.lastPublishedBy),\n values,\n status: transformEntryStatus(originalEntry.status),\n system: getSystem({\n input: rawInput,\n original: originalEntry\n }),\n live: originalEntry.live,\n expiresAt: getExpiresAt({ expiresAt: rawInput.expiresAt }, originalEntry)\n };\n\n const folderId = rawInput.wbyAco_location?.folderId;\n if (folderId) {\n entry.location = {\n folderId\n };\n }\n\n return {\n entry,\n input: {\n ...rawInput,\n values: structuredClone(values)\n }\n };\n }\n}\n\nexport const UpdateEntryDataFactory = createImplementation({\n abstraction: FactoryAbstraction,\n implementation: UpdateEntryDataFactoryImpl,\n dependencies: [CmsContext, IdentityContext]\n});\n"],"names":["allowedEntryStatus","transformEntryStatus","status","UpdateEntryDataFactoryImpl","cmsContext","identityContext","model","rawInput","originalEntry","options","cleanedValues","mapAndCleanUpdatedInputData","validateModelEntryDataOrThrow","mergedValues","values","referenceFieldsMapping","currentIdentity","currentDateTime","Date","entry","getDate","getIdentity","getSystem","getExpiresAt","folderId","structuredClone","UpdateEntryDataFactory","createImplementation","FactoryAbstraction","CmsContext","IdentityContext"],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { CmsEntry } from "../../../types/index.js";
2
+ export interface IRawInput {
3
+ expiresAt: Date | number | null | undefined;
4
+ }
5
+ export declare const getExpiresAt: (input: IRawInput, original?: CmsEntry) => number | null;
@@ -0,0 +1,9 @@
1
+ const getExpiresAt = (input, original)=>{
2
+ if (void 0 === input.expiresAt) return original?.expiresAt ?? null;
3
+ if (input.expiresAt instanceof Date) return input.expiresAt.getTime() / 1000;
4
+ if ("number" == typeof input.expiresAt && !isNaN(input.expiresAt) && input.expiresAt > 0) return input.expiresAt;
5
+ return null;
6
+ };
7
+ export { getExpiresAt };
8
+
9
+ //# sourceMappingURL=expiresAt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/contentEntry/entryDataFactories/expiresAt.js","sources":["../../../../src/features/contentEntry/entryDataFactories/expiresAt.ts"],"sourcesContent":["import type { CmsEntry } from \"~/types/index.js\";\n\nexport interface IRawInput {\n expiresAt: Date | number | null | undefined;\n}\n\nexport const getExpiresAt = (input: IRawInput, original?: CmsEntry): number | null => {\n if (input.expiresAt === undefined) {\n return original?.expiresAt ?? null;\n } else if (input.expiresAt instanceof Date) {\n return input.expiresAt.getTime() / 1000;\n } else if (\n typeof input.expiresAt === \"number\" &&\n !isNaN(input.expiresAt) &&\n input.expiresAt > 0\n ) {\n return input.expiresAt;\n }\n return null;\n};\n"],"names":["getExpiresAt","input","original","undefined","Date","isNaN"],"mappings":"AAMO,MAAMA,eAAe,CAACC,OAAkBC;IAC3C,IAAID,AAAoBE,WAApBF,MAAM,SAAS,EACf,OAAOC,UAAU,aAAa;IAC3B,IAAID,MAAM,SAAS,YAAYG,MAClC,OAAOH,MAAM,SAAS,CAAC,OAAO,KAAK;IAChC,IACH,AAA2B,YAA3B,OAAOA,MAAM,SAAS,IACtB,CAACI,MAAMJ,MAAM,SAAS,KACtBA,MAAM,SAAS,GAAG,GAElB,OAAOA,MAAM,SAAS;IAE1B,OAAO;AACX"}
@@ -1,8 +1,18 @@
1
1
  import { DataFieldBuilder } from "./FieldBuilder.js";
2
2
  import { type IFieldTypeFactory } from "./abstractions.js";
3
3
  import type { FieldTypeValidator } from "./fieldTypeValidator.js";
4
+ export declare enum TextFieldSubTypes {
5
+ COMPRESSED = "compressed",
6
+ ENCRYPTED = "encrypted"
7
+ }
8
+ export declare enum TextFieldTypes {
9
+ TEXT = "text",
10
+ COMPRESSED = "text:compressed",
11
+ ENCRYPTED = "text:encrypted"
12
+ }
4
13
  export interface ITextFieldBuilder extends DataFieldBuilder<"text">, FieldTypeValidator.Required, FieldTypeValidator.MinLength, FieldTypeValidator.MaxLength, FieldTypeValidator.Pattern, FieldTypeValidator.Email, FieldTypeValidator.Url, FieldTypeValidator.LowerCase, FieldTypeValidator.UpperCase, FieldTypeValidator.LowerCaseSpace, FieldTypeValidator.UpperCaseSpace, FieldTypeValidator.Unique {
5
- compressed(): this;
14
+ compress(): this;
15
+ encrypt(): this;
6
16
  }
7
17
  declare module "../abstractions.js" {
8
18
  interface IFieldBuilderRegistry {
@@ -1,6 +1,17 @@
1
1
  import { createImplementation } from "@webiny/feature/api";
2
2
  import { DataFieldBuilder } from "./FieldBuilder.js";
3
3
  import { FieldType } from "./abstractions.js";
4
+ var TextFieldType_TextFieldSubTypes = /*#__PURE__*/ function(TextFieldSubTypes) {
5
+ TextFieldSubTypes["COMPRESSED"] = "compressed";
6
+ TextFieldSubTypes["ENCRYPTED"] = "encrypted";
7
+ return TextFieldSubTypes;
8
+ }({});
9
+ var TextFieldType_TextFieldTypes = /*#__PURE__*/ function(TextFieldTypes) {
10
+ TextFieldTypes["TEXT"] = "text";
11
+ TextFieldTypes["COMPRESSED"] = "text:compressed";
12
+ TextFieldTypes["ENCRYPTED"] = "text:encrypted";
13
+ return TextFieldTypes;
14
+ }({});
4
15
  class TextFieldBuilder extends DataFieldBuilder {
5
16
  constructor(){
6
17
  super("text");
@@ -114,13 +125,20 @@ class TextFieldBuilder extends DataFieldBuilder {
114
125
  settings: {}
115
126
  });
116
127
  }
117
- compressed() {
128
+ compress() {
118
129
  this.setSubType("compressed");
119
130
  this.settings({
120
131
  disableFullTextSearch: true
121
132
  });
122
133
  return this;
123
134
  }
135
+ encrypt() {
136
+ this.setSubType("encrypted");
137
+ this.settings({
138
+ disableFullTextSearch: true
139
+ });
140
+ return this;
141
+ }
124
142
  }
125
143
  class TextFieldTypeFactory {
126
144
  create() {
@@ -135,6 +153,6 @@ const TextFieldType = createImplementation({
135
153
  implementation: TextFieldTypeFactory,
136
154
  dependencies: []
137
155
  });
138
- export { TextFieldType };
156
+ export { TextFieldType, TextFieldType_TextFieldSubTypes as TextFieldSubTypes, TextFieldType_TextFieldTypes as TextFieldTypes };
139
157
 
140
158
  //# sourceMappingURL=TextFieldType.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"features/modelBuilder/fields/TextFieldType.js","sources":["../../../../src/features/modelBuilder/fields/TextFieldType.ts"],"sourcesContent":["import { createImplementation } from \"@webiny/feature/api\";\nimport { DataFieldBuilder } from \"./FieldBuilder.js\";\nimport { FieldType, type IFieldTypeFactory } from \"./abstractions.js\";\nimport type { FieldTypeValidator } from \"./fieldTypeValidator.js\";\n\nexport interface ITextFieldBuilder\n extends\n DataFieldBuilder<\"text\">,\n FieldTypeValidator.Required,\n FieldTypeValidator.MinLength,\n FieldTypeValidator.MaxLength,\n FieldTypeValidator.Pattern,\n FieldTypeValidator.Email,\n FieldTypeValidator.Url,\n FieldTypeValidator.LowerCase,\n FieldTypeValidator.UpperCase,\n FieldTypeValidator.LowerCaseSpace,\n FieldTypeValidator.UpperCaseSpace,\n FieldTypeValidator.Unique {\n compressed(): this;\n}\n\n// Module augmentation for TypeScript autocomplete\ndeclare module \"../abstractions.js\" {\n interface IFieldBuilderRegistry {\n text(): ITextFieldBuilder;\n }\n}\n\nclass TextFieldBuilder extends DataFieldBuilder<\"text\"> implements ITextFieldBuilder {\n public constructor() {\n super(\"text\");\n }\n\n required(message?: string): this {\n return this.validation({\n name: \"required\",\n message: message || \"Value is required.\",\n settings: {}\n });\n }\n\n minLength(value: number, message?: string): this {\n return this.validation({\n name: \"minLength\",\n message: message || \"Value is too short.\",\n settings: { value: String(value) }\n });\n }\n\n maxLength(value: number, message?: string): this {\n return this.validation({\n name: \"maxLength\",\n message: message || \"Value is too long.\",\n settings: { value: String(value) }\n });\n }\n\n pattern(regex: string, flags: string = \"\", message?: string): this {\n return this.validation({\n name: \"pattern\",\n message: message || \"Invalid value.\",\n settings: {\n preset: \"custom\",\n regex,\n flags\n }\n });\n }\n\n email(message?: string): this {\n return this.validation({\n name: \"pattern\",\n message: message || \"Please enter a valid e-mail.\",\n settings: {\n preset: \"email\",\n regex: null,\n flags: null\n }\n });\n }\n\n url(message?: string): this {\n return this.validation({\n name: \"pattern\",\n message: message || \"Please enter a valid URL.\",\n settings: {\n preset: \"url\",\n regex: null,\n flags: null\n }\n });\n }\n\n lowerCase(message?: string): this {\n return this.validation({\n name: \"pattern\",\n message: message || \"Only lower case characters are allowed.\",\n settings: {\n preset: \"lowerCase\",\n regex: null,\n flags: null\n }\n });\n }\n\n upperCase(message?: string): this {\n return this.validation({\n name: \"pattern\",\n message: message || \"Only upper case characters are allowed.\",\n settings: {\n preset: \"upperCase\",\n regex: null,\n flags: null\n }\n });\n }\n\n lowerCaseSpace(message?: string): this {\n return this.validation({\n name: \"pattern\",\n message: message || \"Only lower case characters and space are allowed.\",\n settings: {\n preset: \"lowerCaseSpace\",\n regex: null,\n flags: null\n }\n });\n }\n\n upperCaseSpace(message?: string): this {\n return this.validation({\n name: \"pattern\",\n message: message || \"Only upper case characters and space are allowed.\",\n settings: {\n preset: \"upperCaseSpace\",\n regex: null,\n flags: null\n }\n });\n }\n\n unique(message?: string): this {\n return this.validation({\n name: \"unique\",\n message: message || \"Value must be unique.\",\n settings: {}\n });\n }\n\n public compressed(): this {\n this.setSubType(\"compressed\");\n this.settings({\n disableFullTextSearch: true\n });\n return this;\n }\n}\n\nclass TextFieldTypeFactory implements IFieldTypeFactory {\n readonly type = \"text\";\n\n create(): ITextFieldBuilder {\n return new TextFieldBuilder();\n }\n}\n\nexport const TextFieldType = createImplementation({\n abstraction: FieldType,\n implementation: TextFieldTypeFactory,\n dependencies: []\n});\n"],"names":["TextFieldBuilder","DataFieldBuilder","message","value","String","regex","flags","TextFieldTypeFactory","TextFieldType","createImplementation","FieldType"],"mappings":";;;AA6BA,MAAMA,yBAAyBC;IAC3B,aAAqB;QACjB,KAAK,CAAC;IACV;IAEA,SAASC,OAAgB,EAAQ;QAC7B,OAAO,IAAI,CAAC,UAAU,CAAC;YACnB,MAAM;YACN,SAASA,WAAW;YACpB,UAAU,CAAC;QACf;IACJ;IAEA,UAAUC,KAAa,EAAED,OAAgB,EAAQ;QAC7C,OAAO,IAAI,CAAC,UAAU,CAAC;YACnB,MAAM;YACN,SAASA,WAAW;YACpB,UAAU;gBAAE,OAAOE,OAAOD;YAAO;QACrC;IACJ;IAEA,UAAUA,KAAa,EAAED,OAAgB,EAAQ;QAC7C,OAAO,IAAI,CAAC,UAAU,CAAC;YACnB,MAAM;YACN,SAASA,WAAW;YACpB,UAAU;gBAAE,OAAOE,OAAOD;YAAO;QACrC;IACJ;IAEA,QAAQE,KAAa,EAAEC,QAAgB,EAAE,EAAEJ,OAAgB,EAAQ;QAC/D,OAAO,IAAI,CAAC,UAAU,CAAC;YACnB,MAAM;YACN,SAASA,WAAW;YACpB,UAAU;gBACN,QAAQ;gBACRG;gBACAC;YACJ;QACJ;IACJ;IAEA,MAAMJ,OAAgB,EAAQ;QAC1B,OAAO,IAAI,CAAC,UAAU,CAAC;YACnB,MAAM;YACN,SAASA,WAAW;YACpB,UAAU;gBACN,QAAQ;gBACR,OAAO;gBACP,OAAO;YACX;QACJ;IACJ;IAEA,IAAIA,OAAgB,EAAQ;QACxB,OAAO,IAAI,CAAC,UAAU,CAAC;YACnB,MAAM;YACN,SAASA,WAAW;YACpB,UAAU;gBACN,QAAQ;gBACR,OAAO;gBACP,OAAO;YACX;QACJ;IACJ;IAEA,UAAUA,OAAgB,EAAQ;QAC9B,OAAO,IAAI,CAAC,UAAU,CAAC;YACnB,MAAM;YACN,SAASA,WAAW;YACpB,UAAU;gBACN,QAAQ;gBACR,OAAO;gBACP,OAAO;YACX;QACJ;IACJ;IAEA,UAAUA,OAAgB,EAAQ;QAC9B,OAAO,IAAI,CAAC,UAAU,CAAC;YACnB,MAAM;YACN,SAASA,WAAW;YACpB,UAAU;gBACN,QAAQ;gBACR,OAAO;gBACP,OAAO;YACX;QACJ;IACJ;IAEA,eAAeA,OAAgB,EAAQ;QACnC,OAAO,IAAI,CAAC,UAAU,CAAC;YACnB,MAAM;YACN,SAASA,WAAW;YACpB,UAAU;gBACN,QAAQ;gBACR,OAAO;gBACP,OAAO;YACX;QACJ;IACJ;IAEA,eAAeA,OAAgB,EAAQ;QACnC,OAAO,IAAI,CAAC,UAAU,CAAC;YACnB,MAAM;YACN,SAASA,WAAW;YACpB,UAAU;gBACN,QAAQ;gBACR,OAAO;gBACP,OAAO;YACX;QACJ;IACJ;IAEA,OAAOA,OAAgB,EAAQ;QAC3B,OAAO,IAAI,CAAC,UAAU,CAAC;YACnB,MAAM;YACN,SAASA,WAAW;YACpB,UAAU,CAAC;QACf;IACJ;IAEO,aAAmB;QACtB,IAAI,CAAC,UAAU,CAAC;QAChB,IAAI,CAAC,QAAQ,CAAC;YACV,uBAAuB;QAC3B;QACA,OAAO,IAAI;IACf;AACJ;AAEA,MAAMK;IAGF,SAA4B;QACxB,OAAO,IAAIP;IACf;;aAJS,IAAI,GAAG;;AAKpB;AAEO,MAAMQ,gBAAgBC,qBAAqB;IAC9C,aAAaC;IACb,gBAAgBH;IAChB,cAAc,EAAE;AACpB"}
1
+ {"version":3,"file":"features/modelBuilder/fields/TextFieldType.js","sources":["../../../../src/features/modelBuilder/fields/TextFieldType.ts"],"sourcesContent":["import { createImplementation } from \"@webiny/feature/api\";\nimport { DataFieldBuilder } from \"./FieldBuilder.js\";\nimport { FieldType, type IFieldTypeFactory } from \"./abstractions.js\";\nimport type { FieldTypeValidator } from \"./fieldTypeValidator.js\";\n\nexport enum TextFieldSubTypes {\n COMPRESSED = \"compressed\",\n ENCRYPTED = \"encrypted\"\n}\n\nexport enum TextFieldTypes {\n TEXT = \"text\",\n COMPRESSED = \"text:compressed\",\n ENCRYPTED = \"text:encrypted\"\n}\n\nexport interface ITextFieldBuilder\n extends\n DataFieldBuilder<\"text\">,\n FieldTypeValidator.Required,\n FieldTypeValidator.MinLength,\n FieldTypeValidator.MaxLength,\n FieldTypeValidator.Pattern,\n FieldTypeValidator.Email,\n FieldTypeValidator.Url,\n FieldTypeValidator.LowerCase,\n FieldTypeValidator.UpperCase,\n FieldTypeValidator.LowerCaseSpace,\n FieldTypeValidator.UpperCaseSpace,\n FieldTypeValidator.Unique {\n compress(): this;\n encrypt(): this;\n}\n\n// Module augmentation for TypeScript autocomplete\ndeclare module \"../abstractions.js\" {\n interface IFieldBuilderRegistry {\n text(): ITextFieldBuilder;\n }\n}\n\nclass TextFieldBuilder extends DataFieldBuilder<\"text\"> implements ITextFieldBuilder {\n public constructor() {\n super(\"text\");\n }\n\n required(message?: string): this {\n return this.validation({\n name: \"required\",\n message: message || \"Value is required.\",\n settings: {}\n });\n }\n\n minLength(value: number, message?: string): this {\n return this.validation({\n name: \"minLength\",\n message: message || \"Value is too short.\",\n settings: { value: String(value) }\n });\n }\n\n maxLength(value: number, message?: string): this {\n return this.validation({\n name: \"maxLength\",\n message: message || \"Value is too long.\",\n settings: { value: String(value) }\n });\n }\n\n pattern(regex: string, flags: string = \"\", message?: string): this {\n return this.validation({\n name: \"pattern\",\n message: message || \"Invalid value.\",\n settings: {\n preset: \"custom\",\n regex,\n flags\n }\n });\n }\n\n email(message?: string): this {\n return this.validation({\n name: \"pattern\",\n message: message || \"Please enter a valid e-mail.\",\n settings: {\n preset: \"email\",\n regex: null,\n flags: null\n }\n });\n }\n\n url(message?: string): this {\n return this.validation({\n name: \"pattern\",\n message: message || \"Please enter a valid URL.\",\n settings: {\n preset: \"url\",\n regex: null,\n flags: null\n }\n });\n }\n\n lowerCase(message?: string): this {\n return this.validation({\n name: \"pattern\",\n message: message || \"Only lower case characters are allowed.\",\n settings: {\n preset: \"lowerCase\",\n regex: null,\n flags: null\n }\n });\n }\n\n upperCase(message?: string): this {\n return this.validation({\n name: \"pattern\",\n message: message || \"Only upper case characters are allowed.\",\n settings: {\n preset: \"upperCase\",\n regex: null,\n flags: null\n }\n });\n }\n\n lowerCaseSpace(message?: string): this {\n return this.validation({\n name: \"pattern\",\n message: message || \"Only lower case characters and space are allowed.\",\n settings: {\n preset: \"lowerCaseSpace\",\n regex: null,\n flags: null\n }\n });\n }\n\n upperCaseSpace(message?: string): this {\n return this.validation({\n name: \"pattern\",\n message: message || \"Only upper case characters and space are allowed.\",\n settings: {\n preset: \"upperCaseSpace\",\n regex: null,\n flags: null\n }\n });\n }\n\n unique(message?: string): this {\n return this.validation({\n name: \"unique\",\n message: message || \"Value must be unique.\",\n settings: {}\n });\n }\n\n public compress(): this {\n this.setSubType(TextFieldSubTypes.COMPRESSED);\n\n this.settings({\n disableFullTextSearch: true\n });\n\n return this;\n }\n public encrypt(): this {\n this.setSubType(TextFieldSubTypes.ENCRYPTED);\n\n this.settings({\n disableFullTextSearch: true\n });\n\n return this;\n }\n}\n\nclass TextFieldTypeFactory implements IFieldTypeFactory {\n readonly type = \"text\";\n\n create(): ITextFieldBuilder {\n return new TextFieldBuilder();\n }\n}\n\nexport const TextFieldType = createImplementation({\n abstraction: FieldType,\n implementation: TextFieldTypeFactory,\n dependencies: []\n});\n"],"names":["TextFieldSubTypes","TextFieldTypes","TextFieldBuilder","DataFieldBuilder","message","value","String","regex","flags","TextFieldTypeFactory","TextFieldType","createImplementation","FieldType"],"mappings":";;;AAKO,IAAKA,kCAAiBA,WAAAA,GAAAA,SAAjBA,iBAAiB;;;WAAjBA;;AAKL,IAAKC,+BAAcA,WAAAA,GAAAA,SAAdA,cAAc;;;;WAAdA;;AA+BZ,MAAMC,yBAAyBC;IAC3B,aAAqB;QACjB,KAAK,CAAC;IACV;IAEA,SAASC,OAAgB,EAAQ;QAC7B,OAAO,IAAI,CAAC,UAAU,CAAC;YACnB,MAAM;YACN,SAASA,WAAW;YACpB,UAAU,CAAC;QACf;IACJ;IAEA,UAAUC,KAAa,EAAED,OAAgB,EAAQ;QAC7C,OAAO,IAAI,CAAC,UAAU,CAAC;YACnB,MAAM;YACN,SAASA,WAAW;YACpB,UAAU;gBAAE,OAAOE,OAAOD;YAAO;QACrC;IACJ;IAEA,UAAUA,KAAa,EAAED,OAAgB,EAAQ;QAC7C,OAAO,IAAI,CAAC,UAAU,CAAC;YACnB,MAAM;YACN,SAASA,WAAW;YACpB,UAAU;gBAAE,OAAOE,OAAOD;YAAO;QACrC;IACJ;IAEA,QAAQE,KAAa,EAAEC,QAAgB,EAAE,EAAEJ,OAAgB,EAAQ;QAC/D,OAAO,IAAI,CAAC,UAAU,CAAC;YACnB,MAAM;YACN,SAASA,WAAW;YACpB,UAAU;gBACN,QAAQ;gBACRG;gBACAC;YACJ;QACJ;IACJ;IAEA,MAAMJ,OAAgB,EAAQ;QAC1B,OAAO,IAAI,CAAC,UAAU,CAAC;YACnB,MAAM;YACN,SAASA,WAAW;YACpB,UAAU;gBACN,QAAQ;gBACR,OAAO;gBACP,OAAO;YACX;QACJ;IACJ;IAEA,IAAIA,OAAgB,EAAQ;QACxB,OAAO,IAAI,CAAC,UAAU,CAAC;YACnB,MAAM;YACN,SAASA,WAAW;YACpB,UAAU;gBACN,QAAQ;gBACR,OAAO;gBACP,OAAO;YACX;QACJ;IACJ;IAEA,UAAUA,OAAgB,EAAQ;QAC9B,OAAO,IAAI,CAAC,UAAU,CAAC;YACnB,MAAM;YACN,SAASA,WAAW;YACpB,UAAU;gBACN,QAAQ;gBACR,OAAO;gBACP,OAAO;YACX;QACJ;IACJ;IAEA,UAAUA,OAAgB,EAAQ;QAC9B,OAAO,IAAI,CAAC,UAAU,CAAC;YACnB,MAAM;YACN,SAASA,WAAW;YACpB,UAAU;gBACN,QAAQ;gBACR,OAAO;gBACP,OAAO;YACX;QACJ;IACJ;IAEA,eAAeA,OAAgB,EAAQ;QACnC,OAAO,IAAI,CAAC,UAAU,CAAC;YACnB,MAAM;YACN,SAASA,WAAW;YACpB,UAAU;gBACN,QAAQ;gBACR,OAAO;gBACP,OAAO;YACX;QACJ;IACJ;IAEA,eAAeA,OAAgB,EAAQ;QACnC,OAAO,IAAI,CAAC,UAAU,CAAC;YACnB,MAAM;YACN,SAASA,WAAW;YACpB,UAAU;gBACN,QAAQ;gBACR,OAAO;gBACP,OAAO;YACX;QACJ;IACJ;IAEA,OAAOA,OAAgB,EAAQ;QAC3B,OAAO,IAAI,CAAC,UAAU,CAAC;YACnB,MAAM;YACN,SAASA,WAAW;YACpB,UAAU,CAAC;QACf;IACJ;IAEO,WAAiB;QACpB,IAAI,CAAC,UAAU,CAAC;QAEhB,IAAI,CAAC,QAAQ,CAAC;YACV,uBAAuB;QAC3B;QAEA,OAAO,IAAI;IACf;IACO,UAAgB;QACnB,IAAI,CAAC,UAAU,CAAC;QAEhB,IAAI,CAAC,QAAQ,CAAC;YACV,uBAAuB;QAC3B;QAEA,OAAO,IAAI;IACf;AACJ;AAEA,MAAMK;IAGF,SAA4B;QACxB,OAAO,IAAIP;IACf;;aAJS,IAAI,GAAG;;AAKpB;AAEO,MAAMQ,gBAAgBC,qBAAqB;IAC9C,aAAaC;IACb,gBAAgBH;IAChB,cAAc,EAAE;AACpB"}
@@ -7,6 +7,7 @@ export * from "./feature.js";
7
7
  export * from "./fields/FieldBuilder.js";
8
8
  export * from "./fields/abstractions.js";
9
9
  export * from "./models/abstractions.js";
10
+ export { TextFieldSubTypes, TextFieldTypes } from "./fields/TextFieldType.js";
10
11
  import "./fields/TextFieldType.js";
11
12
  import "./fields/LongTextFieldType.js";
12
13
  import "./fields/RichTextFieldType.js";
@@ -1,5 +1,5 @@
1
1
  import "./fields/UiAlertFieldType.js";
2
- import "./fields/TextFieldType.js";
2
+ import "./fields/UiTabsFieldType.js";
3
3
  import "./fields/LongTextFieldType.js";
4
4
  import "./fields/RichTextFieldType.js";
5
5
  import "./fields/NumberFieldType.js";
@@ -12,7 +12,6 @@ import "./fields/DynamicZoneFieldType.js";
12
12
  import "./fields/JsonFieldType.js";
13
13
  import "./fields/SearchableJsonFieldType.js";
14
14
  import "./fields/UiSeparatorFieldType.js";
15
- import "./fields/UiTabsFieldType.js";
16
15
  export * from "./models/BaseModelBuilder.js";
17
16
  export * from "./models/ModelBuilder.js";
18
17
  export * from "./models/PrivateModelBuilder.js";
@@ -22,3 +21,4 @@ export * from "./fields/FieldBuilder.js";
22
21
  export * from "./fields/abstractions.js";
23
22
  export * from "./models/abstractions.js";
24
23
  export { ModelFactory } from "./abstractions.js";
24
+ export { TextFieldSubTypes, TextFieldTypes } from "./fields/TextFieldType.js";
@@ -8,6 +8,7 @@ import { LongTextStorageTransform } from "./fields/LongTextStorageTransform.js";
8
8
  import { ObjectStorageTransform } from "./fields/ObjectStorageTransform.js";
9
9
  import { RichTextStorageTransform } from "./fields/RichTextStorageTransform.js";
10
10
  import { CompressedTextStorageTransform } from "./fields/CompressedTextStorageTransform.js";
11
+ import { EncryptedTextStorageTransform } from "./fields/EncryptedTextStorageTransform.js";
11
12
  const StorageFeature = createFeature({
12
13
  name: "Cms/StorageFeature",
13
14
  register: (container)=>{
@@ -19,6 +20,7 @@ const StorageFeature = createFeature({
19
20
  container.register(ObjectStorageTransform).inSingletonScope();
20
21
  container.register(RichTextStorageTransform).inSingletonScope();
21
22
  container.register(CompressedTextStorageTransform).inSingletonScope();
23
+ container.register(EncryptedTextStorageTransform).inSingletonScope();
22
24
  container.register(StorageTransformRegistry).inSingletonScope();
23
25
  }
24
26
  });
@@ -1 +1 @@
1
- {"version":3,"file":"features/storage/feature.js","sources":["../../../src/features/storage/feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport { StorageTransformRegistry } from \"./StorageTransformRegistry.js\";\nimport { DateStorageTransform } from \"./fields/DateStorageTransform.js\";\nimport { DefaultStorageTransform } from \"./fields/DefaultStorageTransform.js\";\nimport { JsonStorageTransform } from \"./fields/JsonStorageTransform.js\";\nimport { DynamicZoneStorageTransform } from \"./fields/DynamicZoneStorageTransform.js\";\nimport { LongTextStorageTransform } from \"./fields/LongTextStorageTransform.js\";\nimport { ObjectStorageTransform } from \"./fields/ObjectStorageTransform.js\";\nimport { RichTextStorageTransform } from \"./fields/RichTextStorageTransform.js\";\nimport { CompressedTextStorageTransform } from \"./fields/CompressedTextStorageTransform.js\";\n\nexport const StorageFeature = createFeature({\n name: \"Cms/StorageFeature\",\n register: container => {\n container.register(DateStorageTransform).inSingletonScope();\n container.register(DefaultStorageTransform).inSingletonScope();\n container.register(DynamicZoneStorageTransform).inSingletonScope();\n container.register(JsonStorageTransform).inSingletonScope();\n container.register(LongTextStorageTransform).inSingletonScope();\n container.register(ObjectStorageTransform).inSingletonScope();\n container.register(RichTextStorageTransform).inSingletonScope();\n container.register(CompressedTextStorageTransform).inSingletonScope();\n\n // must be last, as it depends on all other transforms being registered first\n container.register(StorageTransformRegistry).inSingletonScope();\n }\n});\n"],"names":["StorageFeature","createFeature","container","DateStorageTransform","DefaultStorageTransform","DynamicZoneStorageTransform","JsonStorageTransform","LongTextStorageTransform","ObjectStorageTransform","RichTextStorageTransform","CompressedTextStorageTransform","StorageTransformRegistry"],"mappings":";;;;;;;;;;AAWO,MAAMA,iBAAiBC,cAAc;IACxC,MAAM;IACN,UAAUC,CAAAA;QACNA,UAAU,QAAQ,CAACC,sBAAsB,gBAAgB;QACzDD,UAAU,QAAQ,CAACE,yBAAyB,gBAAgB;QAC5DF,UAAU,QAAQ,CAACG,6BAA6B,gBAAgB;QAChEH,UAAU,QAAQ,CAACI,sBAAsB,gBAAgB;QACzDJ,UAAU,QAAQ,CAACK,0BAA0B,gBAAgB;QAC7DL,UAAU,QAAQ,CAACM,wBAAwB,gBAAgB;QAC3DN,UAAU,QAAQ,CAACO,0BAA0B,gBAAgB;QAC7DP,UAAU,QAAQ,CAACQ,gCAAgC,gBAAgB;QAGnER,UAAU,QAAQ,CAACS,0BAA0B,gBAAgB;IACjE;AACJ"}
1
+ {"version":3,"file":"features/storage/feature.js","sources":["../../../src/features/storage/feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport { StorageTransformRegistry } from \"./StorageTransformRegistry.js\";\nimport { DateStorageTransform } from \"./fields/DateStorageTransform.js\";\nimport { DefaultStorageTransform } from \"./fields/DefaultStorageTransform.js\";\nimport { JsonStorageTransform } from \"./fields/JsonStorageTransform.js\";\nimport { DynamicZoneStorageTransform } from \"./fields/DynamicZoneStorageTransform.js\";\nimport { LongTextStorageTransform } from \"./fields/LongTextStorageTransform.js\";\nimport { ObjectStorageTransform } from \"./fields/ObjectStorageTransform.js\";\nimport { RichTextStorageTransform } from \"./fields/RichTextStorageTransform.js\";\nimport { CompressedTextStorageTransform } from \"./fields/CompressedTextStorageTransform.js\";\nimport { EncryptedTextStorageTransform } from \"~/features/storage/fields/EncryptedTextStorageTransform.js\";\n\nexport const StorageFeature = createFeature({\n name: \"Cms/StorageFeature\",\n register: container => {\n container.register(DateStorageTransform).inSingletonScope();\n container.register(DefaultStorageTransform).inSingletonScope();\n container.register(DynamicZoneStorageTransform).inSingletonScope();\n container.register(JsonStorageTransform).inSingletonScope();\n container.register(LongTextStorageTransform).inSingletonScope();\n container.register(ObjectStorageTransform).inSingletonScope();\n container.register(RichTextStorageTransform).inSingletonScope();\n container.register(CompressedTextStorageTransform).inSingletonScope();\n container.register(EncryptedTextStorageTransform).inSingletonScope();\n\n // must be last, as it depends on all other transforms being registered first\n container.register(StorageTransformRegistry).inSingletonScope();\n }\n});\n"],"names":["StorageFeature","createFeature","container","DateStorageTransform","DefaultStorageTransform","DynamicZoneStorageTransform","JsonStorageTransform","LongTextStorageTransform","ObjectStorageTransform","RichTextStorageTransform","CompressedTextStorageTransform","EncryptedTextStorageTransform","StorageTransformRegistry"],"mappings":";;;;;;;;;;;AAYO,MAAMA,iBAAiBC,cAAc;IACxC,MAAM;IACN,UAAUC,CAAAA;QACNA,UAAU,QAAQ,CAACC,sBAAsB,gBAAgB;QACzDD,UAAU,QAAQ,CAACE,yBAAyB,gBAAgB;QAC5DF,UAAU,QAAQ,CAACG,6BAA6B,gBAAgB;QAChEH,UAAU,QAAQ,CAACI,sBAAsB,gBAAgB;QACzDJ,UAAU,QAAQ,CAACK,0BAA0B,gBAAgB;QAC7DL,UAAU,QAAQ,CAACM,wBAAwB,gBAAgB;QAC3DN,UAAU,QAAQ,CAACO,0BAA0B,gBAAgB;QAC7DP,UAAU,QAAQ,CAACQ,gCAAgC,gBAAgB;QACnER,UAAU,QAAQ,CAACS,+BAA+B,gBAAgB;QAGlET,UAAU,QAAQ,CAACU,0BAA0B,gBAAgB;IACjE;AACJ"}
@@ -1,8 +1,9 @@
1
1
  import { StorageTransform } from "../abstractions/StorageTransform.js";
2
2
  import { CompressionHandler } from "@webiny/utils/exports/api.js";
3
+ import { TextFieldTypes } from "../../../features/modelBuilder/index.js";
3
4
  declare class CompressedTextStorageTransformImpl implements StorageTransform.Interface<string, string> {
4
5
  private readonly compressionHandler;
5
- readonly fieldType = "text:compressed";
6
+ readonly fieldType = TextFieldTypes.COMPRESSED;
6
7
  constructor(compressionHandler: CompressionHandler.Interface);
7
8
  fromStorage(params: StorageTransform.FromStorageParams<unknown, string>): StorageTransform.FromStorageResponse<string>;
8
9
  toStorage(params: StorageTransform.ToStorageParams<unknown, string>): StorageTransform.ToStorageResponse<string>;
@@ -1,9 +1,10 @@
1
1
  import { StorageTransform } from "../abstractions/StorageTransform.js";
2
2
  import { CompressionHandler } from "@webiny/utils/exports/api.js";
3
+ import { TextFieldTypes } from "../../modelBuilder/index.js";
3
4
  class CompressedTextStorageTransformImpl {
4
5
  constructor(compressionHandler){
5
6
  this.compressionHandler = compressionHandler;
6
- this.fieldType = "text:compressed";
7
+ this.fieldType = TextFieldTypes.COMPRESSED;
7
8
  }
8
9
  async fromStorage(params) {
9
10
  const { value } = params;
@@ -1 +1 @@
1
- {"version":3,"file":"features/storage/fields/CompressedTextStorageTransform.js","sources":["../../../../src/features/storage/fields/CompressedTextStorageTransform.ts"],"sourcesContent":["import { StorageTransform } from \"../abstractions/StorageTransform.js\";\nimport { CompressionHandler } from \"@webiny/utils/exports/api.js\";\n\nclass CompressedTextStorageTransformImpl implements StorageTransform.Interface<string, string> {\n public readonly fieldType = \"text:compressed\";\n\n public constructor(private readonly compressionHandler: CompressionHandler.Interface) {}\n\n public async fromStorage(\n params: StorageTransform.FromStorageParams<unknown, string>\n ): StorageTransform.FromStorageResponse<string> {\n const { value } = params;\n if (typeof value !== \"string\") {\n return value as string;\n } else if (!value.includes(\"compression\")) {\n return value;\n }\n try {\n const parsed = JSON.parse(value);\n return await this.compressionHandler.decompress<string>(parsed);\n } catch {\n return value;\n }\n }\n\n public async toStorage(\n params: StorageTransform.ToStorageParams<unknown, string>\n ): StorageTransform.ToStorageResponse<string> {\n const { value } = params;\n if (typeof value !== \"string\") {\n return value as string;\n }\n\n try {\n return JSON.stringify(await this.compressionHandler.compress(value));\n } catch {\n return value;\n }\n }\n}\n\nexport const CompressedTextStorageTransform = StorageTransform.createImplementation({\n implementation: CompressedTextStorageTransformImpl,\n dependencies: [CompressionHandler]\n});\n"],"names":["CompressedTextStorageTransformImpl","compressionHandler","params","value","parsed","JSON","CompressedTextStorageTransform","StorageTransform","CompressionHandler"],"mappings":";;AAGA,MAAMA;IAGF,YAAoCC,kBAAgD,CAAE;aAAlDA,kBAAkB,GAAlBA;aAFpB,SAAS,GAAG;IAE2D;IAEvF,MAAa,YACTC,MAA2D,EACf;QAC5C,MAAM,EAAEC,KAAK,EAAE,GAAGD;QAClB,IAAI,AAAiB,YAAjB,OAAOC,OACP,OAAOA;QACJ,IAAI,CAACA,MAAM,QAAQ,CAAC,gBACvB,OAAOA;QAEX,IAAI;YACA,MAAMC,SAASC,KAAK,KAAK,CAACF;YAC1B,OAAO,MAAM,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAASC;QAC5D,EAAE,OAAM;YACJ,OAAOD;QACX;IACJ;IAEA,MAAa,UACTD,MAAyD,EACf;QAC1C,MAAM,EAAEC,KAAK,EAAE,GAAGD;QAClB,IAAI,AAAiB,YAAjB,OAAOC,OACP,OAAOA;QAGX,IAAI;YACA,OAAOE,KAAK,SAAS,CAAC,MAAM,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAACF;QACjE,EAAE,OAAM;YACJ,OAAOA;QACX;IACJ;AACJ;AAEO,MAAMG,iCAAiCC,iBAAiB,oBAAoB,CAAC;IAChF,gBAAgBP;IAChB,cAAc;QAACQ;KAAmB;AACtC"}
1
+ {"version":3,"file":"features/storage/fields/CompressedTextStorageTransform.js","sources":["../../../../src/features/storage/fields/CompressedTextStorageTransform.ts"],"sourcesContent":["import { StorageTransform } from \"../abstractions/StorageTransform.js\";\nimport { CompressionHandler } from \"@webiny/utils/exports/api.js\";\nimport { TextFieldTypes } from \"~/features/modelBuilder/index.js\";\n\nclass CompressedTextStorageTransformImpl implements StorageTransform.Interface<string, string> {\n public readonly fieldType = TextFieldTypes.COMPRESSED;\n\n public constructor(private readonly compressionHandler: CompressionHandler.Interface) {}\n\n public async fromStorage(\n params: StorageTransform.FromStorageParams<unknown, string>\n ): StorageTransform.FromStorageResponse<string> {\n const { value } = params;\n if (typeof value !== \"string\") {\n return value as string;\n } else if (!value.includes(\"compression\")) {\n return value;\n }\n try {\n const parsed = JSON.parse(value);\n return await this.compressionHandler.decompress<string>(parsed);\n } catch {\n return value;\n }\n }\n\n public async toStorage(\n params: StorageTransform.ToStorageParams<unknown, string>\n ): StorageTransform.ToStorageResponse<string> {\n const { value } = params;\n if (typeof value !== \"string\") {\n return value as string;\n }\n\n try {\n return JSON.stringify(await this.compressionHandler.compress(value));\n } catch {\n return value;\n }\n }\n}\n\nexport const CompressedTextStorageTransform = StorageTransform.createImplementation({\n implementation: CompressedTextStorageTransformImpl,\n dependencies: [CompressionHandler]\n});\n"],"names":["CompressedTextStorageTransformImpl","compressionHandler","TextFieldTypes","params","value","parsed","JSON","CompressedTextStorageTransform","StorageTransform","CompressionHandler"],"mappings":";;;AAIA,MAAMA;IAGF,YAAoCC,kBAAgD,CAAE;aAAlDA,kBAAkB,GAAlBA;aAFpB,SAAS,GAAGC,eAAe,UAAU;IAEkC;IAEvF,MAAa,YACTC,MAA2D,EACf;QAC5C,MAAM,EAAEC,KAAK,EAAE,GAAGD;QAClB,IAAI,AAAiB,YAAjB,OAAOC,OACP,OAAOA;QACJ,IAAI,CAACA,MAAM,QAAQ,CAAC,gBACvB,OAAOA;QAEX,IAAI;YACA,MAAMC,SAASC,KAAK,KAAK,CAACF;YAC1B,OAAO,MAAM,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAASC;QAC5D,EAAE,OAAM;YACJ,OAAOD;QACX;IACJ;IAEA,MAAa,UACTD,MAAyD,EACf;QAC1C,MAAM,EAAEC,KAAK,EAAE,GAAGD;QAClB,IAAI,AAAiB,YAAjB,OAAOC,OACP,OAAOA;QAGX,IAAI;YACA,OAAOE,KAAK,SAAS,CAAC,MAAM,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAACF;QACjE,EAAE,OAAM;YACJ,OAAOA;QACX;IACJ;AACJ;AAEO,MAAMG,iCAAiCC,iBAAiB,oBAAoB,CAAC;IAChF,gBAAgBR;IAChB,cAAc;QAACS;KAAmB;AACtC"}
@@ -0,0 +1,14 @@
1
+ import { StorageTransform } from "../abstractions/StorageTransform.js";
2
+ import { Encryption } from "@webiny/api-core/features/encryption/index.js";
3
+ import { TextFieldTypes } from "../../../features/modelBuilder/index.js";
4
+ declare class EncryptedTextStorageTransformImpl implements StorageTransform.Interface<string, string> {
5
+ private readonly encryption;
6
+ readonly fieldType = TextFieldTypes.ENCRYPTED;
7
+ constructor(encryption: Encryption.Interface);
8
+ fromStorage(params: StorageTransform.FromStorageParams<unknown, string>): StorageTransform.FromStorageResponse<string>;
9
+ toStorage(params: StorageTransform.ToStorageParams<unknown, string>): StorageTransform.ToStorageResponse<string>;
10
+ }
11
+ export declare const EncryptedTextStorageTransform: typeof EncryptedTextStorageTransformImpl & {
12
+ __abstraction: import("@webiny/di").Abstraction<import("../abstractions/StorageTransform.js").IStorageTransform<any, any, any>>;
13
+ };
14
+ export {};