Compare commits
2 Commits
245e38dc95
...
7ff326ef25
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7ff326ef25 | ||
|
|
a5caf2d9e7 |
2
go.mod
2
go.mod
@ -4,6 +4,7 @@ go 1.26
|
|||||||
|
|
||||||
require (
|
require (
|
||||||
connectrpc.com/connect v1.19.2
|
connectrpc.com/connect v1.19.2
|
||||||
|
github.com/BurntSushi/toml v1.6.0
|
||||||
github.com/a-h/templ v0.3.1001
|
github.com/a-h/templ v0.3.1001
|
||||||
github.com/google/uuid v1.6.0
|
github.com/google/uuid v1.6.0
|
||||||
github.com/jackc/pgx/v5 v5.9.2
|
github.com/jackc/pgx/v5 v5.9.2
|
||||||
@ -11,6 +12,7 @@ require (
|
|||||||
)
|
)
|
||||||
|
|
||||||
require (
|
require (
|
||||||
|
github.com/google/go-cmp v0.7.0 // indirect
|
||||||
github.com/jackc/pgpassfile v1.0.0 // indirect
|
github.com/jackc/pgpassfile v1.0.0 // indirect
|
||||||
github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 // indirect
|
github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 // indirect
|
||||||
golang.org/x/text v0.36.0 // indirect
|
golang.org/x/text v0.36.0 // indirect
|
||||||
|
|||||||
6
go.sum
6
go.sum
@ -1,12 +1,14 @@
|
|||||||
connectrpc.com/connect v1.19.2 h1:McQ83FGdzL+t60peksi0gXC7MQ/iLKgLduAnThbM0mo=
|
connectrpc.com/connect v1.19.2 h1:McQ83FGdzL+t60peksi0gXC7MQ/iLKgLduAnThbM0mo=
|
||||||
connectrpc.com/connect v1.19.2/go.mod h1:tN20fjdGlewnSFeZxLKb0xwIZ6ozc3OQs2hTXy4du9w=
|
connectrpc.com/connect v1.19.2/go.mod h1:tN20fjdGlewnSFeZxLKb0xwIZ6ozc3OQs2hTXy4du9w=
|
||||||
|
github.com/BurntSushi/toml v1.6.0 h1:dRaEfpa2VI55EwlIW72hMRHdWouJeRF7TPYhI+AUQjk=
|
||||||
|
github.com/BurntSushi/toml v1.6.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho=
|
||||||
github.com/a-h/templ v0.3.1001 h1:yHDTgexACdJttyiyamcTHXr2QkIeVF1MukLy44EAhMY=
|
github.com/a-h/templ v0.3.1001 h1:yHDTgexACdJttyiyamcTHXr2QkIeVF1MukLy44EAhMY=
|
||||||
github.com/a-h/templ v0.3.1001/go.mod h1:oCZcnKRf5jjsGpf2yELzQfodLphd2mwecwG4Crk5HBo=
|
github.com/a-h/templ v0.3.1001/go.mod h1:oCZcnKRf5jjsGpf2yELzQfodLphd2mwecwG4Crk5HBo=
|
||||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
||||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
|
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
|
||||||
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
|
github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
|
||||||
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
|
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
|
||||||
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||||
github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM=
|
github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM=
|
||||||
|
|||||||
45
plugin/mod.go
Normal file
45
plugin/mod.go
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
package plugin
|
||||||
|
|
||||||
|
import (
|
||||||
|
tomlpkg "github.com/BurntSushi/toml"
|
||||||
|
)
|
||||||
|
|
||||||
|
type ModFile struct {
|
||||||
|
Plugin ModPlugin `toml:"plugin"`
|
||||||
|
Compatibility *ModCompat `toml:"compatibility"`
|
||||||
|
Requires []ModRequirement `toml:"requires"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type ModPlugin struct {
|
||||||
|
Name string `toml:"name"`
|
||||||
|
Scope string `toml:"scope"`
|
||||||
|
Version string `toml:"version"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type ModCompat struct {
|
||||||
|
BlockCore string `toml:"block_core"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type ModRequirement struct {
|
||||||
|
Name string `toml:"name"`
|
||||||
|
Version string `toml:"version"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func ParseModFull(b []byte) (*ModFile, error) {
|
||||||
|
var m ModFile
|
||||||
|
if err := tomlpkg.Unmarshal(b, &m); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return &m, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *ModFile) Coords() string {
|
||||||
|
if m == nil {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
scope := m.Plugin.Scope
|
||||||
|
if scope == "" {
|
||||||
|
return m.Plugin.Name + "@" + m.Plugin.Version
|
||||||
|
}
|
||||||
|
return "@" + scope + "/" + m.Plugin.Name + "@" + m.Plugin.Version
|
||||||
|
}
|
||||||
101
plugin/mod_test.go
Normal file
101
plugin/mod_test.go
Normal file
@ -0,0 +1,101 @@
|
|||||||
|
package plugin
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestParseModFull_BasicFields(t *testing.T) {
|
||||||
|
src := []byte(`
|
||||||
|
[plugin]
|
||||||
|
name = "smartblock"
|
||||||
|
scope = "blockninja"
|
||||||
|
version = "1.4.2"
|
||||||
|
`)
|
||||||
|
m, err := ParseModFull(src)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("ParseModFull err: %v", err)
|
||||||
|
}
|
||||||
|
if m.Plugin.Name != "smartblock" {
|
||||||
|
t.Errorf("Name = %q, want smartblock", m.Plugin.Name)
|
||||||
|
}
|
||||||
|
if m.Plugin.Scope != "blockninja" {
|
||||||
|
t.Errorf("Scope = %q, want blockninja", m.Plugin.Scope)
|
||||||
|
}
|
||||||
|
if m.Plugin.Version != "1.4.2" {
|
||||||
|
t.Errorf("Version = %q, want 1.4.2", m.Plugin.Version)
|
||||||
|
}
|
||||||
|
if got := m.Coords(); got != "@blockninja/smartblock@1.4.2" {
|
||||||
|
t.Errorf("Coords() = %q", got)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestParseModFull_BackCompatNoScope(t *testing.T) {
|
||||||
|
src := []byte(`
|
||||||
|
[plugin]
|
||||||
|
name = "legacy"
|
||||||
|
version = "0.1.0"
|
||||||
|
`)
|
||||||
|
m, err := ParseModFull(src)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("ParseModFull err: %v", err)
|
||||||
|
}
|
||||||
|
if m.Plugin.Scope != "" {
|
||||||
|
t.Errorf("Scope should be empty, got %q", m.Plugin.Scope)
|
||||||
|
}
|
||||||
|
if got := m.Coords(); got != "legacy@0.1.0" {
|
||||||
|
t.Errorf("Coords() = %q, want legacy@0.1.0", got)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestParseModFull_InvalidTOML(t *testing.T) {
|
||||||
|
_, err := ParseModFull([]byte("not valid toml = ="))
|
||||||
|
if err == nil {
|
||||||
|
t.Fatal("expected parse error")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestParseModFull_EmptyInput(t *testing.T) {
|
||||||
|
m, err := ParseModFull(nil)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("nil input err: %v", err)
|
||||||
|
}
|
||||||
|
if m.Plugin.Name != "" {
|
||||||
|
t.Errorf("Name should be empty")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestParseModFull_RequiresAndCompat(t *testing.T) {
|
||||||
|
src := []byte(`
|
||||||
|
[plugin]
|
||||||
|
name = "symposium"
|
||||||
|
scope = "blockninja"
|
||||||
|
version = "0.2.0"
|
||||||
|
|
||||||
|
[compatibility]
|
||||||
|
block_core = ">=1.5 <2.0"
|
||||||
|
|
||||||
|
[[requires]]
|
||||||
|
name = "@blockninja/smartblock"
|
||||||
|
version = ">=1.0 <2.0"
|
||||||
|
|
||||||
|
[[requires]]
|
||||||
|
name = "@blockninja/gotham"
|
||||||
|
version = ">=1.2"
|
||||||
|
`)
|
||||||
|
m, err := ParseModFull(src)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("ParseModFull err: %v", err)
|
||||||
|
}
|
||||||
|
if m.Compatibility == nil || m.Compatibility.BlockCore != ">=1.5 <2.0" {
|
||||||
|
t.Errorf("Compat = %+v", m.Compatibility)
|
||||||
|
}
|
||||||
|
if len(m.Requires) != 2 {
|
||||||
|
t.Fatalf("Requires len = %d, want 2", len(m.Requires))
|
||||||
|
}
|
||||||
|
if m.Requires[0].Name != "@blockninja/smartblock" {
|
||||||
|
t.Errorf("Requires[0].Name = %q", m.Requires[0].Name)
|
||||||
|
}
|
||||||
|
if m.Requires[1].Version != ">=1.2" {
|
||||||
|
t.Errorf("Requires[1].Version = %q", m.Requires[1].Version)
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user