es-git: js-git 2.0

Open
#132 18 comments 8 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
5/5
Estimated time
Over a week
Newbie friendliness
18/100
Issue type
Refactor
Clarity
Needs clarification
Activity status
Stale
Domain
devtools, web-dev

Research direction

Start by reviewing the js-git architecture and the linked es-git rewrite, especially its TypeScript approach, promise and async/await changes, and IndexedDB replacement for WebSQL. The scope is a broad modernization with breaking changes; done would require a usable implementation and a decision about merging it into js-git or maintaining it separately.

Written by the indexing model from the issue text.

Description

js-git is a fantastic project! Having played with the source for a little bit I think it's really well done: it's clearly laid out and it's easy to understand the general architecture. But, it's grown a bit quiet around here, and in the mean time the world of JavaScript has moved forward, leaving the source code of js-git behind.

We now have ES2015, ES2016, ES2017, promises, fetch and many other great features. We also have a lot of new tools, like webpack and typescript, which help with developing and using libraries.

I want to use js-git, but I also want to write it in a modern dialect of JavaScript using the tools available, so I have started a general rewrite of js-git (into es-git, as in EcmaScript-git). This is based on discussion earlier about using promises and async/await, but when I started that I saw that there were several other small things to improve.

I'm writing es-git in TypeScript, since it supports pretty much all the features of ES2017 (and some proposed features), but I will compile it both to ES2017 and to ES5, so that consumers of the package can use it based on their preference. I am removing some legacy support though, for example WebSQL and the fallback deferral code, and replacing them with more modern (and well supported) features, like IndexedDB and promises.

While I'm rewriting this to get it up to a modern standard, it's not just about new and shiny all the things. Async/await lets us write the same code in much fewer lines, making it clearer what is going on. TypeScript is great for libraries, as IDEs can now give very good feedback, and it's great for maintainers as refactoring becomes easier.

Luckily for me the code in js-git is pretty straight forward to convert. I'm not sure when I will have a working version, or how much I will have to leave behind, but when it's gotten to a usable point i will probably publish it as a separate nuget package, as a fork of js-git, since there will be a lot of breaking changes. That is, unless you are interested in merging it back into js-git.

Anyways, I mention this because I really like this project, and I'm sad that it's so quiet around here. I really need git in JavaScript in the browser, and the small experiments I've done show that it is working well enough for me. So I want to help out 😃

Dominant language
JavaScript
Stars
3.8k
Forks
262
PR merge metrics
No merged PRs in 30d

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from creationix/js-git

All issues in creationix/js-git

Similar issues

More JavaScript issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.