🌳 Input the source code of any recursive function in javascript, python or golang and visualize its recursion tree
🥇 Winner project of the AlgoExpert SWE Project Contest 🥇
Stop drawing recursion trees by hand. Watch the demo video or check out the live project.
packages/web
: react user interface.packages/lambda
: serverless lambda function to execute user-defined code remotely.In the packages/web
directory, run:
# to install all dependencies
$ npm install
# to run the app on http://localhost:3000
$ npm run start
You can use the Amazon Runtime Interface Emulator (RIE), already contained in the docker image, to test the Lambda function.
In the packages/lambda
directory, run:
# build your local image
$ docker build --tag rtv .
# create and run a container using AWS RIE as executable to emulate a server for your lambda function
$ docker run --rm -p 8080:8080 rtv
# make a http request to your function, passing event with the -d in body field (escaped json), see examples in requests.http file
$ curl -XPOST "http://localhost:8080/2015-03-31/functions/function/invocations" -d '{"body":"{}"}'
Set your API Gateway endpoint in packages/web/src/config/api.ts
.
Ships packages/web
on Vercel.
The deployment of the Lambda function is automatized by the workflow cd-lambda-function
. You will need to complete the following set-up steps to use it:
Create the following AWS resources:
Lambda function defined as a container image
API Gateway to trigger the lambda function with CORS support
ECR repository to store your Docker images
IAM user with the proper permissions
Store the IAM user access key in GitHub Actions secrets named AWS_ACCESS_KEY_ID
and AWS_SECRET_ACCESS_KEY
.
Change the workflow file github/workflows/cd-lambda-function.yml
:
Replace the value of the AWS_REGION
env with the region of all your AWS resources.
Replace the value of the AWS_ECR_REPOSITORY_NAME
env with your repository's name.
Replace the value of the AWS_LAMBDA_FUNCTION_NAME
env with your function's name.
Thanks to Drawing Presentable Trees and Improving Walker's Algorithm to Run in Linear Time articles I implemented Reingold-Tilford's algorithm to position each node of the tree on a 2D plane in an aesthetically pleasing way.
For a better experience, I recommend using a chromium-based browser like Chrome or Edge.