Giter VIP home page Giter VIP logo

modern-pick's Introduction

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${({age}) => age > 18}`();

Let's make the age threshold variable.

const getUsersOver = pick`users.byId${({age}) => over => u.age > over}`;
const getUsersOver18 = getUsersOver(18);

Let's limit the number of users to only first five.

const getUsersOver = pick`users.byId${u => over => u.age > over}${'0:5'}`;

Let's select only id and name fields.

const getUsersOver = pick`users.byId${u => over => u.age > over}${'0:5'}->{id,name}`;

Let's instead select only the last user and reformat our query to make it look smart.

const getUsersOver = pick`
  users.byId
  ${u => over => u.age > over}
  ${'-1:'}
  ->{id,name}
`;

Let's break it down.

  • users.byId โ€” this is an accessor, it is compiled to state = state.users.byId.
  • ${u => over => u.age > over} โ€” this filter expression is compiled to state = state.filter(u => u.age > over).
  • ${'-1:'} โ€” this is a range expression in start:end:step format, it is compiled internally to a filter, too.
  • -> โ€” map operator -> tells us to do state = state.map(...) over the result set.
  • {id,name} โ€” destructuring accessor is internally compiled to state = (({id, name}) => ({id, name})(state).

All-in-all the above query is compiled to a JavaScript function like this:

const getUsersOver = (over) => (state, def) => {
  try {
    state = state.users.byId;
    state = Object.values(state);
    state = state.filter(u => u.age > over);
    state = state.filter((_, i) => i === state.length - 1);
    state = state.map(({id, name}) => ({id, name}));
    return state;
  } catch {
    return def;
  }
};

Usage

Install.

npm i modern-pick

Import.

import {id, idx, pick} from 'modern-pick';

Reference

  • id โ€” identity function
  • idx โ€” basic accessors
  • pick โ€” pimped accessors

License

Unlicense โ€” public domain.

modern-pick's People

Contributors

dependabot[bot] avatar semantic-release-bot avatar streamich avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.