<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def perform(self, specifications):
 """ This method is the entry point of javascript code writer. Monolithe will call it when the javascript plugin is to generate code. """

        self.enum_list = []
        self.model_list = []
        self.job_commands = filter(lambda attr: attr.name == 'command', specifications.get("job").attributes)[0].allowed_choices
        #Printer.log("job_commands: %s" % (self.job_commands))
            
        self._write_abstract_named_entity()
        
        self.entity_names = [specification.entity_name for rest_name, specification in specifications.iteritems()]

        for rest_name, specification in specifications.iteritems():
            self._write_model(specification=specification)

        #self._write_generic_enums()
        
        self.write(destination = self.model_directory,
            filename="index.js",
            template_name="model_index.js.tpl",
            class_prefix = self._class_prefix,
            model_list = sorted(self.model_list))
            
        self.write(destination = self.enum_directory,
                    filename="index.js",
                    template_name="enum_index.js.tpl",
                    class_prefix = self._class_prefix,
                    enum_list = sorted(self.enum_list))
                    
        self._write_locales(specifications)