Sha256: 2d7eefe48fc493b31cb45e2ba4525f1bac6d4a6e7a8c38ecb5c03424ac4ce782
Contents?: true
Size: 1.17 KB
Versions: 1
Compression:
Stored size: 1.17 KB
Contents
module Svelte class Handler < ActionView::Template::Handlers::Raw include ActionView::Helpers::JavaScriptHelper def call(template, source) file = Tempfile.new src = Tempfile.new src.write source.b src.rewind file.write <<-JS import { compile } from 'svelte/compiler'; const src = await Bun.file("#{src.path}").text() const result = compile(src, {generate: "dom", name: "Component", css: "injected", sveltePath: "https://esm.sh/svelte"}) process.stdout.write(JSON.stringify(result)) JS file.rewind compiled = JSON.parse(%x(bun run #{file.path})).deep_symbolize_keys source = <<-HTML <is-land on:visible on:idle> <template data-island> <div id="svelte-app-client"> </div> <script type="module"> #{compiled.dig(:js, :code)} new Component({ target: document.getElementById("svelte-app-client") }); </script> </template> </is-land> HTML super end def self.call(template, source) new.call(template, source) end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
actionview-svelte-handler-0.1.0 | lib/svelte/handler.rb |