Compare commits

..

No commits in common. "master" and "v1.0.7" have entirely different histories.

8 changed files with 2805 additions and 7212 deletions

View File

@ -1,29 +0,0 @@
# Changelog
## 2025-01-04 - 1.1.0 - feat(core)
Add concurrent processing support
- Introduced ConcurrentProcessor class for handling asynchronous operations with a concurrency limit.
## 2024-05-29 - 1.0.8 - Documentation
Updated project description for clarity and accuracy.
- Enhanced documentation details in the project description.
## 2024-04-01 to 2024-04-27 - 1.0.5 to 1.0.7 - Maintenance and Configuration Updates
Multiple updates focusing on configuration and core functionality.
- Updated `tsconfig` for improved TypeScript setup.
- Refined `npmextra.json` to configure `githost`.
- Applied numerous core functionality enhancements and fixes.
## 2023-07-10 to 2023-08-02 - 1.0.3 to 1.0.4 - Organizational Changes and Fixes
Transition to new organizational structure and related updates.
- Implemented a new organizational scheme for the project.
- Applied essential fixes to core components ensuring stability.
## 2021-06-29 to 2021-06-30 - 1.0.1 to 1.0.2 - Core Fixes
Addressed core system updates and enhancements.
- Implemented bug fixes to enhance core functionality.

View File

@ -5,20 +5,19 @@
"githost": "code.foss.global",
"gitscope": "push.rocks",
"gitrepo": "smartarray",
"description": "A TypeScript library for enhancing array manipulation with asynchronous operations such as mapping, filtering, and deduplication.",
"description": "A library providing asynchronous operations like filter, map, and deduplication for arrays in TypeScript.",
"npmPackagename": "@push.rocks/smartarray",
"license": "MIT",
"projectDomain": "push.rocks",
"keywords": [
"TypeScript",
"asynchronous programming",
"array manipulation",
"array mapping",
"asynchronous array operations",
"typescript library",
"array filtering",
"deduplication",
"array mapping",
"array deduplication",
"async/await",
"software development",
"npm package",
"modern JavaScript development",
"open source"
]
}

View File

@ -1,8 +1,8 @@
{
"name": "@push.rocks/smartarray",
"version": "1.1.0",
"version": "1.0.7",
"private": false,
"description": "A TypeScript library for enhancing array manipulation with asynchronous operations such as mapping, filtering, and deduplication.",
"description": "A library providing asynchronous operations like filter, map, and deduplication for arrays in TypeScript.",
"main": "dist_ts/index.js",
"typings": "dist_ts/index.d.ts",
"author": "Lossless GmbH",
@ -13,12 +13,12 @@
"buildDocs": "tsdoc"
},
"devDependencies": {
"@git.zone/tsbuild": "^2.2.0",
"@git.zone/tsbundle": "^2.1.0",
"@git.zone/tsrun": "^1.3.3",
"@git.zone/tsbuild": "^2.1.66",
"@git.zone/tsbundle": "^2.0.8",
"@git.zone/tsrun": "^1.2.44",
"@git.zone/tstest": "^1.0.77",
"@push.rocks/tapbundle": "^5.5.4",
"@types/node": "^22.10.5"
"@push.rocks/tapbundle": "^5.0.12",
"@types/node": "^20.4.6"
},
"browserslist": [
"last 1 chrome versions"
@ -37,20 +37,14 @@
],
"type": "module",
"keywords": [
"TypeScript",
"asynchronous programming",
"array manipulation",
"array mapping",
"asynchronous array operations",
"typescript library",
"array filtering",
"deduplication",
"array mapping",
"array deduplication",
"async/await",
"software development",
"npm package",
"modern JavaScript development",
"open source"
],
"homepage": "https://code.foss.global/push.rocks/smartarray",
"repository": {
"type": "git",
"url": "https://code.foss.global/push.rocks/smartarray.git"
}
]
}

9798
pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff

102
readme.md
View File

