@ngard/tiny-partial

1.0.1 • Public • Published

tiny-partial

source bundle size build status license

A minimal-weight utility similar to lodash.partial. For when every byte counts!


lodash.partial bundle size
tiny-partial bundle size


Syntax

partial(/* function [, arity] */)
partial._ // a placeholder for subsequent invocations

The partial._ placeholder can be used in place of any argument that will be supplied later. The next invocation of the returned function will fill those placeholders in first, then add arguments to the end of the list of arguments. Upon invoking the original function, any placeholders not filled with be converted to undefined

Parameters

function - A function to wrap.
arity - A (positive integer) count of how many arguments to expect. Defaults to the function length.

Return

A function that takes any number of arguments and either returns another function to gather more arguments or, if the number of argments meets or exceeds the arity, the result of the original function with those arguments applied. The returned function(s) each have a .value() method that will force the original function to be called with the currently gathered arguments.

Example

import { partial } from '@ngard/tiny-partial';

function add(a, b) { return a + b; }
// add.length = 2, the number of arguments it expects

const partialAdd = partial(add);
const addTwo = partialAdd(2);

console.log(addTwo(5)); // logs '7'
import { partial } from '@ngard/tiny-partial';

function greet(name, title = 'Your Lordship') {
  return `Good day,  ${name}, ${title}`;
}
// greet.length = 1, because defaulted arguments are not 'expected'

const partialGreet = partial(greet, 2);
const greetBob = partialGreet('Bob');

console.log(greetBob('my friend')); // logs 'Good day, Bob, my friend'
console.log(greetBob()); // logs 'Good day, Bob, Your Lordship'
import { partial } from '@ngard/tiny-partial';

function sum(...numbers) {
  return numbers.reduce((total, number) => total + number);
}
// sum.length = 0, because rest arguments are not 'expected'

const partialSum = partial(sum, Infinity);

// call `.value()` on an infinite partial function to call the
// original function with the gathered arguments
const total = partialSum(1)(2, 3)(4).value();

console.log(total); // logs '10'
import { partial } from '@ngard/tiny-partial';

function log(...statements) {
  console.log('logging', ...statements);
}

const partialLog = partial(log, Infinity);
const { _ } = partial;

partialLog('hello', 'world')(',', 'my', 'name', 'is')('Nick').value() // "hello world, my name is Nick
// use placeholders to change order
partialLog('hello', _, ', my name is', _, '!')('Fred')('Nick').value() // "hello Fred, my name is Nick!

Readme

Keywords

Package Sidebar

Install

npm i @ngard/tiny-partial

Weekly Downloads

1

Version

1.0.1

License

MIT

Unpacked Size

10.6 kB

Total Files

7

Last publish

Collaborators

  • ngard