Patterns For Large-Scale JavaScript Application Architecture