class ViewComponent::Compiler

def compile(raise_errors: false, force: false)

def compile(raise_errors: false, force: false)
  return if compiled? && !force
  return if @component == ViewComponent::Base
  @lock.synchronize do
    # this check is duplicated so that concurrent compile calls can still
    # early exit
    return if compiled? && !force
    gather_templates
    if self.class.development_mode && @templates.any?(&:requires_compiled_superclass?)
      @component.superclass.compile(raise_errors: raise_errors)
    end
    if template_errors.present?
      raise TemplateError.new(template_errors) if raise_errors
      # this return is load bearing, and prevents the component from being considered "compiled?"
      return false
    end
    if raise_errors
      @component.validate_initialization_parameters!
      @component.validate_collection_parameter!
    end
    define_render_template_for
    @component.register_default_slots
    @component.build_i18n_backend
    CompileCache.register(@component)
  end
end