Custom identity functions for composability
npm install identitateA tiny custom identity function creator for composable softwares.
- Usage
- Pre-built methods
- identity
- identitySecond
- identityLast
- identitySecondLast
- Custom methods
- createIdentity
- Browser support
- Development
``javascript
import { createIdentity, identity, identitySecond, identityLast, identitySecondLast } from 'identitate';
// use built-in methods
console.log(identity('first', 'second', 'third', 'fourth', 'fifth')); // 'first'
console.log(identitySecond('first', 'second', 'third', 'fourth', 'fifth')); // 'second'
console.log(identityLast('first', 'second', 'third', 'fourth', 'fifth')); // 'fifth'
console.log(identitySecondLast('first', 'second', 'third', 'fourth', 'fifth')); // 'fourth'
// or create your own
const identityThird = createIdentity(2);
const identityThirdLast = createIdentity(-3);
const identityFirstNested = createIdentity(0, 'deeply[0].nested');
console.log(identityThird('first', 'second', 'third', 'fourth', 'fifth')); // 'third'
console.log(identityThirdLast('first', 'second', 'third', 'fourth', 'fifth')); // 'third'
console.log(identityFirstNested({ deeply: [{ nested: 'value' }] }, 'second', 'third', 'fourth', 'fifth')); // 'value'
`
#### identity
_returns first argument passed to it_
The classic identity function:
`javascript`
console.log(identity('first', 'second', 'third', 'fourth', 'fifth')); // 'first'
#### identitySecond
_returns second argument passed to it_
`javascript`
console.log(identitySecond('first', 'second', 'third', 'fourth', 'fifth')); // 'second'
Example usage when creating meta properties with the popular redux-actions package:
`javascript
import { identity, identitySecond } from 'identitate';
import { createAction } from 'redux-actions';
export const doThing = createAction('DO_THING', identity, identitySecond);
console.log(doThing('payload', 'meta')); // {meta: 'meta', payload: 'payload', type: 'DO_THING'}
`
#### identityLast
_returns last argument passed to it, regardless of total number of arguments_
`javascript`
console.log(identityLast('first', 'second', 'third', 'fourth', 'fifth')); // 'fifth'
console.log(identityLast('first', 'second', 'third')); // 'third'
#### identitySecondLast
_returns second-to-last argument passed to it, regardless of total number of arguments_
`javascript`
console.log(identitySecondLast('first', 'second', 'third', 'fourth', 'fifth')); // 'fourth'
console.log(identitySecondLast('first', 'second', 'third')); // 'second'
#### createIdentity
_creates a new identity method based on the parameters passed_
createIdentity(position: number[, path: (Array
`javascript
// use a positive number to get the index of the arguments (zero-indexed)
const identityFourth = createIdentity(3);
console.log(identityLast('first', 'second', 'third', 'fourth', 'fifth')); // 'fourth'
// use a negative number to get the index of the arguments relative to the last
const identityThirdLast = createIdentity(-3);
console.log(identityLast('first', 'second', 'third', 'fourth', 'fifth')); // 'third'
// include a path to get the deeply-nested value of that argument
const identityNested = createIdentity(0, 'deeply.nested');
console.log(identityNested({ deeply: { nested: 'value' } })); // 'value'
`
The path parameter uses pathington under the hood for path parsing, so
check there for valid values.
- Chrome (all versions)
- Firefox (all versions)
- Edge (all versions)
- Opera 15+
- IE 9+
- Safari 6+
- iOS 8+
- Android 4+
Standard stuff, clone the repo and npm install dependencies. The npm scripts available:
- build => run webpack to build development dist file with NODE_ENV=developmentbuild:minified
- => run webpack to build production dist file with NODE_ENV=productiondev
- => run webpack dev server to run example app / playgrounddist
- => runs build and build-minifiedlint
- => run ESLint against all files in the src folderprepublish
- => runs compile-for-publishprepublish:compile
- => run lint, test:coverage, transpile:es, transpile:lib, disttest
- => run AVA test functions with NODE_ENV=testtest:coverage
- => run test but with nyc for coverage checkertest:watch
- => run test, but with persistent watchertranspile:lib
- => run babel against all files in src to create files in libtranspile:es
- => run babel against all files in src to create files in es, preserving ES2015 modules (forpkg.module`)