nejquery
Version:
A lightweight functional JavaScript utility library inspired by Ramda, Lodash, and FP principles.
156 lines (100 loc) โข 3.86 kB
Markdown
# nejQuery
[](https://www.npmjs.com/package/nejquery)


**nejQuery** is a lightweight, functional JavaScript utility library โ inspired by Ramda, Lodash, and FP principles โ with a focus on **data-last**, **curried**, and **composable** functions. It offers a rich set of helpers for arrays, strings, numbers, objects, predicates, ADTs, and more.
> It's like Ramda with fewer gotchas, Lodash with less weight, and jQuery with... well, no jQuery.
## ๐ Why not just use Ramda or Lodash?
> Honestly? You should. They're battle-tested, community-loved, and full-featured.
> But if you've ever screamed "why is this curried nonsense so weird" or thought Lodash was a bit... much โ welcome to **nejQuery**, the utility library your inner minimalist didnโt know it needed.
## โจ Features
- Data-last, curried function signatures
- Immutable and side-effect-aware utilities
- Composable with `pipe()` and `compose()`
- Includes support for custom ADTs like `Maybe` and `Result`
- Written in plain JavaScript (no build step required)
## ๐ฆ Installation
```bash
npm install nejquery
```
Or add manually:
```html
<script src="path/to/nejquery.js"></script>
```
## ๐ง Usage
Instead of writing imperative code like this:
```js
const nums = [1, 2, 3, 4];
const result = [];
for (let i = 0; i < nums.length; i++) {
const x = nums[i];
if (x % 2 === 1) {
result.push(x + 1);
}
}
console.log(result); // [2, 4]
```
...you can write code declaratively like this:
```js
import { pipe, map, filter, add } from 'nejquery'
const nums = [1, 2, 3, 4]
const isOdd = x => x % 2 === 1
// Partially applied functions
const add1 = add(1)
const filterIsOdd = filter(isOdd)
const mapIncrement = map(add1)
// Using Pipe for function composition
const incrementOdds = pipe(filterIsOdd, mapIncrement)
console.log(incrementOdds(nums)) // => [2, 4]
```
## ๐งฐ Categories
nejQuery is organized into the following sections:
- **[Array functions](./nejquery_docs.md#array-functions)**
- **[Number functions](./nejquery_docs.md#number-functions)**
- **[String functions](./nejquery_docs.md#string-functions)**
- **[Objects](./nejquery_docs.md#objects)**
- **[Utils](./nejquery_docs.md#utils)**
- **[Debugging functions](./nejquery_docs.md#debugging-functions)**
- **[Predicates](./nejquery_docs.md#predicates)**
- **[Helpers](./nejquery_docs.md#helpers)**
Full documentation is available in [**nejquery_docs.md**](./nejquery_docs.md)
## ๐งช ADT Support
Use `createADT` to build expressive data structures:
```js
const Vehicle = createADT({
Car: ['make', 'model'],
Bicycle: ['type'],
Truck: ['make', 'payloadCapacity']
})
const myVehicle = Vehicle.Car('Toyota', 'Camry')
match(myVehicle, {
Car: ({make, model}) => console.log(`Car: ${make} ${model}`),
Bicycle: ({type}) => console.log(`Bicycle: ${type}`),
Truck: ({make, payloadCapacity}) => console.log(`Truck: ${make}, Payload: ${payloadCapacity}kg`)
})
```
Includes built-in ADTs: `Maybe`, `Result` and matching helpers.
## ๐ Documentation
All functions are documented with descriptions, examples, and implementations in [**nejquery_docs.md**](./nejquery_docs.md)
## ๐ง Philosophy
- Keep functions small and pure
- Prioritize readability and composability
- Never mutate inputs
- Empower functional programming in everyday JavaScript
## ๐ฃ Contributing
Got a function to propose? Open a PR or an issue โ contributions are welcome!
> **Disclaimer:** nejQuery is not affiliated with or endorsed by the jQuery Foundation or OpenJS Foundation.
> Plus, I have great respect for jQuery. My grandfather used to use it.
## ๐ License
MIT