🧰 @exposition/sdk
Utils of the @exposition
library,
to create and update the state in a non-mutating way.
Install
pnpm add -D @exposition/sdk
yarn add -D @exposition/sdk
npm install -D @exposition/sdk
createExpositionState
Create an Exposition state with all necessary data.
- Cast the config
as const
to get full type support. (as seen on line 8)✨ - The first
options
item will be set as theinitialValue
of theScenario
import { createExpositionState } from '@exposition/sdk'
// ✨ Cast the input config `as const` to get full type support
const expositionState = createExpositionState({
auth: {
options: ['valid ✅', 'deny ❌']
},
user: {
age: {
options: ['under 18 🐣', '18 🐓', 'over 18 🦖']
},
avatar: {
options: ['no avatar 💬', 'image 🤳']
}
}
} as const)
You can also create subgroups by defining further elements inside the configuration file as you can see in this example.
The last option MUST have an options
key for internal type inference.
import { createExpositionState } from '@exposition/sdk'
const expositionState = createExpositionState({
user: {
age: {
options: ['under 18 🐣', '18 🐓', 'over 18 🦖']
},
avatar: {
options: ['no avatar 💬', 'image 🤳']
},
auth: {
options: ['valid ✅', 'deny ❌']
},
rights: {
users: {
create: {
options: ['yes ✅', 'no ❌']
},
read: {
options: ['yes ✅', 'no ❌']
},
update: {
options: ['yes ✅', 'no ❌']
},
delete: {
options: ['yes ✅', 'no ❌']
}
}
}
}
} as const)
updateExpositionValues
Update the values of the given ExpositionState
and create a new ExpositionState
state.
const expositionState = createExpositionState({
autobot: { options: ['Optimus Prime 🚚', 'Bumblebee 🚗'] },
decepticon: { options: ['Megatron ✈️', 'Starscream 🛩️'] },
} as const)
const updatedExposition = updateExpositionValues(
expositionState,
{ autobot: 'Bumblebee 🚗' }
)
getExpositionValues(updatedExposition)
// { autobot: 'Bumblebee 🚗', decepticon: 'Megatron ✈️' }
getExpositionValues
Extract the current values from a given ExpositionState
.
const expositionState = createExpositionState({
base: {
options: [
'🍚 Rice - Cool',
'🍝 Pasta - Mama Mia',
],
},
})
getExpositionValues(expositionState) // { base: "🍚 Rice - Cool" }
getInitialExpositionValues
Extract the initials values from a given ExpositionState
.
const expositionState = createExpositionState({
progress: {
options: [
'🐛 Small',
'🦋 Big',
],
},
})
const updatedExposition = updateExpositionValues(expositionState, { progress: '🦋 Big' })
getInitialExpositionValues(updatedExposition) // { progress: "🐛 Small" }
resetExpositionValues
Reset the values of a given ExpositionState
to their initialValue.
const expositionState = createExpositionState({
character: { options: ['Dio 🌎', 'JoJo 🌟'] },
} as const)
const updatedExposition = updateExpositionValues(
expositionState,
{ character: 'JoJo 🌟' }
)
getExpositionValues(updatedExposition) // { character: "JoJo 🌟" }
const revertedExposition = resetExpositionValues(updatedExposition)
getExpositionValues(revertedExposition) // { character: "Dio 🌎" }