javascript library design