0.0.4 • Published 11 months ago

fn-craft v0.0.4

Weekly downloads
-
License
MIT
Repository
github
Last release
11 months ago

fn-craft

npm version npm license

github workflow status

technology typescript

Set of functional helpers to replace imperative statements. "const over let" fans are welcome and that's just the beginning! 😎

Table of contents

Install

Using npm:

npm install fn-craft

Using yarn:

yarn add fn-craft

Typescript-first

fn-craft is written in TypeScript and fully typed.

The package is primarily designed for TypeScript projects, offering complete type definitions to enhance type safety and development efficiency. It addresses various use cases with thorough typing support. 🚀 JavaScript projects are also supported with full compatibility, ensuring easy integration.

Features

fif - Functional "if"

if..else example

import { fif } from 'fn-craft';

const isHappy = Math.random() > 0.5;
const phraseToSay = fif(
  isHappy,
  () => 'hooray',
  () => 'oh, no'
);

if example

else branch is optional. If you don't need it, skip the branch:

import { fif } from 'fn-craft';

const result = fif(
  isHappy,
  () => {
    // some logic
    return 'hooray';
  }
);

TypeScript

Using previous examples with TypeScript, fif return types are perfectly inferred.

// ✅ returned type: string | boolean

fif(
  isHappy,
  () => 'truthy',
  () => false
);

When else is omitted:

// ✅ returned type: string | undefined

const result = fif(
  isHappy,
  () => 'truthy'
);

ftry - Functional "try..catch..finally*"

try..catch example

import { ftry } from 'fn-craft';

function getFoodBox() {
  if (new Date().getHours() > 12) {
    throw new Error('Food box is empty');
  };

  return {
    fruits: {
      banana: 30,
      orange: 40
    }
  };
}

const fruits = ftry(
  () => {
    const foodBox = getFoodBox();
    return foodBox.fruits;
  },
  (error) => {
    logError(error);
    const defaultFruits = {
      apple: 10,
      banana: 20
    };
    console.log('Default fruits are used:', defaultFruits);
    return defaultFruits;
  }
);

try..catch..finally example

import { ftry } from 'fn-craft';

function getFoodBox() {
  if (new Date().getHours() > 12) {
    throw new Error('Food box is empty');
  };
  
  return {
    fruits: {
      banana: 30,
      orange: 40
    }
  };
}

const fruits = ftry(
  () => {
    const foodBox = getFoodBox();
    return foodBox.fruits;
  },
  (error) => {
    logError(error);
    const defaultFruits = {
      apple: 10,
      banana: 20
    };
    console.log('Default fruits are used:', defaultFruits);
    return defaultFruits;
  },
  () => {
    callFriendsToEat(); // or do some cleanup
    // return from here is IGNORED
  }
);

TypeScript

Using previous examples with Typescript, ftry return types are perfectly inferred.

// declared as:
function getFoodBox(): { fruits: { banana: number; orange: number; } }

// ✅ returned type: 
// { banana: number; orange: number; } | { apple: number; banana: number; }

ftry(
  () => {
    const foodBox = getFoodBox();
    return foodBox.fruits;
  },
  (error) => {
    logError(error);
    const defaultFruits = {
      apple: 10,
      banana: 20
    };
    console.log('Default fruits are used:', defaultFruits);
    return defaultFruits;
  }
);

License

MIT

0.0.4

11 months ago

0.0.3

11 months ago

0.0.3-10

11 months ago

0.0.3-9

11 months ago

0.0.2-alpha.4

11 months ago

0.0.2-alpha.3

11 months ago

0.0.2-alpha.2

11 months ago

0.0.2-alpha.1

11 months ago

0.0.1-alpha.1

11 months ago

0.0.1

11 months ago