1.0.8 • Published 4 years ago
object-adaptation-js v1.0.8
Object adaptation js
Adapt plain objects freely
Usage
Object Adaption Js allows you to adapt plain objects through mutations. Mutations are functions used to partially adapt object properties. Decide what properties to adapt and write structured mutations for it, quite easy! See below examples on how it may look in practice.
Example 1: Capitalize Names
const {
createShapeMutation,
createShapeConfiguration,
adaptToShape,
} = require('object-adaptation-js')
const person = { firstName: 'john', lastName: 'doe' }
const capitalizeString = string =>
string.charAt(0).toUpperCase() + string.slice(1)
const firstNameMutation = createShapeMutation(['firstName'], (key, value) => {
const capitalizedFirstName = capitalizeString(value)
return { [key]: capitalizedFirstName }
})
const lastNameMutation = createShapeMutation(['lastName'], (key, value) => {
const capitalizedLastName = capitalizeString(value)
return { [key]: capitalizedLastName }
})
const shapeConfiguration = createShapeConfiguration(['firstName', 'lastName'], {
mutations: [firstNameMutation, lastNameMutation],
})
// Results in: { firstName: 'John', lastName: 'Doe' }
return adaptToShape(person, shapeConfiguration)
Example 2: Construct Fullname Property
const {
createShapeMutation,
createShapeConfiguration,
adaptToShape,
} = require('object-adaptation-js')
const person = { firstName: 'John', lastName: 'Doe' }
const fullNameMutation = createShapeMutation(
['firstName', 'lastName'],
(key, value, mutatedPerson) => {
if (key === 'firstName') {
return { [key]: value, fullName: value }
}
if (key === 'lastName') {
const { fullName } = mutatedPerson
return { [key]: value, fullName: `${fullName} ${value}` }
}
return mutatedPerson
}
)
const shapeConfiguration = createShapeConfiguration(['firstName', 'lastName'], {
mutations: [fullNameMutation],
})
// Results in: { firstName: 'John', lastName: 'Doe', fullName: 'John Doe' }
return adaptToShape(person, shapeConfiguration)
Example 3: Merge properties
const {
createShapeMutation,
createShapeConfiguration,
adaptToShape,
} = require('object-adaptation-js')
const person = {
firstName: 'John',
lastName: 'Doe',
address: {
street: 'John Doe Street 12',
city: 'Stockholm',
country: 'Sweden',
zip: 12345,
},
}
const addressMutation = createShapeMutation(['address'], (key, value) => {
const { street, city, zip } = value
return { [key]: `${street}, ${zip}, ${city}` }
})
const shapeConfiguration = createShapeConfiguration(
['firstName', 'lastName', 'address'],
{
mutations: [addressMutation],
}
)
// Results in: { firstName: 'John', lastName: 'Doe', address: 'John Doe Street 12, 12345, Stockholm' }
return adaptToShape(person, shapeConfiguration)