Skip to content

Commit 9e59b4c

Browse files
committed
docs(lib): refactor Readme
1 parent b025dda commit 9e59b4c

File tree

1 file changed

+60
-122
lines changed

1 file changed

+60
-122
lines changed

README.md

+60-122
Original file line numberDiff line numberDiff line change
@@ -1,145 +1,83 @@
1-
# 🔍 ArrayQuery
1+
# Array-Query
22

3-
ArrayQuery is a powerful TypeScript package that brings type-safe querying capabilities to local arrays. It allows you to manipulate and retrieve data from arrays with ease, using a familiar and intuitive API.
3+
[![npm version][npm-version-src]][npm-version-href]
4+
[![npm downloads][npm-downloads-src]][npm-downloads-href]
5+
[![bundle][bundle-src]][bundle-href]
6+
[![JSDocs][jsdocs-src]][jsdocs-href]
7+
[![License][license-src]][license-href]
48

5-
## ✨ Features
9+
> ### **Query JavaScript arrays with ORM-like syntax, benefiting from excellent type-safety & developer experience.**
610
7-
- 📄 **Pagination**: Easily paginate through large datasets
8-
- 🔎 **Searching**: Perform full-text search across multiple fields
9-
- 🧭 **Filtering**: Apply complex filters with various match modes
10-
- 🔢 **Sorting**: Order results based on any field
11+
## Key Features:
1112

12-
## 📦 Installation
13+
- 🛠 **Type-safe Querying:** Design your queries with strong typing (typed sort / search / filter keys & output)
14+
- 📄 **Pagination:** Easily paginate through large datasets with built-in support.
15+
- 🔎 **Full-text Search:** Perform comprehensive searches across multiple fields in your data.
16+
- 🧭 **Advanced Filtering:** Apply complex filters with various match modes for precise data retrieval. Supports logical grouping, nested conditions, and array matching.
17+
- 🔢 **Flexible Sorting:** Order results based on any field, with support for multiple sort criteria.
18+
- 🚀 **Lightweight and Fast:** Queries stay super fast, even with large datasets.
1319

14-
```bash
15-
npm install array-query
16-
```
20+
## INSTALLATION
1721

18-
## 🚀 Quick Start
22+
\```bash
23+
npm install @chronicstone/array-query
24+
yarn add @chronicstone/array-query
25+
pnpm add @chronicstone/array-query
26+
bun add @chronicstone/array-query
27+
\```
1928

20-
```typescript
21-
import { query } from 'array-query'
29+
## USAGE EXAMPLE
30+
31+
\```ts
32+
import { query } from '@chronicstone/array-query'
2233

2334
const users = [
24-
{ id: 1, fullName: 'John Doe', email: '[email protected]', status: 'active', createdAt: '2023-01-01' },
25-
{ id: 2, fullName: 'Jane Smith', email: '[email protected]', status: 'inactive', createdAt: '2023-02-15' },
35+
{ id: 1, fullName: 'John Doe', email: '[email protected]', age: 30, status: 'active', roles: ['admin'], createdAt: '2023-01-01' },
36+
{ id: 2, fullName: 'Jane Smith', email: '[email protected]', age: 28, status: 'inactive', roles: ['user'], createdAt: '2023-02-15' },
37+
{ id: 3, fullName: 'Bob Johnson', email: '[email protected]', age: 35, status: 'active', roles: ['user', 'manager'], createdAt: '2023-03-20' },
2638
// ... more users
2739
]
2840

29-
const result = query(users, {
30-
limit: 10,
41+
const { totalRows, totalPages, rows } = query(users, {
42+
// Pagination
3143
page: 1,
32-
search: {
33-
value: 'John',
34-
keys: ['fullName', 'email'],
35-
},
36-
sort: {
37-
key: 'createdAt',
38-
order: 'desc',
39-
},
40-
filter: [
41-
{
42-
key: 'status',
43-
matchMode: 'equals',
44-
value: 'active',
45-
},
46-
],
47-
})
48-
49-
console.log(result.data) // Filtered and paginated user data
50-
console.log(result.totalPages) // Total number of pages
51-
console.log(result.totalRows) // Total number of matching rows
52-
```
53-
54-
## 📘 API Reference
55-
56-
### `query(data: T[], params: QueryParams): QueryResult<T>`
57-
58-
The main function to query your array data.
59-
60-
#### QueryParams
61-
62-
- `page: number`: The page number to retrieve
63-
- `limit: number`: The number of items per page
64-
- `sort?: { key: string, order?: 'asc' | 'desc' }`: Sorting configuration
65-
- `search?: { value: string, keys: string[] }`: Search configuration
66-
- `filter?: QueryFilter[]`: Array of filters to apply
67-
68-
#### QueryFilter
69-
70-
- `key: string`: The property to filter on
71-
- `value: any`: The value to compare against
72-
- `matchMode: FilterMatchMode`: The type of comparison to make
73-
- `operator?: Operator` (`'AND' | 'OR' | (() => 'AND' | 'OR')`): How to combine multiple matches in arrays
74-
- `params?: MatcherParams`: Additional parameters for the match mode
75-
76-
### FilterMatchMode
77-
78-
- `'contains'`: Check if the value contains the filter value
79-
- `'between'`: Check if the value is between two values (for numbers or dates)
80-
- `'equals'`: Exact match
81-
- `'notEquals'`: Inverse of exact match
82-
- `'greaterThan'`: Greater than comparison
83-
- `'greaterThanOrEqual'`: Greater than or equal comparison
84-
- `'lessThan'`: Less than comparison
85-
- `'lessThanOrEqual'`: Less than or equal comparison
86-
- `'exists'`: Check if the property exists
87-
- `'objectStringMap'`: Complex object mapping
88-
- `'arrayLength'`: Check the length of an array
89-
- `'objectMatch'`: Complex object matching
90-
91-
## 🌟 Advanced Usage
92-
93-
### Complex Filtering
44+
limit: 10,
9445

