From f721555919f870a9d3cebaa13060dea27f009ee9 Mon Sep 17 00:00:00 2001 From: Rizal Alfiannor Date: Mon, 19 Sep 2022 00:42:38 +0700 Subject: [PATCH] linked default css to svelte runtime when added revert the header with chunked change overlay fs to bud fs --- framework/controller/controller_test.go | 13 +++++ framework/view/ssr/ssr.go | 6 ++ framework/view/ssr/ssr_test.go | 75 +++++++++++++++++++++++++ framework/view/ssr/svelte.js | 4 +- framework/view/ssr/svelte.ts | 4 +- framework/view/view_test.go | 10 ++++ internal/embedded/embedded.go | 5 -- 7 files changed, 108 insertions(+), 9 deletions(-) diff --git a/framework/controller/controller_test.go b/framework/controller/controller_test.go index e176ec8a..93fc59c5 100644 --- a/framework/controller/controller_test.go +++ b/framework/controller/controller_test.go @@ -1286,6 +1286,7 @@ func TestViewUnnamed(t *testing.T) { is.NoErr(err) is.NoErr(res.DiffHeaders(` HTTP/1.1 200 OK + Transfer-Encoding: chunked Content-Type: text/html `)) el, err := res.Query("#bud_target") @@ -1307,6 +1308,7 @@ func TestViewUnnamed(t *testing.T) { is.NoErr(err) is.NoErr(res.DiffHeaders(` HTTP/1.1 200 OK + Transfer-Encoding: chunked Content-Type: text/html `)) el, err = res.Query("#bud_target") @@ -1328,6 +1330,7 @@ func TestViewUnnamed(t *testing.T) { is.NoErr(err) is.NoErr(res.DiffHeaders(` HTTP/1.1 200 OK + Transfer-Encoding: chunked Content-Type: text/html `)) el, err = res.Query("#bud_target") @@ -1349,6 +1352,7 @@ func TestViewUnnamed(t *testing.T) { is.NoErr(err) is.NoErr(res.DiffHeaders(` HTTP/1.1 200 OK + Transfer-Encoding: chunked Content-Type: text/html `)) el, err = res.Query("#bud_target") @@ -1431,6 +1435,7 @@ func TestViewNestedUnnamed(t *testing.T) { is.NoErr(err) is.NoErr(res.DiffHeaders(` HTTP/1.1 200 OK + Transfer-Encoding: chunked Content-Type: text/html `)) el, err := res.Query("#bud_target") @@ -1452,6 +1457,7 @@ func TestViewNestedUnnamed(t *testing.T) { is.NoErr(err) is.NoErr(res.DiffHeaders(` HTTP/1.1 200 OK + Transfer-Encoding: chunked Content-Type: text/html `)) el, err = res.Query("#bud_target") @@ -1473,6 +1479,7 @@ func TestViewNestedUnnamed(t *testing.T) { is.NoErr(err) is.NoErr(res.DiffHeaders(` HTTP/1.1 200 OK + Transfer-Encoding: chunked Content-Type: text/html `)) el, err = res.Query("#bud_target") @@ -1494,6 +1501,7 @@ func TestViewNestedUnnamed(t *testing.T) { is.NoErr(err) is.NoErr(res.DiffHeaders(` HTTP/1.1 200 OK + Transfer-Encoding: chunked Content-Type: text/html `)) el, err = res.Query("#bud_target") @@ -1579,6 +1587,7 @@ func TestViewDeepUnnamed(t *testing.T) { is.NoErr(err) is.NoErr(res.DiffHeaders(` HTTP/1.1 200 OK + Transfer-Encoding: chunked Content-Type: text/html `)) el, err := res.Query("#bud_target") @@ -1600,6 +1609,7 @@ func TestViewDeepUnnamed(t *testing.T) { is.NoErr(err) is.NoErr(res.DiffHeaders(` HTTP/1.1 200 OK + Transfer-Encoding: chunked Content-Type: text/html `)) el, err = res.Query("#bud_target") @@ -1621,6 +1631,7 @@ func TestViewDeepUnnamed(t *testing.T) { is.NoErr(err) is.NoErr(res.DiffHeaders(` HTTP/1.1 200 OK + Transfer-Encoding: chunked Content-Type: text/html `)) el, err = res.Query("#bud_target") @@ -1642,6 +1653,7 @@ func TestViewDeepUnnamed(t *testing.T) { is.NoErr(err) is.NoErr(res.DiffHeaders(` HTTP/1.1 200 OK + Transfer-Encoding: chunked Content-Type: text/html `)) el, err = res.Query("#bud_target") @@ -1762,6 +1774,7 @@ func TestEmptyActionWithView(t *testing.T) { // HTML response is.NoErr(res.DiffHeaders(` HTTP/1.1 200 OK + Transfer-Encoding: chunked Content-Type: text/html `)) is.In(res.Body().String(), `

hello

`) diff --git a/framework/view/ssr/ssr.go b/framework/view/ssr/ssr.go index f4165be2..8be33a6b 100644 --- a/framework/view/ssr/ssr.go +++ b/framework/view/ssr/ssr.go @@ -20,6 +20,7 @@ import ( "github.com/livebud/bud/internal/gotemplate" "github.com/livebud/bud/package/budfs" "github.com/livebud/bud/package/gomod" + "github.com/livebud/bud/package/vfs" ) // Response from evaluating SSR files @@ -49,6 +50,11 @@ type Compiler struct { func (c *Compiler) Compile(ctx context.Context, fsys budfs.FS) ([]byte, error) { dir := c.module.Directory() + + if existCss := vfs.Exist(fsys, "public/default.css"); nil == existCss { + svelteRuntime = strings.Replace(svelteRuntime, ``, ``, 1) + } + result := esbuild.Build(esbuild.BuildOptions{ EntryPointsAdvanced: []esbuild.EntryPoint{ { diff --git a/framework/view/ssr/ssr_test.go b/framework/view/ssr/ssr_test.go index 0d7cacf1..e3f0c018 100644 --- a/framework/view/ssr/ssr_test.go +++ b/framework/view/ssr/ssr_test.go @@ -63,6 +63,81 @@ func TestSvelteHello(t *testing.T) { is.True(strings.Contains(res.Body, `

hi world

`)) } +func TestSvelteRemoveDefaultCss(t *testing.T) { + is := is.New(t) + log := testlog.New() + ctx := context.Background() + dir := t.TempDir() + td := testdir.New(dir) + td.Files["view/index.svelte"] = `

hi world

` + td.NodeModules["svelte"] = versions.Svelte + is.NoErr(td.Write(ctx)) + vm, err := v8.Load() + is.NoErr(err) + svelteCompiler, err := svelte.Load(vm) + is.NoErr(err) + transformer := transformrt.MustLoad(svelte.NewTransformable(svelteCompiler)) + module, err := gomod.Find(dir) + is.NoErr(err) + bfs := budfs.New(module, log) + is.NoErr(err) + bfs.FileGenerator("bud/view/_ssr.js", ssr.New(module, transformer.SSR)) + // Read the wrapped version of index.svelte with node_modules rewritten + code, err := fs.ReadFile(bfs, "bud/view/_ssr.js") + is.NoErr(err) + is.True(strings.Contains(string(code), `create_ssr_component(`)) + is.True(strings.Contains(string(code), `

hi world

`)) + is.True(strings.Contains(string(code), `views["/"] = `)) + result, err := vm.Eval("render.js", string(code)+`; bud.render("/", {})`) + is.NoErr(err) + var res ssr.Response + err = json.Unmarshal([]byte(result), &res) + is.NoErr(err) + is.Equal(res.Status, 200) + is.Equal(len(res.Headers), 1) + is.Equal(res.Headers["Content-Type"], "text/html") + // svelte must not linked to default.css when removed + is.True(!strings.Contains(res.Body, ``)) + is.True(strings.Contains(res.Body, ``)) +} + +func TestSvelteDefaultCss(t *testing.T) { + is := is.New(t) + log := testlog.New() + ctx := context.Background() + dir := t.TempDir() + td := testdir.New(dir) + td.Files["view/index.svelte"] = `

hi world

` + td.Files["public/default.css"] = `.body{}` + td.NodeModules["svelte"] = versions.Svelte + is.NoErr(td.Write(ctx)) + vm, err := v8.Load() + is.NoErr(err) + svelteCompiler, err := svelte.Load(vm) + is.NoErr(err) + transformer := transformrt.MustLoad(svelte.NewTransformable(svelteCompiler)) + module, err := gomod.Find(dir) + is.NoErr(err) + bfs := budfs.New(module, log) + is.NoErr(err) + bfs.FileGenerator("bud/view/_ssr.js", ssr.New(module, transformer.SSR)) + // Read the wrapped version of index.svelte with node_modules rewritten + code, err := fs.ReadFile(bfs, "bud/view/_ssr.js") + is.NoErr(err) + is.True(strings.Contains(string(code), `create_ssr_component(`)) + is.True(strings.Contains(string(code), `

hi world

`)) + is.True(strings.Contains(string(code), `views["/"] = `)) + result, err := vm.Eval("render.js", string(code)+`; bud.render("/", {})`) + is.NoErr(err) + var res ssr.Response + err = json.Unmarshal([]byte(result), &res) + is.NoErr(err) + is.Equal(res.Status, 200) + is.Equal(len(res.Headers), 1) + is.Equal(res.Headers["Content-Type"], "text/html") + is.True(strings.Contains(res.Body, ``)) +} + func TestSvelteAwait(t *testing.T) { is := is.New(t) log := testlog.New() diff --git a/framework/view/ssr/svelte.js b/framework/view/ssr/svelte.js index 07644668..7e5156fa 100644 --- a/framework/view/ssr/svelte.js +++ b/framework/view/ssr/svelte.js @@ -326,8 +326,8 @@ var defaultLayout = { - - + + ${slots.head(props)} ${slots.default(props)} diff --git a/framework/view/ssr/svelte.ts b/framework/view/ssr/svelte.ts index 5d54fd77..29aee608 100644 --- a/framework/view/ssr/svelte.ts +++ b/framework/view/ssr/svelte.ts @@ -57,8 +57,8 @@ const defaultLayout = { - - + + ${slots.head(props)} ${slots.default(props)} diff --git a/framework/view/view_test.go b/framework/view/view_test.go index 99f36225..a21cf810 100644 --- a/framework/view/view_test.go +++ b/framework/view/view_test.go @@ -41,6 +41,7 @@ func TestHello(t *testing.T) { is.NoErr(err) is.NoErr(res.DiffHeaders(` HTTP/1.1 200 OK + Transfer-Encoding: chunked Content-Type: text/html `)) is.In(res.Body().String(), "

hello

") @@ -62,6 +63,7 @@ func TestHello(t *testing.T) { is.NoErr(err) is.NoErr(res.DiffHeaders(` HTTP/1.1 200 OK + Transfer-Encoding: chunked Content-Type: text/html `)) is.In(res.Body().String(), "

hi

") @@ -115,6 +117,7 @@ func TestHelloEmbed(t *testing.T) { is.NoErr(err) is.NoErr(res.DiffHeaders(` HTTP/1.1 200 OK + Transfer-Encoding: chunked Content-Type: text/html `)) is.In(res.Body().String(), "

hello

") @@ -135,6 +138,7 @@ func TestHelloEmbed(t *testing.T) { is.NoErr(err) is.NoErr(res.DiffHeaders(` HTTP/1.1 200 OK + Transfer-Encoding: chunked Content-Type: text/html `)) is.In(res.Body().String(), "

hello

") @@ -185,6 +189,7 @@ func TestChunks(t *testing.T) { is.NoErr(err) is.NoErr(res.DiffHeaders(` HTTP/1.1 200 OK + Transfer-Encoding: chunked Content-Type: text/html `)) is.In(res.Body().String(), "

index

") @@ -202,6 +207,7 @@ func TestChunks(t *testing.T) { is.NoErr(err) is.NoErr(res.DiffHeaders(` HTTP/1.1 200 OK + Transfer-Encoding: chunked Content-Type: text/html `)) is.In(res.Body().String(), "

show

") @@ -255,6 +261,7 @@ func TestConsoleLog(t *testing.T) { is.NoErr(err) is.NoErr(res.DiffHeaders(` HTTP/1.1 200 OK + Transfer-Encoding: chunked Content-Type: text/html `)) is.In(res.Body().String(), "

hello

") @@ -299,6 +306,7 @@ func TestRenameView(t *testing.T) { is.NoErr(err) is.NoErr(res.DiffHeaders(` HTTP/1.1 200 OK + Transfer-Encoding: chunked Content-Type: text/html `)) is.In(res.Body().String(), "

10

") @@ -375,6 +383,7 @@ func TestAddView(t *testing.T) { is.NoErr(err) is.NoErr(res.DiffHeaders(` HTTP/1.1 200 OK + Transfer-Encoding: chunked Content-Type: text/html `)) is.In(res.Body().String(), "

10

") @@ -407,6 +416,7 @@ func TestSvelteImportFromNodeModule(t *testing.T) { is.NoErr(err) is.NoErr(res.DiffHeaders(` HTTP/1.1 200 OK + Transfer-Encoding: chunked Content-Type: text/html `)) is.In(res.Body().String(), "") diff --git a/internal/embedded/embedded.go b/internal/embedded/embedded.go index 107f9b23..03f79291 100644 --- a/internal/embedded/embedded.go +++ b/internal/embedded/embedded.go @@ -19,8 +19,3 @@ func Favicon() []byte { func NormalizeCss() []byte { return normalize } - -// EmptyCss reset the default css data -func EmptyCss() []byte { - return []byte("/* No Default CSS Loaded */") -}