module VitePluginLegacy::TagHelpers

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

Public Instance Methods

vite_legacy_javascript_tag(name, asset_type: :javascript) click to toggle source

Public: Renders a <script> tag for the specified Vite entrypoints when using @vitejs/plugin-legacy, which injects polyfills.

# File lib/vite_plugin_legacy/tag_helpers.rb, line 7
def vite_legacy_javascript_tag(name, asset_type: :javascript)
  return if ViteRuby.instance.dev_server_running?

  legacy_name = name.sub(/(\..+)|$/, '-legacy\1')
  import_tag = content_tag(:script, nomodule: true) {
    "System.import('#{ vite_asset_path(legacy_name, type: asset_type) }')".html_safe
  }

  safe_join [vite_legacy_polyfill_tag, import_tag]
end
vite_legacy_polyfill_tag() click to toggle source

Internal: Renders the vite-legacy-polyfill to enable code splitting in browsers that do not support modules.

# File lib/vite_plugin_legacy/tag_helpers.rb, line 25
def vite_legacy_polyfill_tag
  return if ViteRuby.instance.dev_server_running?

  name = vite_manifest.send(:manifest).keys.find { |file| file.include?('legacy-polyfills') } ||
         raise(ArgumentError, 'Vite legacy polyfill not found in manifest.json')
  content_tag(:script, nil, nomodule: true, src: vite_asset_path(name))
end
vite_legacy_typescript_tag(name) click to toggle source

Public: Same as `vite_legacy_javascript_tag`, but for TypeScript entries.

# File lib/vite_plugin_legacy/tag_helpers.rb, line 19
def vite_legacy_typescript_tag(name)
  vite_legacy_javascript_tag(name, asset_type: :typescript)
end