Skip to content

A TypeScript utility library for expressive switch expressions with support for boolean conditions, value matching, and function conditions

Notifications You must be signed in to change notification settings

MegamindAme/switch-expressions

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Switch Expressions

A TypeScript utility library for expressive switch expressions with support for boolean conditions, value matching, and function conditions.

Installation

npm install switch-expressions

Usage

Boolean Conditions

import { _switch, _s } from 'switch-expressions';

const result = _switch<boolean, string>(true)
    .e(false, 'false')
    .e(true, 'true')
    .d('default');

console.log(result); // 'true'

// Using short name
const shortResult = _s<boolean, string>(true)
    .e(false, 'false')
    .e(true, 'true')
    .d('default');

console.log(shortResult); // 'true'

Value Matching

enum Status {
    Active = 'active',
    Inactive = 'inactive',
    Pending = 'pending'
}

const result = _switch<Status, string>(Status.Active)
    .e(Status.Active, 'User is active')
    .e(Status.Inactive, 'User is inactive')
    .e(Status.Pending, 'User is pending')
    .d('Unknown status');

console.log(result); // 'User is active'

Function Conditions

interface User {
    role: string;
    permissions: string[];
}

const isAdmin = (user: User) => user.role === 'admin';
const hasWritePermission = (user: User) => user.permissions.includes('write');
const isGuest = (user: User) => user.role === 'guest';

const user: User = {
    role: 'user',
    permissions: ['read', 'write']
};

const result = _switch<User, string>(user)
    .e(isAdmin, 'Admin Access')
    .e(hasWritePermission, 'Write Access')
    .e(isGuest, 'Guest Access')
    .d('No Access');

console.log(result); // 'Write Access'

Complex Object Transformation

interface Product {
    type: string;
    price: number;
    inStock: boolean;
}

const isElectronics = (p: Product) => p.type === 'electronics';
const isExpensive = (p: Product) => p.price > 1000;
const isAvailable = (p: Product) => p.inStock;

const product: Product = {
    type: 'electronics',
    price: 1200,
    inStock: true
};

const result = _switch<Product, string>(product)
    .e(isElectronics, 'Electronics Department')
    .e(isExpensive, 'Premium Products')
    .e(isAvailable, 'In Stock')
    .d('Regular Product');

console.log(result); // 'Electronics Department'

API Reference

Main Functions

  • _switch<T, V = T>(value: T): Creates a switch expression chain
  • _s<T, V = T>(value: T): Short name for _switch

Switch Chain Methods

  • expression(condition: boolean | T | Condition<T>, value: V): Adds a condition and its corresponding value
  • e(condition: boolean | T | Condition<T>, value: V): Short name for expression
  • default(value: V): Sets the default value if no conditions match
  • d(value: V): Short name for default

Types

  • Condition<T>: A function type that takes a value of type T and returns a boolean
  • SwitchChain<T, V>: The interface for the switch chain methods

License

MIT

About

A TypeScript utility library for expressive switch expressions with support for boolean conditions, value matching, and function conditions

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published