@webiny/api-headless-cms 6.4.0-beta.1 → 6.4.0-beta.3

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 (39) hide show
  1. package/context.js +2 -0
  2. package/context.js.map +1 -1
  3. package/features/modelBuilder/fields/TextFieldType.d.ts +11 -1
  4. package/features/modelBuilder/fields/TextFieldType.js +20 -2
  5. package/features/modelBuilder/fields/TextFieldType.js.map +1 -1
  6. package/features/modelBuilder/index.d.ts +1 -0
  7. package/features/modelBuilder/index.js +2 -2
  8. package/features/storage/feature.js +2 -0
  9. package/features/storage/feature.js.map +1 -1
  10. package/features/storage/fields/CompressedTextStorageTransform.d.ts +2 -1
  11. package/features/storage/fields/CompressedTextStorageTransform.js +2 -1
  12. package/features/storage/fields/CompressedTextStorageTransform.js.map +1 -1
  13. package/features/storage/fields/EncryptedTextStorageTransform.d.ts +14 -0
  14. package/features/storage/fields/EncryptedTextStorageTransform.js +36 -0
  15. package/features/storage/fields/EncryptedTextStorageTransform.js.map +1 -0
  16. package/features/webhooks/CmsWebhookFactory.d.ts +11 -0
  17. package/features/webhooks/CmsWebhookFactory.js +40 -0
  18. package/features/webhooks/CmsWebhookFactory.js.map +1 -0
  19. package/features/webhooks/feature.d.ts +4 -0
  20. package/features/webhooks/feature.js +21 -0
  21. package/features/webhooks/feature.js.map +1 -0
  22. package/features/webhooks/handlers/OnEntryCreatedHandler.d.ts +11 -0
  23. package/features/webhooks/handlers/OnEntryCreatedHandler.js +22 -0
  24. package/features/webhooks/handlers/OnEntryCreatedHandler.js.map +1 -0
  25. package/features/webhooks/handlers/OnEntryDeletedHandler.d.ts +11 -0
  26. package/features/webhooks/handlers/OnEntryDeletedHandler.js +22 -0
  27. package/features/webhooks/handlers/OnEntryDeletedHandler.js.map +1 -0
  28. package/features/webhooks/handlers/OnEntryPublishedHandler.d.ts +11 -0
  29. package/features/webhooks/handlers/OnEntryPublishedHandler.js +22 -0
  30. package/features/webhooks/handlers/OnEntryPublishedHandler.js.map +1 -0
  31. package/features/webhooks/handlers/OnEntryUnpublishedHandler.d.ts +11 -0
  32. package/features/webhooks/handlers/OnEntryUnpublishedHandler.js +22 -0
  33. package/features/webhooks/handlers/OnEntryUnpublishedHandler.js.map +1 -0
  34. package/features/webhooks/handlers/OnEntryUpdatedHandler.d.ts +11 -0
  35. package/features/webhooks/handlers/OnEntryUpdatedHandler.js +23 -0
  36. package/features/webhooks/handlers/OnEntryUpdatedHandler.js.map +1 -0
  37. package/package.json +22 -22
  38. package/utils/entryStorage.js +6 -6
  39. 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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"}
