Skip to content

[RFC]: Achieve feature parity with async.js #145

Closed
@shwetasrsh

Description

@shwetasrsh

stdlib - Achieve Feature Parity with async.js

Personal Details

Name: Shweta Suresh

Country of Residence: India

Email: shwetasrsh@gmail.com

Time zone: IST (India)

Language: English

Skills: JavaScript, TypeScript, Python, C++

I'm a full stack developer currently working with Deutsche Bank. In the span of 4 years, I have worked on ReactJs, JavaScript, TypeScript, PostgreSQL, bash and python. In my current project, I have worked on ReactJS framework that creates a dashboard to analyze and visualize data using charts and to perform analytical operations on the data. Apart from my main project I had also volunteered for a project called “Leaderboard” to create a dashboard that displays the contribution of employees in various initiatives across the organization. For the leaderboard project as well, the UI was developed in ReactJs framework. With the given experience of working on JavaScript, I’m excited to leverage my skills to work on this project.

Project Overview

The project aims to migrate the stdlib standard functions to callback-based async APIs in async.js library. Async.js library provides several benefits over traditional methods, a couple of them include – a) improved error handling – async functions can use try/catch block or callback way of error reporting b) effective performance for processing of large data. Apart from these benefits, it is also easier to adopt and incorporate async.js framework as it requires minimal refactoring in the code.

The list of functions which need to be migrated to async.js -

Collections

  • concat
  • concatSeries
  • filter
  • filterLimit
  • filterSeries
  • map
  • mapLimit
  • mapSeries
  • reject
  • rejectLimit
  • rejectSeries

Control Flow

  • applyEach
  • applyEachSeries
  • parallel
  • parallelLimit
  • priorityQueue
  • queue
  • race
  • retry
  • retryable
  • series

Utils

  • apply
  • asyncify
  • constant
  • ensureAsync
  • memoize
  • nextTick
  • setImmedidate
  • timeout
  • unmemoize

Contributions to stdlib -

Refactored the @stdlib/base/array/maxBy to include support for accessor array. The PR is given below -
stdlib-js/stdlib#6585
Implemented and refactored @stdlib/base/stats/map to use async map function from async.js library. The PR is given below -
stdlib-js/stdlib#6586

Stdlib Tutorial

In the tutorial, I have shown a use case of constructing a table with the details of people and performing aggregate functions on the tabular data. Here is the link to the demo repo -

https://github.com/shwetasrsh/stdlib-demo

Proposal Timeline

Before April 20:

To familiarize myself completely with async.js library
I will focus on the planned methods that need to be migrated to async.js
There are 30 methods in total which are planned to be migrated, and those methods are broken down into the following groups – a) Collection methods b) Control Flow methods and c) Util methods
Based on the priority after discussing with the mentor – I will pick the group with the highest priority

April 20 – May 23 (Before the official coding time):

During this period, I will remain in constant touch with my mentor and the Gitter community. I will remain active on mailing lists to discuss and finalize on the modifications if required on the proposal
And with the help of mentor, it will bring a lot of clarity in achieving the goal

June 2 – June 23 (Official coding period starts) [Collection Methods]:

Implement and refactor the code for the methods in Collection group – aim to complete more than half on the list
Additional unit test coverage for those methods
Update documentation supporting these use cases
Review the code with the mentors to get the feedback

June 24 – July 14 [Collection Methods + Control Flow Methods]:

Implement and refactor the code for the remaining methods in Collection group
Implement and refactor the code for the high priority methods in Control Flow group (at least 6)
Additional unit test coverage for those methods
Update documentation supporting these use cases
Review the code with the mentors to get the feedback

July 14 – July 18 (Prepare for Mid Term Evaluation):

Incorporate any additional changes required and feedback received from the mentor
Additional test coverage for the methods implemented so far

JULY 18th MID TERM EVALUATION

July 18 – Aug 4 [Control Flow Methods + Util]:

Implement and refactor the code for the remaining methods in Control flow group
Implement and refactor the code for at least 3 methods in Utils group
Additional unit test coverage for those methods
Update documentation supporting these use cases
Review the code with the mentors to get the feedback

Aug 5 – Aug 18 [Util Methods]:

Implement and refactor the code for the remaining methods in Util group
Additional unit test coverage for those methods
Update documentation supporting these use cases
Review the code with the mentors to get the feedback

Aug 18 – Aug 25 [Review + Enhancements]:

Review the code with the mentors to get the feedback
Incorporate additional changes if required in the codebase based on the feedback received from the mentors

The order of the methods given in the proposal are subject to change based on the feedback received from the mentor, but this is likely an estimate of how it will be covered in the due course of time.

I will be on leave for 8 days in May and 5 days(tentative) in Aug. In addition to that, a buffer of one week has been kept for any unpredictable delay.

Checklist

  • I have read and understood the Code of Conduct.
  • I have read and understood the application materials found in this repository.
  • I understand that plagiarism will not be tolerated, and I have authored this application in my own words.
  • I have read and understood the patch requirement which is necessary for my application to be considered for acceptance.
  • I have read and understood the stdlib showcase requirement which is necessary for my application to be considered for acceptance.
  • The issue name begins with [RFC]: and succinctly describes your proposal.
  • I understand that, in order to apply to be a GSoC contributor, I must submit my final application to https://summerofcode.withgoogle.com/ before the submission deadline.

Metadata

Metadata

Assignees

No one assigned

    Labels

    20252025 GSoC proposal.rfcProject proposal.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions