Tools
VonaJS provides a set of utility functions to make serialization capabilities more convenient
Tool List
| @Serializer | v | Description |
|---|---|---|
| @Serializer.transform | v.serializerTransform | For using Serializer Transform, see: Serialization |
| @Serializer.exclude | v.serializerExclude | Exclude fields |
| @Serializer.replace | v.serializerReplace | Mask the field values |
| @Serializer.getter | v.serializerGetter | Generate new field values using getter mechanisms |
| @Serializer.custom | v.serializerCustom | Transform field values using custom function |
TIP
Since the @Serializer utility is very concise and intuitive, why provide the v utility?
- The
vtool allows modification of configurations via App Config - The underlying logic of the
vtool and the@Serializertool is consistent
@Serializer.transform/v.serializerTransform
For example, to convert the name field value in EntityStudent to uppercase
we directly use the Serializer Transform upper created in Serialization
1. @Serializer.transform
class EntityStudent {
+ @Serializer.transform('demo-student:upper')
@Api.field(v.title($locale('Name')))
name: string;
}2. v.serializerTransform
class EntityStudent {
+ @Api.field(v.serializerTransform('demo-student:upper'), v.title($locale('Name')))
name: string;
}3. App Config
Configuration can be modified in App Config
src/backend/config/config/config.ts
- Method 1: Directly modify Openapi parameters
// onions
config.onions = {
entity: {
'demo-student:student': {
fields: {
name: {
serializerTransforms: {
'demo-student:upper': {},
},
},
},
},
},
};- Method 2: Construct a new schema
import { $makeSchema, v } from 'vona-module-a-openapi';
// onions
config.onions = {
entity: {
'demo-student:student': {
fields: {
name: $makeSchema(v.serializerTransform('demo-student:upper'), z.string()),
},
},
},
};@Serializer.exclude/v.serializerExclude
For example, exclude the name field in EntityStudent
1. @Serializer.exclude
class EntityStudent {
+ @Serializer.exclude()
@Api.field(v.title($locale('Name')))
name: string;
}2. v.serializerExclude
class EntityStudent {
+ @Api.field(v.serializerExclude(), v.title($locale('Name')))
name: string;
}3. App Config
Configuration can be modified in App Config
src/backend/config/config/config.ts
- Method 1: Directly modify Openapi parameters
// onions
config.onions = {
entity: {
'demo-student:student': {
fields: {
name: {
serializerTransforms: {
'a-serialization:exclude': {
exclude: true,
},
},
},
},
},
},
};- Method 2: Construct a new schema
import { $makeSchema, v } from 'vona-module-a-openapi';
// onions
config.onions = {
entity: {
'demo-student:student': {
fields: {
name: $makeSchema(v.serializerExclude(), z.string()),
},
},
},
};@Serializer.replace/v.serializerReplace
For example, to mask the value of the name field in EntityStudent
For example, the original value of name is tom, this result after mask is t***m
1. @Serializer.replace
class EntityStudent {
+ @Serializer.replace({ patternFrom: /(\w)(\w+)(\w)/, patternTo: '$1***$3' })
@Api.field(v.title($locale('Name')))
name: string;
}2. v.serializerReplace
class EntityStudent {
@Api.field(
+ v.serializerReplace({ patternFrom: /(\w)(\w+)(\w)/, patternTo: '$1***$3' }),
v.title($locale('Name')),
)
name: string;
}3. App Config
Configuration can be modified in App Config
src/backend/config/config/config.ts
- Method 1: Directly modify OpenAPI parameters
// onions
config.onions = {
entity: {
'demo-student:student': {
fields: {
name: {
serializerTransforms: {
'a-serialization:replace': {
patternFrom: /(\w)(\w+)(\w)/,
patternTo: '$1***$3',
},
},
},
},
},
},
};a-serialization:replace: Serializer Transform provided by the a-serialization module
- Method 2: Construct a new schema
import { $makeSchema, v } from 'vona-module-a-openapi';
// onions
config.onions = {
entity: {
'demo-student:student': {
fields: {
name: $makeSchema(
v.serializerReplace({ patternFrom: /(\w)(\w+)(\w)/, patternTo: '$1***$3' }),
z.string(),
),
},
},
},
};@Serializer.getter/v.serializerGetter
For example, the fullName field in EntityStudent is composed of the firstName and lastName fields
1. getter
class EntityStudent {
@Api.field()
firstName: string;
@Api.field()
lastName: string;
@Api.field()
+ get fullName(): string | undefined {
+ return `${this.firstName} ${this.lastName}`;
+ }
}2. @Serializer.getter
class EntityStudent {
+ @Serializer.getter((data: EntityStudent) => {
+ return `${data.firstName} ${data.lastName}`;
+ })
@Api.field()
fullName: string;
}3. v.serializerGetter
class EntityStudent {
+ @Api.field(v.serializerGetter((data: EntityStudent) => {
+ return `${data.firstName} ${data.lastName}`;
+ }))
fullName: string;
}4. App Config
Configuration can be modified in App Config
src/backend/config/config/config.ts
- Method 1: Directly modify OpenAPI parameters
// onions
config.onions = {
entity: {
'demo-student:student': {
fields: {
fullName: {
serializerTransforms: {
'a-serialization:getter': {
getter: (data: EntityStudent) => {
return `${data.firstName} ${data.lastName}`;
},
},
},
},
},
},
},
};a-serialization:getter: Serializer Transform provided by the a-serialization module
- Method 2: Construct a new schema
import { $makeSchema, v } from 'vona-module-a-openapi';
// onions
config.onions = {
entity: {
'demo-student:student': {
fields: {
fullName: $makeSchema(
v.serializerGetter((data: EntityStudent) => {
return `${data.firstName} ${data.lastName}`;
}),
z.string(),
),
},
},
},
};@Serializer.custom/v.serializerCustom
For example, convert the name field value in EntityStudent to uppercase
1. @Serializer.custom
class EntityStudent {
+ @Serializer.custom((value: string) => {
+ return value.toUpperCase();
+ })
@Api.field(v.title($locale('Name')))
name: string;
}2. v.serializerCustom
class EntityStudent {
@Api.field(
+ v.serializerCustom((value: string) => {
+ return value.toUpperCase();
+ }),
v.title($locale('Name')),
)
name: string;
}3. App Config
Configuration can be modified in App Config
src/backend/config/config/config.ts
- Method 1: Directly Modify OpenAPI Parameters
// onions
config.onions = {
entity: {
'demo-student:student': {
fields: {
name: {
serializerTransforms: {
'a-serialization:custom': {
custom: (value: string) => {
return value.toUpperCase();
},
},
},
},
},
},
},
};a-serialization:custom: Serializer Transform provided by the a-serialization module
- Method 2: Construct a New Schema
import { $makeSchema, v } from 'vona-module-a-openapi';
// onions
config.onions = {
entity: {
'demo-student:student': {
fields: {
name: $makeSchema(
v.serializerCustom((value: string) => {
return value.toUpperCase();
}),
z.string(),
),
},
},
},
};