modern-pick
Modern selector/picker library utilizing JavaScript template literals.
const data = weather: data: days: conditions: temperatuer: 26 );pick`weather.data.days[0].conditions.temperature`data;// 👉 26
Let's say you have a normalized Redux store.
users: byId: // 1: {} // 2: {} // 3: {}
And you want to select all users aged over 18.
const getUsersOver18 = pick`users.byId`;
Let's make the age threshold variable.
const getUsersOver = pick`users.byId`;const getUsersOver18 = ;
Let's limit the number of users to only first five.
const getUsersOver = pick`users.byId`;
Let's select only id
and name
fields.
const getUsersOver = pick`users.byId->{id,name}`;
Let's instead select only the last user and reformat our query to make it look smart.
const getUsersOver = pick` users.byId ->{id,name}`;
Let's break it down.
users.byId
— this is an accessor, it is compiled tostate = state.users.byId
.${u => over => u.age > over}
— this filter expression is compiled tostate = state.filter(u => u.age > over)
.${'-1:'}
— this is a range expression instart:end:step
format, it is compiled internally to a filter, too.->
— map operator->
tells us to dostate = state.map(...)
over the result set.{id,name}
— destructuring accessor is internally compiled tostate = (({id, name}) => ({id, name})(state)
.
All-in-all the above query is compiled to a JavaScript function like this:
const getUsersOver = { try state = stateusersbyId; state = Object; state = state; state = state; state = stat; return state; catch return def; };
Usage
Install.
npm i modern-pick
Import.
;
Reference
License
Unlicense — public domain.