fn-craft
v0.0.4
Published
Functional representation of imperative statements used every day
Downloads
16
Readme
fn-craft
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-craftUsing yarn:
yarn add fn-craftTypescript-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;
}
);