@webiny/api-headless-cms 5.42.0-beta.4 → 5.42.1-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +21 -21
- package/plugins/CmsGroupPlugin.d.ts +4 -0
- package/plugins/CmsGroupPlugin.js +9 -1
- package/plugins/CmsGroupPlugin.js.map +1 -1
- package/plugins/CmsModelPlugin.d.ts +16 -0
- package/plugins/CmsModelPlugin.js +50 -1
- package/plugins/CmsModelPlugin.js.map +1 -1
- package/plugins/StorageTransformPlugin.d.ts +1 -0
- package/plugins/StorageTransformPlugin.js +5 -1
- package/plugins/StorageTransformPlugin.js.map +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webiny/api-headless-cms",
|
|
3
|
-
"version": "5.42.
|
|
3
|
+
"version": "5.42.1-beta.0",
|
|
4
4
|
"main": "index.js",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"cms:base"
|
|
@@ -21,20 +21,20 @@
|
|
|
21
21
|
"@babel/code-frame": "7.26.2",
|
|
22
22
|
"@graphql-tools/merge": "9.0.8",
|
|
23
23
|
"@graphql-tools/schema": "10.0.7",
|
|
24
|
-
"@webiny/api": "5.42.
|
|
25
|
-
"@webiny/api-i18n": "5.42.
|
|
26
|
-
"@webiny/api-security": "5.42.
|
|
27
|
-
"@webiny/api-tenancy": "5.42.
|
|
28
|
-
"@webiny/error": "5.42.
|
|
29
|
-
"@webiny/handler": "5.42.
|
|
30
|
-
"@webiny/handler-aws": "5.42.
|
|
31
|
-
"@webiny/handler-db": "5.42.
|
|
32
|
-
"@webiny/handler-graphql": "5.42.
|
|
33
|
-
"@webiny/lexical-converter": "5.42.
|
|
34
|
-
"@webiny/plugins": "5.42.
|
|
35
|
-
"@webiny/pubsub": "5.42.
|
|
36
|
-
"@webiny/utils": "5.42.
|
|
37
|
-
"@webiny/validation": "5.42.
|
|
24
|
+
"@webiny/api": "5.42.1-beta.0",
|
|
25
|
+
"@webiny/api-i18n": "5.42.1-beta.0",
|
|
26
|
+
"@webiny/api-security": "5.42.1-beta.0",
|
|
27
|
+
"@webiny/api-tenancy": "5.42.1-beta.0",
|
|
28
|
+
"@webiny/error": "5.42.1-beta.0",
|
|
29
|
+
"@webiny/handler": "5.42.1-beta.0",
|
|
30
|
+
"@webiny/handler-aws": "5.42.1-beta.0",
|
|
31
|
+
"@webiny/handler-db": "5.42.1-beta.0",
|
|
32
|
+
"@webiny/handler-graphql": "5.42.1-beta.0",
|
|
33
|
+
"@webiny/lexical-converter": "5.42.1-beta.0",
|
|
34
|
+
"@webiny/plugins": "5.42.1-beta.0",
|
|
35
|
+
"@webiny/pubsub": "5.42.1-beta.0",
|
|
36
|
+
"@webiny/utils": "5.42.1-beta.0",
|
|
37
|
+
"@webiny/validation": "5.42.1-beta.0",
|
|
38
38
|
"dot-prop": "6.0.1",
|
|
39
39
|
"graphql": "15.9.0",
|
|
40
40
|
"graphql-tag": "2.12.6",
|
|
@@ -49,12 +49,12 @@
|
|
|
49
49
|
},
|
|
50
50
|
"devDependencies": {
|
|
51
51
|
"@types/babel__code-frame": "7.0.6",
|
|
52
|
-
"@webiny/api-wcp": "5.42.
|
|
53
|
-
"@webiny/aws-sdk": "5.42.
|
|
54
|
-
"@webiny/cli": "5.42.
|
|
55
|
-
"@webiny/db-dynamodb": "5.42.
|
|
52
|
+
"@webiny/api-wcp": "5.42.1-beta.0",
|
|
53
|
+
"@webiny/aws-sdk": "5.42.1-beta.0",
|
|
54
|
+
"@webiny/cli": "5.42.1-beta.0",
|
|
55
|
+
"@webiny/db-dynamodb": "5.42.1-beta.0",
|
|
56
56
|
"@webiny/handler-db": "0.0.0",
|
|
57
|
-
"@webiny/project-utils": "5.42.
|
|
57
|
+
"@webiny/project-utils": "5.42.1-beta.0",
|
|
58
58
|
"apollo-graphql": "0.9.7",
|
|
59
59
|
"graphql": "15.9.0",
|
|
60
60
|
"jest": "29.7.0",
|
|
@@ -72,5 +72,5 @@
|
|
|
72
72
|
"build": "yarn webiny run build",
|
|
73
73
|
"watch": "yarn webiny run watch"
|
|
74
74
|
},
|
|
75
|
-
"gitHead": "
|
|
75
|
+
"gitHead": "16fb9009f44f242bbc8ba0e02c1d49b1f7ab935b"
|
|
76
76
|
}
|
|
@@ -17,4 +17,8 @@ export declare class CmsGroupPlugin extends Plugin {
|
|
|
17
17
|
* @deprecated Use `createCmsGroupPlugin` instead.
|
|
18
18
|
*/
|
|
19
19
|
export declare const createCmsGroup: (group: CmsGroup) => CmsGroupPlugin;
|
|
20
|
+
/**
|
|
21
|
+
* @deprecated Use `createModelGroupPlugin` instead.
|
|
22
|
+
*/
|
|
20
23
|
export declare const createCmsGroupPlugin: (group: CmsGroup) => CmsGroupPlugin;
|
|
24
|
+
export declare const createModelGroupPlugin: (group: CmsGroup) => CmsGroupPlugin;
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.createCmsGroupPlugin = exports.createCmsGroup = exports.CmsGroupPlugin = void 0;
|
|
6
|
+
exports.createModelGroupPlugin = exports.createCmsGroupPlugin = exports.createCmsGroup = exports.CmsGroupPlugin = void 0;
|
|
7
7
|
var _plugins = require("@webiny/plugins");
|
|
8
8
|
class CmsGroupPlugin extends _plugins.Plugin {
|
|
9
9
|
static type = "cms-content-model-group";
|
|
@@ -23,10 +23,18 @@ exports.CmsGroupPlugin = CmsGroupPlugin;
|
|
|
23
23
|
const createCmsGroup = group => {
|
|
24
24
|
return new CmsGroupPlugin(group);
|
|
25
25
|
};
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* @deprecated Use `createModelGroupPlugin` instead.
|
|
29
|
+
*/
|
|
26
30
|
exports.createCmsGroup = createCmsGroup;
|
|
27
31
|
const createCmsGroupPlugin = group => {
|
|
28
32
|
return new CmsGroupPlugin(group);
|
|
29
33
|
};
|
|
30
34
|
exports.createCmsGroupPlugin = createCmsGroupPlugin;
|
|
35
|
+
const createModelGroupPlugin = group => {
|
|
36
|
+
return new CmsGroupPlugin(group);
|
|
37
|
+
};
|
|
38
|
+
exports.createModelGroupPlugin = createModelGroupPlugin;
|
|
31
39
|
|
|
32
40
|
//# sourceMappingURL=CmsGroupPlugin.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_plugins","require","CmsGroupPlugin","Plugin","type","constructor","contentModelGroup","isPlugin","exports","createCmsGroup","group","createCmsGroupPlugin"],"sources":["CmsGroupPlugin.ts"],"sourcesContent":["import { Plugin } from \"@webiny/plugins\";\nimport { CmsGroup as BaseCmsGroup } from \"~/types\";\n\nexport interface CmsGroupInput\n extends Omit<BaseCmsGroup, \"locale\" | \"tenant\" | \"webinyVersion\" | \"isPlugin\"> {\n tenant?: string;\n locale?: string;\n}\n\nexport interface CmsGroup extends Omit<BaseCmsGroup, \"locale\" | \"tenant\" | \"webinyVersion\"> {\n tenant?: string;\n locale?: string;\n}\n\nexport class CmsGroupPlugin extends Plugin {\n public static override readonly type: string = \"cms-content-model-group\";\n public readonly contentModelGroup: CmsGroup;\n\n constructor(contentModelGroup: CmsGroupInput) {\n super();\n this.contentModelGroup = {\n ...contentModelGroup,\n isPlugin: true\n };\n }\n}\n\n/**\n * @deprecated Use `createCmsGroupPlugin` instead.\n */\nexport const createCmsGroup = (group: CmsGroup): CmsGroupPlugin => {\n return new CmsGroupPlugin(group);\n};\n\nexport const createCmsGroupPlugin = (group: CmsGroup): CmsGroupPlugin => {\n return new CmsGroupPlugin(group);\n};\n"],"mappings":";;;;;;AAAA,IAAAA,QAAA,GAAAC,OAAA;AAcO,MAAMC,cAAc,SAASC,eAAM,CAAC;EACvC,OAAgCC,IAAI,GAAW,yBAAyB;EAGxEC,WAAWA,CAACC,iBAAgC,EAAE;IAC1C,KAAK,CAAC,CAAC;IACP,IAAI,CAACA,iBAAiB,GAAG;MACrB,GAAGA,iBAAiB;MACpBC,QAAQ,EAAE;IACd,CAAC;EACL;AACJ;;AAEA;AACA;AACA;AAFAC,OAAA,CAAAN,cAAA,GAAAA,cAAA;AAGO,MAAMO,cAAc,GAAIC,KAAe,IAAqB;EAC/D,OAAO,IAAIR,cAAc,CAACQ,KAAK,CAAC;AACpC,CAAC;
|
|
1
|
+
{"version":3,"names":["_plugins","require","CmsGroupPlugin","Plugin","type","constructor","contentModelGroup","isPlugin","exports","createCmsGroup","group","createCmsGroupPlugin","createModelGroupPlugin"],"sources":["CmsGroupPlugin.ts"],"sourcesContent":["import { Plugin } from \"@webiny/plugins\";\nimport { CmsGroup as BaseCmsGroup } from \"~/types\";\n\nexport interface CmsGroupInput\n extends Omit<BaseCmsGroup, \"locale\" | \"tenant\" | \"webinyVersion\" | \"isPlugin\"> {\n tenant?: string;\n locale?: string;\n}\n\nexport interface CmsGroup extends Omit<BaseCmsGroup, \"locale\" | \"tenant\" | \"webinyVersion\"> {\n tenant?: string;\n locale?: string;\n}\n\nexport class CmsGroupPlugin extends Plugin {\n public static override readonly type: string = \"cms-content-model-group\";\n public readonly contentModelGroup: CmsGroup;\n\n constructor(contentModelGroup: CmsGroupInput) {\n super();\n this.contentModelGroup = {\n ...contentModelGroup,\n isPlugin: true\n };\n }\n}\n\n/**\n * @deprecated Use `createCmsGroupPlugin` instead.\n */\nexport const createCmsGroup = (group: CmsGroup): CmsGroupPlugin => {\n return new CmsGroupPlugin(group);\n};\n\n/**\n * @deprecated Use `createModelGroupPlugin` instead.\n */\nexport const createCmsGroupPlugin = (group: CmsGroup): CmsGroupPlugin => {\n return new CmsGroupPlugin(group);\n};\n\nexport const createModelGroupPlugin = (group: CmsGroup): CmsGroupPlugin => {\n return new CmsGroupPlugin(group);\n};\n"],"mappings":";;;;;;AAAA,IAAAA,QAAA,GAAAC,OAAA;AAcO,MAAMC,cAAc,SAASC,eAAM,CAAC;EACvC,OAAgCC,IAAI,GAAW,yBAAyB;EAGxEC,WAAWA,CAACC,iBAAgC,EAAE;IAC1C,KAAK,CAAC,CAAC;IACP,IAAI,CAACA,iBAAiB,GAAG;MACrB,GAAGA,iBAAiB;MACpBC,QAAQ,EAAE;IACd,CAAC;EACL;AACJ;;AAEA;AACA;AACA;AAFAC,OAAA,CAAAN,cAAA,GAAAA,cAAA;AAGO,MAAMO,cAAc,GAAIC,KAAe,IAAqB;EAC/D,OAAO,IAAIR,cAAc,CAACQ,KAAK,CAAC;AACpC,CAAC;;AAED;AACA;AACA;AAFAF,OAAA,CAAAC,cAAA,GAAAA,cAAA;AAGO,MAAME,oBAAoB,GAAID,KAAe,IAAqB;EACrE,OAAO,IAAIR,cAAc,CAACQ,KAAK,CAAC;AACpC,CAAC;AAACF,OAAA,CAAAG,oBAAA,GAAAA,oBAAA;AAEK,MAAMC,sBAAsB,GAAIF,KAAe,IAAqB;EACvE,OAAO,IAAIR,cAAc,CAACQ,KAAK,CAAC;AACpC,CAAC;AAACF,OAAA,CAAAI,sBAAA,GAAAA,sBAAA","ignoreList":[]}
|
|
@@ -62,8 +62,24 @@ export declare class CmsModelPlugin extends Plugin {
|
|
|
62
62
|
* @deprecated Use `createCmsModelPlugin` instead.
|
|
63
63
|
*/
|
|
64
64
|
export declare const createCmsModel: (model: CmsModelInput, options?: CmsModelPluginOptions) => CmsModelPlugin;
|
|
65
|
+
/**
|
|
66
|
+
* @deprecated Use `createModelPlugin` instead.
|
|
67
|
+
*/
|
|
65
68
|
export declare const createCmsModelPlugin: (model: CmsModelInput, options?: CmsModelPluginOptions) => CmsModelPlugin;
|
|
69
|
+
export declare const createModelPlugin: (model: CmsModelInput, options?: CmsModelPluginOptions) => CmsModelPlugin;
|
|
70
|
+
/**
|
|
71
|
+
* @deprecated Use `createPrivateModelPlugin` instead.
|
|
72
|
+
*/
|
|
66
73
|
export declare const createPrivateModel: (input: Omit<CmsPrivateModelFull, "group" | "isPrivate">) => CmsPrivateModelFull;
|
|
74
|
+
export declare const createPrivateModelPlugin: (input: Omit<CmsPrivateModelFull, "group" | "isPrivate">) => CmsModelPlugin;
|
|
75
|
+
/**
|
|
76
|
+
* @deprecated Use `createSingleEntryModelPlugin` instead.
|
|
77
|
+
*/
|
|
67
78
|
export declare const createSingleEntryModel: (input: CmsModelInput, options?: CmsModelPluginOptions) => CmsModelPlugin;
|
|
79
|
+
export declare const createSingleEntryModelPlugin: (input: CmsModelInput, options?: CmsModelPluginOptions) => CmsModelPlugin;
|
|
80
|
+
/**
|
|
81
|
+
* @deprecated Use `createSingleEntryPrivateModelPlugin` instead.
|
|
82
|
+
*/
|
|
68
83
|
export declare const createSingleEntryPrivateModel: (input: Omit<CmsPrivateModelFull, "group" | "isPrivate">) => CmsPrivateModelFull;
|
|
84
|
+
export declare const createPrivateSingleEntryModelPlugin: (input: Omit<CmsPrivateModelFull, "group" | "isPrivate">) => CmsModelPlugin;
|
|
69
85
|
export {};
|
|
@@ -4,7 +4,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
4
4
|
Object.defineProperty(exports, "__esModule", {
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
|
-
exports.createSingleEntryPrivateModel = exports.createSingleEntryModel = exports.createPrivateModel = exports.createCmsModelPlugin = exports.createCmsModel = exports.CmsModelPlugin = void 0;
|
|
7
|
+
exports.createSingleEntryPrivateModel = exports.createSingleEntryModelPlugin = exports.createSingleEntryModel = exports.createPrivateSingleEntryModelPlugin = exports.createPrivateModelPlugin = exports.createPrivateModel = exports.createModelPlugin = exports.createCmsModelPlugin = exports.createCmsModel = exports.CmsModelPlugin = void 0;
|
|
8
8
|
var _error = _interopRequireDefault(require("@webiny/error"));
|
|
9
9
|
var _camelCase = _interopRequireDefault(require("lodash/camelCase"));
|
|
10
10
|
var _upperFirst = _interopRequireDefault(require("lodash/upperFirst"));
|
|
@@ -206,11 +206,23 @@ exports.CmsModelPlugin = CmsModelPlugin;
|
|
|
206
206
|
const createCmsModel = (model, options) => {
|
|
207
207
|
return new CmsModelPlugin(model, options);
|
|
208
208
|
};
|
|
209
|
+
|
|
210
|
+
/**
|
|
211
|
+
* @deprecated Use `createModelPlugin` instead.
|
|
212
|
+
*/
|
|
209
213
|
exports.createCmsModel = createCmsModel;
|
|
210
214
|
const createCmsModelPlugin = (model, options) => {
|
|
211
215
|
return new CmsModelPlugin(model, options);
|
|
212
216
|
};
|
|
213
217
|
exports.createCmsModelPlugin = createCmsModelPlugin;
|
|
218
|
+
const createModelPlugin = (model, options) => {
|
|
219
|
+
return new CmsModelPlugin(model, options);
|
|
220
|
+
};
|
|
221
|
+
|
|
222
|
+
/**
|
|
223
|
+
* @deprecated Use `createPrivateModelPlugin` instead.
|
|
224
|
+
*/
|
|
225
|
+
exports.createModelPlugin = createModelPlugin;
|
|
214
226
|
const createPrivateModel = input => {
|
|
215
227
|
return {
|
|
216
228
|
authorization: false,
|
|
@@ -224,10 +236,29 @@ const createPrivateModel = input => {
|
|
|
224
236
|
};
|
|
225
237
|
};
|
|
226
238
|
exports.createPrivateModel = createPrivateModel;
|
|
239
|
+
const createPrivateModelPlugin = input => {
|
|
240
|
+
return createModelPlugin({
|
|
241
|
+
authorization: false,
|
|
242
|
+
noValidate: true,
|
|
243
|
+
isPrivate: true,
|
|
244
|
+
group: {
|
|
245
|
+
id: "private",
|
|
246
|
+
name: "Private Models"
|
|
247
|
+
},
|
|
248
|
+
...input
|
|
249
|
+
}, {
|
|
250
|
+
validateLayout: false
|
|
251
|
+
});
|
|
252
|
+
};
|
|
253
|
+
exports.createPrivateModelPlugin = createPrivateModelPlugin;
|
|
227
254
|
const ensureSingletonTag = input => {
|
|
228
255
|
const tags = input || [];
|
|
229
256
|
return tags.includes(_constants.CMS_MODEL_SINGLETON_TAG) ? tags : [...tags, _constants.CMS_MODEL_SINGLETON_TAG];
|
|
230
257
|
};
|
|
258
|
+
|
|
259
|
+
/**
|
|
260
|
+
* @deprecated Use `createSingleEntryModelPlugin` instead.
|
|
261
|
+
*/
|
|
231
262
|
const createSingleEntryModel = (input, options) => {
|
|
232
263
|
return createCmsModelPlugin({
|
|
233
264
|
...input,
|
|
@@ -235,6 +266,17 @@ const createSingleEntryModel = (input, options) => {
|
|
|
235
266
|
}, options);
|
|
236
267
|
};
|
|
237
268
|
exports.createSingleEntryModel = createSingleEntryModel;
|
|
269
|
+
const createSingleEntryModelPlugin = (input, options) => {
|
|
270
|
+
return createModelPlugin({
|
|
271
|
+
...input,
|
|
272
|
+
tags: ensureSingletonTag(input.tags)
|
|
273
|
+
}, options);
|
|
274
|
+
};
|
|
275
|
+
|
|
276
|
+
/**
|
|
277
|
+
* @deprecated Use `createSingleEntryPrivateModelPlugin` instead.
|
|
278
|
+
*/
|
|
279
|
+
exports.createSingleEntryModelPlugin = createSingleEntryModelPlugin;
|
|
238
280
|
const createSingleEntryPrivateModel = input => {
|
|
239
281
|
return createPrivateModel({
|
|
240
282
|
...input,
|
|
@@ -242,5 +284,12 @@ const createSingleEntryPrivateModel = input => {
|
|
|
242
284
|
});
|
|
243
285
|
};
|
|
244
286
|
exports.createSingleEntryPrivateModel = createSingleEntryPrivateModel;
|
|
287
|
+
const createPrivateSingleEntryModelPlugin = input => {
|
|
288
|
+
return createPrivateModelPlugin({
|
|
289
|
+
...input,
|
|
290
|
+
tags: ensureSingletonTag(input.tags)
|
|
291
|
+
});
|
|
292
|
+
};
|
|
293
|
+
exports.createPrivateSingleEntryModelPlugin = createPrivateSingleEntryModelPlugin;
|
|
245
294
|
|
|
246
295
|
//# sourceMappingURL=CmsModelPlugin.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_error","_interopRequireDefault","require","_camelCase","_upperFirst","_pluralize","_plugins","_createFieldStorageId","_validateStorageId","_constants","createApiName","name","upperFirst","camelCase","createPluralApiName","pluralize","CmsModelPlugin","Plugin","type","constructor","contentModel","options","buildModel","input","isPrivate","singularApiName","pluralApiName","modelPlugin","group","id","description","fields","isPlugin","layout","modelId","titleFieldId","noValidate","model","buildFields","validateLayout","inputFields","length","WebinyError","storageIdList","fieldIdList","fieldId","trim","field","lodashCamelCase","match","includes","storageId","validateStorageId","e","from","data","createFieldStorageId","settings","childFields","push","total","row","count","filter","cell","exports","createCmsModel","createCmsModelPlugin","createPrivateModel","authorization","ensureSingletonTag","tags","CMS_MODEL_SINGLETON_TAG","createSingleEntryModel","createSingleEntryPrivateModel"],"sources":["CmsModelPlugin.ts"],"sourcesContent":["import WebinyError from \"@webiny/error\";\nimport lodashCamelCase from \"lodash/camelCase\";\nimport camelCase from \"lodash/camelCase\";\nimport upperFirst from \"lodash/upperFirst\";\nimport pluralize from \"pluralize\";\nimport { Plugin } from \"@webiny/plugins\";\nimport {\n CmsModel as CmsModelBase,\n CmsModelField as CmsModelFieldBase,\n CmsModelFieldSettings as BaseCmsModelFieldSettings\n} from \"~/types\";\nimport { createFieldStorageId } from \"~/crud/contentModel/createFieldStorageId\";\nimport { validateStorageId } from \"~/crud/contentModel/validateStorageId\";\nimport { CMS_MODEL_SINGLETON_TAG } from \"~/constants\";\n\nconst createApiName = (name: string) => {\n return upperFirst(camelCase(name));\n};\n\nconst createPluralApiName = (name: string) => {\n return pluralize(createApiName(name));\n};\n\ninterface CmsModelFieldSettings extends Omit<BaseCmsModelFieldSettings, \"fields\"> {\n /**\n * Object field has child fields.\n */\n fields?: CmsModelFieldInput[];\n}\n\ninterface CmsModelFieldInput extends Omit<CmsModelFieldBase, \"storageId\" | \"settings\"> {\n /**\n * If defined, it must be camelCased string.\n * This is for backwards compatibility - before fields had storageId.\n *\n * This should only be populated in old model fields.\n * New ones must have this empty.\n */\n storageId?: string;\n /**\n * We must have a possibility to have a nested field defined without the storageId.\n */\n settings?: CmsModelFieldSettings;\n}\n\nexport interface CmsApiModel\n extends Omit<\n CmsModelPluginModel,\n \"isPrivate\" | \"fields\" | \"singularApiName\" | \"pluralApiName\" | \"isPlugin\"\n > {\n isPrivate?: never;\n noValidate?: boolean;\n singularApiName?: string;\n pluralApiName?: string;\n fields: CmsModelFieldInput[];\n}\n\nexport interface CmsApiModelFull extends Omit<CmsApiModel, \"fields\"> {\n fields: CmsModelFieldBase[];\n}\n\ninterface CmsPrivateModel\n extends Omit<\n CmsModelPluginModel,\n | \"isPrivate\"\n | \"singularApiName\"\n | \"pluralApiName\"\n | \"fields\"\n | \"isPlugin\"\n | \"layout\"\n | \"titleFieldId\"\n | \"description\"\n > {\n noValidate?: boolean;\n titleFieldId?: string;\n singularApiName?: never;\n pluralApiName?: never;\n isPrivate: true;\n fields: CmsModelFieldInput[];\n}\n\nexport interface CmsPrivateModelFull\n extends Omit<CmsPrivateModel, \"fields\" | \"createdBy\" | \"createdOn\" | \"savedOn\"> {\n fields: CmsModelFieldBase[];\n}\n\nexport type CmsModelInput = CmsApiModel | CmsPrivateModel | CmsApiModelFull | CmsPrivateModelFull;\n\nexport interface CmsModelPluginModel\n extends Omit<CmsModelBase, \"locale\" | \"tenant\" | \"webinyVersion\"> {\n locale?: string;\n tenant?: string;\n}\n\ninterface CmsModelPluginOptions {\n validateLayout?: boolean;\n}\n\nexport class CmsModelPlugin extends Plugin {\n public static override readonly type: string = \"cms-content-model\";\n public readonly contentModel: CmsModelPluginModel;\n\n private readonly options: CmsModelPluginOptions;\n\n constructor(contentModel: CmsModelInput, options?: CmsModelPluginOptions) {\n super();\n this.options = options || {};\n this.contentModel = this.buildModel(contentModel);\n }\n\n private buildModel(input: CmsModelInput): CmsModelPluginModel {\n const isPrivate = input.isPrivate ?? false;\n\n const singularApiName = input.singularApiName\n ? createApiName(input.singularApiName)\n : createApiName(input.name);\n\n const pluralApiName = input.pluralApiName\n ? createApiName(input.pluralApiName)\n : createPluralApiName(input.name);\n\n const modelPlugin: CmsModelPluginModel = {\n group: {\n id: \"\",\n name: \"\"\n },\n description: \"\",\n fields: [],\n isPlugin: true,\n isPrivate,\n layout: [],\n modelId: input.modelId,\n name: input.name,\n pluralApiName,\n singularApiName,\n titleFieldId: \"id\"\n };\n\n if (input.noValidate) {\n /**\n * We can safely ignore this error, because we are sure noValidate is not a model field.\n */\n delete input[\"noValidate\"];\n\n return {\n ...modelPlugin,\n ...input,\n // Since `noValidate` is set, we trust the input, and cast to `CmsModelFieldBase`.\n fields: input.fields as CmsModelFieldBase[],\n pluralApiName,\n singularApiName\n };\n }\n\n const model: CmsModelPluginModel = {\n ...modelPlugin,\n ...input,\n pluralApiName,\n singularApiName,\n fields: this.buildFields(input, input.fields)\n };\n this.validateLayout(model);\n return model;\n }\n\n private buildFields(\n model: CmsModelInput,\n inputFields: CmsModelFieldInput[]\n ): CmsModelFieldBase[] {\n if (inputFields.length === 0) {\n throw new WebinyError(\n `Missing fields for the defined model \"${model.modelId}\".`,\n \"MISSING_FIELDS\",\n {\n model\n }\n );\n }\n const fields: CmsModelFieldBase[] = [];\n const storageIdList: string[] = [];\n const fieldIdList: string[] = [];\n for (const input of inputFields) {\n /**\n * Field must contain an fieldId. It is required in the graphql, but lets check it just in case\n */\n if (!(input.fieldId || \"\").trim()) {\n throw new WebinyError(\n `Field's \"storageId\" is not defined for the content model \"${model.modelId}\".`,\n \"FIELD_ID_ERROR\",\n {\n model,\n field: input\n }\n );\n }\n const fieldId = lodashCamelCase(input.fieldId);\n /**\n * FieldID must be in correct pattern.\n */\n if (fieldId.match(/^[0-9]/) !== null) {\n throw new WebinyError(\n `Field's \"fieldId\" does not match correct pattern in the content model \"${model.modelId}\" - cannot start with a number.`,\n \"FIELD_FIELD_ID_ERROR\",\n {\n model,\n field: input\n }\n );\n }\n /**\n * FieldID also must be camelCased.\n */\n if (fieldId !== input.fieldId) {\n throw new WebinyError(\n `Field's \"fieldId\" must be a camel cased string in the content model \"${model.modelId}\".`,\n \"FIELD_FIELD_ID_ERROR\",\n {\n model,\n field: input\n }\n );\n }\n /**\n * ... and fieldId must be unique.\n */\n if (fieldIdList.includes(fieldId)) {\n throw new WebinyError(\n `Field's \"fieldId\" (id: ${input.id}) is not unique in the content model \"${model.modelId}\".`,\n \"FIELD_ID_NOT_UNIQUE_ERROR\",\n {\n model,\n field: input\n }\n );\n }\n\n let storageId = input.storageId;\n if (storageId) {\n try {\n validateStorageId(storageId);\n } catch (e) {\n throw WebinyError.from(e, {\n data: { model, storageId, field: input }\n });\n }\n } else {\n storageId = createFieldStorageId(input);\n }\n\n /**\n * Fields storageId must be unique.\n */\n if (storageIdList.includes(storageId)) {\n throw new WebinyError(\n `Field's \"storageId\" is not unique in the content model \"${model.modelId}\".`,\n \"STORAGE_ID_ERROR\",\n {\n model,\n field: input\n }\n );\n }\n\n /**\n * We can safely ignore error because we are going through the fields and making sure each has storageId.\n */\n // @ts-expect-error\n let settings: BaseCmsModelFieldSettings = input.settings;\n\n const childFields = settings?.fields || [];\n if (input.type === \"object\" && childFields.length > 0) {\n settings = {\n ...(settings || {}),\n fields: this.buildFields(model, childFields)\n };\n }\n\n const field: CmsModelFieldBase = {\n ...input,\n settings,\n storageId\n };\n /**\n * Add all relevant data to arrays.\n */\n fields.push(field);\n storageIdList.push(field.storageId);\n fieldIdList.push(field.fieldId);\n }\n return fields;\n }\n\n private validateLayout(model: CmsModelPluginModel): void {\n /**\n * Only skip validation if option.validateLayout was set as false, explicitly.\n */\n if (this.options.validateLayout === false) {\n return;\n }\n for (const field of model.fields) {\n let total = 0;\n for (const row of model.layout) {\n const count = row.filter(cell => cell === field.id).length;\n total = total + count;\n }\n if (total === 1) {\n continue;\n } else if (total > 1) {\n throw new WebinyError(\n `Field \"${field.id}\" is in more than one layout cell.`,\n \"DUPLICATE_FIELD_IN_LAYOUT\",\n {\n model,\n field\n }\n );\n }\n throw new WebinyError(\n `Missing field \"${field.id}\" in layout.`,\n \"MISSING_FIELD_IN_LAYOUT\",\n {\n model,\n field\n }\n );\n }\n }\n}\n\n/**\n * @deprecated Use `createCmsModelPlugin` instead.\n */\nexport const createCmsModel = (\n model: CmsModelInput,\n options?: CmsModelPluginOptions\n): CmsModelPlugin => {\n return new CmsModelPlugin(model, options);\n};\n\nexport const createCmsModelPlugin = (\n model: CmsModelInput,\n options?: CmsModelPluginOptions\n): CmsModelPlugin => {\n return new CmsModelPlugin(model, options);\n};\n\nexport const createPrivateModel = (\n input: Omit<CmsPrivateModelFull, \"group\" | \"isPrivate\">\n): CmsPrivateModelFull => {\n return {\n authorization: false,\n noValidate: true,\n isPrivate: true,\n group: {\n id: \"private\",\n name: \"Private Models\"\n },\n ...input\n };\n};\n\nconst ensureSingletonTag = (input?: string[]) => {\n const tags = input || [];\n return tags.includes(CMS_MODEL_SINGLETON_TAG) ? tags : [...tags, CMS_MODEL_SINGLETON_TAG];\n};\n\nexport const createSingleEntryModel = (input: CmsModelInput, options?: CmsModelPluginOptions) => {\n return createCmsModelPlugin(\n {\n ...input,\n tags: ensureSingletonTag(input.tags)\n },\n options\n );\n};\n\nexport const createSingleEntryPrivateModel = (\n input: Omit<CmsPrivateModelFull, \"group\" | \"isPrivate\">\n) => {\n return createPrivateModel({\n ...input,\n tags: ensureSingletonTag(input.tags)\n });\n};\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_error","_interopRequireDefault","require","_camelCase","_upperFirst","_pluralize","_plugins","_createFieldStorageId","_validateStorageId","_constants","createApiName","name","upperFirst","camelCase","createPluralApiName","pluralize","CmsModelPlugin","Plugin","type","constructor","contentModel","options","buildModel","input","isPrivate","singularApiName","pluralApiName","modelPlugin","group","id","description","fields","isPlugin","layout","modelId","titleFieldId","noValidate","model","buildFields","validateLayout","inputFields","length","WebinyError","storageIdList","fieldIdList","fieldId","trim","field","lodashCamelCase","match","includes","storageId","validateStorageId","e","from","data","createFieldStorageId","settings","childFields","push","total","row","count","filter","cell","exports","createCmsModel","createCmsModelPlugin","createModelPlugin","createPrivateModel","authorization","createPrivateModelPlugin","ensureSingletonTag","tags","CMS_MODEL_SINGLETON_TAG","createSingleEntryModel","createSingleEntryModelPlugin","createSingleEntryPrivateModel","createPrivateSingleEntryModelPlugin"],"sources":["CmsModelPlugin.ts"],"sourcesContent":["import WebinyError from \"@webiny/error\";\nimport lodashCamelCase from \"lodash/camelCase\";\nimport camelCase from \"lodash/camelCase\";\nimport upperFirst from \"lodash/upperFirst\";\nimport pluralize from \"pluralize\";\nimport { Plugin } from \"@webiny/plugins\";\nimport {\n CmsModel as CmsModelBase,\n CmsModelField as CmsModelFieldBase,\n CmsModelFieldSettings as BaseCmsModelFieldSettings\n} from \"~/types\";\nimport { createFieldStorageId } from \"~/crud/contentModel/createFieldStorageId\";\nimport { validateStorageId } from \"~/crud/contentModel/validateStorageId\";\nimport { CMS_MODEL_SINGLETON_TAG } from \"~/constants\";\n\nconst createApiName = (name: string) => {\n return upperFirst(camelCase(name));\n};\n\nconst createPluralApiName = (name: string) => {\n return pluralize(createApiName(name));\n};\n\ninterface CmsModelFieldSettings extends Omit<BaseCmsModelFieldSettings, \"fields\"> {\n /**\n * Object field has child fields.\n */\n fields?: CmsModelFieldInput[];\n}\n\ninterface CmsModelFieldInput extends Omit<CmsModelFieldBase, \"storageId\" | \"settings\"> {\n /**\n * If defined, it must be camelCased string.\n * This is for backwards compatibility - before fields had storageId.\n *\n * This should only be populated in old model fields.\n * New ones must have this empty.\n */\n storageId?: string;\n /**\n * We must have a possibility to have a nested field defined without the storageId.\n */\n settings?: CmsModelFieldSettings;\n}\n\nexport interface CmsApiModel\n extends Omit<\n CmsModelPluginModel,\n \"isPrivate\" | \"fields\" | \"singularApiName\" | \"pluralApiName\" | \"isPlugin\"\n > {\n isPrivate?: never;\n noValidate?: boolean;\n singularApiName?: string;\n pluralApiName?: string;\n fields: CmsModelFieldInput[];\n}\n\nexport interface CmsApiModelFull extends Omit<CmsApiModel, \"fields\"> {\n fields: CmsModelFieldBase[];\n}\n\ninterface CmsPrivateModel\n extends Omit<\n CmsModelPluginModel,\n | \"isPrivate\"\n | \"singularApiName\"\n | \"pluralApiName\"\n | \"fields\"\n | \"isPlugin\"\n | \"layout\"\n | \"titleFieldId\"\n | \"description\"\n > {\n noValidate?: boolean;\n titleFieldId?: string;\n singularApiName?: never;\n pluralApiName?: never;\n isPrivate: true;\n fields: CmsModelFieldInput[];\n}\n\nexport interface CmsPrivateModelFull\n extends Omit<CmsPrivateModel, \"fields\" | \"createdBy\" | \"createdOn\" | \"savedOn\"> {\n fields: CmsModelFieldBase[];\n}\n\nexport type CmsModelInput = CmsApiModel | CmsPrivateModel | CmsApiModelFull | CmsPrivateModelFull;\n\nexport interface CmsModelPluginModel\n extends Omit<CmsModelBase, \"locale\" | \"tenant\" | \"webinyVersion\"> {\n locale?: string;\n tenant?: string;\n}\n\ninterface CmsModelPluginOptions {\n validateLayout?: boolean;\n}\n\nexport class CmsModelPlugin extends Plugin {\n public static override readonly type: string = \"cms-content-model\";\n public readonly contentModel: CmsModelPluginModel;\n\n private readonly options: CmsModelPluginOptions;\n\n constructor(contentModel: CmsModelInput, options?: CmsModelPluginOptions) {\n super();\n this.options = options || {};\n this.contentModel = this.buildModel(contentModel);\n }\n\n private buildModel(input: CmsModelInput): CmsModelPluginModel {\n const isPrivate = input.isPrivate ?? false;\n\n const singularApiName = input.singularApiName\n ? createApiName(input.singularApiName)\n : createApiName(input.name);\n\n const pluralApiName = input.pluralApiName\n ? createApiName(input.pluralApiName)\n : createPluralApiName(input.name);\n\n const modelPlugin: CmsModelPluginModel = {\n group: {\n id: \"\",\n name: \"\"\n },\n description: \"\",\n fields: [],\n isPlugin: true,\n isPrivate,\n layout: [],\n modelId: input.modelId,\n name: input.name,\n pluralApiName,\n singularApiName,\n titleFieldId: \"id\"\n };\n\n if (input.noValidate) {\n /**\n * We can safely ignore this error, because we are sure noValidate is not a model field.\n */\n delete input[\"noValidate\"];\n\n return {\n ...modelPlugin,\n ...input,\n // Since `noValidate` is set, we trust the input, and cast to `CmsModelFieldBase`.\n fields: input.fields as CmsModelFieldBase[],\n pluralApiName,\n singularApiName\n };\n }\n\n const model: CmsModelPluginModel = {\n ...modelPlugin,\n ...input,\n pluralApiName,\n singularApiName,\n fields: this.buildFields(input, input.fields)\n };\n this.validateLayout(model);\n return model;\n }\n\n private buildFields(\n model: CmsModelInput,\n inputFields: CmsModelFieldInput[]\n ): CmsModelFieldBase[] {\n if (inputFields.length === 0) {\n throw new WebinyError(\n `Missing fields for the defined model \"${model.modelId}\".`,\n \"MISSING_FIELDS\",\n {\n model\n }\n );\n }\n const fields: CmsModelFieldBase[] = [];\n const storageIdList: string[] = [];\n const fieldIdList: string[] = [];\n for (const input of inputFields) {\n /**\n * Field must contain an fieldId. It is required in the graphql, but lets check it just in case\n */\n if (!(input.fieldId || \"\").trim()) {\n throw new WebinyError(\n `Field's \"storageId\" is not defined for the content model \"${model.modelId}\".`,\n \"FIELD_ID_ERROR\",\n {\n model,\n field: input\n }\n );\n }\n const fieldId = lodashCamelCase(input.fieldId);\n /**\n * FieldID must be in correct pattern.\n */\n if (fieldId.match(/^[0-9]/) !== null) {\n throw new WebinyError(\n `Field's \"fieldId\" does not match correct pattern in the content model \"${model.modelId}\" - cannot start with a number.`,\n \"FIELD_FIELD_ID_ERROR\",\n {\n model,\n field: input\n }\n );\n }\n /**\n * FieldID also must be camelCased.\n */\n if (fieldId !== input.fieldId) {\n throw new WebinyError(\n `Field's \"fieldId\" must be a camel cased string in the content model \"${model.modelId}\".`,\n \"FIELD_FIELD_ID_ERROR\",\n {\n model,\n field: input\n }\n );\n }\n /**\n * ... and fieldId must be unique.\n */\n if (fieldIdList.includes(fieldId)) {\n throw new WebinyError(\n `Field's \"fieldId\" (id: ${input.id}) is not unique in the content model \"${model.modelId}\".`,\n \"FIELD_ID_NOT_UNIQUE_ERROR\",\n {\n model,\n field: input\n }\n );\n }\n\n let storageId = input.storageId;\n if (storageId) {\n try {\n validateStorageId(storageId);\n } catch (e) {\n throw WebinyError.from(e, {\n data: { model, storageId, field: input }\n });\n }\n } else {\n storageId = createFieldStorageId(input);\n }\n\n /**\n * Fields storageId must be unique.\n */\n if (storageIdList.includes(storageId)) {\n throw new WebinyError(\n `Field's \"storageId\" is not unique in the content model \"${model.modelId}\".`,\n \"STORAGE_ID_ERROR\",\n {\n model,\n field: input\n }\n );\n }\n\n /**\n * We can safely ignore error because we are going through the fields and making sure each has storageId.\n */\n // @ts-expect-error\n let settings: BaseCmsModelFieldSettings = input.settings;\n\n const childFields = settings?.fields || [];\n if (input.type === \"object\" && childFields.length > 0) {\n settings = {\n ...(settings || {}),\n fields: this.buildFields(model, childFields)\n };\n }\n\n const field: CmsModelFieldBase = {\n ...input,\n settings,\n storageId\n };\n /**\n * Add all relevant data to arrays.\n */\n fields.push(field);\n storageIdList.push(field.storageId);\n fieldIdList.push(field.fieldId);\n }\n return fields;\n }\n\n private validateLayout(model: CmsModelPluginModel): void {\n /**\n * Only skip validation if option.validateLayout was set as false, explicitly.\n */\n if (this.options.validateLayout === false) {\n return;\n }\n for (const field of model.fields) {\n let total = 0;\n for (const row of model.layout) {\n const count = row.filter(cell => cell === field.id).length;\n total = total + count;\n }\n if (total === 1) {\n continue;\n } else if (total > 1) {\n throw new WebinyError(\n `Field \"${field.id}\" is in more than one layout cell.`,\n \"DUPLICATE_FIELD_IN_LAYOUT\",\n {\n model,\n field\n }\n );\n }\n throw new WebinyError(\n `Missing field \"${field.id}\" in layout.`,\n \"MISSING_FIELD_IN_LAYOUT\",\n {\n model,\n field\n }\n );\n }\n }\n}\n\n/**\n * @deprecated Use `createCmsModelPlugin` instead.\n */\nexport const createCmsModel = (\n model: CmsModelInput,\n options?: CmsModelPluginOptions\n): CmsModelPlugin => {\n return new CmsModelPlugin(model, options);\n};\n\n/**\n * @deprecated Use `createModelPlugin` instead.\n */\nexport const createCmsModelPlugin = (\n model: CmsModelInput,\n options?: CmsModelPluginOptions\n): CmsModelPlugin => {\n return new CmsModelPlugin(model, options);\n};\n\nexport const createModelPlugin = (\n model: CmsModelInput,\n options?: CmsModelPluginOptions\n): CmsModelPlugin => {\n return new CmsModelPlugin(model, options);\n};\n\n/**\n * @deprecated Use `createPrivateModelPlugin` instead.\n */\nexport const createPrivateModel = (\n input: Omit<CmsPrivateModelFull, \"group\" | \"isPrivate\">\n): CmsPrivateModelFull => {\n return {\n authorization: false,\n noValidate: true,\n isPrivate: true,\n group: {\n id: \"private\",\n name: \"Private Models\"\n },\n ...input\n };\n};\n\nexport const createPrivateModelPlugin = (\n input: Omit<CmsPrivateModelFull, \"group\" | \"isPrivate\">\n): CmsModelPlugin => {\n return createModelPlugin(\n {\n authorization: false,\n noValidate: true,\n isPrivate: true,\n group: {\n id: \"private\",\n name: \"Private Models\"\n },\n ...input\n },\n {\n validateLayout: false\n }\n );\n};\n\nconst ensureSingletonTag = (input?: string[]) => {\n const tags = input || [];\n return tags.includes(CMS_MODEL_SINGLETON_TAG) ? tags : [...tags, CMS_MODEL_SINGLETON_TAG];\n};\n\n/**\n * @deprecated Use `createSingleEntryModelPlugin` instead.\n */\nexport const createSingleEntryModel = (input: CmsModelInput, options?: CmsModelPluginOptions) => {\n return createCmsModelPlugin(\n {\n ...input,\n tags: ensureSingletonTag(input.tags)\n },\n options\n );\n};\n\nexport const createSingleEntryModelPlugin = (\n input: CmsModelInput,\n options?: CmsModelPluginOptions\n) => {\n return createModelPlugin(\n {\n ...input,\n tags: ensureSingletonTag(input.tags)\n },\n options\n );\n};\n\n/**\n * @deprecated Use `createSingleEntryPrivateModelPlugin` instead.\n */\nexport const createSingleEntryPrivateModel = (\n input: Omit<CmsPrivateModelFull, \"group\" | \"isPrivate\">\n) => {\n return createPrivateModel({\n ...input,\n tags: ensureSingletonTag(input.tags)\n });\n};\n\nexport const createPrivateSingleEntryModelPlugin = (\n input: Omit<CmsPrivateModelFull, \"group\" | \"isPrivate\">\n) => {\n return createPrivateModelPlugin({\n ...input,\n tags: ensureSingletonTag(input.tags)\n });\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -32,3 +32,4 @@ export declare class StorageTransformPlugin<T = any, R = any, F extends CmsModel
|
|
|
32
32
|
toStorage(params: ToStorageParams<T, F>): Promise<R>;
|
|
33
33
|
fromStorage(params: FromStorageParams<R, F>): Promise<T>;
|
|
34
34
|
}
|
|
35
|
+
export declare const createStorageTransformPlugin: <T = any, R = any, F extends CmsModelField = CmsModelField>(config: StorageTransformPluginParams<T, R, F>) => StorageTransformPlugin<T, R, F>;
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.StorageTransformPlugin = void 0;
|
|
6
|
+
exports.createStorageTransformPlugin = exports.StorageTransformPlugin = void 0;
|
|
7
7
|
var _Plugin = require("@webiny/plugins/Plugin");
|
|
8
8
|
/**
|
|
9
9
|
* Storage transforms are used to transform the data before it is saved to the database and after it is read from the database.
|
|
@@ -27,5 +27,9 @@ class StorageTransformPlugin extends _Plugin.Plugin {
|
|
|
27
27
|
}
|
|
28
28
|
}
|
|
29
29
|
exports.StorageTransformPlugin = StorageTransformPlugin;
|
|
30
|
+
const createStorageTransformPlugin = config => {
|
|
31
|
+
return new StorageTransformPlugin(config);
|
|
32
|
+
};
|
|
33
|
+
exports.createStorageTransformPlugin = createStorageTransformPlugin;
|
|
30
34
|
|
|
31
35
|
//# sourceMappingURL=StorageTransformPlugin.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_Plugin","require","StorageTransformPlugin","Plugin","type","fieldType","config","constructor","name","toStorage","params","fromStorage","exports"],"sources":["StorageTransformPlugin.ts"],"sourcesContent":["/**\n * Storage transforms are used to transform the data before it is saved to the database and after it is read from the database.\n */\nimport { Plugin } from \"@webiny/plugins/Plugin\";\nimport { CmsModel, CmsModelField, CmsModelFieldType } from \"~/types\";\nimport { PluginsContainer } from \"@webiny/plugins\";\n\nexport interface ToStorageParams<T, F extends CmsModelField> {\n model: CmsModel;\n field: F;\n value: T;\n getStoragePlugin(fieldType: string): StorageTransformPlugin<T>;\n plugins: PluginsContainer;\n}\n\nexport interface FromStorageParams<T, F extends CmsModelField> {\n model: CmsModel;\n field: Partial<F> & Pick<F, \"id\" | \"fieldId\" | \"storageId\" | \"type\" | \"settings\">;\n value: T;\n getStoragePlugin(fieldType: string): StorageTransformPlugin<T>;\n plugins: PluginsContainer;\n}\n\nexport interface StorageTransformPluginParams<T, R, F extends CmsModelField> {\n name?: string;\n fieldType: CmsModelFieldType;\n toStorage: (params: ToStorageParams<T, F>) => Promise<R>;\n fromStorage: (params: FromStorageParams<R, F>) => Promise<T>;\n}\nexport class StorageTransformPlugin<\n T = any,\n R = any,\n F extends CmsModelField = CmsModelField\n> extends Plugin {\n public static override readonly type: string = \"cms.storage.transform.plugin\";\n public get fieldType(): string {\n return this.config.fieldType;\n }\n\n private readonly config: StorageTransformPluginParams<T, R, F>;\n\n public constructor(config: StorageTransformPluginParams<T, R, F>) {\n super();\n this.name = config.name;\n this.config = config;\n }\n\n public toStorage(params: ToStorageParams<T, F>): Promise<R> {\n return this.config.toStorage(params);\n }\n\n public fromStorage(params: FromStorageParams<R, F>): Promise<T> {\n return this.config.fromStorage(params);\n }\n}\n"],"mappings":";;;;;;AAGA,IAAAA,OAAA,GAAAC,OAAA;AAHA;AACA;AACA;;AA2BO,MAAMC,sBAAsB,SAIzBC,cAAM,CAAC;EACb,OAAgCC,IAAI,GAAW,8BAA8B;EAC7E,IAAWC,SAASA,CAAA,EAAW;IAC3B,OAAO,IAAI,CAACC,MAAM,CAACD,SAAS;EAChC;EAIOE,WAAWA,CAACD,MAA6C,EAAE;IAC9D,KAAK,CAAC,CAAC;IACP,IAAI,CAACE,IAAI,GAAGF,MAAM,CAACE,IAAI;IACvB,IAAI,CAACF,MAAM,GAAGA,MAAM;EACxB;EAEOG,SAASA,CAACC,MAA6B,EAAc;IACxD,OAAO,IAAI,CAACJ,MAAM,CAACG,SAAS,CAACC,MAAM,CAAC;EACxC;EAEOC,WAAWA,CAACD,MAA+B,EAAc;IAC5D,OAAO,IAAI,CAACJ,MAAM,CAACK,WAAW,CAACD,MAAM,CAAC;EAC1C;AACJ;AAACE,OAAA,CAAAV,sBAAA,GAAAA,sBAAA","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_Plugin","require","StorageTransformPlugin","Plugin","type","fieldType","config","constructor","name","toStorage","params","fromStorage","exports","createStorageTransformPlugin"],"sources":["StorageTransformPlugin.ts"],"sourcesContent":["/**\n * Storage transforms are used to transform the data before it is saved to the database and after it is read from the database.\n */\nimport { Plugin } from \"@webiny/plugins/Plugin\";\nimport { CmsModel, CmsModelField, CmsModelFieldType } from \"~/types\";\nimport { PluginsContainer } from \"@webiny/plugins\";\n\nexport interface ToStorageParams<T, F extends CmsModelField> {\n model: CmsModel;\n field: F;\n value: T;\n getStoragePlugin(fieldType: string): StorageTransformPlugin<T>;\n plugins: PluginsContainer;\n}\n\nexport interface FromStorageParams<T, F extends CmsModelField> {\n model: CmsModel;\n field: Partial<F> & Pick<F, \"id\" | \"fieldId\" | \"storageId\" | \"type\" | \"settings\">;\n value: T;\n getStoragePlugin(fieldType: string): StorageTransformPlugin<T>;\n plugins: PluginsContainer;\n}\n\nexport interface StorageTransformPluginParams<T, R, F extends CmsModelField> {\n name?: string;\n fieldType: CmsModelFieldType;\n toStorage: (params: ToStorageParams<T, F>) => Promise<R>;\n fromStorage: (params: FromStorageParams<R, F>) => Promise<T>;\n}\nexport class StorageTransformPlugin<\n T = any,\n R = any,\n F extends CmsModelField = CmsModelField\n> extends Plugin {\n public static override readonly type: string = \"cms.storage.transform.plugin\";\n public get fieldType(): string {\n return this.config.fieldType;\n }\n\n private readonly config: StorageTransformPluginParams<T, R, F>;\n\n public constructor(config: StorageTransformPluginParams<T, R, F>) {\n super();\n this.name = config.name;\n this.config = config;\n }\n\n public toStorage(params: ToStorageParams<T, F>): Promise<R> {\n return this.config.toStorage(params);\n }\n\n public fromStorage(params: FromStorageParams<R, F>): Promise<T> {\n return this.config.fromStorage(params);\n }\n}\n\nexport const createStorageTransformPlugin = <\n T = any,\n R = any,\n F extends CmsModelField = CmsModelField\n>(\n config: StorageTransformPluginParams<T, R, F>\n) => {\n return new StorageTransformPlugin(config);\n};\n"],"mappings":";;;;;;AAGA,IAAAA,OAAA,GAAAC,OAAA;AAHA;AACA;AACA;;AA2BO,MAAMC,sBAAsB,SAIzBC,cAAM,CAAC;EACb,OAAgCC,IAAI,GAAW,8BAA8B;EAC7E,IAAWC,SAASA,CAAA,EAAW;IAC3B,OAAO,IAAI,CAACC,MAAM,CAACD,SAAS;EAChC;EAIOE,WAAWA,CAACD,MAA6C,EAAE;IAC9D,KAAK,CAAC,CAAC;IACP,IAAI,CAACE,IAAI,GAAGF,MAAM,CAACE,IAAI;IACvB,IAAI,CAACF,MAAM,GAAGA,MAAM;EACxB;EAEOG,SAASA,CAACC,MAA6B,EAAc;IACxD,OAAO,IAAI,CAACJ,MAAM,CAACG,SAAS,CAACC,MAAM,CAAC;EACxC;EAEOC,WAAWA,CAACD,MAA+B,EAAc;IAC5D,OAAO,IAAI,CAACJ,MAAM,CAACK,WAAW,CAACD,MAAM,CAAC;EAC1C;AACJ;AAACE,OAAA,CAAAV,sBAAA,GAAAA,sBAAA;AAEM,MAAMW,4BAA4B,GAKrCP,MAA6C,IAC5C;EACD,OAAO,IAAIJ,sBAAsB,CAACI,MAAM,CAAC;AAC7C,CAAC;AAACM,OAAA,CAAAC,4BAAA,GAAAA,4BAAA","ignoreList":[]}
|