@ -1,109 +1,79 @@
```markdown
# @push.rocks/smartarray
A library providing asynchronous operations like filter, map, and deduplication for arrays in TypeScript.
a package exposing async manipulation for arrays
## Install
To install `@push.rocks/smartarray` in your project, run the following command:
To add `@push.rocks/smartarray` to your project, run the following command:
```bash
npm install @push.rocks/smartarray --save
```
Make sure you have Node.js and npm installed beforehand.
This will install the package and add it to your project's dependencies. Ensure you have Node.js and npm installed on your machine before running this command.
## Usage
The `@push.rocks/smartarray` library is designed to facilitate asynchronous array operations in TypeScript projects. It simplifies tasks like mapping, filtering, and deduplication by embracing async/await patterns, making it an invaluable tool for modern JavaScript development. Below, we delve into the capabilities of this library, providing comprehensive examples to illustrate its use in a variety of scenarios.
`@push.rocks/smartarray` is designed to enhance array manipulation with asynchronous operations in TypeScript. Below, we explore various functionalities provided by the package, including mapping, filtering, and deduplication, with a focus on their asynchronous nature.
### Importing the Library
### Getting Started
Before you can utilize the library's functions, you need to import them into your TypeScript files. Depending on your use case, you can import specific functions or the entire library:
To use `@push.rocks/smartarray`, first import the functionalities you require:
```typescript
import { map, filter, deduplicate } from '@push.rocks/smartarray';
```
### Async Map: Transforming Arrays
### Mapping Arrays Asynchronously
The `map` function lets you apply an asynchronous operation to each item in an array, constructing a new array with the transformed items.
The `map` function allows you to apply an asynchronous function to each item in an array and collect the results.
#### Example: Doubling Numbers
Example:
```typescript
const numbers = [1, 2, 3, 4];
const doubleNumbers = await map(numbers, async (number) => number * 2);
console.log(doubleNumbers); // Output: [2, 4, 6, 8]
const numbers = [1, 2, 3];
const doubledNumbers = await map(numbers, async (number) => {
return number * 2;
});
console.log(doubledNumbers); // [2, 4, 6]
```
#### Async Filter: Conditional Array Traversal
### Filtering Arrays Asynchronously
With the `filter` function, you can asynchronously judge whether to keep or remove items from the array.
You can asynchronously decide which items to keep in an array using the `filter` function.
#### Example: Filtering Even Numbers
Example:
```typescript
const numbers = [1, 2, 3, 4, 5, 6];
const evenNumbers = await filter(numbers, async (number) => number % 2 === 0);
console.log(evenNumbers); // Output: [2, 4, 6]
const userIds = [1, 2, 3, 4];
const activeUserIds = await filter(userIds, async (userId) => {
// Let's assume isActiveUser is an async function returning a boolean
return isActiveUser(userId);
});
console.log(activeUserIds); // Assuming users 1, 3, and 4 are active: [1, 3, 4]
```
### Async Deduplicate: Removing Duplication
### Deduplicating Arrays Asynchronously
The `deduplicate` function excels in removing duplicates from an array based on asynchronously derived unique keys for each element.
Deduplicate an array based on a unique key derived asynchronously from each element using the `deduplicate` function.
#### Example: Deduplicating User Array
Example:
```typescript
const users = [
{ id: 1, name: 'John' },
{ id: 2, name: 'Jane' },
{ id: 1, name: 'John' }
{ id: 1, email: 'user1@example.com' },
{ id: 2, email: 'user2@example.com' },
{ id: 1, email: 'user1@example.com' } // Duplicate based on 'id'
];
const deduplicatedUsers = await deduplicate(users, async (user) => user.id);
console.log(deduplicatedUsers);
// Output: [{ id: 1, name: 'John' }, { id: 2, name: 'Jane' }]
```
### Deep-Dive Use Cases
#### Complex Data Transformation
Imagine you're working with a dataset of user objects fetched from an API, and you need to perform several transformations: filter out inactive users, double the user IDs for a new report, and ensure the list is deduplicated based on usernames.
```typescript
import { map, filter, deduplicate } from '@push.rocks/smartarray';
// Example users array
const users = [
{ id: 1, active: true, username: 'user1' },
{ id: 2, active: false, username: 'user2' },
{ id: 3, active: true, username: 'user3' },
{ id: 1, active: true, username: 'user1' } // Duplicate for demonstration
];
// First, filter out inactive users
const activeUsers = await filter(users, async (user) => user.active);
// Next, transform the user IDs
const transformedUsers = await map(activeUsers, async (user) => ({
...user,
id: user.id * 2
}));
// Finally, deduplicate based on usernames
const uniqueUsers = await deduplicate(transformedUsers, async (user) => user.username);
const uniqueUsers = await deduplicate(users, async (user) => {
return user.id;
});
console.log(uniqueUsers);
// Output: [{ id: 1, email: 'user1@example.com' }, { id: 2, email: 'user2@example.com' }]
```
This example demonstrates `@push.rocks/smartarray`'s power in handling complex, asynchronous data operations in an efficient, readable manner. By chaining these methods, you can achieve sophisticated data manipulation objectives with minimal code.
These examples underline the versatility and power of `@push.rocks/smartarray` in handling arrays with asynchronous operations, making it easier to integrate asynchronous logic into array manipulation tasks. Remember to handle asynchronous operations with `async/await` syntax to maintain clear and comprehensible code.
### Conclusion
`@push.rocks/smartarray` significantly simplifies the development experience when working with arrays in asynchronous environments. It not only enhances readability and maintainability but also ensures that your codebase remains scalable and efficient. By integrating this library into your projects, you unlock a higher level of programming paradigm where array manipulations are no longer a chore but a streamlined process.
For developers aiming to harness the full potential of asynchronous operations in TypeScript, `@push.rocks/smartarray` offers a comprehensive, easy-to-use solution that stands out for its performance and versatility. Whether youre mapping, filtering, or deduplicating arrays, this library empowers you to write cleaner, more efficient code, elevating your development workflow to new heights.
```
## License and Legal Information

