Skip to content
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

Draft
wants to merge 4 commits into
base: main
Choose a base branch
from

Conversation

matthewmueller
Copy link
Contributor

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?

@matthewmueller matthewmueller marked this pull request as draft July 22, 2022 06:48
@@ -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"))
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

WIP: hardcoded

Handler(route string, props interface{}) http.Handler
Render(w http.ResponseWriter, viewPath string, props interface{})
Serve(router *router.Router)
}
Copy link
Contributor Author

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.

@@ -0,0 +1,67 @@
package virtual

import (
Copy link
Contributor Author

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.

"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)
Copy link
Contributor Author

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.

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, "*") {
Copy link
Contributor Author

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant