Skip to content

Commit

Permalink
feat(libprepare): moving preparation functions to a dedicated file an…
Browse files Browse the repository at this point in the history
…d streamlining names for prepare functions.
  • Loading branch information
razshare committed Jan 26, 2025
1 parent 3406aad commit e6c90bb
Show file tree
Hide file tree
Showing 3 changed files with 152 additions and 137 deletions.
149 changes: 149 additions & 0 deletions libprepare.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,149 @@
package frizzante

import (
"embed"
"fmt"
"os"
"path/filepath"
"strings"
)

//go:embed vite-project/*
var svelteRenderToolsFileSystem embed.FS

var sveltePagesToFileNames = map[string]string{}

// PrepareSveltePage prepares a svelte page.
func PrepareSveltePage(id string, fileName string) {
relativeFileName, err := filepath.Rel("www/.frizzante/vite-project", fileName)
if err != nil {
panic(err)
}
sveltePagesToFileNames[id] = fmt.Sprintf("./%s", relativeFileName)
}

// PrepareStart begins preparation.
func PrepareStart() {
asyncSvelte, asyncSvelteError := svelteRenderToolsFileSystem.ReadFile("vite-project/async.svelte")
if asyncSvelteError != nil {
panic(asyncSvelteError)
}

indexHtml, indexHtmlError := svelteRenderToolsFileSystem.ReadFile("vite-project/index.html")
if indexHtmlError != nil {
panic(indexHtmlError)
}

renderClientJs, renderClientJsError := svelteRenderToolsFileSystem.ReadFile("vite-project/render.client.js")
if renderClientJsError != nil {
panic(renderClientJsError)
}

renderServerJs, renderServerJsError := svelteRenderToolsFileSystem.ReadFile("vite-project/render.server.js")
if renderServerJsError != nil {
panic(renderServerJsError)
}

if !Exists("www/.frizzante/vite-project") {
err := os.MkdirAll("www/.frizzante/vite-project", os.ModePerm)
if err != nil {
panic(err)
}
}

err := os.WriteFile("www/.frizzante/vite-project/async.svelte", asyncSvelte, os.ModePerm)
if err != nil {
panic(err)
}

err = os.WriteFile("www/.frizzante/vite-project/index.html", indexHtml, os.ModePerm)
if err != nil {
panic(err)
}

err = os.WriteFile("www/.frizzante/vite-project/render.client.js", renderClientJs, os.ModePerm)
if err != nil {
panic(err)
}

err = os.WriteFile("www/.frizzante/vite-project/render.server.js", renderServerJs, os.ModePerm)
if err != nil {
panic(err)
}
}

// PrepareEnd ends preparation by generating all prepared code.
func PrepareEnd() {
dumpSvelteFiles()
}

func dumpSvelteFiles() {
if !Exists("www/.frizzante/vite-project") {
err := os.MkdirAll("www/.frizzante/vite-project", os.ModePerm)
if err != nil {
panic(err)
}
}

// Build client loader.
renderClientSvelte, readError := svelteRenderToolsFileSystem.ReadFile("vite-project/render.client.svelte")
if readError != nil {
panic(readError)
}

var builder strings.Builder
counter := 0
for id, fileName := range sveltePagesToFileNames {
if 0 == counter {
builder.WriteString(fmt.Sprintf("{#if '%s' === reactivePageId}\n", id))
} else {
builder.WriteString(fmt.Sprintf("{:else if '%s' === reactivePageId}\n", id))
}
builder.WriteString(fmt.Sprintf(" <Async from={import('%s')} />\n", fileName))
counter++
}
if counter > 0 {
builder.WriteString("{/if}")
}
renderClientSvelteString := strings.Replace(string(renderClientSvelte), "<!--app-router-->", builder.String(), 1)

// Dump client loader.
marshalError := os.WriteFile("www/.frizzante/vite-project/render.client.svelte", []byte(renderClientSvelteString), os.ModePerm)
if marshalError != nil {
panic(marshalError)
}

// Build server loader.
builder.Reset()
builder.WriteString("<script>\n")
for id, fileName := range sveltePagesToFileNames {
builder.WriteString(fmt.Sprintf(" import %s from '%s'\n", strings.ToUpper(id), fileName))
}
builder.WriteString(" import {setContext} from 'svelte'\n")
builder.WriteString(" let {pageId, paths, data} = $props()\n")
builder.WriteString(" let reactiveData = $state({...data})\n")
builder.WriteString(" setContext(\"data\", reactiveData)\n")
builder.WriteString(" setContext(\"page\", page)\n")
builder.WriteString(" function page(){}\n")
builder.WriteString("</script>\n")
counter = 0
for id, _ := range sveltePagesToFileNames {
if 0 == counter {
builder.WriteString(fmt.Sprintf("{#if '%s' === pageId}\n", id))
} else {
builder.WriteString(fmt.Sprintf("{:else if '%s' === pageId}\n", id))
}
builder.WriteString(fmt.Sprintf(" <%s />\n", strings.ToUpper(id)))
counter++
}
if counter > 0 {
builder.WriteString("{/if}")
}
renderServerSvelte := builder.String()

// Dump server loader.
marshalError = os.WriteFile("www/.frizzante/vite-project/render.server.svelte", []byte(renderServerSvelte), os.ModePerm)
if marshalError != nil {
panic(marshalError)
}
}
134 changes: 0 additions & 134 deletions libsvelte.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package frizzante

