mirror of
https://github.com/wisplite/parchment.git
synced 2026-06-27 21:57:08 -05:00
77 lines
1.4 KiB
Go
77 lines
1.4 KiB
Go
package main
|
|
|
|
import (
|
|
"encoding/json"
|
|
"io/fs"
|
|
"strings"
|
|
)
|
|
|
|
type PackageJSON struct {
|
|
Pkg string `json:"pkg"`
|
|
Name string `json:"name"`
|
|
Version string `json:"version"`
|
|
Description string `json:"description"`
|
|
Author string `json:"author"`
|
|
Icon string `json:"icon"`
|
|
}
|
|
|
|
/*
|
|
Packager is a class that helps create cpkg files and handle the upload process.
|
|
*/
|
|
|
|
func loadPackageJSON(fsys fs.FS) (*PackageJSON, error) {
|
|
packageJSON, err := fs.ReadFile(fsys, "package.json")
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
pkgData := &PackageJSON{}
|
|
err = json.Unmarshal(packageJSON, pkgData)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return pkgData, nil
|
|
}
|
|
|
|
func createCpkg(fsys fs.FS, pkgData *PackageJSON) (*cpkg, error) {
|
|
pkg := NewCpkg(pkgData.Pkg)
|
|
|
|
// Walk through all directories recursively
|
|
err := fs.WalkDir(fsys, ".", func(path string, d fs.DirEntry, err error) error {
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
// Skip directories themselves (we only want files)
|
|
if d.IsDir() {
|
|
return nil
|
|
}
|
|
|
|
// Skip certain files
|
|
fileName := d.Name()
|
|
if fileName == "debug.log" || strings.HasSuffix(fileName, ".cpkg") {
|
|
return nil
|
|
}
|
|
|
|
// Add file with full relative path
|
|
err = pkg.AddFile(fsys, path)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
})
|
|
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
success, err := pkg.Create()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if !success {
|
|
return nil, err
|
|
}
|
|
return pkg, nil
|
|
}
|