module ViteRailsLegacy::TagHelpers

Public: Allows to render HTML tags for scripts and styles processed by Vite.

Public Instance Methods

vite_asset_path(name, **options) click to toggle source

Public: Resolves the path for the specified Vite asset.

Example:

<%= vite_asset_path 'calendar.css' %> # => "/vite/assets/calendar-1016838bab065ae1e122.css"
# File lib/vite_rails_legacy/tag_helpers.rb, line 21
def vite_asset_path(name, **options)
  path_to_asset vite_manifest.path_for(name, **options)
end
vite_client_tag() click to toggle source

Public: Renders a script tag for vite/client to enable HMR in development.

# File lib/vite_rails_legacy/tag_helpers.rb, line 6
def vite_client_tag
  return unless src = vite_manifest.vite_client_src

  "<script#{ tag_options({ src: src, type: 'module' }, escape: true) }></script>".html_safe
end
vite_javascript_tag(*names, type: 'module', asset_type: :javascript, skip_preload_tags: false, skip_style_tags: false, crossorigin: 'anonymous', media: 'screen', **options) click to toggle source

Public: Renders a <script> tag for the specified Vite entrypoints.

# File lib/vite_rails_legacy/tag_helpers.rb, line 26
def vite_javascript_tag(*names,
                        type: 'module',
                        asset_type: :javascript,
                        skip_preload_tags: false,
                        skip_style_tags: false,
                        crossorigin: 'anonymous',
                        media: 'screen',
                        **options)
  entries = vite_manifest.resolve_entries(*names, type: asset_type)
  tags = javascript_include_tag(*entries.fetch(:scripts), crossorigin: crossorigin, type: type, extname: false, **options)
  tags << vite_preload_tag(*entries.fetch(:imports), crossorigin: crossorigin, **options) unless skip_preload_tags
  tags << stylesheet_link_tag(*entries.fetch(:stylesheets), media: media, crossorigin: crossorigin, **options) unless skip_style_tags
  tags
end
vite_react_refresh_tag() click to toggle source

Public: Renders a script tag to enable HMR with React Refresh.

# File lib/vite_rails_legacy/tag_helpers.rb, line 13
def vite_react_refresh_tag
  vite_manifest.react_refresh_preamble&.html_safe
end
vite_stylesheet_tag(*names, **options) click to toggle source

Public: Renders a <link> tag for the specified Vite entrypoints.

# File lib/vite_rails_legacy/tag_helpers.rb, line 47
def vite_stylesheet_tag(*names, **options)
  style_paths = names.map { |name| vite_asset_path(name, type: :stylesheet) }
  stylesheet_link_tag(*style_paths, **options)
end
vite_typescript_tag(*names, **options) click to toggle source

Public: Renders a <script> tag for the specified Vite entrypoints.

# File lib/vite_rails_legacy/tag_helpers.rb, line 42
def vite_typescript_tag(*names, **options)
  vite_javascript_tag(*names, asset_type: :typescript, **options)
end

Private Instance Methods

vite_manifest() click to toggle source

Internal: Returns the current manifest loaded by Vite Ruby.

# File lib/vite_rails_legacy/tag_helpers.rb, line 55
def vite_manifest
  ViteRuby.instance.manifest
end
vite_preload_tag(*sources, crossorigin:, **options) click to toggle source

Internal: Renders a modulepreload link tag.

# File lib/vite_rails_legacy/tag_helpers.rb, line 60
def vite_preload_tag(*sources, crossorigin:, **options)
  sources.map { |source|
    href = path_to_asset(source)
    try(:request).try(:send_early_hints, 'Link' => %(<#{ href }>; rel=modulepreload; as=script; crossorigin=#{ crossorigin }))
    tag('link', rel: 'modulepreload', href: href, as: 'script', crossorigin: crossorigin, **options)
  }.join("\n").html_safe
end