rename variable names
support context object argument
move main script to lib folder
rename file name
add more test case for sync and async