main.go 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. package main
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "path/filepath"
  6. "strings"
  7. )
  8. type PreviewFile struct {
  9. Name string `json:"name"`
  10. Renderer string `json:"renderer"`
  11. Async bool `json:"async"`
  12. }
  13. var renderers = map[string]string{
  14. ".pdf": "pdfjs-dist",
  15. ".ofd": "DLTech21/ofd.js",
  16. ".typ": "typst.ts",
  17. ".dxf": "@flyfish-dev/cad-viewer",
  18. ".dwg": "@flyfish-dev/cad-viewer",
  19. ".dwf": "@flyfish-dev/cad-viewer",
  20. ".dwfx": "@flyfish-dev/cad-viewer",
  21. ".xps": "@flyfish-dev/cad-viewer",
  22. ".json": "highlight.js",
  23. }
  24. func planPreview(name string) PreviewFile {
  25. ext := strings.ToLower(filepath.Ext(name))
  26. renderer := renderers[ext]
  27. if renderer == "" {
  28. renderer = "fallback"
  29. }
  30. return PreviewFile{
  31. Name: name,
  32. Renderer: renderer,
  33. Async: renderer != "fallback",
  34. }
  35. }
  36. func main() {
  37. files := []string{"contract.pdf", "invoice.ofd", "report.typ", "component.vue"}
  38. plans := make([]PreviewFile, 0, len(files))
  39. for _, name := range files {
  40. plans = append(plans, planPreview(name))
  41. }
  42. payload, err := json.MarshalIndent(plans, "", " ")
  43. if err != nil {
  44. panic(err)
  45. }
  46. fmt.Println(string(payload))
  47. }