-
-
Notifications
You must be signed in to change notification settings - Fork 180
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
framework/view: experiment to extract out svelte into a swappable "viewer" #225
base: main
Are you sure you want to change the base?
Conversation
framework/view/loader.go
Outdated
@@ -87,6 +86,7 @@ func (l *loader) Load(ctx context.Context) (state *State, err error) { | |||
l.imports.AddNamed("budclient", "github.com/livebud/bud/package/budclient") | |||
} | |||
l.imports.AddNamed("viewrt", "github.com/livebud/bud/framework/view/viewrt") | |||
l.imports.AddNamed("svelte", l.module.Import("viewer/svelte")) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
WIP: hardcoded
framework/view/viewrt/viewer.go
Outdated
Handler(route string, props interface{}) http.Handler | ||
Render(w http.ResponseWriter, viewPath string, props interface{}) | ||
Serve(router *router.Router) | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This interface still needs some work, but I just wanted to get something working.
internal/virtual/file.go
Outdated
@@ -0,0 +1,67 @@ | |||
package virtual | |||
|
|||
import ( |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is a copy from both conjure and fscache. I'd like to consolidate those implementations into virtual.
package/budclient/client.go
Outdated
"github.com/livebud/bud/package/socket" | ||
) | ||
|
||
type Client interface { | ||
js.VM | ||
fs.FS | ||
Render(route string, props interface{}) (*ssr.Response, error) | ||
Proxy(w http.ResponseWriter, r *http.Request) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This PR would make Render and Proxy obsolete.
package/di/function.go
Outdated
if !sameImport && isInterface(param.kind) && !isInterface(input.Kind) && !strings.HasPrefix(input.Type, "*") { | ||
// TODO: input.Kind.String() != "unknown" is flaky. The unknown kind should | ||
// be removed altogether. | ||
if !sameImport && isInterface(param.kind) && !isInterface(input.Kind) && input.Kind.String() != "unknown" && !strings.HasPrefix(input.Type, "*") { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fixed a bug in DI where aliasing an interface with an external interface would cause compilation errors. The fix added to a hack that should be cleaned up eventually.
28d36a0
to
baba60b
Compare
baba60b
to
460fb50
Compare
This PR is an experiment to support swapping out the view renderers. Currently we have just one Svelte "viewer", but it'd be nice to be able to define your own viewers. This would allow for other viewers like GoHTML, HTML and React.
I haven't decided if this interface should be exposed as a generator yet, but at the very least the internal interfaces will be capable of supporting other types of renderers. If it does make sense to expose it, what should we call this? Viewers? Renderers? Templates? Something else?