@@ -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 {};
@@ -0,0 +1,36 @@
1
+ import { StorageTransform } from "../abstractions/StorageTransform.js";
2
+ import { Encryption } from "@webiny/api-core/features/encryption/index.js";
3
+ import { TextFieldTypes } from "../../modelBuilder/index.js";
4
+ class EncryptedTextStorageTransformImpl {
5
+ constructor(encryption){
6
+ this.encryption = encryption;
7
+ this.fieldType = TextFieldTypes.ENCRYPTED;
8
+ }
9
+ async fromStorage(params) {
10
+ const { value } = params;
11
+ if (!value || "string" != typeof value || 0 === value.length) return value;
12
+ try {
13
+ return await this.encryption.decrypt(value);
14
+ } catch {
15
+ return value;
16
+ }
17
+ }
18
+ async toStorage(params) {
19
+ const { value } = params;
20
+ if (!value || "string" != typeof value || 0 === value.length) return value;
21
+ try {
22
+ return await this.encryption.encrypt(value);
23
+ } catch {
24
+ return value;
25
+ }
26
+ }
27
+ }
28
+ const EncryptedTextStorageTransform = StorageTransform.createImplementation({
29
+ implementation: EncryptedTextStorageTransformImpl,
30
+ dependencies: [
31
+ Encryption
32
+ ]
33
+ });
34
+ export { EncryptedTextStorageTransform };
35
+
36
+ //# sourceMappingURL=EncryptedTextStorageTransform.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/storage/fields/EncryptedTextStorageTransform.js","sources":["../../../../src/features/storage/fields/EncryptedTextStorageTransform.ts"],"sourcesContent":["import { StorageTransform } from \"../abstractions/StorageTransform.js\";\nimport { Encryption } from \"@webiny/api-core/features/encryption/index.js\";\nimport { TextFieldTypes } from \"~/features/modelBuilder/index.js\";\n\nclass EncryptedTextStorageTransformImpl implements StorageTransform.Interface<string, string> {\n public readonly fieldType = TextFieldTypes.ENCRYPTED;\n\n public constructor(private readonly encryption: Encryption.Interface) {}\n\n public async fromStorage(\n params: StorageTransform.FromStorageParams<unknown, string>\n ): StorageTransform.FromStorageResponse<string> {\n const { value } = params;\n if (!value || typeof value !== \"string\" || value.length === 0) {\n return value as string;\n }\n try {\n return await this.encryption.decrypt(value);\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 (!value || typeof value !== \"string\" || value.length === 0) {\n return value as string;\n }\n\n try {\n return await this.encryption.encrypt(value);\n } catch {\n return value;\n }\n }\n}\n\nexport const EncryptedTextStorageTransform = StorageTransform.createImplementation({\n implementation: EncryptedTextStorageTransformImpl,\n dependencies: [Encryption]\n});\n"],"names":["EncryptedTextStorageTransformImpl","encryption","TextFieldTypes","params","value","EncryptedTextStorageTransform","StorageTransform","Encryption"],"mappings":";;;AAIA,MAAMA;IAGF,YAAoCC,UAAgC,CAAE;aAAlCA,UAAU,GAAVA;aAFpB,SAAS,GAAGC,eAAe,SAAS;IAEmB;IAEvE,MAAa,YACTC,MAA2D,EACf;QAC5C,MAAM,EAAEC,KAAK,EAAE,GAAGD;QAClB,IAAI,CAACC,SAAS,AAAiB,YAAjB,OAAOA,SAAsBA,AAAiB,MAAjBA,MAAM,MAAM,EACnD,OAAOA;QAEX,IAAI;YACA,OAAO,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAACA;QACzC,EAAE,OAAM;YACJ,OAAOA;QACX;IACJ;IAEA,MAAa,UACTD,MAAyD,EACf;QAC1C,MAAM,EAAEC,KAAK,EAAE,GAAGD;QAClB,IAAI,CAACC,SAAS,AAAiB,YAAjB,OAAOA,SAAsBA,AAAiB,MAAjBA,MAAM,MAAM,EACnD,OAAOA;QAGX,IAAI;YACA,OAAO,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAACA;QACzC,EAAE,OAAM;YACJ,OAAOA;QACX;IACJ;AACJ;AAEO,MAAMC,gCAAgCC,iBAAiB,oBAAoB,CAAC;IAC/E,gBAAgBN;IAChB,cAAc;QAACO;KAAW;AAC9B"}
@@ -0,0 +1,11 @@
1
+ import { WebhookFactory as WebhookFactoryAbstraction } from "@webiny/api-core/features/webhooks/index.js";
2
+ import { ListModelsUseCase } from "../../features/contentModel/ListModels/abstractions.js";
3
+ declare class CmsWebhookFactoryImpl implements WebhookFactoryAbstraction.Interface {
4
+ private listModels;
5
+ constructor(listModels: ListModelsUseCase.Interface);
6
+ execute(): Promise<WebhookFactoryAbstraction.Definition[]>;
7
+ }
8
+ export declare const CmsWebhookFactory: typeof CmsWebhookFactoryImpl & {
9
+ __abstraction: import("@webiny/di").Abstraction<import("@webiny/api-core/features/webhooks/Webhook/abstractions/WebhookFactory").IWebhookFactory>;
10
+ };
11
+ export {};
@@ -0,0 +1,40 @@
1
+ import { WebhookFactory } from "@webiny/api-core/features/webhooks/index.js";
2
+ import { ListModelsUseCase } from "../contentModel/ListModels/abstractions.js";
3
+ const ACTIONS = [
4
+ "created",
5
+ "updated",
6
+ "deleted",
7
+ "published",
8
+ "unpublished"
9
+ ];
10
+ class CmsWebhookFactoryImpl {
11
+ constructor(listModels){
12
+ this.listModels = listModels;
13
+ }
14
+ async execute() {
15
+ const result = await this.listModels.execute({
16
+ includePrivate: false
17
+ });
18
+ if (result.isFail()) return [];
19
+ return result.value.reduce((events, model)=>{
20
+ if (model.tags?.includes("$hidden:true")) return events;
21
+ for (const action of ACTIONS)events.push({
22
+ app: "cms",
23
+ appLabel: "Headless CMS",
24
+ entity: model.modelId,
25
+ eventName: `cms.entry.${model.modelId}.${action}`,
26
+ label: `${model.name}: Entry ${action.charAt(0).toUpperCase() + action.slice(1)}`
27
+ });
28
+ return events;
29
+ }, []);
30
+ }
31
+ }
32
+ const CmsWebhookFactory = WebhookFactory.createImplementation({
33
+ implementation: CmsWebhookFactoryImpl,
34
+ dependencies: [
35
+ ListModelsUseCase
36
+ ]
37
+ });
38
+ export { CmsWebhookFactory };
39
+
40
+ //# sourceMappingURL=CmsWebhookFactory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/webhooks/CmsWebhookFactory.js","sources":["../../../src/features/webhooks/CmsWebhookFactory.ts"],"sourcesContent":["import { WebhookFactory as WebhookFactoryAbstraction } from \"@webiny/api-core/features/webhooks/index.js\";\nimport { ListModelsUseCase } from \"~/features/contentModel/ListModels/abstractions.js\";\n\nconst ACTIONS = [\"created\", \"updated\", \"deleted\", \"published\", \"unpublished\"] as const;\n\nclass CmsWebhookFactoryImpl implements WebhookFactoryAbstraction.Interface {\n constructor(private listModels: ListModelsUseCase.Interface) {}\n\n public async execute(): Promise<WebhookFactoryAbstraction.Definition[]> {\n const result = await this.listModels.execute({\n includePrivate: false\n });\n if (result.isFail()) {\n return [];\n }\n\n return result.value.reduce<WebhookFactoryAbstraction.Definition[]>((events, model) => {\n if (model.tags?.includes(\"$hidden:true\")) {\n return events;\n }\n\n for (const action of ACTIONS) {\n events.push({\n app: \"cms\",\n appLabel: \"Headless CMS\",\n entity: model.modelId,\n eventName: `cms.entry.${model.modelId}.${action}`,\n label: `${model.name}: Entry ${action.charAt(0).toUpperCase() + action.slice(1)}`\n });\n }\n return events;\n }, []);\n }\n}\n\nexport const CmsWebhookFactory = WebhookFactoryAbstraction.createImplementation({\n implementation: CmsWebhookFactoryImpl,\n dependencies: [ListModelsUseCase]\n});\n"],"names":["ACTIONS","CmsWebhookFactoryImpl","listModels","result","events","model","action","CmsWebhookFactory","WebhookFactoryAbstraction","ListModelsUseCase"],"mappings":";;AAGA,MAAMA,UAAU;IAAC;IAAW;IAAW;IAAW;IAAa;CAAc;AAE7E,MAAMC;IACF,YAAoBC,UAAuC,CAAE;aAAzCA,UAAU,GAAVA;IAA0C;IAE9D,MAAa,UAA2D;QACpE,MAAMC,SAAS,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;YACzC,gBAAgB;QACpB;QACA,IAAIA,OAAO,MAAM,IACb,OAAO,EAAE;QAGb,OAAOA,OAAO,KAAK,CAAC,MAAM,CAAyC,CAACC,QAAQC;YACxE,IAAIA,MAAM,IAAI,EAAE,SAAS,iBACrB,OAAOD;YAGX,KAAK,MAAME,UAAUN,QACjBI,OAAO,IAAI,CAAC;gBACR,KAAK;gBACL,UAAU;gBACV,QAAQC,MAAM,OAAO;gBACrB,WAAW,CAAC,UAAU,EAAEA,MAAM,OAAO,CAAC,CAAC,EAAEC,QAAQ;gBACjD,OAAO,GAAGD,MAAM,IAAI,CAAC,QAAQ,EAAEC,OAAO,MAAM,CAAC,GAAG,WAAW,KAAKA,OAAO,KAAK,CAAC,IAAI;YACrF;YAEJ,OAAOF;QACX,GAAG,EAAE;IACT;AACJ;AAEO,MAAMG,oBAAoBC,eAAAA,oBAA8C,CAAC;IAC5E,gBAAgBP;IAChB,cAAc;QAACQ;KAAkB;AACrC"}
@@ -0,0 +1,4 @@
1
+ export declare const CmsWebhooksFeature: {
2
+ name: string;
3
+ register(container: import("@webiny/di").Container): void;
4
+ };
@@ -0,0 +1,21 @@
1
+ import { createFeature } from "@webiny/feature/api";
2
+ import { CmsWebhookFactory } from "./CmsWebhookFactory.js";
3
+ import { OnEntryCreatedHandler } from "./handlers/OnEntryCreatedHandler.js";
4
+ import { OnEntryUpdatedHandler } from "./handlers/OnEntryUpdatedHandler.js";
5
+ import { OnEntryDeletedHandler } from "./handlers/OnEntryDeletedHandler.js";
6
+ import { OnEntryPublishedHandler } from "./handlers/OnEntryPublishedHandler.js";
7
+ import { OnEntryUnpublishedHandler } from "./handlers/OnEntryUnpublishedHandler.js";
8
+ const CmsWebhooksFeature = createFeature({
9
+ name: "CmsWebhooks",
10
+ register (container) {
11
+ container.register(CmsWebhookFactory).inSingletonScope();
12
+ container.register(OnEntryCreatedHandler);
13
+ container.register(OnEntryUpdatedHandler);
14
+ container.register(OnEntryDeletedHandler);
15
+ container.register(OnEntryPublishedHandler);
16
+ container.register(OnEntryUnpublishedHandler);
17
+ }
18
+ });
19
+ export { CmsWebhooksFeature };
20
+
21
+ //# sourceMappingURL=feature.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/webhooks/feature.js","sources":["../../../src/features/webhooks/feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport { CmsWebhookFactory } from \"./CmsWebhookFactory.js\";\nimport { OnEntryCreatedHandler } from \"./handlers/OnEntryCreatedHandler.js\";\nimport { OnEntryUpdatedHandler } from \"./handlers/OnEntryUpdatedHandler.js\";\nimport { OnEntryDeletedHandler } from \"./handlers/OnEntryDeletedHandler.js\";\nimport { OnEntryPublishedHandler } from \"./handlers/OnEntryPublishedHandler.js\";\nimport { OnEntryUnpublishedHandler } from \"./handlers/OnEntryUnpublishedHandler.js\";\n\nexport const CmsWebhooksFeature = createFeature({\n name: \"CmsWebhooks\",\n register(container) {\n container.register(CmsWebhookFactory).inSingletonScope();\n container.register(OnEntryCreatedHandler);\n container.register(OnEntryUpdatedHandler);\n container.register(OnEntryDeletedHandler);\n container.register(OnEntryPublishedHandler);\n container.register(OnEntryUnpublishedHandler);\n }\n});\n"],"names":["CmsWebhooksFeature","createFeature","container","CmsWebhookFactory","OnEntryCreatedHandler","OnEntryUpdatedHandler","OnEntryDeletedHandler","OnEntryPublishedHandler","OnEntryUnpublishedHandler"],"mappings":";;;;;;;AAQO,MAAMA,qBAAqBC,cAAc;IAC5C,MAAM;IACN,UAASC,SAAS;QACdA,UAAU,QAAQ,CAACC,mBAAmB,gBAAgB;QACtDD,UAAU,QAAQ,CAACE;QACnBF,UAAU,QAAQ,CAACG;QACnBH,UAAU,QAAQ,CAACI;QACnBJ,UAAU,QAAQ,CAACK;QACnBL,UAAU,QAAQ,CAACM;IACvB;AACJ"}
@@ -0,0 +1,11 @@
1
+ import { EntryAfterCreateEventHandler } from "../../../features/contentEntry/CreateEntry/events.js";
2
+ import { WebhookDispatcher } from "@webiny/api-core/features/webhooks/index.js";
3
+ declare class OnEntryCreatedHandlerImpl implements EntryAfterCreateEventHandler.Interface {
4
+ private dispatcher;
5
+ constructor(dispatcher: WebhookDispatcher.Interface);
6
+ handle(event: EntryAfterCreateEventHandler.Event): Promise<void>;
7
+ }
8
+ export declare const OnEntryCreatedHandler: typeof OnEntryCreatedHandlerImpl & {
9
+ __abstraction: import("@webiny/di").Abstraction<import("@webiny/api-core/features/eventPublisher").IEventHandler<import("~/features/contentEntry/CreateEntry/events.js").EntryAfterCreateEvent>>;
10
+ };
11
+ export {};
@@ -0,0 +1,22 @@
1
+ import { EntryAfterCreateEventHandler } from "../../contentEntry/CreateEntry/events.js";
2
+ import { WebhookDispatcher } from "@webiny/api-core/features/webhooks/index.js";
3
+ class OnEntryCreatedHandlerImpl {
4
+ constructor(dispatcher){
5
+ this.dispatcher = dispatcher;
6
+ }
7
+ async handle(event) {
8
+ const { entry, model } = event.payload;
9
+ await this.dispatcher.dispatch(`cms.entry.${model.modelId}.created`, {
10
+ entry
11
+ });
12
+ }
13
+ }
14
+ const OnEntryCreatedHandler = EntryAfterCreateEventHandler.createImplementation({
15
+ implementation: OnEntryCreatedHandlerImpl,
16
+ dependencies: [
17
+ WebhookDispatcher
18
+ ]
19
+ });
20
+ export { OnEntryCreatedHandler };
21
+
22
+ //# sourceMappingURL=OnEntryCreatedHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/webhooks/handlers/OnEntryCreatedHandler.js","sources":["../../../../src/features/webhooks/handlers/OnEntryCreatedHandler.ts"],"sourcesContent":["import { EntryAfterCreateEventHandler } from \"~/features/contentEntry/CreateEntry/events.js\";\nimport { WebhookDispatcher } from \"@webiny/api-core/features/webhooks/index.js\";\n\nclass OnEntryCreatedHandlerImpl implements EntryAfterCreateEventHandler.Interface {\n constructor(private dispatcher: WebhookDispatcher.Interface) {}\n\n async handle(event: EntryAfterCreateEventHandler.Event): Promise<void> {\n const { entry, model } = event.payload;\n await this.dispatcher.dispatch(`cms.entry.${model.modelId}.created`, { entry });\n }\n}\n\nexport const OnEntryCreatedHandler = EntryAfterCreateEventHandler.createImplementation({\n implementation: OnEntryCreatedHandlerImpl,\n dependencies: [WebhookDispatcher]\n});\n"],"names":["OnEntryCreatedHandlerImpl","dispatcher","event","entry","model","OnEntryCreatedHandler","EntryAfterCreateEventHandler","WebhookDispatcher"],"mappings":";;AAGA,MAAMA;IACF,YAAoBC,UAAuC,CAAE;aAAzCA,UAAU,GAAVA;IAA0C;IAE9D,MAAM,OAAOC,KAAyC,EAAiB;QACnE,MAAM,EAAEC,KAAK,EAAEC,KAAK,EAAE,GAAGF,MAAM,OAAO;QACtC,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,UAAU,EAAEE,MAAM,OAAO,CAAC,QAAQ,CAAC,EAAE;YAAED;QAAM;IACjF;AACJ;AAEO,MAAME,wBAAwBC,6BAA6B,oBAAoB,CAAC;IACnF,gBAAgBN;IAChB,cAAc;QAACO;KAAkB;AACrC"}
@@ -0,0 +1,11 @@
1
+ import { EntryAfterDeleteEventHandler } from "../../../features/contentEntry/DeleteEntry/events.js";
2
+ import { WebhookDispatcher } from "@webiny/api-core/features/webhooks/index.js";
3
+ declare class OnEntryDeletedHandlerImpl implements EntryAfterDeleteEventHandler.Interface {
4
+ private dispatcher;
5
+ constructor(dispatcher: WebhookDispatcher.Interface);
6
+ handle(event: EntryAfterDeleteEventHandler.Event): Promise<void>;
7
+ }
8
+ export declare const OnEntryDeletedHandler: typeof OnEntryDeletedHandlerImpl & {
9
+ __abstraction: import("@webiny/di").Abstraction<import("@webiny/api-core/features/eventPublisher").IEventHandler<import("~/features/contentEntry/DeleteEntry/events.js").EntryAfterDeleteEvent>>;
10
+ };
11
+ export {};
@@ -0,0 +1,22 @@
1
+ import { EntryAfterDeleteEventHandler } from "../../contentEntry/DeleteEntry/events.js";
2
+ import { WebhookDispatcher } from "@webiny/api-core/features/webhooks/index.js";
3
+ class OnEntryDeletedHandlerImpl {
4
+ constructor(dispatcher){
5
+ this.dispatcher = dispatcher;
6
+ }
7
+ async handle(event) {
8
+ const { entry, model } = event.payload;
9
+ await this.dispatcher.dispatch(`cms.entry.${model.modelId}.deleted`, {
10
+ entry
11
+ });
12
+ }
13
+ }
14
+ const OnEntryDeletedHandler = EntryAfterDeleteEventHandler.createImplementation({
15
+ implementation: OnEntryDeletedHandlerImpl,
16
+ dependencies: [
17
+ WebhookDispatcher
18
+ ]
19
+ });
20
+ export { OnEntryDeletedHandler };
21
+
22
+ //# sourceMappingURL=OnEntryDeletedHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/webhooks/handlers/OnEntryDeletedHandler.js","sources":["../../../../src/features/webhooks/handlers/OnEntryDeletedHandler.ts"],"sourcesContent":["import { EntryAfterDeleteEventHandler } from \"~/features/contentEntry/DeleteEntry/events.js\";\nimport { WebhookDispatcher } from \"@webiny/api-core/features/webhooks/index.js\";\n\nclass OnEntryDeletedHandlerImpl implements EntryAfterDeleteEventHandler.Interface {\n constructor(private dispatcher: WebhookDispatcher.Interface) {}\n\n async handle(event: EntryAfterDeleteEventHandler.Event): Promise<void> {\n const { entry, model } = event.payload;\n await this.dispatcher.dispatch(`cms.entry.${model.modelId}.deleted`, { entry });\n }\n}\n\nexport const OnEntryDeletedHandler = EntryAfterDeleteEventHandler.createImplementation({\n implementation: OnEntryDeletedHandlerImpl,\n dependencies: [WebhookDispatcher]\n});\n"],"names":["OnEntryDeletedHandlerImpl","dispatcher","event","entry","model","OnEntryDeletedHandler","EntryAfterDeleteEventHandler","WebhookDispatcher"],"mappings":";;AAGA,MAAMA;IACF,YAAoBC,UAAuC,CAAE;aAAzCA,UAAU,GAAVA;IAA0C;IAE9D,MAAM,OAAOC,KAAyC,EAAiB;QACnE,MAAM,EAAEC,KAAK,EAAEC,KAAK,EAAE,GAAGF,MAAM,OAAO;QACtC,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,UAAU,EAAEE,MAAM,OAAO,CAAC,QAAQ,CAAC,EAAE;YAAED;QAAM;IACjF;AACJ;AAEO,MAAME,wBAAwBC,6BAA6B,oBAAoB,CAAC;IACnF,gBAAgBN;IAChB,cAAc;QAACO;KAAkB;AACrC"}
@@ -0,0 +1,11 @@
1
+ import { EntryAfterPublishEventHandler } from "../../../features/contentEntry/PublishEntry/events.js";
2
+ import { WebhookDispatcher } from "@webiny/api-core/features/webhooks/index.js";
3
+ declare class OnEntryPublishedHandlerImpl implements EntryAfterPublishEventHandler.Interface {
4
+ private dispatcher;
5
+ constructor(dispatcher: WebhookDispatcher.Interface);
6
+ handle(event: EntryAfterPublishEventHandler.Event): Promise<void>;
7
+ }
8
+ export declare const OnEntryPublishedHandler: typeof OnEntryPublishedHandlerImpl & {
9
+ __abstraction: import("@webiny/di").Abstraction<import("@webiny/api-core/features/eventPublisher").IEventHandler<import("~/features/contentEntry/PublishEntry/events.js").EntryAfterPublishEvent>>;
10
+ };
11
+ export {};
@@ -0,0 +1,22 @@
1
+ import { EntryAfterPublishEventHandler } from "../../contentEntry/PublishEntry/events.js";
2
+ import { WebhookDispatcher } from "@webiny/api-core/features/webhooks/index.js";
3
+ class OnEntryPublishedHandlerImpl {
4
+ constructor(dispatcher){
5
+ this.dispatcher = dispatcher;
6
+ }
7
+ async handle(event) {
8
+ const { entry, model } = event.payload;
9
+ await this.dispatcher.dispatch(`cms.entry.${model.modelId}.published`, {
10
+ entry
11
+ });
12
+ }
13
+ }
14
+ const OnEntryPublishedHandler = EntryAfterPublishEventHandler.createImplementation({
15
+ implementation: OnEntryPublishedHandlerImpl,
16
+ dependencies: [
17
+ WebhookDispatcher
18
+ ]
19
+ });
20
+ export { OnEntryPublishedHandler };
21
+
22
+ //# sourceMappingURL=OnEntryPublishedHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/webhooks/handlers/OnEntryPublishedHandler.js","sources":["../../../../src/features/webhooks/handlers/OnEntryPublishedHandler.ts"],"sourcesContent":["import { EntryAfterPublishEventHandler } from \"~/features/contentEntry/PublishEntry/events.js\";\nimport { WebhookDispatcher } from \"@webiny/api-core/features/webhooks/index.js\";\n\nclass OnEntryPublishedHandlerImpl implements EntryAfterPublishEventHandler.Interface {\n constructor(private dispatcher: WebhookDispatcher.Interface) {}\n\n async handle(event: EntryAfterPublishEventHandler.Event): Promise<void> {\n const { entry, model } = event.payload;\n await this.dispatcher.dispatch(`cms.entry.${model.modelId}.published`, { entry });\n }\n}\n\nexport const OnEntryPublishedHandler = EntryAfterPublishEventHandler.createImplementation({\n implementation: OnEntryPublishedHandlerImpl,\n dependencies: [WebhookDispatcher]\n});\n"],"names":["OnEntryPublishedHandlerImpl","dispatcher","event","entry","model","OnEntryPublishedHandler","EntryAfterPublishEventHandler","WebhookDispatcher"],"mappings":";;AAGA,MAAMA;IACF,YAAoBC,UAAuC,CAAE;aAAzCA,UAAU,GAAVA;IAA0C;IAE9D,MAAM,OAAOC,KAA0C,EAAiB;QACpE,MAAM,EAAEC,KAAK,EAAEC,KAAK,EAAE,GAAGF,MAAM,OAAO;QACtC,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,UAAU,EAAEE,MAAM,OAAO,CAAC,UAAU,CAAC,EAAE;YAAED;QAAM;IACnF;AACJ;AAEO,MAAME,0BAA0BC,8BAA8B,oBAAoB,CAAC;IACtF,gBAAgBN;IAChB,cAAc;QAACO;KAAkB;AACrC"}
@@ -0,0 +1,11 @@
1
+ import { EntryAfterUnpublishEventHandler } from "../../../features/contentEntry/UnpublishEntry/events.js";
2
+ import { WebhookDispatcher } from "@webiny/api-core/features/webhooks/index.js";
3
+ declare class OnEntryUnpublishedHandlerImpl implements EntryAfterUnpublishEventHandler.Interface {
4
+ private dispatcher;
5
+ constructor(dispatcher: WebhookDispatcher.Interface);
6
+ handle(event: EntryAfterUnpublishEventHandler.Event): Promise<void>;
7
+ }
8
+ export declare const OnEntryUnpublishedHandler: typeof OnEntryUnpublishedHandlerImpl & {
9
+ __abstraction: import("@webiny/di").Abstraction<import("@webiny/api-core/features/eventPublisher").IEventHandler<import("~/features/contentEntry/UnpublishEntry/events.js").EntryAfterUnpublishEvent>>;
10
+ };
11
+ export {};
@@ -0,0 +1,22 @@
1
+ import { EntryAfterUnpublishEventHandler } from "../../contentEntry/UnpublishEntry/events.js";
2
+ import { WebhookDispatcher } from "@webiny/api-core/features/webhooks/index.js";
3
+ class OnEntryUnpublishedHandlerImpl {
4
+ constructor(dispatcher){
5
+ this.dispatcher = dispatcher;
6
+ }
7
+ async handle(event) {
8
+ const { entry, model } = event.payload;
9
+ await this.dispatcher.dispatch(`cms.entry.${model.modelId}.unpublished`, {
10
+ entry
11
+ });
12
+ }
13
+ }
14
+ const OnEntryUnpublishedHandler = EntryAfterUnpublishEventHandler.createImplementation({
15
+ implementation: OnEntryUnpublishedHandlerImpl,
16
+ dependencies: [
17
+ WebhookDispatcher
18
+ ]
19
+ });
20
+ export { OnEntryUnpublishedHandler };
21
+
22
+ //# sourceMappingURL=OnEntryUnpublishedHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/webhooks/handlers/OnEntryUnpublishedHandler.js","sources":["../../../../src/features/webhooks/handlers/OnEntryUnpublishedHandler.ts"],"sourcesContent":["import { EntryAfterUnpublishEventHandler } from \"~/features/contentEntry/UnpublishEntry/events.js\";\nimport { WebhookDispatcher } from \"@webiny/api-core/features/webhooks/index.js\";\n\nclass OnEntryUnpublishedHandlerImpl implements EntryAfterUnpublishEventHandler.Interface {\n constructor(private dispatcher: WebhookDispatcher.Interface) {}\n\n async handle(event: EntryAfterUnpublishEventHandler.Event): Promise<void> {\n const { entry, model } = event.payload;\n await this.dispatcher.dispatch(`cms.entry.${model.modelId}.unpublished`, { entry });\n }\n}\n\nexport const OnEntryUnpublishedHandler = EntryAfterUnpublishEventHandler.createImplementation({\n implementation: OnEntryUnpublishedHandlerImpl,\n dependencies: [WebhookDispatcher]\n});\n"],"names":["OnEntryUnpublishedHandlerImpl","dispatcher","event","entry","model","OnEntryUnpublishedHandler","EntryAfterUnpublishEventHandler","WebhookDispatcher"],"mappings":";;AAGA,MAAMA;IACF,YAAoBC,UAAuC,CAAE;aAAzCA,UAAU,GAAVA;IAA0C;IAE9D,MAAM,OAAOC,KAA4C,EAAiB;QACtE,MAAM,EAAEC,KAAK,EAAEC,KAAK,EAAE,GAAGF,MAAM,OAAO;QACtC,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,UAAU,EAAEE,MAAM,OAAO,CAAC,YAAY,CAAC,EAAE;YAAED;QAAM;IACrF;AACJ;AAEO,MAAME,4BAA4BC,gCAAgC,oBAAoB,CAAC;IAC1F,gBAAgBN;IAChB,cAAc;QAACO;KAAkB;AACrC"}
@@ -0,0 +1,11 @@
1
+ import { EntryAfterUpdateEventHandler } from "../../../features/contentEntry/UpdateEntry/events.js";
2
+ import { WebhookDispatcher } from "@webiny/api-core/features/webhooks/index.js";
3
+ declare class OnEntryUpdatedHandlerImpl implements EntryAfterUpdateEventHandler.Interface {
4
+ private dispatcher;
5
+ constructor(dispatcher: WebhookDispatcher.Interface);
6
+ handle(event: EntryAfterUpdateEventHandler.Event): Promise<void>;
7
+ }
8
+ export declare const OnEntryUpdatedHandler: typeof OnEntryUpdatedHandlerImpl & {
9
+ __abstraction: import("@webiny/di").Abstraction<import("@webiny/api-core/features/eventPublisher").IEventHandler<import("~/features/contentEntry/UpdateEntry/events.js").EntryAfterUpdateEvent>>;
10
+ };
11
+ export {};
@@ -0,0 +1,23 @@
1
+ import { EntryAfterUpdateEventHandler } from "../../contentEntry/UpdateEntry/events.js";
2
+ import { WebhookDispatcher } from "@webiny/api-core/features/webhooks/index.js";
3
+ class OnEntryUpdatedHandlerImpl {
4
+ constructor(dispatcher){
5
+ this.dispatcher = dispatcher;
6
+ }
7
+ async handle(event) {
8
+ const { entry, model, original } = event.payload;
9
+ await this.dispatcher.dispatch(`cms.entry.${model.modelId}.updated`, {
10
+ entry,
11
+ original
12
+ });
13
+ }
14
+ }
15
+ const OnEntryUpdatedHandler = EntryAfterUpdateEventHandler.createImplementation({
16
+ implementation: OnEntryUpdatedHandlerImpl,
17
+ dependencies: [
18
+ WebhookDispatcher
19
+ ]
20
+ });
21
+ export { OnEntryUpdatedHandler };
22
+
23
+ //# sourceMappingURL=OnEntryUpdatedHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/webhooks/handlers/OnEntryUpdatedHandler.js","sources":["../../../../src/features/webhooks/handlers/OnEntryUpdatedHandler.ts"],"sourcesContent":["import { EntryAfterUpdateEventHandler } from \"~/features/contentEntry/UpdateEntry/events.js\";\nimport { WebhookDispatcher } from \"@webiny/api-core/features/webhooks/index.js\";\n\nclass OnEntryUpdatedHandlerImpl implements EntryAfterUpdateEventHandler.Interface {\n constructor(private dispatcher: WebhookDispatcher.Interface) {}\n\n async handle(event: EntryAfterUpdateEventHandler.Event): Promise<void> {\n const { entry, model, original } = event.payload;\n await this.dispatcher.dispatch(`cms.entry.${model.modelId}.updated`, { entry, original });\n }\n}\n\nexport const OnEntryUpdatedHandler = EntryAfterUpdateEventHandler.createImplementation({\n implementation: OnEntryUpdatedHandlerImpl,\n dependencies: [WebhookDispatcher]\n});\n"],"names":["OnEntryUpdatedHandlerImpl","dispatcher","event","entry","model","original","OnEntryUpdatedHandler","EntryAfterUpdateEventHandler","WebhookDispatcher"],"mappings":";;AAGA,MAAMA;IACF,YAAoBC,UAAuC,CAAE;aAAzCA,UAAU,GAAVA;IAA0C;IAE9D,MAAM,OAAOC,KAAyC,EAAiB;QACnE,MAAM,EAAEC,KAAK,EAAEC,KAAK,EAAEC,QAAQ,EAAE,GAAGH,MAAM,OAAO;QAChD,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,UAAU,EAAEE,MAAM,OAAO,CAAC,QAAQ,CAAC,EAAE;YAAED;YAAOE;QAAS;IAC3F;AACJ;AAEO,MAAMC,wBAAwBC,6BAA6B,oBAAoB,CAAC;IACnF,gBAAgBP;IAChB,cAAc;QAACQ;KAAkB;AACrC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webiny/api-headless-cms",
3
- "version": "6.4.0-beta.1",
3
+ "version": "6.4.0-beta.3",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": "./index.js",
@@ -25,19 +25,19 @@
25
25
  "@babel/code-frame": "7.29.0",
