Skip to content

Commit 8a9b929

Browse files
committed
feat: simplify transformations
1 parent 37cc23a commit 8a9b929

File tree

5 files changed

+75
-57
lines changed

5 files changed

+75
-57
lines changed

pkg/alvu/alvu.go

Lines changed: 51 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,8 @@ func (ac *AlvuConfig) Run() error {
8080
return err
8181
}
8282

83+
ac.logger.Debug(fmt.Sprintf("filesToProcess: %v", filesToProcess))
84+
8385
publicFiles, err := ac.ReadDir(filepath.Join(ac.RootPath, "public"))
8486
if err != nil {
8587
return err
@@ -140,6 +142,22 @@ func (ac *AlvuConfig) HandlePublicFiles(files []string) (err error) {
140142
return
141143
}
142144

145+
func (ac *AlvuConfig) createTransformedFile(filePath string, content string) (tranformedFile transformers.TransformedFile, err error) {
146+
fileExt := filepath.Ext(filePath)
147+
fileWriter, err := os.CreateTemp("", "alvu-")
148+
if err != nil {
149+
return
150+
}
151+
_, err = fileWriter.WriteString(content)
152+
if err != nil {
153+
return
154+
}
155+
tranformedFile.TransformedFile = fileWriter.Name()
156+
tranformedFile.SourcePath = filePath
157+
tranformedFile.Extension = fileExt
158+
return
159+
}
160+
143161
func (ac *AlvuConfig) FlushFiles(files []HookedFile) error {
144162
if err := os.MkdirAll(ac.OutDir, os.ModePerm); err != nil {
145163
return err
@@ -171,12 +189,31 @@ func (ac *AlvuConfig) FlushFiles(files []HookedFile) error {
171189
}
172190
defer destWriter.Close()
173191

192+
if len(hookedFile.transform) > 1 {
193+
for _, t := range ac.Transformers[hookedFile.transform] {
194+
afterTransform, err := t.TransformContent(hookedFile.content)
195+
if err != nil {
196+
return err
197+
}
198+
hookedFile.content = afterTransform
199+
}
200+
}
201+
174202
replaced, _ := ac.injectInSlot(
175203
ac.ReadLayout(),
176204
string(hookedFile.content),
177205
)
178206

179207
template := templateHTML.New("temporaryTemplate")
208+
template = template.Funcs(templateHTML.FuncMap{
209+
"transform": func(extension string, content string) templateHTML.HTML {
210+
var transformed []byte = []byte(content)
211+
for _, t := range ac.Transformers[extension] {
212+
transformed, _ = t.TransformContent(transformed)
213+
}
214+
return templateHTML.HTML(transformed)
215+
},
216+
})
180217
template, err = template.Parse(replaced)
181218
if err != nil {
182219
ac.logger.Error(fmt.Sprintf("Failed to write to dist file with error: %v", err))
@@ -214,13 +251,25 @@ func runTransfomers(filesToProcess []string, ac *AlvuConfig) ([]transformers.Tra
214251
continue
215252
}
216253

254+
originalContent, err := os.ReadFile(fileToNormalize)
255+
if err != nil {
256+
return nil, fmt.Errorf("failed to read file %v with error %v", fileToNormalize, err)
257+
}
258+
217259
for _, transformer := range ac.Transformers[extension] {
218-
transformedFile, err := transformer.Transform(fileToNormalize)
260+
nextContent, err := transformer.TransformContent(originalContent)
219261
if err != nil {
220262
return nil, fmt.Errorf("failed to transform file: %v, with error: %v", fileToNormalize, err)
221263
}
222-
normalizedFiles = append(normalizedFiles, transformedFile)
264+
originalContent = nextContent
223265
}
266+
267+
transformedFile, err := ac.createTransformedFile(fileToNormalize, string(originalContent))
268+
if err != nil {
269+
return nil, fmt.Errorf("failed to transform file: %v, with error: %v", fileToNormalize, err)
270+
}
271+
272+
normalizedFiles = append(normalizedFiles, transformedFile)
224273
}
225274
return normalizedFiles, nil
226275
}

pkg/alvu/hooks.go

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,10 @@ type Hooks struct {
3535

3636
type HookedFile struct {
3737
transformers.TransformedFile
38-
content []byte
39-
data map[string]interface{}
40-
extras map[string]interface{}
38+
content []byte
39+
transform string
40+
data map[string]interface{}
41+
extras map[string]interface{}
4142
}
4243

4344
func (h *Hooks) Load() {
@@ -162,7 +163,7 @@ func (h *Hooks) ProcessFile(file transformers.TransformedFile) (hookedFile Hooke
162163
WriteableContent string `json:"content"`
163164
// HTMLContent string `json:"html"`
164165
}{
165-
Name: strings.TrimPrefix(file.SourcePath, filepath.Join(h.ac.RootPath, "pages")),
166+
Name: filepath.Clean(strings.TrimPrefix(strings.TrimPrefix(file.SourcePath, filepath.Join(h.ac.RootPath, "pages")), "/")),
166167
SourcePath: file.SourcePath,
167168
WriteableContent: string(fileData),
168169
}
@@ -215,9 +216,9 @@ func (h *Hooks) ProcessFile(file transformers.TransformedFile) (hookedFile Hooke
215216
hookedFile.content = []byte(stringVal)
216217
}
217218

218-
// if fromPlug["name"] != nil {
219-
// hookedFile.content = []byte(fmt.Sprintf("%v", fromPlug["name"]))
220-
// }
219+
if fromPlug["transform"] != nil {
220+
hookedFile.transform = fmt.Sprintf("%v", fromPlug["transform"])
221+
}
221222

222223
if fromPlug["data"] != nil {
223224
hookedFile.data = mergeMapWithCheck(hookedFile.data, fromPlug["data"])

transformers/html/html.go

Lines changed: 5 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,10 @@
11
package html
22

3-
import (
4-
"path/filepath"
3+
type HTMLTransformer struct{}
54

6-
"github.com/barelyhuman/alvu/transformers"
7-
)
8-
9-
type HTMLTransformer struct {
10-
}
11-
12-
func (mt *HTMLTransformer) Transform(filePath string) (transformedFile transformers.TransformedFile, err error) {
13-
return transformers.TransformedFile{
14-
SourcePath: filePath,
15-
TransformedFile: filePath,
16-
Extension: filepath.Ext(filePath),
17-
}, nil
5+
func (mt *HTMLTransformer) TransformContent(input []byte) (result []byte, err error) {
6+
result = input
7+
return
188
}
199

20-
func (mt *HTMLTransformer) Init() {
21-
22-
}
10+
func (mt *HTMLTransformer) Init() {}

transformers/markdown/markdown.go

Lines changed: 10 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,8 @@
11
package markdown
22

33
import (
4-
"os"
5-
"path/filepath"
6-
"strings"
4+
"bytes"
75

8-
"github.com/barelyhuman/alvu/transformers"
96
"github.com/yuin/goldmark"
107
highlighting "github.com/yuin/goldmark-highlighting"
118
"github.com/yuin/goldmark/extension"
@@ -21,41 +18,24 @@ type MarkdownTransformer struct {
2118
HighlightingTheme string
2219
}
2320

24-
func (mt *MarkdownTransformer) Transform(filePath string) (transformedFile transformers.TransformedFile, err error) {
25-
if mt.processor == nil {
26-
mt.Init()
27-
}
21+
func (mt *MarkdownTransformer) TransformContent(input []byte) (result []byte, err error) {
22+
mt.EnsureProcessor()
2823

29-
fileBytes, err := os.ReadFile(filePath)
24+
var buffer bytes.Buffer
25+
err = mt.processor.Convert(input, &buffer)
3026
if err != nil {
3127
return
3228
}
3329

34-
tmpDir := os.TempDir()
35-
filename := filepath.Base(filePath)
36-
fileExt := filepath.Ext(filename)
37-
filename = strings.TrimSuffix(filename, fileExt)
38-
filename += ".html"
39-
tmpFile := filepath.Join(tmpDir, filename)
40-
41-
fileWriter, err := os.Create(tmpFile)
42-
if err != nil {
43-
return
44-
}
30+
result = buffer.Bytes()
31+
return
32+
}
4533

46-
err = mt.processor.Convert(fileBytes, fileWriter)
47-
if err != nil {
34+
func (mt *MarkdownTransformer) EnsureProcessor() {
35+
if mt.processor != nil {
4836
return
4937
}
5038

51-
return transformers.TransformedFile{
52-
SourcePath: filePath,
53-
TransformedFile: tmpFile,
54-
Extension: fileExt,
55-
}, nil
56-
}
57-
58-
func (mt *MarkdownTransformer) Init() {
5939
rendererOptions := []renderer.Option{
6040
html.WithXHTML(),
6141
html.WithUnsafe(),

transformers/transformers.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,5 @@ type TransformedFile struct {
77
}
88

99
type Transfomer interface {
10-
Transform(filePath string) (TransformedFile, error)
10+
TransformContent(data []byte) ([]byte, error)
1111
}

0 commit comments

Comments
 (0)