module SvelteOnRails::Installer::Utils
def self.create_javascript_initializer
def self.create_javascript_initializer config_path = Rails.root.join("app", "frontend", "initializers", "svelte.js") if File.exist?(config_path) puts "Initializer already exists: file://#{config_path}" else File.write(config_path, <<~JAVASCRIPT) import { initializeSvelteComponents, cleanupSvelteComponents } from '@csedl/svelte-on-rails'; const components = import.meta.glob('/javascript/components/**/*.svelte', { eager: true }); const componentsRoot = '/javascript/components'; // Initialize Svelte components initializeSvelteComponents(componentsRoot, components, true); // Turbo event listener for page load document.addEventListener('turbo:load', () => { initializeSvelteComponents(componentsRoot, components, true); }); // Turbo event listener for cleanup before page cache document.addEventListener('turbo:before-cache', () => { cleanupSvelteComponents(false); }); JAVASCRIPT puts "Created initializer file at file://#{config_path}" end end