code: def on_before_transform_template(self, template_dict):
          
  
          template = SamTemplate(template_dict)
  
          # Temporarily add Serverless::Api resource corresponding to Implicit API to the template.
          # This will allow the processing code to work the same way for both Implicit & Explicit APIs
          # If there are no implicit APIs, we will remove from the template later.
  
          # If the customer has explicitly defined a resource with the id of "ServerlessRestApi",
          # capture it.  If the template ends up not defining any implicit api's, instead of just
          # removing the "ServerlessRestApi" resource, we just restore what the author defined.
          self.existing_implicit_api_resource = copy.deepcopy(template.get(self.implicit_api_logical_id))
  
          template.set(self.implicit_api_logical_id, ImplicitApiResource().to_dict())
  
          errors = []
          for logicalId, function in template.iterate(SamResourceType.Function.value):
  
              api_events = self._get_api_events(function)
              condition = function.condition
              if len(api_events) == 0:
                  continue
  
              try:
                  self._process_api_events(function, api_events, template, condition)
  
              except InvalidEventException as ex:
                  errors.append(InvalidResourceException(logicalId, ex.message))
  
          self._maybe_add_condition_to_implicit_api(template_dict)
          self._maybe_add_conditions_to_implicit_api_paths(template)
          self._maybe_remove_implicit_api(template)
  
          if len(errors) > 0:
              raise InvalidDocumentException(errors)
docs: Hook method that gets called before the SAM template is processed.
          The template has pass the validation and is guaranteed to contain a non-empty "Resources" section.
  
          :param dict template_dict: Dictionary of the SAM template
          :return: Nothing