Metamorphose is a library that allows you to transform your js objects on the fly by pre-defined schemas.
- Extend schemas
- Default values
- Nested schemas
- Transformations
- Dot notation
- Type validation (work in progress)
Here is a simple example that tries to include most of the features of metamorphosis:
const Base = new SchemaObject({
brand: {
type: String,
key: 'brand',
transform: (brand) => brand.toUpperCase()
},
isPrivate: 'isPrivate'
});
const Spec = new SchemaObject({
size: {
key: 'size',
transform: (size) => `${size}"`
},
connectors: {
key: ':root',
transform: (tv) => (tv.videoConnectors + tv.audioConnectors).split(', ')
}
});
const Tv = Base.extends({
specs: { key: ':root', type: Spec },
price: { key: 'price', defaults: 'N/A' },
internetConnection: {
key: 'others.hasInternetConnection',
transform: (value) => value ? 'check' : 'not check'
}
});
const original = {
brand: 'Grundig',
thisShouldBeIgnored: 'HEY',
isPrivate: true,
size: 42,
quality: 'Full HD',
others: { hasInternetConnection: true },
videoConnectors: '1 x Coaxial Digital Audio, 1 x Component Video, 1 x Composite Video, 2 x HDMI',
audioConnectors: '1 x Headphone, 1 x PC Audio In, 1 x RCA Audio L+R'
};
const result = Tv.create(original);
{
brand: 'GRUNDIG',
isPrivate: true,
price: 'N/A',
specs: {
size: '42"',
connectors: [
'1 x Coaxial Digital Audio',
'1 x Component Video',
'1 x Composite Video',
'2 x HDMI1 x Headphone',
'1 x PC Audio In',
'1 x RCA Audio L+R'
]
},
internetConnection: 'check'
}