I took a look at all the existing solutions. They either are no longer maintained or lack core functions. Therefore, I've decided create a brand new library in order to fulfil these goals:
- Allow using json data. In order to handle data with ease.
- Support a wide range of protocols. Not just one of the three DAV families, but all three of them.
- Well tested, have little to no bugs.
- First class typescript support, well defined type with minimum amount of
- Have an easy to read, searchable documentation.
First thing you need to do is understand the problem, it can be done by doing any of the following:
- Reading previous project's code, understand the pros and cons of the previous library.
- If your target have documented standards (in my case IETF RFC 4918, 4791, 6352), read them throughly, understand the reason behind the standards and the problem it aims to solve.
- Write small sandboxed code samples. By starting small, you'll solve the problem piece by piece, eventually allowing the solution to the entire problem.
After making sure that you understand the problem, you can then proceed to start writing code. It's recommended to write unit tests alone the way so that you can have good code quality and be confident about every part of the project as you move.
When you finished writing code, you can setup CI pipeline which allows every commit and pull request is tested and meet the standard of code quality. It can also help automating things like deploying the documentation. I'm not going to explain the details here since they are outside the scope of this post.
Doing all of the above will only make your a decent project. To make your project great (again?), you need to do most, if not all of the following:
- Design a cool logo for it, best paired with a slick slogan.
- Added badges by using shields.io badges.
- Provide a clean, easy to understand
READMEon how to use the project.
- Add tags that helps others to discover the great work you've done.
Making a good library is quite an undertaking. It take months and sometimes even years of hardworking for a good library to be made. After making this library, I'm now much more incline to give other devs projects stars. The project itself might not be useful to you, but by the act of starring the project, you appreciate the hard work of maintainers and allows the library to gain more visibility.