@zestlet/fp
Version:
TypeScript functional programming library with over 70% AI-generated code, featuring precise type inference and currying support
84 lines (59 loc) • 2.65 kB
Markdown
A modern TypeScript functional programming utility library built with AI assistance, focusing on precise type inference and currying support.
> This is currently in testing and subject to change, please proceed with caution.
This library is built using an AI-assisted development method:
- Core functions and type definitions generated with AI assistance
- Manual review and optimization of critical components
- Comprehensive test suite to ensure code quality
- Type system designed by AI and validated by humans
- **Development Stage**: Current version is being continuously improved, API may change
- **Type Safety**: Complete TypeScript support with precise type inference
- **Pure Functions**: Immutable operations with no side effects
- **Curried Design**: All functions support currying for partial application
- **Point-Free Friendly**: Optimized for functional composition patterns
- **Modern TypeScript**: Leverages latest TS features including const generics
- **Lightweight**: Focused API with no external dependencies
```bash
npm install @zestlet/fp
yarn add @zestlet/fp
pnpm add @zestlet/fp
```
```typescript
import { filter, map, path, flow, pluck, prop, sortBy } from '@zestlet/fp';
const getNamesByCompose = map(prop('name'));
// const getNamesByCompose: <T, K2 extends keyof T & "name">(array: ArrayContainer<T>) => T[K2][]
const getNames = pluck('name');
// const getNames: <T2 extends Record<PropertyKey, unknown>>(array: readonly T2[]) => T2["name"][]
const example = [
{ name: 'Alice', age: 18 },
{ name: 'Bob', age: 20 },
] as const;
const names = getNames(example);
// const names: ("Alice" | "Bob")[]
const namesByCompose = getNamesByCompose(example);
// const namesByCompose: ("Alice" | "Bob")[]
// Getting all valid order customer names, sorted by name
const getSortedCustomerNames = flow(
filter(path(['status', 'isValid'])),
map(path(['customer', 'name'])),
sortBy((a: string) => a.toLowerCase())
);
const orders = [
{ id: 1, customer: { name: 'Dave', id: 101 }, status: { isValid: true } },
{ id: 2, customer: { name: 'Alice', id: 102 }, status: { isValid: true } },
{ id: 3, customer: { name: 'Bob', id: 103 }, status: { isValid: false } },
] as const;
const customerNames = getSortedCustomerNames(orders);
// const customerNames: string[]
console.log(customerNames); // [ "Alice", "Dave" ]
```
MIT
Contributions are welcome! Please feel free to submit a Pull Request.