26
26
  "@graphql-tools/merge": "9.1.9",
27
27
  "@graphql-tools/schema": "10.0.33",
28
- "@webiny/api": "6.4.0-beta.1",
29
- "@webiny/api-core": "6.4.0-beta.1",
30
- "@webiny/di": "1.0.0",
31
- "@webiny/error": "6.4.0-beta.1",
32
- "@webiny/feature": "6.4.0-beta.1",
33
- "@webiny/handler": "6.4.0-beta.1",
34
- "@webiny/handler-aws": "6.4.0-beta.1",
35
- "@webiny/handler-db": "6.4.0-beta.1",
36
- "@webiny/handler-graphql": "6.4.0-beta.1",
37
- "@webiny/plugins": "6.4.0-beta.1",
38
- "@webiny/project": "6.4.0-beta.1",
39
- "@webiny/utils": "6.4.0-beta.1",
40
- "@webiny/validation": "6.4.0-beta.1",
28
+ "@webiny/api": "6.4.0-beta.3",
29
+ "@webiny/api-core": "6.4.0-beta.3",
30
+ "@webiny/di": "1.0.1",
31
+ "@webiny/error": "6.4.0-beta.3",
32
+ "@webiny/feature": "6.4.0-beta.3",
33
+ "@webiny/handler": "6.4.0-beta.3",
34
+ "@webiny/handler-aws": "6.4.0-beta.3",
35
+ "@webiny/handler-db": "6.4.0-beta.3",
36
+ "@webiny/handler-graphql": "6.4.0-beta.3",
37
+ "@webiny/plugins": "6.4.0-beta.3",
38
+ "@webiny/project": "6.4.0-beta.3",
39
+ "@webiny/utils": "6.4.0-beta.3",
40
+ "@webiny/validation": "6.4.0-beta.3",
41
41
  "dot-prop-immutable": "2.1.1",