95-
```typescript
96-
const result = query(users, {
97-
filter: [
98-
{
99-
key: 'account.type',
100-
matchMode: 'equals',
101-
value: ['admin', 'manager'],
102-
},
103-
{
104-
key: 'lastLogin',
105-
matchMode: 'greaterThan',
106-
value: '2023-01-01',
107-
params: { dateMode: true },
108-
},
109-
{
110-
key: 'tags',
111-
matchMode: 'arrayLength',
112-
value: 3,
113-
},
46+
// Sorting
47+
sort: [
48+
{ key: 'age', dir: 'desc' },
49+
{ key: 'fullName', dir: 'asc' }
11450
],
115-
})
116-
```
11751

118-
### Object Map Filtering
52+
// Searching
53+
search: {
54+
value: 'john',
55+
keys: ['fullName', 'email']
56+
},
11957

120-
```typescript
121-
const result = query(users, {
58+
// Filtering
12259
filter: [
123-
{
124-
key: 'account',
125-
matchMode: 'objectMatch',
126-
params: {
127-
properties: [{ key: 'type', matchMode: 'equals' }, { key: 'id', matchMode: 'equals' }],
128-
operator: 'AND',
129-
},
130-
value: {
131-
type: 'admin',
132-
id: 1,
133-
},
134-
},
135-
],
60+
{ key: 'status', matchMode: 'equals', value: 'active' },
61+
{ key: 'age', matchMode: 'greaterThan', value: 25 },
62+
]
13663
})
137-
```
64+
\```
65+
66+
This example demonstrates pagination, multi-field sorting, full-text searching, and complex filtering with nested conditions and array field matching.
13867

139-
## 🤝 Contributing
68+
## License
14069

141-
Contributions, issues, and feature requests are welcome! Feel free to check [issues page](https://github.com/yourusername/array-query/issues).
70+
[MIT](./LICENSE) License © 2023-PRESENT [Cyprien THAO](https://github.com/ChronicStone)
14271

143-
## 📄 License
72+
<!-- Badges -->
14473

145-
This project is [MIT](https://opensource.org/licenses/MIT) licensed.
74+
[npm-version-src]: https://img.shields.io/npm/v/@chronicstone/array-query?style=flat&colorA=080f12&colorB=1fa669
75+
[npm-version-href]: https://npmjs.com/package/@chronicstone/array-query
76+
[npm-downloads-src]: https://img.shields.io/npm/dm/@chronicstone/array-query?style=flat&colorA=080f12&colorB=1fa669
77+
[npm-downloads-href]: https://npmjs.com/package/@chronicstone/array-query
78+
[bundle-src]: https://img.shields.io/bundlephobia/minzip/@chronicstone/array-query?style=flat&colorA=080f12&colorB=1fa669&label=minzip
79+
[bundle-href]: https://bundlephobia.com/result?p=@chronicstone/array-query
80+
[license-src]: https://img.shields.io/github/license/ChronicStone/array-query.svg?style=flat&colorA=080f12&colorB=1fa669
81+
[license-href]: https://github.com/ChronicStone/array-query/blob/main/LICENSE
82+
[jsdocs-src]: https://img.shields.io/badge/jsdocs-reference-080f12?style=flat&colorA=080f12&colorB=1fa669
83+
[jsdocs-href]: https://www.jsdocs.io/package/@chronicstone/array-query

0 commit comments

Comments
 (0)