import (
"embed"
"encoding/json"
"fmt"
"github.com/evanw/esbuild/pkg/api"
Expand All @@ -20,139 +19,6 @@ const (
ModeFull RenderMode = 2 // Render on both the server and the client.
)

//go:embed vite-project/*
var svelteRenderToolsFileSystem embed.FS

func SveltePrepareStart() {
asyncSvelte, asyncSvelteError := svelteRenderToolsFileSystem.ReadFile("vite-project/async.svelte")
if asyncSvelteError != nil {
panic(asyncSvelteError)
}

indexHtml, indexHtmlError := svelteRenderToolsFileSystem.ReadFile("vite-project/index.html")
if indexHtmlError != nil {
panic(indexHtmlError)
}

renderClientJs, renderClientJsError := svelteRenderToolsFileSystem.ReadFile("vite-project/render.client.js")
if renderClientJsError != nil {
panic(renderClientJsError)
}

renderServerJs, renderServerJsError := svelteRenderToolsFileSystem.ReadFile("vite-project/render.server.js")
if renderServerJsError != nil {
panic(renderServerJsError)
}

if !Exists("www/.frizzante/vite-project") {
err := os.MkdirAll("www/.frizzante/vite-project", os.ModePerm)
if err != nil {
panic(err)
}
}

err := os.WriteFile("www/.frizzante/vite-project/async.svelte", asyncSvelte, os.ModePerm)
if err != nil {
panic(err)
}

err = os.WriteFile("www/.frizzante/vite-project/index.html", indexHtml, os.ModePerm)
if err != nil {
panic(err)
}

err = os.WriteFile("www/.frizzante/vite-project/render.client.js", renderClientJs, os.ModePerm)
if err != nil {
panic(err)
}

err = os.WriteFile("www/.frizzante/vite-project/render.server.js", renderServerJs, os.ModePerm)
if err != nil {
panic(err)
}
}

var sveltePagesToFileNames = map[string]string{}

func SveltePreparePage(id string, fileName string) {
relativeFileName, err := filepath.Rel("www/.frizzante/vite-project", fileName)
if err != nil {
panic(err)
}
sveltePagesToFileNames[id] = fmt.Sprintf("./%s", relativeFileName)
}

func SveltePrepareEnd() {
if !Exists("www/.frizzante/vite-project") {
err := os.MkdirAll("www/.frizzante/vite-project", os.ModePerm)
if err != nil {
panic(err)
}
}

// Build client loader.
renderClientSvelte, readError := svelteRenderToolsFileSystem.ReadFile("vite-project/render.client.svelte")
if readError != nil {
panic(readError)
}

var builder strings.Builder
counter := 0
for id, fileName := range sveltePagesToFileNames {
if 0 == counter {
builder.WriteString(fmt.Sprintf("{#if '%s' === reactivePageId}\n", id))
} else {
builder.WriteString(fmt.Sprintf("{:else if '%s' === reactivePageId}\n", id))
}
builder.WriteString(fmt.Sprintf(" <Async from={import('%s')} />\n", fileName))
counter++
}
if counter > 0 {
builder.WriteString("{/if}")
}
renderClientSvelteString := strings.Replace(string(renderClientSvelte), "<!--app-router-->", builder.String(), 1)

// Dump client loader.
marshalError := os.WriteFile("www/.frizzante/vite-project/render.client.svelte", []byte(renderClientSvelteString), os.ModePerm)
if marshalError != nil {
panic(marshalError)
}

// Build server loader.
builder.Reset()
builder.WriteString("<script>\n")
for id, fileName := range sveltePagesToFileNames {
builder.WriteString(fmt.Sprintf(" import %s from '%s'\n", strings.ToUpper(id), fileName))
}
builder.WriteString(" import {setContext} from 'svelte'\n")
builder.WriteString(" let {pageId, paths, data} = $props()\n")
builder.WriteString(" let reactiveData = $state({...data})\n")
builder.WriteString(" setContext(\"data\", reactiveData)\n")
builder.WriteString(" setContext(\"page\", page)\n")
builder.WriteString(" function page(){}\n")
builder.WriteString("</script>\n")
counter = 0
for id, _ := range sveltePagesToFileNames {
if 0 == counter {
builder.WriteString(fmt.Sprintf("{#if '%s' === pageId}\n", id))
} else {
builder.WriteString(fmt.Sprintf("{:else if '%s' === pageId}\n", id))
}
builder.WriteString(fmt.Sprintf(" <%s />\n", strings.ToUpper(id)))
counter++
}
if counter > 0 {
builder.WriteString("{/if}")
}
renderServerSvelte := builder.String()

// Dump server loader.
marshalError = os.WriteFile("www/.frizzante/vite-project/render.server.svelte", []byte(renderServerSvelte), os.ModePerm)
if marshalError != nil {
panic(marshalError)
}
}

func render(response *Response, stringProps string, globals map[string]v8go.FunctionCallback) (string, string, error) {
renderFileName := filepath.Join("www", "dist", "server", "render.server.js")

Expand Down
6 changes: 3 additions & 3 deletions prepare/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ package main
import frz "github.com/razshare/frizzante"

func main() {
frz.SveltePrepareStart()
frz.SveltePreparePage("welcome", "./www/lib/pages/welcome.svelte")
frz.SveltePrepareEnd()
frz.PrepareStart()
frz.PrepareSveltePage("welcome", "www/lib/pages/welcome.svelte")
frz.PrepareEnd()
}

0 comments on commit e6c90bb

Please sign in to comment.