fn-craft
v0.0.4
Published
Functional representation of imperative statements used every day
Downloads
5
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-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;
}
);