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