https://github.com/canastro/metamorphosis
Transform your js objects on the fly by pre-defined schemas
https://github.com/canastro/metamorphosis
Last synced: 9 months ago
JSON representation
Transform your js objects on the fly by pre-defined schemas
- Host: GitHub
- URL: https://github.com/canastro/metamorphosis
- Owner: canastro
- Created: 2016-10-15T17:41:01.000Z (over 9 years ago)
- Default Branch: master
- Last Pushed: 2016-10-16T14:45:12.000Z (over 9 years ago)
- Last Synced: 2025-10-13T11:37:29.512Z (9 months ago)
- Language: JavaScript
- Homepage:
- Size: 9.77 KB
- Stars: 0
- Watchers: 0
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
[](https://travis-ci.org/canastro/metamorphosis)
# Metamorphosis
Metamorphose is a library that allows you to transform your js objects on the fly by pre-defined schemas.
# Features
* Extend schemas
* Default values
* Nested schemas
* Transformations
* Dot notation
* Type validation (work in progress)
# Example
Here is a simple example that tries to include most of the features of metamorphosis:
## Schema Definition
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'
}
});
## Original Object
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'
};
## Apply schema
const result = Tv.create(original);
## Output
{
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'
}