Skip to content
This repository has been archived by the owner on May 22, 2023. It is now read-only.

yagni-js/yagni

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

83 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

yagni

Yet another pure functional frontend library.

Pure functional in this context means functional code style - library code is linted using eslint-plugin-functional and eslint-plugin-better. Javascript code is purely functional with some exceptions:

  • tap() function, used for controllable side effects,
  • mutate() function, used for controllable mutations,
  • always() function, used to always return the same value,
  • lazy() function, used for lazy calculations,
  • promise() function, used to create new Promise instance.

Installation

Using npm:

$ npm install --save-dev @yagni-js/yagni

Using yarn:

$ yarn add -D @yagni-js/yagni

Usage

Source code is written using ES6 modules, built using rollup and distributed in two formats - as CommonJS module and as ES6 module.

CommonJS usage:

const _ = require('@yagni-js/yagni');

ES6 module usage:

import * as _ from '@yagni-js/yagni';
// or
import { pipe, transform, map } from '@yagni-js/yagni';

Documentation

Not yet available, please check sources.

Example

Here is a function to convert an array of objects to http request query string:

import * as _ from '@yagni-js/yagni';


const toQuery = _.pipe([
  _.map(
    _.pipe([
      _.transformArr([
        _.pick('key'),
        _.pipe([
          _.pick('value'),
          encodeURIComponent
        ])
      ]),
      _.join('=')
    ])
  ),
  _.join('&'),
  _.concat('?')
]);

Having input as:

const params = [
  {key: 'name', value: 'John Smith'},
  {key: 'age', value: 35},
  {key: 'country', value: 'UK'}
];

the result will be the following:

const query = toQuery(params);
// query === '?name=John%20Smith&age=35&country=UK'

License

Unlicense