42
42
  "graphql": "16.14.0",
43
43
  "graphql-tag": "2.12.6",
@@ -51,16 +51,16 @@
51
51
  "devDependencies": {
52
52
  "@types/babel__code-frame": "7.27.0",
53
53
  "@types/pluralize": "0.0.33",
54
- "@webiny/aws-sdk": "6.4.0-beta.1",
55
- "@webiny/build-tools": "6.4.0-beta.1",
56
- "@webiny/db-dynamodb": "6.4.0-beta.1",
54
+ "@webiny/aws-sdk": "6.4.0-beta.3",
55
+ "@webiny/build-tools": "6.4.0-beta.3",
56
+ "@webiny/db-dynamodb": "6.4.0-beta.3",
57
57
  "@webiny/handler-db": "0.0.0",
58
- "@webiny/project-utils": "6.4.0-beta.1",
59
- "@webiny/sdk": "6.4.0-beta.1",
60
- "@webiny/wcp": "6.4.0-beta.1",
58
+ "@webiny/project-utils": "6.4.0-beta.3",
59
+ "@webiny/sdk": "6.4.0-beta.3",
60
+ "@webiny/wcp": "6.4.0-beta.3",
61
61
  "apollo-graphql": "0.9.7",
62
62
  "graphql": "16.14.0",
63
- "oxfmt": "0.49.0",
63
+ "oxfmt": "0.51.0",
64
64
  "rimraf": "6.1.3",
65
65
  "typescript": "6.0.3",
66
66
  "vitest": "4.1.6",
@@ -70,5 +70,5 @@
70
70
  "access": "public",
71
71
  "directory": "dist"
72
72
  },
