@webiny/api-headless-cms 6.4.0-beta.0 → 6.4.0-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/exports/api/cms/entry.d.ts +6 -0
- package/exports/api/cms/entry.js +6 -0
- package/features/contentModel/GetModel/index.d.ts +1 -1
- package/features/contentModel/GetModel/index.js +1 -1
- package/features/graphql/feature.js +1 -1
- package/features/graphql/feature.js.map +1 -1
- package/features/modelBuilder/fields/BaseFieldBuilder.d.ts +3 -0
- package/features/modelBuilder/fields/BaseFieldBuilder.js +7 -0
- package/features/modelBuilder/fields/BaseFieldBuilder.js.map +1 -1
- package/features/modelBuilder/fields/DataFieldBuilder.d.ts +1 -0
- package/features/modelBuilder/fields/DataFieldBuilder.js +5 -1
- package/features/modelBuilder/fields/DataFieldBuilder.js.map +1 -1
- package/features/modelBuilder/fields/TextFieldType.d.ts +1 -0
- package/features/modelBuilder/fields/TextFieldType.js +7 -0
- package/features/modelBuilder/fields/TextFieldType.js.map +1 -1
- package/features/storage/StorageTransformRegistry.d.ts +1 -0
- package/features/storage/StorageTransformRegistry.js +6 -1
- package/features/storage/StorageTransformRegistry.js.map +1 -1
- package/features/storage/feature.js +10 -8
- package/features/storage/feature.js.map +1 -1
- package/features/storage/fields/CompressedTextStorageTransform.d.ts +13 -0
- package/features/storage/fields/CompressedTextStorageTransform.js +37 -0
- package/features/storage/fields/CompressedTextStorageTransform.js.map +1 -0
- package/package.json +21 -21
|
@@ -39,6 +39,12 @@ export { GetSingletonEntryUseCase } from "../../../features/contentEntry/GetSing
|
|
|
39
39
|
export { ListEntriesUseCase, ListLatestEntriesUseCase, ListPublishedEntriesUseCase, ListDeletedEntriesUseCase } from "../../../features/contentEntry/ListEntries/abstractions.js";
|
|
40
40
|
export { ContentEntryTraverserProvider } from "../../../features/contentEntry/ContentEntryTraverser/index.js";
|
|
41
41
|
export { ValidateEntryUseCase } from "../../../features/contentEntry/ValidateEntry/abstractions.js";
|
|
42
|
+
export { CreateEntryDataFactory } from "../../../features/contentEntry/entryDataFactories/CreateEntryDataFactory/abstractions.js";
|
|
43
|
+
export { CreateEntryRevisionFromDataFactory } from "../../../features/contentEntry/entryDataFactories/CreateEntryRevisionFromDataFactory/abstractions.js";
|
|
44
|
+
export { CreatePublishEntryDataFactory } from "../../../features/contentEntry/entryDataFactories/CreatePublishEntryDataFactory/abstractions.js";
|
|
45
|
+
export { CreateRepublishEntryDataFactory } from "../../../features/contentEntry/entryDataFactories/CreateRepublishEntryDataFactory/abstractions.js";
|
|
46
|
+
export { CreateUnpublishEntryDataFactory } from "../../../features/contentEntry/entryDataFactories/CreateUnpublishEntryDataFactory/abstractions.js";
|
|
47
|
+
export { UpdateEntryDataFactory } from "../../../features/contentEntry/entryDataFactories/UpdateEntryDataFactory/abstractions.js";
|
|
42
48
|
/**
|
|
43
49
|
* Mapper helpers for custom where and sort inputs.
|
|
44
50
|
*/
|
package/exports/api/cms/entry.js
CHANGED
|
@@ -38,5 +38,11 @@ export { GetSingletonEntryUseCase } from "../../../features/contentEntry/GetSing
|
|
|
38
38
|
export { ListDeletedEntriesUseCase, ListEntriesUseCase, ListLatestEntriesUseCase, ListPublishedEntriesUseCase } from "../../../features/contentEntry/ListEntries/abstractions.js";
|
|
39
39
|
export { ContentEntryTraverserProvider } from "../../../features/contentEntry/ContentEntryTraverser/index.js";
|
|
40
40
|
export { ValidateEntryUseCase } from "../../../features/contentEntry/ValidateEntry/abstractions.js";
|
|
41
|
+
export { CreateEntryDataFactory } from "../../../features/contentEntry/entryDataFactories/CreateEntryDataFactory/abstractions.js";
|
|
42
|
+
export { CreateEntryRevisionFromDataFactory } from "../../../features/contentEntry/entryDataFactories/CreateEntryRevisionFromDataFactory/abstractions.js";
|
|
43
|
+
export { CreatePublishEntryDataFactory } from "../../../features/contentEntry/entryDataFactories/CreatePublishEntryDataFactory/abstractions.js";
|
|
44
|
+
export { CreateRepublishEntryDataFactory } from "../../../features/contentEntry/entryDataFactories/CreateRepublishEntryDataFactory/abstractions.js";
|
|
45
|
+
export { CreateUnpublishEntryDataFactory } from "../../../features/contentEntry/entryDataFactories/CreateUnpublishEntryDataFactory/abstractions.js";
|
|
46
|
+
export { UpdateEntryDataFactory } from "../../../features/contentEntry/entryDataFactories/UpdateEntryDataFactory/abstractions.js";
|
|
41
47
|
export { CmsWhereMapper } from "../../../features/whereMapper/abstractions.js";
|
|
42
48
|
export { CmsSortMapper } from "../../../features/sortMapper/abstractions.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export { GetModelUseCase } from "./abstractions.js";
|
|
1
|
+
export { GetModelUseCase, GetModelRepository } from "./abstractions.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export { GetModelUseCase } from "./abstractions.js";
|
|
1
|
+
export { GetModelRepository, GetModelUseCase } from "./abstractions.js";
|
|
@@ -27,7 +27,7 @@ const GraphQLFeature = createFeature({
|
|
|
27
27
|
container.register(RichTextFieldToGraphQL);
|
|
28
28
|
container.register(SearchableJsonFieldToGraphQL);
|
|
29
29
|
container.register(TextFieldToGraphQL);
|
|
30
|
-
container.register(CmsModelFieldToGraphQLRegistry);
|
|
30
|
+
container.register(CmsModelFieldToGraphQLRegistry).inSingletonScope();
|
|
31
31
|
}
|
|
32
32
|
});
|
|
33
33
|
export { GraphQLFeature };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"features/graphql/feature.js","sources":["../../../src/features/graphql/feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport { CmsModelFieldToGraphQLRegistry } from \"./fields/CmsModelFieldToGraphQLRegistry.js\";\nimport { BooleanFieldToGraphQL } from \"./fields/base/BooleanToGraphQL.js\";\nimport { DateTimeFieldToGraphQL } from \"./fields/base/DateTimeToGraphQL.js\";\nimport { DynamicZoneFieldToGraphQL } from \"./fields/base/DynamicZoneToGraphQL.js\";\nimport { FileFieldToGraphQL } from \"./fields/base/FileToGraphQL.js\";\nimport { JsonFieldToGraphQL } from \"./fields/base/JsonToGraphQL.js\";\nimport { LongTextFieldToGraphQL } from \"./fields/base/LongTextToGraphQL.js\";\nimport { NumberFieldToGraphQL } from \"./fields/base/NumberToGraphQL.js\";\nimport { ObjectFieldToGraphQL } from \"./fields/base/ObjectToGraphQL.js\";\nimport { RefFieldToGraphQL } from \"./fields/base/RefToGraphQL.js\";\nimport { SearchableJsonFieldToGraphQL } from \"./fields/base/SearchableJsonToGraphQL.js\";\nimport { TextFieldToGraphQL } from \"./fields/base/TextToGraphQL.js\";\nimport { RichTextFieldToGraphQL } from \"./fields/base/RichTextToGraphQL.js\";\n\nexport const GraphQLFeature = createFeature({\n name: \"Cms/GraphQLFeature\",\n register: container => {\n container.register(BooleanFieldToGraphQL);\n container.register(DateTimeFieldToGraphQL);\n container.register(DynamicZoneFieldToGraphQL);\n container.register(FileFieldToGraphQL);\n container.register(JsonFieldToGraphQL);\n container.register(LongTextFieldToGraphQL);\n container.register(NumberFieldToGraphQL);\n container.register(ObjectFieldToGraphQL);\n container.register(RefFieldToGraphQL);\n container.register(RichTextFieldToGraphQL);\n container.register(SearchableJsonFieldToGraphQL);\n container.register(TextFieldToGraphQL);\n container.register(CmsModelFieldToGraphQLRegistry);\n }\n});\n"],"names":["GraphQLFeature","createFeature","container","BooleanFieldToGraphQL","DateTimeFieldToGraphQL","DynamicZoneFieldToGraphQL","FileFieldToGraphQL","JsonFieldToGraphQL","LongTextFieldToGraphQL","NumberFieldToGraphQL","ObjectFieldToGraphQL","RefFieldToGraphQL","RichTextFieldToGraphQL","SearchableJsonFieldToGraphQL","TextFieldToGraphQL","CmsModelFieldToGraphQLRegistry"],"mappings":";;;;;;;;;;;;;;AAeO,MAAMA,iBAAiBC,cAAc;IACxC,MAAM;IACN,UAAUC,CAAAA;QACNA,UAAU,QAAQ,CAACC;QACnBD,UAAU,QAAQ,CAACE;QACnBF,UAAU,QAAQ,CAACG;QACnBH,UAAU,QAAQ,CAACI;QACnBJ,UAAU,QAAQ,CAACK;QACnBL,UAAU,QAAQ,CAACM;QACnBN,UAAU,QAAQ,CAACO;QACnBP,UAAU,QAAQ,CAACQ;QACnBR,UAAU,QAAQ,CAACS;QACnBT,UAAU,QAAQ,CAACU;QACnBV,UAAU,QAAQ,CAACW;QACnBX,UAAU,QAAQ,CAACY;
|
|
1
|
+
{"version":3,"file":"features/graphql/feature.js","sources":["../../../src/features/graphql/feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport { CmsModelFieldToGraphQLRegistry } from \"./fields/CmsModelFieldToGraphQLRegistry.js\";\nimport { BooleanFieldToGraphQL } from \"./fields/base/BooleanToGraphQL.js\";\nimport { DateTimeFieldToGraphQL } from \"./fields/base/DateTimeToGraphQL.js\";\nimport { DynamicZoneFieldToGraphQL } from \"./fields/base/DynamicZoneToGraphQL.js\";\nimport { FileFieldToGraphQL } from \"./fields/base/FileToGraphQL.js\";\nimport { JsonFieldToGraphQL } from \"./fields/base/JsonToGraphQL.js\";\nimport { LongTextFieldToGraphQL } from \"./fields/base/LongTextToGraphQL.js\";\nimport { NumberFieldToGraphQL } from \"./fields/base/NumberToGraphQL.js\";\nimport { ObjectFieldToGraphQL } from \"./fields/base/ObjectToGraphQL.js\";\nimport { RefFieldToGraphQL } from \"./fields/base/RefToGraphQL.js\";\nimport { SearchableJsonFieldToGraphQL } from \"./fields/base/SearchableJsonToGraphQL.js\";\nimport { TextFieldToGraphQL } from \"./fields/base/TextToGraphQL.js\";\nimport { RichTextFieldToGraphQL } from \"./fields/base/RichTextToGraphQL.js\";\n\nexport const GraphQLFeature = createFeature({\n name: \"Cms/GraphQLFeature\",\n register: container => {\n container.register(BooleanFieldToGraphQL);\n container.register(DateTimeFieldToGraphQL);\n container.register(DynamicZoneFieldToGraphQL);\n container.register(FileFieldToGraphQL);\n container.register(JsonFieldToGraphQL);\n container.register(LongTextFieldToGraphQL);\n container.register(NumberFieldToGraphQL);\n container.register(ObjectFieldToGraphQL);\n container.register(RefFieldToGraphQL);\n container.register(RichTextFieldToGraphQL);\n container.register(SearchableJsonFieldToGraphQL);\n container.register(TextFieldToGraphQL);\n\n container.register(CmsModelFieldToGraphQLRegistry).inSingletonScope();\n }\n});\n"],"names":["GraphQLFeature","createFeature","container","BooleanFieldToGraphQL","DateTimeFieldToGraphQL","DynamicZoneFieldToGraphQL","FileFieldToGraphQL","JsonFieldToGraphQL","LongTextFieldToGraphQL","NumberFieldToGraphQL","ObjectFieldToGraphQL","RefFieldToGraphQL","RichTextFieldToGraphQL","SearchableJsonFieldToGraphQL","TextFieldToGraphQL","CmsModelFieldToGraphQLRegistry"],"mappings":";;;;;;;;;;;;;;AAeO,MAAMA,iBAAiBC,cAAc;IACxC,MAAM;IACN,UAAUC,CAAAA;QACNA,UAAU,QAAQ,CAACC;QACnBD,UAAU,QAAQ,CAACE;QACnBF,UAAU,QAAQ,CAACG;QACnBH,UAAU,QAAQ,CAACI;QACnBJ,UAAU,QAAQ,CAACK;QACnBL,UAAU,QAAQ,CAACM;QACnBN,UAAU,QAAQ,CAACO;QACnBP,UAAU,QAAQ,CAACQ;QACnBR,UAAU,QAAQ,CAACS;QACnBT,UAAU,QAAQ,CAACU;QACnBV,UAAU,QAAQ,CAACW;QACnBX,UAAU,QAAQ,CAACY;QAEnBZ,UAAU,QAAQ,CAACa,gCAAgC,gBAAgB;IACvE;AACJ"}
|
|
@@ -21,13 +21,16 @@ export interface BaseFieldBuilderConfig {
|
|
|
21
21
|
*/
|
|
22
22
|
export declare abstract class BaseFieldBuilder<TType extends string = string> {
|
|
23
23
|
readonly type: TType;
|
|
24
|
+
private _fieldSubType?;
|
|
24
25
|
protected config: BaseFieldBuilderConfig;
|
|
26
|
+
get subType(): string | undefined;
|
|
25
27
|
constructor(type: TType, label?: string);
|
|
26
28
|
label(text: string): this;
|
|
27
29
|
help(text: string): this;
|
|
28
30
|
description(text: string): this;
|
|
29
31
|
note(text: string): this;
|
|
30
32
|
fieldId(id: string): this;
|
|
33
|
+
protected setSubType(subType: string): this;
|
|
31
34
|
/**
|
|
32
35
|
* Build the final field result.
|
|
33
36
|
* @internal
|
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
class BaseFieldBuilder {
|
|
2
|
+
get subType() {
|
|
3
|
+
return this._fieldSubType;
|
|
4
|
+
}
|
|
2
5
|
constructor(type, label){
|
|
3
6
|
this.type = type;
|
|
4
7
|
this.config = {
|
|
@@ -28,6 +31,10 @@ class BaseFieldBuilder {
|
|
|
28
31
|
this.config._fieldId = id;
|
|
29
32
|
return this;
|
|
30
33
|
}
|
|
34
|
+
setSubType(subType) {
|
|
35
|
+
this._fieldSubType = subType;
|
|
36
|
+
return this;
|
|
37
|
+
}
|
|
31
38
|
}
|
|
32
39
|
export { BaseFieldBuilder };
|
|
33
40
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"features/modelBuilder/fields/BaseFieldBuilder.js","sources":["../../../../src/features/modelBuilder/fields/BaseFieldBuilder.ts"],"sourcesContent":["import type { CmsModelField, CmsModelLayoutCell } from \"~/types/index.js\";\n\nexport interface DataFieldBuildResult {\n type: \"data\";\n field: CmsModelField;\n}\n\nexport interface LayoutFieldBuildResult {\n type: \"layout\";\n layoutCell: CmsModelLayoutCell;\n fields?: CmsModelField[];\n}\n\nexport type FieldBuildResult = DataFieldBuildResult | LayoutFieldBuildResult;\n\nexport interface BaseFieldBuilderConfig {\n label: string;\n help?: string | null;\n description?: string | null;\n note?: string | null;\n _fieldId?: string;\n}\n\n/**\n * Minimal shared base class for all field builders (data and layout).\n */\nexport abstract class BaseFieldBuilder<TType extends string = string> {\n public readonly type: TType;\n protected config: BaseFieldBuilderConfig;\n\n public constructor(type: TType, label?: string) {\n this.type = type;\n this.config = {\n label: label || \"\",\n help: null,\n description: null,\n note: null\n };\n }\n\n label(text: string): this {\n this.config.label = text;\n return this;\n }\n\n help(text: string): this {\n this.config.help = text;\n return this;\n }\n\n description(text: string): this {\n this.config.description = text;\n return this;\n }\n\n note(text: string): this {\n this.config.note = text;\n return this;\n }\n\n fieldId(id: string): this {\n this.config._fieldId = id;\n return this;\n }\n\n /**\n * Build the final field result.\n * @internal\n */\n abstract build(): FieldBuildResult;\n}\n"],"names":["BaseFieldBuilder","type","label","text","id"],"mappings":"AA0BO,MAAeA;
|
|
1
|
+
{"version":3,"file":"features/modelBuilder/fields/BaseFieldBuilder.js","sources":["../../../../src/features/modelBuilder/fields/BaseFieldBuilder.ts"],"sourcesContent":["import type { CmsModelField, CmsModelLayoutCell } from \"~/types/index.js\";\n\nexport interface DataFieldBuildResult {\n type: \"data\";\n field: CmsModelField;\n}\n\nexport interface LayoutFieldBuildResult {\n type: \"layout\";\n layoutCell: CmsModelLayoutCell;\n fields?: CmsModelField[];\n}\n\nexport type FieldBuildResult = DataFieldBuildResult | LayoutFieldBuildResult;\n\nexport interface BaseFieldBuilderConfig {\n label: string;\n help?: string | null;\n description?: string | null;\n note?: string | null;\n _fieldId?: string;\n}\n\n/**\n * Minimal shared base class for all field builders (data and layout).\n */\nexport abstract class BaseFieldBuilder<TType extends string = string> {\n public readonly type: TType;\n private _fieldSubType?: string;\n protected config: BaseFieldBuilderConfig;\n\n public get subType(): string | undefined {\n return this._fieldSubType;\n }\n\n public constructor(type: TType, label?: string) {\n this.type = type;\n this.config = {\n label: label || \"\",\n help: null,\n description: null,\n note: null\n };\n }\n\n public label(text: string): this {\n this.config.label = text;\n return this;\n }\n\n public help(text: string): this {\n this.config.help = text;\n return this;\n }\n\n public description(text: string): this {\n this.config.description = text;\n return this;\n }\n\n public note(text: string): this {\n this.config.note = text;\n return this;\n }\n\n public fieldId(id: string): this {\n this.config._fieldId = id;\n return this;\n }\n\n protected setSubType(subType: string): this {\n this._fieldSubType = subType;\n return this;\n }\n\n /**\n * Build the final field result.\n * @internal\n */\n public abstract build(): FieldBuildResult;\n}\n"],"names":["BaseFieldBuilder","type","label","text","id","subType"],"mappings":"AA0BO,MAAeA;IAKlB,IAAW,UAA8B;QACrC,OAAO,IAAI,CAAC,aAAa;IAC7B;IAEA,YAAmBC,IAAW,EAAEC,KAAc,CAAE;QAC5C,IAAI,CAAC,IAAI,GAAGD;QACZ,IAAI,CAAC,MAAM,GAAG;YACV,OAAOC,SAAS;YAChB,MAAM;YACN,aAAa;YACb,MAAM;QACV;IACJ;IAEO,MAAMC,IAAY,EAAQ;QAC7B,IAAI,CAAC,MAAM,CAAC,KAAK,GAAGA;QACpB,OAAO,IAAI;IACf;IAEO,KAAKA,IAAY,EAAQ;QAC5B,IAAI,CAAC,MAAM,CAAC,IAAI,GAAGA;QACnB,OAAO,IAAI;IACf;IAEO,YAAYA,IAAY,EAAQ;QACnC,IAAI,CAAC,MAAM,CAAC,WAAW,GAAGA;QAC1B,OAAO,IAAI;IACf;IAEO,KAAKA,IAAY,EAAQ;QAC5B,IAAI,CAAC,MAAM,CAAC,IAAI,GAAGA;QACnB,OAAO,IAAI;IACf;IAEO,QAAQC,EAAU,EAAQ;QAC7B,IAAI,CAAC,MAAM,CAAC,QAAQ,GAAGA;QACvB,OAAO,IAAI;IACf;IAEU,WAAWC,OAAe,EAAQ;QACxC,IAAI,CAAC,aAAa,GAAGA;QACrB,OAAO,IAAI;IACf;AAOJ"}
|
|
@@ -142,7 +142,7 @@ class DataFieldBuilder extends BaseFieldBuilder {
|
|
|
142
142
|
id: fieldId,
|
|
143
143
|
fieldId,
|
|
144
144
|
storageId,
|
|
145
|
-
type: this.
|
|
145
|
+
type: this.getFieldType(),
|
|
146
146
|
label: this.config.label,
|
|
147
147
|
validation: this.config.validation || [],
|
|
148
148
|
listValidation: this.config.listValidation || [],
|
|
@@ -161,6 +161,10 @@ class DataFieldBuilder extends BaseFieldBuilder {
|
|
|
161
161
|
}
|
|
162
162
|
};
|
|
163
163
|
}
|
|
164
|
+
getFieldType() {
|
|
165
|
+
if (!this.subType?.length) return this.type;
|
|
166
|
+
return `${this.type}:${this.subType}`;
|
|
167
|
+
}
|
|
164
168
|
}
|
|
165
169
|
export { DataFieldBuilder };
|
|
166
170
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"features/modelBuilder/fields/DataFieldBuilder.js","sources":["../../../../src/features/modelBuilder/fields/DataFieldBuilder.ts"],"sourcesContent":["import camelCase from \"lodash/camelCase.js\";\nimport type {\n CmsModelField,\n CmsModelFieldPredefinedValues,\n CmsModelFieldValidation\n} from \"~/types/index.js\";\nimport { getBaseFieldType } from \"~/utils/getBaseFieldType.js\";\nimport { BaseFieldBuilder, type DataFieldBuildResult } from \"./BaseFieldBuilder.js\";\n\nexport interface FieldBuilderConfig extends Omit<\n CmsModelField,\n \"id\" | \"fieldId\" | \"storageId\" | \"type\"\n> {\n _storageId?: string;\n _fieldId?: string;\n description?: string | null;\n note?: string | null;\n}\n\n/**\n * Augmentable renderer registry. Each entry maps a renderer name to its applicable field type(s) and settings.\n */\nexport interface IFieldRendererRegistry {\n switch: {\n fieldType: \"boolean\";\n settings: undefined;\n };\n checkboxes: {\n fieldType: \"text\" | \"number\";\n settings: undefined;\n };\n dateTimeInput: {\n fieldType: \"datetime\";\n settings: undefined;\n };\n dateTimeInputs: {\n fieldType: \"datetime\";\n settings?: {\n multiValue?: {\n addValueButtonLabel?: string;\n };\n };\n };\n dynamicZone: {\n fieldType: \"dynamicZone\";\n settings?: {\n open?: boolean;\n };\n };\n hidden: {\n fieldType: string;\n settings: undefined;\n };\n lexicalEditor: {\n fieldType: \"rich-text\";\n settings: undefined;\n };\n lexicalEditors: {\n fieldType: \"rich-text\";\n settings?: {\n multiValue?: {\n addValueButtonLabel?: string;\n };\n };\n };\n textarea: {\n fieldType: \"long-text\";\n settings: undefined;\n };\n textareas: {\n fieldType: \"long-text\";\n settings: {\n multiValue?: {\n addValueButtonLabel?: string;\n };\n };\n };\n numberInput: {\n fieldType: \"number\";\n settings: undefined;\n };\n numberInputs: {\n fieldType: \"number\";\n settings?: {\n multiValue?: {\n addValueButtonLabel?: string;\n };\n };\n };\n objectAccordionSingle: {\n fieldType: \"object\";\n settings?: {\n open?: boolean;\n };\n };\n objectAccordionMultiple: {\n fieldType: \"object\";\n settings?: {\n open?: boolean;\n multiValue?: {\n addValueButtonLabel?: string;\n };\n };\n };\n passthrough: {\n fieldType: string;\n settings: undefined;\n };\n radioButtons: {\n fieldType: \"text\" | \"number\";\n settings: undefined;\n };\n refDialogSingle: {\n fieldType: \"ref\";\n settings: undefined;\n };\n refDialogMultiple: {\n fieldType: \"ref\";\n settings?: {\n newItemPosition?: \"first\" | \"last\";\n };\n };\n refAutocompleteSingle: {\n fieldType: \"ref\";\n settings: undefined;\n };\n refAutocompleteMultiple: {\n fieldType: \"ref\";\n settings: undefined;\n };\n refCheckboxes: {\n fieldType: \"ref\";\n settings: undefined;\n };\n refRadioButtons: {\n fieldType: \"ref\";\n settings: undefined;\n };\n dropdown: {\n fieldType: \"text\" | \"number\";\n settings: undefined;\n };\n tags: {\n fieldType: \"text\";\n settings: undefined;\n };\n textInput: {\n fieldType: \"text\";\n settings: undefined;\n };\n textInputs: {\n fieldType: \"text\";\n settings?: {\n multiValue?: {\n addValueButtonLabel?: string;\n };\n };\n };\n file: {\n fieldType: \"file\";\n settings?: {\n imagesOnly?: boolean;\n };\n };\n files: {\n fieldType: \"file\";\n settings?: {\n imagesOnly?: boolean;\n };\n };\n uiSeparator: {\n fieldType: \"ui\";\n settings: undefined;\n };\n uiAlert: {\n fieldType: \"ui\";\n settings: {\n type: \"info\" | \"success\" | \"warning\" | \"danger\";\n };\n };\n uiTabs: {\n fieldType: \"ui\";\n settings: undefined;\n };\n}\n\n/**\n * Maps camelCase renderer names (used in the builder API) to the\n * kebab-case names expected by the frontend renderer registry.\n */\nconst rendererNameMap: Record<keyof IFieldRendererRegistry, string> = {\n switch: \"boolean-input\",\n checkboxes: \"checkboxes\",\n dateTimeInput: \"date-time-input\",\n dateTimeInputs: \"date-time-inputs\",\n dynamicZone: \"dynamicZone\",\n hidden: \"hidden\",\n lexicalEditor: \"lexical-text-input\",\n lexicalEditors: \"lexical-text-inputs\",\n textarea: \"long-text-text-area\",\n textareas: \"long-text-inputs\",\n numberInput: \"number-input\",\n numberInputs: \"number-inputs\",\n objectAccordionSingle: \"object-accordion\",\n objectAccordionMultiple: \"objects-accordion\",\n passthrough: \"passthrough\",\n radioButtons: \"radio-buttons\",\n refDialogSingle: \"ref-advanced-single\",\n refDialogMultiple: \"ref-advanced-multiple\",\n refAutocompleteSingle: \"ref-input\",\n refAutocompleteMultiple: \"ref-inputs\",\n refCheckboxes: \"ref-simple-multiple\",\n refRadioButtons: \"ref-simple-single\",\n dropdown: \"select-box\",\n tags: \"tags\",\n textInput: \"text-input\",\n textInputs: \"text-inputs\",\n file: \"file-input\",\n files: \"file-inputs\",\n uiSeparator: \"uiSeparator\",\n uiAlert: \"uiAlert\",\n uiTabs: \"uiTabs\"\n};\n\n/**\n * Resolves a camelCase renderer name to the kebab-case name used by the frontend.\n */\nfunction resolveRendererName(name: string): string {\n return rendererNameMap[name as keyof IFieldRendererRegistry] ?? name;\n}\n\n/**\n * Extracts renderer names valid for the given field type.\n * When TType is a broad `string`, all renderer names are returned.\n */\nexport type FieldRendererName<TType extends string = string> = string extends TType\n ? keyof IFieldRendererRegistry & string\n : {\n [K in keyof IFieldRendererRegistry]: TType extends IFieldRendererRegistry[K][\"fieldType\"]\n ? K\n : never;\n }[keyof IFieldRendererRegistry] &\n string;\n\nexport type FieldRendererSettings<TName extends string> = TName extends keyof IFieldRendererRegistry\n ? IFieldRendererRegistry[TName][\"settings\"]\n : Record<string, any> | undefined;\n\n/**\n * DataFieldBuilder class for data fields that produce CmsModelField instances.\n * Provides storageId, list, validation, renderer, and other data-field methods.\n */\nexport class DataFieldBuilder<TType extends string = string> extends BaseFieldBuilder<TType> {\n protected override config: FieldBuilderConfig;\n\n public constructor(type: TType, label?: string) {\n super(type, label);\n this.config = {\n label: label || \"\",\n validation: [],\n listValidation: [],\n list: false,\n predefinedValues: {\n enabled: false,\n values: []\n },\n help: null,\n placeholder: null,\n description: null,\n note: null,\n renderer: null,\n settings: {},\n tags: []\n };\n }\n\n placeholder(text: string): this {\n this.config.placeholder = text;\n return this;\n }\n\n storageId(id: string): this {\n // We do not allow developers to specify the field type!\n this.config._storageId = id.split(\"@\").pop();\n return this;\n }\n\n defaultValue(value: any): this {\n this.config.settings = { ...this.config.settings, defaultValue: value };\n return this;\n }\n\n list(): this {\n this.config.list = true;\n return this as this;\n }\n\n tags(tags: string[]): this {\n this.config.tags = tags;\n return this;\n }\n\n /**\n * List validators - these methods are available after calling list()\n */\n listMinLength(value: number, message?: string): this {\n return this.listValidation({\n name: \"minLength\",\n message: message || `At least ${value} item(s) required.`,\n settings: { value }\n });\n }\n\n listMaxLength(value: number, message?: string): this {\n return this.listValidation({\n name: \"maxLength\",\n message: message || `At most ${value} item(s) allowed.`,\n settings: { value }\n });\n }\n\n /**\n * Add a validation rule to this field.\n * This method is protected and should only be used by field-specific validator methods.\n * @internal\n */\n protected validation(validation: CmsModelFieldValidation): this {\n this.config.validation = this.config.validation || [];\n this.config.validation.push(validation);\n return this;\n }\n\n /**\n * Add a list validation rule to this field (for list fields).\n * This method is protected and should only be used by field-specific validator methods.\n * @internal\n */\n protected listValidation(validation: CmsModelFieldValidation): this {\n this.config.listValidation = this.config.listValidation || [];\n this.config.listValidation.push(validation);\n return this;\n }\n\n predefinedValues(values: CmsModelFieldPredefinedValues[\"values\"]): this {\n this.config.predefinedValues = {\n enabled: true,\n values\n };\n return this;\n }\n\n renderer<TName extends FieldRendererName<TType>>(\n name: TName,\n ...args: undefined extends FieldRendererSettings<TName>\n ? [settings?: FieldRendererSettings<TName>]\n : FieldRendererSettings<TName> extends undefined\n ? []\n : [settings: FieldRendererSettings<TName>]\n ): this {\n this.config.renderer = {\n name: resolveRendererName(name),\n settings: args[0] ?? null\n };\n return this;\n }\n\n settings(settings: Record<string, any>): this {\n this.config.settings = { ...this.config.settings, ...settings };\n return this;\n }\n\n /**\n * Build the final CmsModelField\n * @internal\n */\n build(): DataFieldBuildResult {\n const fieldId = this.config._fieldId || camelCase(this.config.label);\n const baseType = getBaseFieldType({\n type: this.type\n });\n const storageId = `${baseType}@${this.config._storageId ?? fieldId}`;\n\n return {\n type: \"data\",\n field: {\n id: fieldId,\n fieldId,\n storageId,\n type: this.type,\n label: this.config.label,\n validation: this.config.validation || [],\n listValidation: this.config.listValidation || [],\n list: this.config.list || false,\n predefinedValues: this.config.predefinedValues || {\n enabled: false,\n values: []\n },\n help: this.config.help || null,\n placeholder: this.config.placeholder || null,\n description: this.config.description || null,\n note: this.config.note || null,\n renderer: this.config.renderer || null,\n settings: this.config.settings || {},\n tags: this.config.tags || []\n }\n };\n }\n}\n"],"names":["rendererNameMap","resolveRendererName","name","DataFieldBuilder","BaseFieldBuilder","type","label","text","id","value","tags","message","validation","values","args","settings","fieldId","camelCase","baseType","getBaseFieldType","storageId"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"features/modelBuilder/fields/DataFieldBuilder.js","sources":["../../../../src/features/modelBuilder/fields/DataFieldBuilder.ts"],"sourcesContent":["import camelCase from \"lodash/camelCase.js\";\nimport type {\n CmsModelField,\n CmsModelFieldPredefinedValues,\n CmsModelFieldValidation\n} from \"~/types/index.js\";\nimport { getBaseFieldType } from \"~/utils/getBaseFieldType.js\";\nimport { BaseFieldBuilder, type DataFieldBuildResult } from \"./BaseFieldBuilder.js\";\n\nexport interface FieldBuilderConfig extends Omit<\n CmsModelField,\n \"id\" | \"fieldId\" | \"storageId\" | \"type\"\n> {\n _storageId?: string;\n _fieldId?: string;\n description?: string | null;\n note?: string | null;\n}\n\n/**\n * Augmentable renderer registry. Each entry maps a renderer name to its applicable field type(s) and settings.\n */\nexport interface IFieldRendererRegistry {\n switch: {\n fieldType: \"boolean\";\n settings: undefined;\n };\n checkboxes: {\n fieldType: \"text\" | \"number\";\n settings: undefined;\n };\n dateTimeInput: {\n fieldType: \"datetime\";\n settings: undefined;\n };\n dateTimeInputs: {\n fieldType: \"datetime\";\n settings?: {\n multiValue?: {\n addValueButtonLabel?: string;\n };\n };\n };\n dynamicZone: {\n fieldType: \"dynamicZone\";\n settings?: {\n open?: boolean;\n };\n };\n hidden: {\n fieldType: string;\n settings: undefined;\n };\n lexicalEditor: {\n fieldType: \"rich-text\";\n settings: undefined;\n };\n lexicalEditors: {\n fieldType: \"rich-text\";\n settings?: {\n multiValue?: {\n addValueButtonLabel?: string;\n };\n };\n };\n textarea: {\n fieldType: \"long-text\";\n settings: undefined;\n };\n textareas: {\n fieldType: \"long-text\";\n settings: {\n multiValue?: {\n addValueButtonLabel?: string;\n };\n };\n };\n numberInput: {\n fieldType: \"number\";\n settings: undefined;\n };\n numberInputs: {\n fieldType: \"number\";\n settings?: {\n multiValue?: {\n addValueButtonLabel?: string;\n };\n };\n };\n objectAccordionSingle: {\n fieldType: \"object\";\n settings?: {\n open?: boolean;\n };\n };\n objectAccordionMultiple: {\n fieldType: \"object\";\n settings?: {\n open?: boolean;\n multiValue?: {\n addValueButtonLabel?: string;\n };\n };\n };\n passthrough: {\n fieldType: string;\n settings: undefined;\n };\n radioButtons: {\n fieldType: \"text\" | \"number\";\n settings: undefined;\n };\n refDialogSingle: {\n fieldType: \"ref\";\n settings: undefined;\n };\n refDialogMultiple: {\n fieldType: \"ref\";\n settings?: {\n newItemPosition?: \"first\" | \"last\";\n };\n };\n refAutocompleteSingle: {\n fieldType: \"ref\";\n settings: undefined;\n };\n refAutocompleteMultiple: {\n fieldType: \"ref\";\n settings: undefined;\n };\n refCheckboxes: {\n fieldType: \"ref\";\n settings: undefined;\n };\n refRadioButtons: {\n fieldType: \"ref\";\n settings: undefined;\n };\n dropdown: {\n fieldType: \"text\" | \"number\";\n settings: undefined;\n };\n tags: {\n fieldType: \"text\";\n settings: undefined;\n };\n textInput: {\n fieldType: \"text\";\n settings: undefined;\n };\n textInputs: {\n fieldType: \"text\";\n settings?: {\n multiValue?: {\n addValueButtonLabel?: string;\n };\n };\n };\n file: {\n fieldType: \"file\";\n settings?: {\n imagesOnly?: boolean;\n };\n };\n files: {\n fieldType: \"file\";\n settings?: {\n imagesOnly?: boolean;\n };\n };\n uiSeparator: {\n fieldType: \"ui\";\n settings: undefined;\n };\n uiAlert: {\n fieldType: \"ui\";\n settings: {\n type: \"info\" | \"success\" | \"warning\" | \"danger\";\n };\n };\n uiTabs: {\n fieldType: \"ui\";\n settings: undefined;\n };\n}\n\n/**\n * Maps camelCase renderer names (used in the builder API) to the\n * kebab-case names expected by the frontend renderer registry.\n */\nconst rendererNameMap: Record<keyof IFieldRendererRegistry, string> = {\n switch: \"boolean-input\",\n checkboxes: \"checkboxes\",\n dateTimeInput: \"date-time-input\",\n dateTimeInputs: \"date-time-inputs\",\n dynamicZone: \"dynamicZone\",\n hidden: \"hidden\",\n lexicalEditor: \"lexical-text-input\",\n lexicalEditors: \"lexical-text-inputs\",\n textarea: \"long-text-text-area\",\n textareas: \"long-text-inputs\",\n numberInput: \"number-input\",\n numberInputs: \"number-inputs\",\n objectAccordionSingle: \"object-accordion\",\n objectAccordionMultiple: \"objects-accordion\",\n passthrough: \"passthrough\",\n radioButtons: \"radio-buttons\",\n refDialogSingle: \"ref-advanced-single\",\n refDialogMultiple: \"ref-advanced-multiple\",\n refAutocompleteSingle: \"ref-input\",\n refAutocompleteMultiple: \"ref-inputs\",\n refCheckboxes: \"ref-simple-multiple\",\n refRadioButtons: \"ref-simple-single\",\n dropdown: \"select-box\",\n tags: \"tags\",\n textInput: \"text-input\",\n textInputs: \"text-inputs\",\n file: \"file-input\",\n files: \"file-inputs\",\n uiSeparator: \"uiSeparator\",\n uiAlert: \"uiAlert\",\n uiTabs: \"uiTabs\"\n};\n\n/**\n * Resolves a camelCase renderer name to the kebab-case name used by the frontend.\n */\nfunction resolveRendererName(name: string): string {\n return rendererNameMap[name as keyof IFieldRendererRegistry] ?? name;\n}\n\n/**\n * Extracts renderer names valid for the given field type.\n * When TType is a broad `string`, all renderer names are returned.\n */\nexport type FieldRendererName<TType extends string = string> = string extends TType\n ? keyof IFieldRendererRegistry & string\n : {\n [K in keyof IFieldRendererRegistry]: TType extends IFieldRendererRegistry[K][\"fieldType\"]\n ? K\n : never;\n }[keyof IFieldRendererRegistry] &\n string;\n\nexport type FieldRendererSettings<TName extends string> = TName extends keyof IFieldRendererRegistry\n ? IFieldRendererRegistry[TName][\"settings\"]\n : Record<string, any> | undefined;\n\n/**\n * DataFieldBuilder class for data fields that produce CmsModelField instances.\n * Provides storageId, list, validation, renderer, and other data-field methods.\n */\nexport class DataFieldBuilder<TType extends string = string> extends BaseFieldBuilder<TType> {\n protected override config: FieldBuilderConfig;\n\n public constructor(type: TType, label?: string) {\n super(type, label);\n this.config = {\n label: label || \"\",\n validation: [],\n listValidation: [],\n list: false,\n predefinedValues: {\n enabled: false,\n values: []\n },\n help: null,\n placeholder: null,\n description: null,\n note: null,\n renderer: null,\n settings: {},\n tags: []\n };\n }\n\n placeholder(text: string): this {\n this.config.placeholder = text;\n return this;\n }\n\n storageId(id: string): this {\n // We do not allow developers to specify the field type!\n this.config._storageId = id.split(\"@\").pop();\n return this;\n }\n\n defaultValue(value: any): this {\n this.config.settings = { ...this.config.settings, defaultValue: value };\n return this;\n }\n\n list(): this {\n this.config.list = true;\n return this as this;\n }\n\n tags(tags: string[]): this {\n this.config.tags = tags;\n return this;\n }\n\n /**\n * List validators - these methods are available after calling list()\n */\n listMinLength(value: number, message?: string): this {\n return this.listValidation({\n name: \"minLength\",\n message: message || `At least ${value} item(s) required.`,\n settings: { value }\n });\n }\n\n listMaxLength(value: number, message?: string): this {\n return this.listValidation({\n name: \"maxLength\",\n message: message || `At most ${value} item(s) allowed.`,\n settings: { value }\n });\n }\n\n /**\n * Add a validation rule to this field.\n * This method is protected and should only be used by field-specific validator methods.\n * @internal\n */\n protected validation(validation: CmsModelFieldValidation): this {\n this.config.validation = this.config.validation || [];\n this.config.validation.push(validation);\n return this;\n }\n\n /**\n * Add a list validation rule to this field (for list fields).\n * This method is protected and should only be used by field-specific validator methods.\n * @internal\n */\n protected listValidation(validation: CmsModelFieldValidation): this {\n this.config.listValidation = this.config.listValidation || [];\n this.config.listValidation.push(validation);\n return this;\n }\n\n predefinedValues(values: CmsModelFieldPredefinedValues[\"values\"]): this {\n this.config.predefinedValues = {\n enabled: true,\n values\n };\n return this;\n }\n\n renderer<TName extends FieldRendererName<TType>>(\n name: TName,\n ...args: undefined extends FieldRendererSettings<TName>\n ? [settings?: FieldRendererSettings<TName>]\n : FieldRendererSettings<TName> extends undefined\n ? []\n : [settings: FieldRendererSettings<TName>]\n ): this {\n this.config.renderer = {\n name: resolveRendererName(name),\n settings: args[0] ?? null\n };\n return this;\n }\n\n settings(settings: Record<string, any>): this {\n this.config.settings = { ...this.config.settings, ...settings };\n return this;\n }\n\n /**\n * Build the final CmsModelField\n * @internal\n */\n build(): DataFieldBuildResult {\n const fieldId = this.config._fieldId || camelCase(this.config.label);\n const baseType = getBaseFieldType({\n type: this.type\n });\n const storageId = `${baseType}@${this.config._storageId ?? fieldId}`;\n\n return {\n type: \"data\",\n field: {\n id: fieldId,\n fieldId,\n storageId,\n type: this.getFieldType(),\n label: this.config.label,\n validation: this.config.validation || [],\n listValidation: this.config.listValidation || [],\n list: this.config.list || false,\n predefinedValues: this.config.predefinedValues || {\n enabled: false,\n values: []\n },\n help: this.config.help || null,\n placeholder: this.config.placeholder || null,\n description: this.config.description || null,\n note: this.config.note || null,\n renderer: this.config.renderer || null,\n settings: this.config.settings || {},\n tags: this.config.tags || []\n }\n };\n }\n\n private getFieldType(): string {\n if (!this.subType?.length) {\n return this.type;\n }\n return `${this.type}:${this.subType}`;\n }\n}\n"],"names":["rendererNameMap","resolveRendererName","name","DataFieldBuilder","BaseFieldBuilder","type","label","text","id","value","tags","message","validation","values","args","settings","fieldId","camelCase","baseType","getBaseFieldType","storageId"],"mappings":"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"}
|
|
@@ -2,6 +2,7 @@ import { DataFieldBuilder } from "./FieldBuilder.js";
|
|
|
2
2
|
import { type IFieldTypeFactory } from "./abstractions.js";
|
|
3
3
|
import type { FieldTypeValidator } from "./fieldTypeValidator.js";
|
|
4
4
|
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;
|
|
5
6
|
}
|
|
6
7
|
declare module "../abstractions.js" {
|
|
7
8
|
interface IFieldBuilderRegistry {
|
|
@@ -114,6 +114,13 @@ class TextFieldBuilder extends DataFieldBuilder {
|
|
|
114
114
|
settings: {}
|
|
115
115
|
});
|
|
116
116
|
}
|
|
117
|
+
compressed() {
|
|
118
|
+
this.setSubType("compressed");
|
|
119
|
+
this.settings({
|
|
120
|
+
disableFullTextSearch: true
|
|
121
|
+
});
|
|
122
|
+
return this;
|
|
123
|
+
}
|
|
117
124
|
}
|
|
118
125
|
class TextFieldTypeFactory {
|
|
119
126
|
create() {
|
|
@@ -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\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\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":";;;
|
|
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"}
|
|
@@ -3,6 +3,7 @@ import { StorageTransform } from "../../features/storage/abstractions/StorageTra
|
|
|
3
3
|
import type { CmsModelField } from "../../types/index.js";
|
|
4
4
|
declare class StorageTransformRegistryImpl implements StorageTransformRegistryAbstraction.Interface {
|
|
5
5
|
private readonly transforms;
|
|
6
|
+
private readonly cache;
|
|
6
7
|
constructor(transforms: StorageTransform.Interface[]);
|
|
7
8
|
get<T = any, R = any, F extends CmsModelField = CmsModelField>(fieldType: string): StorageTransform.Interface<T, R, F> | undefined;
|
|
8
9
|
getAll(): StorageTransform.Interface[];
|
|
@@ -4,12 +4,17 @@ import { getBaseFieldType } from "../../utils/getBaseFieldType.js";
|
|
|
4
4
|
class StorageTransformRegistryImpl {
|
|
5
5
|
constructor(transforms){
|
|
6
6
|
this.transforms = transforms;
|
|
7
|
+
this.cache = new Map();
|
|
7
8
|
}
|
|
8
9
|
get(fieldType) {
|
|
10
|
+
if (this.cache.has(fieldType)) return this.cache.get(fieldType);
|
|
11
|
+
let transform = this.transforms.find((item)=>item.fieldType === fieldType);
|
|
9
12
|
const baseType = getBaseFieldType({
|
|
10
13
|
type: fieldType
|
|
11
14
|
});
|
|
12
|
-
|
|
15
|
+
if (!transform && baseType !== fieldType) transform = this.transforms.find((item)=>item.fieldType === baseType);
|
|
16
|
+
this.cache.set(fieldType, transform);
|
|
17
|
+
return transform;
|
|
13
18
|
}
|
|
14
19
|
getAll() {
|
|
15
20
|
return this.transforms;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"features/storage/StorageTransformRegistry.js","sources":["../../../src/features/storage/StorageTransformRegistry.ts"],"sourcesContent":["import { StorageTransformRegistry as StorageTransformRegistryAbstraction } from \"./abstractions/StorageTransformRegistry.js\";\nimport { StorageTransform } from \"~/features/storage/abstractions/StorageTransform.js\";\nimport type { CmsModelField } from \"~/types/index.js\";\nimport { getBaseFieldType } from \"~/utils/getBaseFieldType.js\";\n\nclass StorageTransformRegistryImpl implements StorageTransformRegistryAbstraction.Interface {\n public constructor(private readonly transforms: StorageTransform.Interface[]) {}\n\n public get<T = any, R = any, F extends CmsModelField = CmsModelField>(\n fieldType: string\n ): StorageTransform.Interface<T, R, F> | undefined {\n const baseType = getBaseFieldType({\n type: fieldType\n });\n
|
|
1
|
+
{"version":3,"file":"features/storage/StorageTransformRegistry.js","sources":["../../../src/features/storage/StorageTransformRegistry.ts"],"sourcesContent":["import { StorageTransformRegistry as StorageTransformRegistryAbstraction } from \"./abstractions/StorageTransformRegistry.js\";\nimport { StorageTransform } from \"~/features/storage/abstractions/StorageTransform.js\";\nimport type { CmsModelField } from \"~/types/index.js\";\nimport { getBaseFieldType } from \"~/utils/getBaseFieldType.js\";\n\nclass StorageTransformRegistryImpl implements StorageTransformRegistryAbstraction.Interface {\n private readonly cache: Map<string, StorageTransform.Interface | undefined> = new Map();\n\n public constructor(private readonly transforms: StorageTransform.Interface[]) {}\n\n public get<T = any, R = any, F extends CmsModelField = CmsModelField>(\n fieldType: string\n ): StorageTransform.Interface<T, R, F> | undefined {\n if (this.cache.has(fieldType)) {\n return this.cache.get(fieldType) as StorageTransform.Interface<T, R, F>;\n }\n\n let transform = this.transforms.find(\n (item): item is StorageTransform.Interface<T, R, F> => {\n return item.fieldType === fieldType;\n }\n );\n\n const baseType = getBaseFieldType({\n type: fieldType\n });\n if (!transform && baseType !== fieldType) {\n transform = this.transforms.find(\n (item): item is StorageTransform.Interface<T, R, F> => {\n return item.fieldType === baseType;\n }\n );\n }\n this.cache.set(fieldType, transform);\n return transform;\n }\n\n public getAll(): StorageTransform.Interface[] {\n return this.transforms;\n }\n}\n\nexport const StorageTransformRegistry = StorageTransformRegistryAbstraction.createImplementation({\n implementation: StorageTransformRegistryImpl,\n dependencies: [[StorageTransform, { multiple: true }]]\n});\n"],"names":["StorageTransformRegistryImpl","transforms","Map","fieldType","transform","item","baseType","getBaseFieldType","StorageTransformRegistry","StorageTransformRegistryAbstraction","StorageTransform"],"mappings":";;;AAKA,MAAMA;IAGF,YAAoCC,UAAwC,CAAE;aAA1CA,UAAU,GAAVA;aAFnB,KAAK,GAAwD,IAAIC;IAEH;IAExE,IACHC,SAAiB,EAC8B;QAC/C,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAACA,YACf,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAACA;QAG1B,IAAIC,YAAY,IAAI,CAAC,UAAU,CAAC,IAAI,CAChC,CAACC,OACUA,KAAK,SAAS,KAAKF;QAIlC,MAAMG,WAAWC,iBAAiB;YAC9B,MAAMJ;QACV;QACA,IAAI,CAACC,aAAaE,aAAaH,WAC3BC,YAAY,IAAI,CAAC,UAAU,CAAC,IAAI,CAC5B,CAACC,OACUA,KAAK,SAAS,KAAKC;QAItC,IAAI,CAAC,KAAK,CAAC,GAAG,CAACH,WAAWC;QAC1B,OAAOA;IACX;IAEO,SAAuC;QAC1C,OAAO,IAAI,CAAC,UAAU;IAC1B;AACJ;AAEO,MAAMI,oDAA2BC,yBAAAA,oBAAwD,CAAC;IAC7F,gBAAgBT;IAChB,cAAc;QAAC;YAACU;YAAkB;gBAAE,UAAU;YAAK;SAAE;KAAC;AAC1D"}
|
|
@@ -7,17 +7,19 @@ import { DynamicZoneStorageTransform } from "./fields/DynamicZoneStorageTransfor
|
|
|
7
7
|
import { LongTextStorageTransform } from "./fields/LongTextStorageTransform.js";
|
|
8
8
|
import { ObjectStorageTransform } from "./fields/ObjectStorageTransform.js";
|
|
9
9
|
import { RichTextStorageTransform } from "./fields/RichTextStorageTransform.js";
|
|
10
|
+
import { CompressedTextStorageTransform } from "./fields/CompressedTextStorageTransform.js";
|
|
10
11
|
const StorageFeature = createFeature({
|
|
11
12
|
name: "Cms/StorageFeature",
|
|
12
13
|
register: (container)=>{
|
|
13
|
-
container.register(DateStorageTransform);
|
|
14
|
-
container.register(DefaultStorageTransform);
|
|
15
|
-
container.register(DynamicZoneStorageTransform);
|
|
16
|
-
container.register(JsonStorageTransform);
|
|
17
|
-
container.register(LongTextStorageTransform);
|
|
18
|
-
container.register(ObjectStorageTransform);
|
|
19
|
-
container.register(RichTextStorageTransform);
|
|
20
|
-
container.register(
|
|
14
|
+
container.register(DateStorageTransform).inSingletonScope();
|
|
15
|
+
container.register(DefaultStorageTransform).inSingletonScope();
|
|
16
|
+
container.register(DynamicZoneStorageTransform).inSingletonScope();
|
|
17
|
+
container.register(JsonStorageTransform).inSingletonScope();
|
|
18
|
+
container.register(LongTextStorageTransform).inSingletonScope();
|
|
19
|
+
container.register(ObjectStorageTransform).inSingletonScope();
|
|
20
|
+
container.register(RichTextStorageTransform).inSingletonScope();
|
|
21
|
+
container.register(CompressedTextStorageTransform).inSingletonScope();
|
|
22
|
+
container.register(StorageTransformRegistry).inSingletonScope();
|
|
21
23
|
}
|
|
22
24
|
});
|
|
23
25
|
export { StorageFeature };
|
|
@@ -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\";\n\nexport const StorageFeature = createFeature({\n name: \"Cms/StorageFeature\",\n register: container => {\n container.register(DateStorageTransform);\n container.register(DefaultStorageTransform);\n container.register(DynamicZoneStorageTransform);\n container.register(JsonStorageTransform);\n container.register(LongTextStorageTransform);\n container.register(ObjectStorageTransform);\n container.register(RichTextStorageTransform);\n container.register(StorageTransformRegistry);\n }\n});\n"],"names":["StorageFeature","createFeature","container","DateStorageTransform","DefaultStorageTransform","DynamicZoneStorageTransform","JsonStorageTransform","LongTextStorageTransform","ObjectStorageTransform","RichTextStorageTransform","StorageTransformRegistry"],"mappings":"
|
|
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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { StorageTransform } from "../abstractions/StorageTransform.js";
|
|
2
|
+
import { CompressionHandler } from "@webiny/utils/exports/api.js";
|
|
3
|
+
declare class CompressedTextStorageTransformImpl implements StorageTransform.Interface<string, string> {
|
|
4
|
+
private readonly compressionHandler;
|
|
5
|
+
readonly fieldType = "text:compressed";
|
|
6
|
+
constructor(compressionHandler: CompressionHandler.Interface);
|
|
7
|
+
fromStorage(params: StorageTransform.FromStorageParams<unknown, string>): StorageTransform.FromStorageResponse<string>;
|
|
8
|
+
toStorage(params: StorageTransform.ToStorageParams<unknown, string>): StorageTransform.ToStorageResponse<string>;
|
|
9
|
+
}
|
|
10
|
+
export declare const CompressedTextStorageTransform: typeof CompressedTextStorageTransformImpl & {
|
|
11
|
+
__abstraction: import("@webiny/di").Abstraction<import("../abstractions/StorageTransform.js").IStorageTransform<any, any, any>>;
|
|
12
|
+
};
|
|
13
|
+
export {};
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { StorageTransform } from "../abstractions/StorageTransform.js";
|
|
2
|
+
import { CompressionHandler } from "@webiny/utils/exports/api.js";
|
|
3
|
+
class CompressedTextStorageTransformImpl {
|
|
4
|
+
constructor(compressionHandler){
|
|
5
|
+
this.compressionHandler = compressionHandler;
|
|
6
|
+
this.fieldType = "text:compressed";
|
|
7
|
+
}
|
|
8
|
+
async fromStorage(params) {
|
|
9
|
+
const { value } = params;
|
|
10
|
+
if ("string" != typeof value) return value;
|
|
11
|
+
if (!value.includes("compression")) return value;
|
|
12
|
+
try {
|
|
13
|
+
const parsed = JSON.parse(value);
|
|
14
|
+
return await this.compressionHandler.decompress(parsed);
|
|
15
|
+
} catch {
|
|
16
|
+
return value;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
async toStorage(params) {
|
|
20
|
+
const { value } = params;
|
|
21
|
+
if ("string" != typeof value) return value;
|
|
22
|
+
try {
|
|
23
|
+
return JSON.stringify(await this.compressionHandler.compress(value));
|
|
24
|
+
} catch {
|
|
25
|
+
return value;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
const CompressedTextStorageTransform = StorageTransform.createImplementation({
|
|
30
|
+
implementation: CompressedTextStorageTransformImpl,
|
|
31
|
+
dependencies: [
|
|
32
|
+
CompressionHandler
|
|
33
|
+
]
|
|
34
|
+
});
|
|
35
|
+
export { CompressedTextStorageTransform };
|
|
36
|
+
|
|
37
|
+
//# sourceMappingURL=CompressedTextStorageTransform.js.map
|
|
@@ -0,0 +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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webiny/api-headless-cms",
|
|
3
|
-
"version": "6.4.0-beta.
|
|
3
|
+
"version": "6.4.0-beta.2",
|
|
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.
|
|
29
|
-
"@webiny/api-core": "6.4.0-beta.
|
|
30
|
-
"@webiny/di": "0.
|
|
31
|
-
"@webiny/error": "6.4.0-beta.
|
|
32
|
-
"@webiny/feature": "6.4.0-beta.
|
|
33
|
-
"@webiny/handler": "6.4.0-beta.
|
|
34
|
-
"@webiny/handler-aws": "6.4.0-beta.
|
|
35
|
-
"@webiny/handler-db": "6.4.0-beta.
|
|
36
|
-
"@webiny/handler-graphql": "6.4.0-beta.
|
|
37
|
-
"@webiny/plugins": "6.4.0-beta.
|
|
38
|
-
"@webiny/project": "6.4.0-beta.
|
|
39
|
-
"@webiny/utils": "6.4.0-beta.
|
|
40
|
-
"@webiny/validation": "6.4.0-beta.
|
|
28
|
+
"@webiny/api": "6.4.0-beta.2",
|
|
29
|
+
"@webiny/api-core": "6.4.0-beta.2",
|
|
30
|
+
"@webiny/di": "1.0.1",
|
|
31
|
+
"@webiny/error": "6.4.0-beta.2",
|
|
32
|
+
"@webiny/feature": "6.4.0-beta.2",
|
|
33
|
+
"@webiny/handler": "6.4.0-beta.2",
|
|
34
|
+
"@webiny/handler-aws": "6.4.0-beta.2",
|
|
35
|
+
"@webiny/handler-db": "6.4.0-beta.2",
|
|
36
|
+
"@webiny/handler-graphql": "6.4.0-beta.2",
|
|
37
|
+
"@webiny/plugins": "6.4.0-beta.2",
|
|
38
|
+
"@webiny/project": "6.4.0-beta.2",
|
|
39
|
+
"@webiny/utils": "6.4.0-beta.2",
|
|
40
|
+
"@webiny/validation": "6.4.0-beta.2",
|
|
41
41
|
"dot-prop-immutable": "2.1.1",
|
|
42
42
|
"graphql": "16.14.0",
|
|
43
43
|
"graphql-tag": "2.12.6",
|
|
@@ -51,13 +51,13 @@
|
|
|
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.
|
|
55
|
-
"@webiny/build-tools": "6.4.0-beta.
|
|
56
|
-
"@webiny/db-dynamodb": "6.4.0-beta.
|
|
54
|
+
"@webiny/aws-sdk": "6.4.0-beta.2",
|
|
55
|
+
"@webiny/build-tools": "6.4.0-beta.2",
|
|
56
|
+
"@webiny/db-dynamodb": "6.4.0-beta.2",
|
|
57
57
|
"@webiny/handler-db": "0.0.0",
|
|
58
|
-
"@webiny/project-utils": "6.4.0-beta.
|
|
59
|
-
"@webiny/sdk": "6.4.0-beta.
|
|
60
|
-
"@webiny/wcp": "6.4.0-beta.
|
|
58
|
+
"@webiny/project-utils": "6.4.0-beta.2",
|
|
59
|
+
"@webiny/sdk": "6.4.0-beta.2",
|
|
60
|
+
"@webiny/wcp": "6.4.0-beta.2",
|
|
61
61
|
"apollo-graphql": "0.9.7",
|
|
62
62
|
"graphql": "16.14.0",
|
|
63
63
|
"oxfmt": "0.49.0",
|
|
@@ -70,5 +70,5 @@
|
|
|
70
70
|
"access": "public",
|
|
71
71
|
"directory": "dist"
|
|
72
72
|
},
|
|
73
|
-
"gitHead": "
|
|
73
|
+
"gitHead": "872f9f50baa1ff6915a5f338216f84bf0b6dfd24"
|
|
74
74
|
}
|