ifless
TypeScript icon, indicating that this package has built-in type declarations

1.2.0 • Public • Published

ifless NPM version

Get rid of if statements in your code by using convenient api

Install

npm install ifless

or

yarn add ifless

Usage

Ifless

import Ifless from 'ifless';

const ifless = new Ifless();
const result = ifless.when(() => false, 'foo').when(() => true, 'bar').result;
console.log(result); // bar

IflessNumber

import {IflessNumber} from 'ifless';

const iflessNumber = new IflessNumber(12);
const result = iflessNumber.whenLt(7, 'bar').whenGt(10, 'baz').result;
console.log(result); // baz

IflessString

import {IflessString} from 'ifless';

const iflessString = new IflessString('O. Henry - The Remnants of the Code');
const result = iflessString
	.whenStartsWith('Mark Twain', 'Author is Mark Twain')
	.whenStartsWith('O. Henry', 'Author is O. Henry')
	.whenStartsWith('Ernest Hemingway', 'Author is Ernest Hemingway').result;
console.log(result); // Author is O. Henry

// Reset previously performed conditions
// and run another ones without creating a new instance
const result2 = iflessString
	.reset()
	.whenOneOf(['lar', 'dor', 'qin'], 'one of [lar, dor, qin]')
	.whenIncludes('Remnants', 'includes Remnants')
	.whenStartsWith('Mark Twain', 'Starts with "Mark Twain"').result;
console.log(result2); // includes Remnants

const result3 = iflessString
	.reset()
	.whenEndsWith('Parade', 'Ends with "Parade"')
	.whenEndsWith('Code', 'Ends with "Code"')
	.whenEndsWith('Unfulfilment', 'Ends with "Unfulfilment"').result;

const result3 = iflessString
	.reset()
    .registerFn('containsHenry', (subject) => subject.includes('Henry'))
    .registerFn('endsWithCode', (subject) => subject.endsWith('Code'))
    .execute()
    .whenPassed('contains Henry and ends with Code')
    .result()
console.log(result2); // contains Henry and ends with Code

IflessObject

import {IflessObject} from 'ifless';

const iflessObject = new IflessObject({foo: 'bar'});
const result = iflessObject
	.when(source => source.foo === 'qux', 'foo is qux')
	.when(source => source.foo === 'bar', 'foo is bar')
	.when(source => source.foo === 'corge', 'foo is corge').result;
console.log(result); // foo is bar

// the same with simplfied notation
const iflessObject2 = new IflessObject({foo: 'bar'});
const result2 = iflessObject2
	.whenPathEq('foo', 'qux', 'foo is qux')
	.whenPathEq('foo', 'bar', 'foo is bar')
	.whenPathEq('foo', 'corge', 'foo is corge').result;
console.log(result2); // foo is bar

const iflessObject3 = new IflessObject({
	message: 'feat: symbolics keys with added optional to definition, optional tuples',
	author: {
		name: 'ShawnMorreau'
	},
	date: new Date(2023, 6, 25),
});
const occurenceToEmojMapping : any = {
	0: '✨',
	1: '🌟',
	2: '🚀',
};
const result = iflessObject3
	.whenPathSatisfies(
		'message',
		(value: string) => value.startsWith('feat:'),
		'is feature',
	)
	.andWhenPathEq('author.name', 'ShawnMorreau', 'is feature and author is ShawnMorreau')
	.andWhenPathSatisfies('date', (value: Date) => value > new Date(2024, 1, 1), 'is feature and author is ShawnMorreau and after 2024')
	.otherwise('other commit')
	.whenOverResultFn(
		(result: string) => result.includes('is feature'),
		(result) => `${occurenceToEmojMapping[(result.match(/and/ig) || []).length]} ${result}`)
	.result;
console.log(result); // 🌟 is feature and author is ShawnMorreau

const iflessObject4 = new IflessObject({foo: 'bar', bar: {baz: 'qux'}});
const result3 = iflessObject4
	.whenPathSatisfies(
		'foo',
		value => value.startsWith('ro'),
		'subject.foo starts with "ro"',
	)
	.whenHasKey('notExistingKey', 'has notExistingKey')
	.whenPathSatisfies(
		'bar.baz',
		value => value.endsWith('ux'),
		'subject.bar.baz ends with "ux"',
	).result;
console.log(result3); // subject.bar.baz ends with "ux"

Screenshots

IflessString methods

License

MIT © Rushan Alyautdinov

Package Sidebar

Install

npm i ifless

Weekly Downloads

15

Version

1.2.0

License

MIT

Unpacked Size

45 kB

Total Files

6

Last publish

Collaborators

  • sinventor