View File

@ -1,8 +1,8 @@
/**
* autocreated commitinfo by @push.rocks/commitinfo
* autocreated commitinfo by @pushrocks/commitinfo
*/
export const commitinfo = {
name: '@push.rocks/smartarray',
version: '1.1.0',
description: 'A TypeScript library for enhancing array manipulation with asynchronous operations such as mapping, filtering, and deduplication.'
version: '1.0.7',
description: 'A library providing asynchronous operations like filter, map, and deduplication for arrays in TypeScript.'
}

View File

@ -1,35 +0,0 @@
export class ConcurrentProcessor<T> {
private asyncFunction: (item: T) => Promise<void>;
private concurrencyLimit: number;
constructor(asyncFunction: (item: T) => Promise<void>, concurrencyLimit: number) {
this.asyncFunction = asyncFunction;
this.concurrencyLimit = concurrencyLimit;
}
async process(items: T[]): Promise<void> {
const queue: Array<Promise<void>> = [];
let totalProcessed = 0;
for (const item of items) {
const promise = this.asyncFunction(item).then(() => {
totalProcessed++;
if (totalProcessed % 10000 === 0) {
console.log(`${totalProcessed} items processed.`);
}
// Remove the completed promise from the queue
queue.splice(queue.indexOf(promise), 1);
});
queue.push(promise);
// Wait if the number of promises exceeds the concurrency limit
if (queue.length >= this.concurrencyLimit) {
await Promise.race(queue);
}
}
// Wait for the remaining promises to resolve
await Promise.all(queue);
}
}

View File

@ -1,5 +1,3 @@
export * from './classes.concurrentprocessor.js';
export const map = async <T = any, R = any>(
arrayArg: T[],
mapFunction: (itemArg: T) => Promise<R>