- Feedback: First and foremost, send me feedback. What makes sense? What's confusing? What's missing? What's broken? Send me an email, open an issue, or start a discussion.
- Documentation: There are probably typos in this very document. Please send PRs, large and small. You can do it right from your browser. If you're viewing this document in Github, click the pencil button in the top right corner.
- Graphic design: I'm terrible at graphic design. I know good design when I see it, and I can tell you why it's good, but struggle with the creative process. Whether it's building a web site, designing a logo, brainstorming on a GUI, or fixing up some ugly Markdown code, I'll take whatever help I can get!
- Tests: Test coverage is pretty good, but there are gaps. Filling those gaps is an easy way to gain some familiarity with the codebase.
- Code Generation: As of this writing, the code that writes the code works okay, but it's kind of sloppy. Instead of printing strings of source code directly, I'd like to refactor everything to build ASTs. I'd also like to bring in json-schema-to-typescript, which is more accurate than my hand-rolled MVP.
- Convert to TypeScript: While Counterfact generates and runs TypeScript, ironically the code itself is in JavaScript. That's partly because running the unit tests in Jest requires --experimental-vm-modules. Getting Jest working with that and TypeScript at the same time was too much trouble when the project was getting off the ground.
- New features and bug fixes: See the issues list. If you plan on working on something, please add a comment and/or assign yourself.
- Spread the word! If you find this project useful, please let others know about it. Share it in your team Slack, on social media, etc.
This is a pretty straightforward NodeJS project.
git clone git@github.com:pmcelhaney/counterfact.git
cd counterfact
npm install
npm lint
npm test
The code generator is under src/typescript-generator
. The server is directly under src
. I'm planning to move it to src/server
.
Testing and linting changes is important, but at this point I'm more concerned about changing the word "I" in this page to "we", so don't hesitate to create a PR, even it's not "finished".
Thanks in advance!