73
- "gitHead": "73237b8243693038c072bae1c0b783387448cbbe"
73
+ "gitHead": "2e58681d4344024bfb60e6180338e2f154ec87f0"
74
74
  }
@@ -1,5 +1,5 @@
1
- import { getBaseFieldType } from "./getBaseFieldType.js";
2
1
  import { StorageTransformRegistry } from "../features/storage/index.js";
2
+ import { getBaseFieldType } from "./getBaseFieldType.js";
3
3
  const getStorageTransformFactory = (context)=>{
4
4
  const registry = context.container.resolve(StorageTransformRegistry);
5
5
  const result = {};
@@ -13,7 +13,9 @@ const getStorageTransformFactory = (context)=>{
13
13
  const fieldType = getBaseFieldType({
14
14
  type
15
15
  });
16
- return result[fieldType] || defaultStorageTransform;
16
+ if (result[type]) return result[type];
17
+ if (fieldType !== type && result[fieldType]) return result[fieldType];
18
+ return defaultStorageTransform;
17
19
  };
18
20
  };
19
21
  const doNotTouchProperty = Symbol("__DO_NOT_TOUCH_AS_WE_USE_IT_TO_SKIP_UNNECESSARY_OPERATIONS");
@@ -23,8 +25,7 @@ const entryStorageTransform = async (context, model, operation, entry)=>{
23
25
  const fieldValues = model.fields.filter((field)=>entry.values.hasOwnProperty(field.fieldId)).map(async (field)=>{
24
26
  const key = field.fieldId;
25
27
  const value = entry.values[key];
26
- const baseType = getBaseFieldType(field);
27
- const storageTransform = getStorageTransform(baseType);
28
+ const storageTransform = getStorageTransform(field.type);
28
29
  const transformed = await storageTransform[operation]({
29
30
  model,
30
31
  field,
@@ -54,8 +55,7 @@ const entryFromStorageTransform = async (context, model, entry)=>entryStorageTra
54
55
  const entryFieldFromStorageTransform = async (params)=>{
55
56
  const { context, model, field, value } = params;
56
57
  const getStorageTransform = getStorageTransformFactory(context);
57
- const baseType = getBaseFieldType(field);
58
- const storageTransform = getStorageTransform(baseType);
58
+ const storageTransform = getStorageTransform(field.type);
59
59
  return storageTransform.fromStorage({
60
60
  model,
61
61
  field,
@@ -1 +1 @@
1
- {"version":3,"file":"utils/entryStorage.js","sources":["../../src/utils/entryStorage.ts"],"sourcesContent":["import type {\n CmsContext,\n CmsEntry,\n CmsEntryValues,\n CmsModel,\n CmsModelField\n} from \"~/types/index.js\";\nimport { getBaseFieldType } from \"~/utils/getBaseFieldType.js\";\nimport { StorageTransform, StorageTransformRegistry } from \"~/features/storage/index.js\";\nimport type { GenericRecord } from \"@webiny/api/types.js\";\n\nexport interface GetStorageTransformFactory {\n (context: Pick<CmsContext, \"container\">): (fieldType: string) => StorageTransform.Interface;\n}\n\nexport const getStorageTransformFactory: GetStorageTransformFactory = context => {\n const registry = context.container.resolve(StorageTransformRegistry);\n\n const result: GenericRecord<string, StorageTransform.Interface> = {};\n let defaultStorageTransform: StorageTransform.Interface;\n\n const storageTransforms = registry.getAll().toReversed();\n\n for (const storageTransform of storageTransforms) {\n if (storageTransform.fieldType === \"*\") {\n defaultStorageTransform = storageTransform;\n }\n result[storageTransform.fieldType] = storageTransform;\n }\n\n return (type: string) => {\n const fieldType = getBaseFieldType({\n type\n });\n return result[fieldType] || defaultStorageTransform;\n };\n};\n\nconst doNotTouchProperty = Symbol(\"__DO_NOT_TOUCH_AS_WE_USE_IT_TO_SKIP_UNNECESSARY_OPERATIONS\");\n\n/**\n * This should be used when transforming the whole entry.\n */\nconst entryStorageTransform = async <T extends CmsEntryValues = CmsEntryValues>(\n context: Pick<CmsContext, \"container\">,\n model: CmsModel,\n operation: \"toStorage\" | \"fromStorage\",\n entry: CmsEntry<T>\n): Promise<CmsEntry<T>> => {\n /**\n * We use this property to skip unnecessary operations.\n */\n // @ts-expect-error\n if (entry[doNotTouchProperty] === operation) {\n return entry;\n }\n\n const getStorageTransform = getStorageTransformFactory(context);\n\n const fieldValues = model.fields\n .filter(field => {\n return entry.values.hasOwnProperty(field.fieldId);\n })\n .map(async field => {\n const key = field.fieldId as keyof T;\n const value = entry.values[key];\n const baseType = getBaseFieldType(field);\n const storageTransform = getStorageTransform(baseType);\n const transformed = await storageTransform[operation]({\n model,\n field,\n value,\n getStorageTransform\n });\n return [key, transformed] as const;\n });\n\n const results = await Promise.all(fieldValues);\n const transformedValues = Object.fromEntries(results) as T;\n\n const result = {\n ...entry,\n values: transformedValues\n };\n /**\n * We need to assign the variable so that we can skip unnecessary operations next time.\n */\n Object.defineProperty(result, doNotTouchProperty, {\n enumerable: false,\n value: operation,\n configurable: true\n });\n\n return result;\n};\n\n/**\n * A function that is used in crud to transform entry into the storage type.\n */\nexport const entryToStorageTransform = async (\n context: Pick<CmsContext, \"container\">,\n model: CmsModel,\n entry: CmsEntry\n): Promise<CmsEntry> => {\n return entryStorageTransform(context, model, \"toStorage\", entry);\n};\n\n/**\n * A function that is used to transform the whole entry from storage into its native form.\n */\nexport const entryFromStorageTransform = async (\n context: Pick<CmsContext, \"container\">,\n model: CmsModel,\n entry: CmsEntry\n): Promise<CmsEntry> => {\n return entryStorageTransform(context, model, \"fromStorage\", entry);\n};\n\ninterface EntryFieldFromStorageTransformParams {\n context: Pick<CmsContext, \"container\">;\n model: CmsModel;\n field: CmsModelField;\n value: any;\n}\n/*\n * A function that is used to transform a single field from storage\n */\nexport const entryFieldFromStorageTransform = async <T = any>(\n params: EntryFieldFromStorageTransformParams\n): Promise<T> => {\n const { context, model, field, value } = params;\n const getStorageTransform = getStorageTransformFactory(context);\n\n const baseType = getBaseFieldType(field);\n const storageTransform = getStorageTransform(baseType);\n\n return storageTransform.fromStorage({\n model,\n field,\n value,\n getStorageTransform\n });\n};\n"],"names":["getStorageTransformFactory","context","registry","StorageTransformRegistry","result","defaultStorageTransform","storageTransforms","storageTransform","type","fieldType","getBaseFieldType","doNotTouchProperty","Symbol","entryStorageTransform","model","operation","entry","getStorageTransform","fieldValues","field","key","value","baseType","transformed","results","Promise","transformedValues","Object","entryToStorageTransform","entryFromStorageTransform","entryFieldFromStorageTransform","params"],"mappings":";;AAeO,MAAMA,6BAAyDC,CAAAA;IAClE,MAAMC,WAAWD,QAAQ,SAAS,CAAC,OAAO,CAACE;IAE3C,MAAMC,SAA4D,CAAC;IACnE,IAAIC;IAEJ,MAAMC,oBAAoBJ,SAAS,MAAM,GAAG,UAAU;IAEtD,KAAK,MAAMK,oBAAoBD,kBAAmB;QAC9C,IAAIC,AAA+B,QAA/BA,iBAAiB,SAAS,EAC1BF,0BAA0BE;QAE9BH,MAAM,CAACG,iBAAiB,SAAS,CAAC,GAAGA;IACzC;IAEA,OAAO,CAACC;QACJ,MAAMC,YAAYC,iBAAiB;YAC/BF;QACJ;QACA,OAAOJ,MAAM,CAACK,UAAU,IAAIJ;IAChC;AACJ;AAEA,MAAMM,qBAAqBC,OAAO;AAKlC,MAAMC,wBAAwB,OAC1BZ,SACAa,OACAC,WACAC;IAMA,IAAIA,KAAK,CAACL,mBAAmB,KAAKI,WAC9B,OAAOC;IAGX,MAAMC,sBAAsBjB,2BAA2BC;IAEvD,MAAMiB,cAAcJ,MAAM,MAAM,CAC3B,MAAM,CAACK,CAAAA,QACGH,MAAM,MAAM,CAAC,cAAc,CAACG,MAAM,OAAO,GAEnD,GAAG,CAAC,OAAMA;QACP,MAAMC,MAAMD,MAAM,OAAO;QACzB,MAAME,QAAQL,MAAM,MAAM,CAACI,IAAI;QAC/B,MAAME,WAAWZ,iBAAiBS;QAClC,MAAMZ,mBAAmBU,oBAAoBK;QAC7C,MAAMC,cAAc,MAAMhB,gBAAgB,CAACQ,UAAU,CAAC;YAClDD;YACAK;YACAE;YACAJ;QACJ;QACA,OAAO;YAACG;YAAKG;SAAY;IAC7B;IAEJ,MAAMC,UAAU,MAAMC,QAAQ,GAAG,CAACP;IAClC,MAAMQ,oBAAoBC,OAAO,WAAW,CAACH;IAE7C,MAAMpB,SAAS;QACX,GAAGY,KAAK;QACR,QAAQU;IACZ;IAIAC,OAAO,cAAc,CAACvB,QAAQO,oBAAoB;QAC9C,YAAY;QACZ,OAAOI;QACP,cAAc;IAClB;IAEA,OAAOX;AACX;AAKO,MAAMwB,0BAA0B,OACnC3B,SACAa,OACAE,QAEOH,sBAAsBZ,SAASa,OAAO,aAAaE;AAMvD,MAAMa,4BAA4B,OACrC5B,SACAa,OACAE,QAEOH,sBAAsBZ,SAASa,OAAO,eAAeE;AAYzD,MAAMc,iCAAiC,OAC1CC;IAEA,MAAM,EAAE9B,OAAO,EAAEa,KAAK,EAAEK,KAAK,EAAEE,KAAK,EAAE,GAAGU;IACzC,MAAMd,sBAAsBjB,2BAA2BC;IAEvD,MAAMqB,WAAWZ,iBAAiBS;IAClC,MAAMZ,mBAAmBU,oBAAoBK;IAE7C,OAAOf,iBAAiB,WAAW,CAAC;QAChCO;QACAK;QACAE;QACAJ;IACJ;AACJ"}
1
+ {"version":3,"file":"utils/entryStorage.js","sources":["../../src/utils/entryStorage.ts"],"sourcesContent":["import type {\n CmsContext,\n CmsEntry,\n CmsEntryValues,\n CmsModel,\n CmsModelField\n} from \"~/types/index.js\";\nimport { StorageTransform, StorageTransformRegistry } from \"~/features/storage/index.js\";\nimport type { GenericRecord } from \"@webiny/api/types.js\";\nimport { getBaseFieldType } from \"~/utils/getBaseFieldType.js\";\n\nexport interface GetStorageTransformFactory {\n (context: Pick<CmsContext, \"container\">): (fieldType: string) => StorageTransform.Interface;\n}\n\nexport const getStorageTransformFactory: GetStorageTransformFactory = context => {\n const registry = context.container.resolve(StorageTransformRegistry);\n\n const result: GenericRecord<string, StorageTransform.Interface> = {};\n let defaultStorageTransform: StorageTransform.Interface;\n\n const storageTransforms = registry.getAll().toReversed();\n\n for (const storageTransform of storageTransforms) {\n if (storageTransform.fieldType === \"*\") {\n defaultStorageTransform = storageTransform;\n }\n result[storageTransform.fieldType] = storageTransform;\n }\n\n return (type: string) => {\n const fieldType = getBaseFieldType({\n type\n });\n // first we check the exact type, then the base type, and if nothing is found, we return the default storage transform.\n if (result[type]) {\n return result[type];\n } else if (fieldType !== type && result[fieldType]) {\n return result[fieldType];\n }\n return defaultStorageTransform;\n };\n};\n\nconst doNotTouchProperty = Symbol(\"__DO_NOT_TOUCH_AS_WE_USE_IT_TO_SKIP_UNNECESSARY_OPERATIONS\");\n\n/**\n * This should be used when transforming the whole entry.\n */\nconst entryStorageTransform = async <T extends CmsEntryValues = CmsEntryValues>(\n context: Pick<CmsContext, \"container\">,\n model: CmsModel,\n operation: \"toStorage\" | \"fromStorage\",\n entry: CmsEntry<T>\n): Promise<CmsEntry<T>> => {\n /**\n * We use this property to skip unnecessary operations.\n */\n // @ts-expect-error\n if (entry[doNotTouchProperty] === operation) {\n return entry;\n }\n\n const getStorageTransform = getStorageTransformFactory(context);\n\n const fieldValues = model.fields\n .filter(field => {\n return entry.values.hasOwnProperty(field.fieldId);\n })\n .map(async field => {\n const key = field.fieldId as keyof T;\n const value = entry.values[key];\n const storageTransform = getStorageTransform(field.type);\n const transformed = await storageTransform[operation]({\n model,\n field,\n value,\n getStorageTransform\n });\n return [key, transformed] as const;\n });\n\n const results = await Promise.all(fieldValues);\n const transformedValues = Object.fromEntries(results) as T;\n\n const result = {\n ...entry,\n values: transformedValues\n };\n /**\n * We need to assign the variable so that we can skip unnecessary operations next time.\n */\n Object.defineProperty(result, doNotTouchProperty, {\n enumerable: false,\n value: operation,\n configurable: true\n });\n\n return result;\n};\n\n/**\n * A function that is used in crud to transform entry into the storage type.\n */\nexport const entryToStorageTransform = async (\n context: Pick<CmsContext, \"container\">,\n model: CmsModel,\n entry: CmsEntry\n): Promise<CmsEntry> => {\n return entryStorageTransform(context, model, \"toStorage\", entry);\n};\n\n/**\n * A function that is used to transform the whole entry from storage into its native form.\n */\nexport const entryFromStorageTransform = async (\n context: Pick<CmsContext, \"container\">,\n model: CmsModel,\n entry: CmsEntry\n): Promise<CmsEntry> => {\n return entryStorageTransform(context, model, \"fromStorage\", entry);\n};\n\ninterface EntryFieldFromStorageTransformParams {\n context: Pick<CmsContext, \"container\">;\n model: CmsModel;\n field: CmsModelField;\n value: any;\n}\n/*\n * A function that is used to transform a single field from storage\n */\nexport const entryFieldFromStorageTransform = async <T = any>(\n params: EntryFieldFromStorageTransformParams\n): Promise<T> => {\n const { context, model, field, value } = params;\n const getStorageTransform = getStorageTransformFactory(context);\n\n const storageTransform = getStorageTransform(field.type);\n\n return storageTransform.fromStorage({\n model,\n field,\n value,\n getStorageTransform\n });\n};\n"],"names":["getStorageTransformFactory","context","registry","StorageTransformRegistry","result","defaultStorageTransform","storageTransforms","storageTransform","type","fieldType","getBaseFieldType","doNotTouchProperty","Symbol","entryStorageTransform","model","operation","entry","getStorageTransform","fieldValues","field","key","value","transformed","results","Promise","transformedValues","Object","entryToStorageTransform","entryFromStorageTransform","entryFieldFromStorageTransform","params"],"mappings":";;AAeO,MAAMA,6BAAyDC,CAAAA;IAClE,MAAMC,WAAWD,QAAQ,SAAS,CAAC,OAAO,CAACE;IAE3C,MAAMC,SAA4D,CAAC;IACnE,IAAIC;IAEJ,MAAMC,oBAAoBJ,SAAS,MAAM,GAAG,UAAU;IAEtD,KAAK,MAAMK,oBAAoBD,kBAAmB;QAC9C,IAAIC,AAA+B,QAA/BA,iBAAiB,SAAS,EAC1BF,0BAA0BE;QAE9BH,MAAM,CAACG,iBAAiB,SAAS,CAAC,GAAGA;IACzC;IAEA,OAAO,CAACC;QACJ,MAAMC,YAAYC,iBAAiB;YAC/BF;QACJ;QAEA,IAAIJ,MAAM,CAACI,KAAK,EACZ,OAAOJ,MAAM,CAACI,KAAK;QAChB,IAAIC,cAAcD,QAAQJ,MAAM,CAACK,UAAU,EAC9C,OAAOL,MAAM,CAACK,UAAU;QAE5B,OAAOJ;IACX;AACJ;AAEA,MAAMM,qBAAqBC,OAAO;AAKlC,MAAMC,wBAAwB,OAC1BZ,SACAa,OACAC,WACAC;IAMA,IAAIA,KAAK,CAACL,mBAAmB,KAAKI,WAC9B,OAAOC;IAGX,MAAMC,sBAAsBjB,2BAA2BC;IAEvD,MAAMiB,cAAcJ,MAAM,MAAM,CAC3B,MAAM,CAACK,CAAAA,QACGH,MAAM,MAAM,CAAC,cAAc,CAACG,MAAM,OAAO,GAEnD,GAAG,CAAC,OAAMA;QACP,MAAMC,MAAMD,MAAM,OAAO;QACzB,MAAME,QAAQL,MAAM,MAAM,CAACI,IAAI;QAC/B,MAAMb,mBAAmBU,oBAAoBE,MAAM,IAAI;QACvD,MAAMG,cAAc,MAAMf,gBAAgB,CAACQ,UAAU,CAAC;YAClDD;YACAK;YACAE;YACAJ;QACJ;QACA,OAAO;YAACG;YAAKE;SAAY;IAC7B;IAEJ,MAAMC,UAAU,MAAMC,QAAQ,GAAG,CAACN;IAClC,MAAMO,oBAAoBC,OAAO,WAAW,CAACH;IAE7C,MAAMnB,SAAS;QACX,GAAGY,KAAK;QACR,QAAQS;IACZ;IAIAC,OAAO,cAAc,CAACtB,QAAQO,oBAAoB;QAC9C,YAAY;QACZ,OAAOI;QACP,cAAc;IAClB;IAEA,OAAOX;AACX;AAKO,MAAMuB,0BAA0B,OACnC1B,SACAa,OACAE,QAEOH,sBAAsBZ,SAASa,OAAO,aAAaE;AAMvD,MAAMY,4BAA4B,OACrC3B,SACAa,OACAE,QAEOH,sBAAsBZ,SAASa,OAAO,eAAeE;AAYzD,MAAMa,iCAAiC,OAC1CC;IAEA,MAAM,EAAE7B,OAAO,EAAEa,KAAK,EAAEK,KAAK,EAAEE,KAAK,EAAE,GAAGS;IACzC,MAAMb,sBAAsBjB,2BAA2BC;IAEvD,MAAMM,mBAAmBU,oBAAoBE,MAAM,IAAI;IAEvD,OAAOZ,iBAAiB,WAAW,CAAC;QAChCO;QACAK;QACAE;QACAJ;IACJ;AACJ"}