diff --git a/cmd/addressbook.go b/cmd/addressbook.go index 389e6ed6..73a2b9af 100644 --- a/cmd/addressbook.go +++ b/cmd/addressbook.go @@ -25,7 +25,7 @@ var ( Run: func(_ *cobra.Command, _ []string) { cfg := config.Global() table := table.New() - table.SetHeader([]string{"Name", "Address"}) + table.Header("Name", "Address") var output [][]string for name, acc := range cfg.AddressBook.All { @@ -44,8 +44,8 @@ var ( return output[i][0] < output[j][0] }) - table.AppendBulk(output) - table.Render() + cobra.CheckErr(table.Bulk(output)) + cobra.CheckErr(table.Render()) }, } diff --git a/cmd/network/governance/list.go b/cmd/network/governance/list.go index 20cb92ce..d4b71d89 100644 --- a/cmd/network/governance/list.go +++ b/cmd/network/governance/list.go @@ -28,7 +28,7 @@ var govListCmd = &cobra.Command{ cobra.CheckErr(err) table := table.New() - table.SetHeader([]string{"ID", "Kind", "Submitter", "Created At", "Closes At", "State"}) + table.Header("ID", "Kind", "Submitter", "Created At", "Closes At", "State") proposals, err := conn.Consensus().Governance().Proposals(ctx, common.GetHeight()) if err != nil { @@ -59,8 +59,8 @@ var govListCmd = &cobra.Command{ }) } - table.AppendBulk(output) - table.Render() + cobra.CheckErr(table.Bulk(output)) + cobra.CheckErr(table.Render()) }, } diff --git a/cmd/network/list.go b/cmd/network/list.go index 51e650da..c7fd94f0 100644 --- a/cmd/network/list.go +++ b/cmd/network/list.go @@ -18,7 +18,7 @@ var listCmd = &cobra.Command{ Run: func(_ *cobra.Command, _ []string) { cfg := cliConfig.Global() table := table.New() - table.SetHeader([]string{"Name", "Chain Context", "RPC"}) + table.Header("Name", "Chain Context", "RPC") var output [][]string for name, net := range cfg.Networks.All { @@ -39,7 +39,7 @@ var listCmd = &cobra.Command{ return output[i][0] < output[j][0] }) - table.AppendBulk(output) - table.Render() + cobra.CheckErr(table.Bulk(output)) + cobra.CheckErr(table.Render()) }, } diff --git a/cmd/network/show.go b/cmd/network/show.go index 630ffb8e..9ffe877f 100644 --- a/cmd/network/show.go +++ b/cmd/network/show.go @@ -311,7 +311,7 @@ var showCmd = &cobra.Command{ continue } table := table.New() - table.SetHeader([]string{"Entity ID", "Node ID", "Role"}) + table.Header("Entity ID", "Node ID", "Role") runtimeID := runtime.ID paratimeName := getParatimeName(cfg, runtimeID.String()) @@ -344,8 +344,8 @@ var showCmd = &cobra.Command{ }) } - table.AppendBulk(output) - table.Render() + cobra.CheckErr(table.Bulk(output)) + cobra.CheckErr(table.Render()) fmt.Println() } return diff --git a/cmd/paratime/list.go b/cmd/paratime/list.go index 406c08e9..dd17a263 100644 --- a/cmd/paratime/list.go +++ b/cmd/paratime/list.go @@ -23,7 +23,7 @@ var listCmd = &cobra.Command{ Run: func(_ *cobra.Command, _ []string) { cfg := cliConfig.Global() table := table.New() - table.SetHeader([]string{"Network", "Paratime", "ID", "Denomination(s)"}) + table.Header("Network", "Paratime", "ID", "Denominations") var output [][]string for netName, net := range cfg.Networks.All { @@ -50,8 +50,8 @@ var listCmd = &cobra.Command{ return output[i][1] < output[j][1] }) - table.AppendBulk(output) - table.Render() + cobra.CheckErr(table.Bulk(output)) + cobra.CheckErr(table.Render()) }, } diff --git a/cmd/paratime/statistics.go b/cmd/paratime/statistics.go index 22a6a344..2b375967 100644 --- a/cmd/paratime/statistics.go +++ b/cmd/paratime/statistics.go @@ -10,6 +10,8 @@ import ( "strconv" "github.com/olekukonko/tablewriter" + "github.com/olekukonko/tablewriter/renderer" + "github.com/olekukonko/tablewriter/tw" "github.com/spf13/cobra" "github.com/oasisprotocol/oasis-core/go/common/crypto/signature" @@ -489,12 +491,42 @@ func (s *runtimeStats) printStats() { func (s *runtimeStats) printEntityStats() { fmt.Println("\n=== ENTITY STATISTICS ===") - table := tablewriter.NewWriter(os.Stdout) - table.SetBorders(tablewriter.Border{Left: true, Top: false, Right: true, Bottom: false}) - table.SetCenterSeparator("|") - table.SetHeader(s.entitiesHeader) - table.AppendBulk(s.entitiesOutput) - table.Render() + + // Configure table with left/right borders, no top/bottom borders, and pipe separators. + rendition := tw.Rendition{ + Borders: tw.Border{ + Left: tw.On, + Right: tw.On, + Top: tw.Off, + Bottom: tw.Off, + }, + Symbols: tw.NewSymbols(tw.StyleASCII), + Settings: tw.Settings{ + Separators: tw.Separators{ + BetweenColumns: tw.On, + }, + }, + } + + table := tablewriter.NewTable( + os.Stdout, + tablewriter.WithRenderer(renderer.NewBlueprint(rendition)), + tablewriter.WithConfig(tablewriter.Config{ + Row: tw.CellConfig{ + Formatting: tw.CellFormatting{ + AutoWrap: tw.WrapNormal, + }, + }, + }), + ) + // Convert []string to []any for Header. + headerAny := make([]any, len(s.entitiesHeader)) + for i, v := range s.entitiesHeader { + headerAny[i] = v + } + table.Header(headerAny...) + cobra.CheckErr(table.Bulk(s.entitiesOutput)) + cobra.CheckErr(table.Render()) } func init() { diff --git a/cmd/rofl/provider/list.go b/cmd/rofl/provider/list.go index 77e3252a..e4cb81e0 100644 --- a/cmd/rofl/provider/list.go +++ b/cmd/rofl/provider/list.go @@ -99,7 +99,7 @@ func outputJSON(ctx context.Context, npa *common.NPASelection, conn connection.C // outputText returns providers in human-readable table format. func outputText(ctx context.Context, npa *common.NPASelection, conn connection.Connection, providers []*roflmarket.Provider) { table := table.New() - table.SetHeader([]string{"Provider Address", "Scheduler App", "Nodes", "Offers", "Instances"}) + table.Header("Provider Address", "Scheduler App", "Nodes", "Offers", "Instances") rows := make([][]string, 0, len(providers)) for _, provider := range providers { @@ -120,8 +120,8 @@ func outputText(ctx context.Context, npa *common.NPASelection, conn connection.C }) } - table.AppendBulk(rows) - table.Render() + cobra.CheckErr(table.Bulk(rows)) + cobra.CheckErr(table.Render()) // If --show-offers is enabled, display offers for each provider. if roflCommon.ShowOffers { diff --git a/cmd/wallet/list.go b/cmd/wallet/list.go index 3f18bd5f..60eb3d9d 100644 --- a/cmd/wallet/list.go +++ b/cmd/wallet/list.go @@ -18,7 +18,7 @@ var listCmd = &cobra.Command{ Run: func(_ *cobra.Command, _ []string) { cfg := config.Global() table := table.New() - table.SetHeader([]string{"Account", "Kind", "Address"}) + table.Header("Account", "Kind", "Address") var output [][]string for name, acc := range cfg.Wallet.All { @@ -37,7 +37,7 @@ var listCmd = &cobra.Command{ return output[i][0] < output[j][0] }) - table.AppendBulk(output) - table.Render() + cobra.CheckErr(table.Bulk(output)) + cobra.CheckErr(table.Render()) }, } diff --git a/examples/addressbook/03-list.out b/examples/addressbook/03-list.out index 41e98bc1..ba8c23d8 100644 --- a/examples/addressbook/03-list.out +++ b/examples/addressbook/03-list.out @@ -1,3 +1,3 @@ -NAME ADDRESS -meghan 0xBe8B38ED9b0794e7ab9EbEfC1e710b4F4EC6F6C1 -mike oasis1qrtrpg56l6y2cfudwtgfuxmq5e5cyhffcsfpdqvw +NAME ADDRESS +meghan 0xBe8B38ED9b0794e7ab9EbEfC1e710b4F4EC6F6C1 +mike oasis1qrtrpg56l6y2cfudwtgfuxmq5e5cyhffcsfpdqvw diff --git a/examples/addressbook/07-list.out b/examples/addressbook/07-list.out index 379930a4..a7353c09 100644 --- a/examples/addressbook/07-list.out +++ b/examples/addressbook/07-list.out @@ -1,3 +1,3 @@ -NAME ADDRESS -mark oasis1qrtrpg56l6y2cfudwtgfuxmq5e5cyhffcsfpdqvw -meghan 0xBe8B38ED9b0794e7ab9EbEfC1e710b4F4EC6F6C1 +NAME ADDRESS +mark oasis1qrtrpg56l6y2cfudwtgfuxmq5e5cyhffcsfpdqvw +meghan 0xBe8B38ED9b0794e7ab9EbEfC1e710b4F4EC6F6C1 diff --git a/examples/addressbook/10-list.out b/examples/addressbook/10-list.out index 0f89bf1c..e811bef5 100644 --- a/examples/addressbook/10-list.out +++ b/examples/addressbook/10-list.out @@ -1,2 +1,2 @@ -NAME ADDRESS -meghan 0xBe8B38ED9b0794e7ab9EbEfC1e710b4F4EC6F6C1 +NAME ADDRESS +meghan 0xBe8B38ED9b0794e7ab9EbEfC1e710b4F4EC6F6C1 diff --git a/examples/migration/network-chaincontext-and-rpcs.out b/examples/migration/network-chaincontext-and-rpcs.out index e6987d93..27ca5cc3 100644 --- a/examples/migration/network-chaincontext-and-rpcs.out +++ b/examples/migration/network-chaincontext-and-rpcs.out @@ -1,3 +1,3 @@ -NAME CHAIN CONTEXT RPC -mainnet bb3d748def55bdfb797a2ac53ee6ee141e54cd2ab2dc2375f4a0703a178e6e55 grpc.oasis.io:443 -testnet (*) 0b91b8e4e44b2003a7c5e23ddadb5e14ef5345c0ebcb3ddcae07fa2f244cab76 testnet.grpc.oasis.io:443 +NAME CHAIN CONTEXT RPC +mainnet bb3d748def55bdfb797a2ac53ee6ee141e54cd2ab2dc2375f4a0703a178e6e55 grpc.oasis.io:443 +testnet (*) 0b91b8e4e44b2003a7c5e23ddadb5e14ef5345c0ebcb3ddcae07fa2f244cab76 testnet.grpc.oasis.io:443 diff --git a/examples/network-governance/list.out b/examples/network-governance/list.out index 12000948..64433ff6 100644 --- a/examples/network-governance/list.out +++ b/examples/network-governance/list.out @@ -1,12 +1,12 @@ -ID KIND SUBMITTER CREATED AT CLOSES AT STATE -1 upgrade oasis1qrs2dl6nz6fcxxr3tq37laxlz6hxk6kuscnr6rxj 5633 5645 passed -2 upgrade oasis1qrs2dl6nz6fcxxr3tq37laxlz6hxk6kuscnr6rxj 7525 7537 passed -3 upgrade oasis1qrs2dl6nz6fcxxr3tq37laxlz6hxk6kuscnr6rxj 8817 8829 passed -4 upgrade oasis1qrs2dl6nz6fcxxr3tq37laxlz6hxk6kuscnr6rxj 14183 14195 passed -5 upgrade oasis1qrs2dl6nz6fcxxr3tq37laxlz6hxk6kuscnr6rxj 14869 14881 passed -6 cancel upgrade 5 oasis1qrs2dl6nz6fcxxr3tq37laxlz6hxk6kuscnr6rxj 14895 14907 passed -7 upgrade oasis1qrs2dl6nz6fcxxr3tq37laxlz6hxk6kuscnr6rxj 14982 14994 passed -8 upgrade oasis1qpwaggvmhwq5uk40clase3knt655nn2tdy39nz2f 29493 29505 passed -9 change parameters (governance) oasis1qrx85mv85k708ylww597rd42enlzhdmeu56wqj72 30693 30705 passed -10 change parameters (staking) oasis1qqxxut9x74dutu587f9nj8787qz4dm0ueu05l88c 33059 33071 passed -11 upgrade oasis1qqxxut9x74dutu587f9nj8787qz4dm0ueu05l88c 35915 35927 passed +ID KIND SUBMITTER CREATED AT CLOSES AT STATE +1 upgrade oasis1qrs2dl6nz6fcxxr3tq37laxlz6hxk6kuscnr6rxj 5633 5645 passed +2 upgrade oasis1qrs2dl6nz6fcxxr3tq37laxlz6hxk6kuscnr6rxj 7525 7537 passed +3 upgrade oasis1qrs2dl6nz6fcxxr3tq37laxlz6hxk6kuscnr6rxj 8817 8829 passed +4 upgrade oasis1qrs2dl6nz6fcxxr3tq37laxlz6hxk6kuscnr6rxj 14183 14195 passed +5 upgrade oasis1qrs2dl6nz6fcxxr3tq37laxlz6hxk6kuscnr6rxj 14869 14881 passed +6 cancel upgrade 5 oasis1qrs2dl6nz6fcxxr3tq37laxlz6hxk6kuscnr6rxj 14895 14907 passed +7 upgrade oasis1qrs2dl6nz6fcxxr3tq37laxlz6hxk6kuscnr6rxj 14982 14994 passed +8 upgrade oasis1qpwaggvmhwq5uk40clase3knt655nn2tdy39nz2f 29493 29505 passed +9 change parameters (governance) oasis1qrx85mv85k708ylww597rd42enlzhdmeu56wqj72 30693 30705 passed +10 change parameters (staking) oasis1qqxxut9x74dutu587f9nj8787qz4dm0ueu05l88c 33059 33071 passed +11 upgrade oasis1qqxxut9x74dutu587f9nj8787qz4dm0ueu05l88c 35915 35927 passed diff --git a/examples/network-set-rpc/00-list.out b/examples/network-set-rpc/00-list.out index 9ba6d135..d9327e53 100644 --- a/examples/network-set-rpc/00-list.out +++ b/examples/network-set-rpc/00-list.out @@ -1,5 +1,5 @@ -NAME CHAIN CONTEXT RPC -mainnet (*) bb3d748def55bdfb797a2ac53ee6ee141e54cd2ab2dc2375f4a0703a178e6e55 grpc.oasis.io:443 -mainnet_local b11b369e0da5bb230b220127f5e7b242d385ef8c6f54906243f30af63c815535 unix:/node/data/internal.sock -testnet 0b91b8e4e44b2003a7c5e23ddadb5e14ef5345c0ebcb3ddcae07fa2f244cab76 testnet.grpc.oasis.io:443 -testnet_alt 50304f98ddb656620ea817cc1446c401752a05a249b36c9b90dba4616829977a testnet2.grpc.oasis.io:443 +NAME CHAIN CONTEXT RPC +mainnet (*) bb3d748def55bdfb797a2ac53ee6ee141e54cd2ab2dc2375f4a0703a178e6e55 grpc.oasis.io:443 +mainnet_local b11b369e0da5bb230b220127f5e7b242d385ef8c6f54906243f30af63c815535 unix:/node/data/internal.sock +testnet 0b91b8e4e44b2003a7c5e23ddadb5e14ef5345c0ebcb3ddcae07fa2f244cab76 testnet.grpc.oasis.io:443 +testnet_alt 50304f98ddb656620ea817cc1446c401752a05a249b36c9b90dba4616829977a testnet2.grpc.oasis.io:443 diff --git a/examples/network-set-rpc/02-list.out b/examples/network-set-rpc/02-list.out index 2277a352..c953cd72 100644 --- a/examples/network-set-rpc/02-list.out +++ b/examples/network-set-rpc/02-list.out @@ -1,5 +1,5 @@ -NAME CHAIN CONTEXT RPC -mainnet (*) bb3d748def55bdfb797a2ac53ee6ee141e54cd2ab2dc2375f4a0703a178e6e55 grpc.oasis.io:443 -mainnet_local b11b369e0da5bb230b220127f5e7b242d385ef8c6f54906243f30af63c815535 unix:/node/data/internal.sock -testnet 0b91b8e4e44b2003a7c5e23ddadb5e14ef5345c0ebcb3ddcae07fa2f244cab76 testnet.grpc.oasis.io:443 -testnet_alt 50304f98ddb656620ea817cc1446c401752a05a249b36c9b90dba4616829977a testnet3.grpc.oasis.io:443 +NAME CHAIN CONTEXT RPC +mainnet (*) bb3d748def55bdfb797a2ac53ee6ee141e54cd2ab2dc2375f4a0703a178e6e55 grpc.oasis.io:443 +mainnet_local b11b369e0da5bb230b220127f5e7b242d385ef8c6f54906243f30af63c815535 unix:/node/data/internal.sock +testnet 0b91b8e4e44b2003a7c5e23ddadb5e14ef5345c0ebcb3ddcae07fa2f244cab76 testnet.grpc.oasis.io:443 +testnet_alt 50304f98ddb656620ea817cc1446c401752a05a249b36c9b90dba4616829977a testnet3.grpc.oasis.io:443 diff --git a/examples/network/00-list.out b/examples/network/00-list.out index 9ba6d135..d9327e53 100644 --- a/examples/network/00-list.out +++ b/examples/network/00-list.out @@ -1,5 +1,5 @@ -NAME CHAIN CONTEXT RPC -mainnet (*) bb3d748def55bdfb797a2ac53ee6ee141e54cd2ab2dc2375f4a0703a178e6e55 grpc.oasis.io:443 -mainnet_local b11b369e0da5bb230b220127f5e7b242d385ef8c6f54906243f30af63c815535 unix:/node/data/internal.sock -testnet 0b91b8e4e44b2003a7c5e23ddadb5e14ef5345c0ebcb3ddcae07fa2f244cab76 testnet.grpc.oasis.io:443 -testnet_alt 50304f98ddb656620ea817cc1446c401752a05a249b36c9b90dba4616829977a testnet2.grpc.oasis.io:443 +NAME CHAIN CONTEXT RPC +mainnet (*) bb3d748def55bdfb797a2ac53ee6ee141e54cd2ab2dc2375f4a0703a178e6e55 grpc.oasis.io:443 +mainnet_local b11b369e0da5bb230b220127f5e7b242d385ef8c6f54906243f30af63c815535 unix:/node/data/internal.sock +testnet 0b91b8e4e44b2003a7c5e23ddadb5e14ef5345c0ebcb3ddcae07fa2f244cab76 testnet.grpc.oasis.io:443 +testnet_alt 50304f98ddb656620ea817cc1446c401752a05a249b36c9b90dba4616829977a testnet2.grpc.oasis.io:443 diff --git a/examples/network/02-list.out b/examples/network/02-list.out index 5769e4f2..26eaad01 100644 --- a/examples/network/02-list.out +++ b/examples/network/02-list.out @@ -1,4 +1,4 @@ -NAME CHAIN CONTEXT RPC -mainnet (*) bb3d748def55bdfb797a2ac53ee6ee141e54cd2ab2dc2375f4a0703a178e6e55 grpc.oasis.io:443 -mainnet_local b11b369e0da5bb230b220127f5e7b242d385ef8c6f54906243f30af63c815535 unix:/node/data/internal.sock -testnet 0b91b8e4e44b2003a7c5e23ddadb5e14ef5345c0ebcb3ddcae07fa2f244cab76 testnet.grpc.oasis.io:443 +NAME CHAIN CONTEXT RPC +mainnet (*) bb3d748def55bdfb797a2ac53ee6ee141e54cd2ab2dc2375f4a0703a178e6e55 grpc.oasis.io:443 +mainnet_local b11b369e0da5bb230b220127f5e7b242d385ef8c6f54906243f30af63c815535 unix:/node/data/internal.sock +testnet 0b91b8e4e44b2003a7c5e23ddadb5e14ef5345c0ebcb3ddcae07fa2f244cab76 testnet.grpc.oasis.io:443 diff --git a/examples/network/04-list.out b/examples/network/04-list.out index 4461f7b7..fcf2468e 100644 --- a/examples/network/04-list.out +++ b/examples/network/04-list.out @@ -1,4 +1,4 @@ -NAME CHAIN CONTEXT RPC -mainnet bb3d748def55bdfb797a2ac53ee6ee141e54cd2ab2dc2375f4a0703a178e6e55 grpc.oasis.io:443 -mainnet_local (*) b11b369e0da5bb230b220127f5e7b242d385ef8c6f54906243f30af63c815535 unix:/node/data/internal.sock -testnet 0b91b8e4e44b2003a7c5e23ddadb5e14ef5345c0ebcb3ddcae07fa2f244cab76 testnet.grpc.oasis.io:443 +NAME CHAIN CONTEXT RPC +mainnet bb3d748def55bdfb797a2ac53ee6ee141e54cd2ab2dc2375f4a0703a178e6e55 grpc.oasis.io:443 +mainnet_local (*) b11b369e0da5bb230b220127f5e7b242d385ef8c6f54906243f30af63c815535 unix:/node/data/internal.sock +testnet 0b91b8e4e44b2003a7c5e23ddadb5e14ef5345c0ebcb3ddcae07fa2f244cab76 testnet.grpc.oasis.io:443 diff --git a/examples/network/06-list.out b/examples/network/06-list.out index e8e1fc3c..c3b16efa 100644 --- a/examples/network/06-list.out +++ b/examples/network/06-list.out @@ -1,4 +1,4 @@ -NAME CHAIN CONTEXT RPC -mainnet bb3d748def55bdfb797a2ac53ee6ee141e54cd2ab2dc2375f4a0703a178e6e55 grpc.oasis.io:443 -mainnet_local (*) 01234513331133a715c7a150313877dF1d33e77a715c7a150313877dF1d33e77 unix:/node/data/internal.sock -testnet 0b91b8e4e44b2003a7c5e23ddadb5e14ef5345c0ebcb3ddcae07fa2f244cab76 testnet.grpc.oasis.io:443 +NAME CHAIN CONTEXT RPC +mainnet bb3d748def55bdfb797a2ac53ee6ee141e54cd2ab2dc2375f4a0703a178e6e55 grpc.oasis.io:443 +mainnet_local (*) 01234513331133a715c7a150313877dF1d33e77a715c7a150313877dF1d33e77 unix:/node/data/internal.sock +testnet 0b91b8e4e44b2003a7c5e23ddadb5e14ef5345c0ebcb3ddcae07fa2f244cab76 testnet.grpc.oasis.io:443 diff --git a/examples/paratime-remove/00-list.out b/examples/paratime-remove/00-list.out index d31bd479..4596ce8a 100644 --- a/examples/paratime-remove/00-list.out +++ b/examples/paratime-remove/00-list.out @@ -1,12 +1,12 @@ -NETWORK PARATIME ID DENOMINATION(S) -mainnet cipher 000000000000000000000000000000000000000000000000e199119c992377cb ROSE[9] (*) -mainnet emerald (*) 000000000000000000000000000000000000000000000000e2eaa99fc008f87f ROSE[18] (*) -mainnet sapphire 000000000000000000000000000000000000000000000000f80306c9858e7279 ROSE[18] (*) -testnet cipher 0000000000000000000000000000000000000000000000000000000000000000 TEST[9] (*) -testnet emerald (*) 00000000000000000000000000000000000000000000000072c8215e60d5bca7 TEST[18] (*) -testnet pontusx_dev 0000000000000000000000000000000000000000000000004febe52eb412b421 EUROe[18] (*) - TEST[18] -testnet pontusx_test 00000000000000000000000000000000000000000000000004a6f9071c007069 EUROe[18] (*) - TEST[18] -testnet sapphire 000000000000000000000000000000000000000000000000a6d1e3ebf60dff6c TEST[18] (*) -testnet sapphire2 000000000000000000000000000000000000000000000000a6d1e3ebf60dff6d TEST[18] (*) +NETWORK PARATIME ID DENOMINATIONS +mainnet cipher 000000000000000000000000000000000000000000000000e199119c992377cb ROSE[9] (*) +mainnet emerald (*) 000000000000000000000000000000000000000000000000e2eaa99fc008f87f ROSE[18] (*) +mainnet sapphire 000000000000000000000000000000000000000000000000f80306c9858e7279 ROSE[18] (*) +testnet cipher 0000000000000000000000000000000000000000000000000000000000000000 TEST[9] (*) +testnet emerald (*) 00000000000000000000000000000000000000000000000072c8215e60d5bca7 TEST[18] (*) +testnet pontusx_dev 0000000000000000000000000000000000000000000000004febe52eb412b421 EUROe[18] (*) + TEST[18] +testnet pontusx_test 00000000000000000000000000000000000000000000000004a6f9071c007069 EUROe[18] (*) + TEST[18] +testnet sapphire 000000000000000000000000000000000000000000000000a6d1e3ebf60dff6c TEST[18] (*) +testnet sapphire2 000000000000000000000000000000000000000000000000a6d1e3ebf60dff6d TEST[18] (*) diff --git a/examples/paratime-remove/02-list.out b/examples/paratime-remove/02-list.out index ce4d67e1..e86f5c63 100644 --- a/examples/paratime-remove/02-list.out +++ b/examples/paratime-remove/02-list.out @@ -1,11 +1,11 @@ -NETWORK PARATIME ID DENOMINATION(S) -mainnet cipher 000000000000000000000000000000000000000000000000e199119c992377cb ROSE[9] (*) -mainnet emerald (*) 000000000000000000000000000000000000000000000000e2eaa99fc008f87f ROSE[18] (*) -mainnet sapphire 000000000000000000000000000000000000000000000000f80306c9858e7279 ROSE[18] (*) -testnet cipher 0000000000000000000000000000000000000000000000000000000000000000 TEST[9] (*) -testnet emerald (*) 00000000000000000000000000000000000000000000000072c8215e60d5bca7 TEST[18] (*) -testnet pontusx_dev 0000000000000000000000000000000000000000000000004febe52eb412b421 EUROe[18] (*) - TEST[18] -testnet pontusx_test 00000000000000000000000000000000000000000000000004a6f9071c007069 EUROe[18] (*) - TEST[18] -testnet sapphire 000000000000000000000000000000000000000000000000a6d1e3ebf60dff6c TEST[18] (*) +NETWORK PARATIME ID DENOMINATIONS +mainnet cipher 000000000000000000000000000000000000000000000000e199119c992377cb ROSE[9] (*) +mainnet emerald (*) 000000000000000000000000000000000000000000000000e2eaa99fc008f87f ROSE[18] (*) +mainnet sapphire 000000000000000000000000000000000000000000000000f80306c9858e7279 ROSE[18] (*) +testnet cipher 0000000000000000000000000000000000000000000000000000000000000000 TEST[9] (*) +testnet emerald (*) 00000000000000000000000000000000000000000000000072c8215e60d5bca7 TEST[18] (*) +testnet pontusx_dev 0000000000000000000000000000000000000000000000004febe52eb412b421 EUROe[18] (*) + TEST[18] +testnet pontusx_test 00000000000000000000000000000000000000000000000004a6f9071c007069 EUROe[18] (*) + TEST[18] +testnet sapphire 000000000000000000000000000000000000000000000000a6d1e3ebf60dff6c TEST[18] (*) diff --git a/examples/paratime/00-list.out b/examples/paratime/00-list.out index d493a5ce..3f7440c8 100644 --- a/examples/paratime/00-list.out +++ b/examples/paratime/00-list.out @@ -1,11 +1,11 @@ -NETWORK PARATIME ID DENOMINATION(S) -mainnet cipher 000000000000000000000000000000000000000000000000e199119c992377cb ROSE[9] (*) -mainnet emerald 000000000000000000000000000000000000000000000000e2eaa99fc008f87f ROSE[18] (*) -mainnet sapphire (*) 000000000000000000000000000000000000000000000000f80306c9858e7279 ROSE[18] (*) -testnet cipher 0000000000000000000000000000000000000000000000000000000000000000 TEST[9] (*) -testnet emerald 00000000000000000000000000000000000000000000000072c8215e60d5bca7 TEST[18] (*) -testnet pontusx_dev 0000000000000000000000000000000000000000000000004febe52eb412b421 EUROe[18] (*) - TEST[18] -testnet pontusx_test 00000000000000000000000000000000000000000000000004a6f9071c007069 EUROe[18] (*) - TEST[18] -testnet sapphire (*) 000000000000000000000000000000000000000000000000a6d1e3ebf60dff6c TEST[18] (*) +NETWORK PARATIME ID DENOMINATIONS +mainnet cipher 000000000000000000000000000000000000000000000000e199119c992377cb ROSE[9] (*) +mainnet emerald 000000000000000000000000000000000000000000000000e2eaa99fc008f87f ROSE[18] (*) +mainnet sapphire (*) 000000000000000000000000000000000000000000000000f80306c9858e7279 ROSE[18] (*) +testnet cipher 0000000000000000000000000000000000000000000000000000000000000000 TEST[9] (*) +testnet emerald 00000000000000000000000000000000000000000000000072c8215e60d5bca7 TEST[18] (*) +testnet pontusx_dev 0000000000000000000000000000000000000000000000004febe52eb412b421 EUROe[18] (*) + TEST[18] +testnet pontusx_test 00000000000000000000000000000000000000000000000004a6f9071c007069 EUROe[18] (*) + TEST[18] +testnet sapphire (*) 000000000000000000000000000000000000000000000000a6d1e3ebf60dff6c TEST[18] (*) diff --git a/examples/paratime/02-list.out b/examples/paratime/02-list.out index a13b7640..7021835a 100644 --- a/examples/paratime/02-list.out +++ b/examples/paratime/02-list.out @@ -1,11 +1,11 @@ -NETWORK PARATIME ID DENOMINATION(S) -mainnet cipher 000000000000000000000000000000000000000000000000e199119c992377cb ROSE[9] (*) -mainnet emerald 000000000000000000000000000000000000000000000000e2eaa99fc008f87f ROSE[18] (*) -mainnet sapphire (*) 000000000000000000000000000000000000000000000000f80306c9858e7279 ROSE[18] (*) -testnet cipher (*) 0000000000000000000000000000000000000000000000000000000000000000 TEST[9] (*) -testnet emerald 00000000000000000000000000000000000000000000000072c8215e60d5bca7 TEST[18] (*) -testnet pontusx_dev 0000000000000000000000000000000000000000000000004febe52eb412b421 EUROe[18] (*) - TEST[18] -testnet pontusx_test 00000000000000000000000000000000000000000000000004a6f9071c007069 EUROe[18] (*) - TEST[18] -testnet sapphire 000000000000000000000000000000000000000000000000a6d1e3ebf60dff6c TEST[18] (*) +NETWORK PARATIME ID DENOMINATIONS +mainnet cipher 000000000000000000000000000000000000000000000000e199119c992377cb ROSE[9] (*) +mainnet emerald 000000000000000000000000000000000000000000000000e2eaa99fc008f87f ROSE[18] (*) +mainnet sapphire (*) 000000000000000000000000000000000000000000000000f80306c9858e7279 ROSE[18] (*) +testnet cipher (*) 0000000000000000000000000000000000000000000000000000000000000000 TEST[9] (*) +testnet emerald 00000000000000000000000000000000000000000000000072c8215e60d5bca7 TEST[18] (*) +testnet pontusx_dev 0000000000000000000000000000000000000000000000004febe52eb412b421 EUROe[18] (*) + TEST[18] +testnet pontusx_test 00000000000000000000000000000000000000000000000004a6f9071c007069 EUROe[18] (*) + TEST[18] +testnet sapphire 000000000000000000000000000000000000000000000000a6d1e3ebf60dff6c TEST[18] (*) diff --git a/examples/rofl/provider-list-show-offers.out.static b/examples/rofl/provider-list-show-offers.out.static index 9a5d154c..bc714316 100644 --- a/examples/rofl/provider-list-show-offers.out.static +++ b/examples/rofl/provider-list-show-offers.out.static @@ -1,11 +1,11 @@ -PROVIDER ADDRESS SCHEDULER APP NODES OFFERS INSTANCES -oasis1qp2ens0hsp7gh23wajxa4hpetkdek3swyyulyrmz rofl1qrqw99h0f7az3hwt2cl7yeew3wtz0fxunu7luyfg 2 1 8 -oasis1qqw74ezqygseg32e7jq9tl637q7aa4h7qsssmwp3 rofl1qrqw99h0f7az3hwt2cl7yeew3wtz0fxunu7luyfg 1 3 0 -oasis1qrcxr6lh03xyazkg7ad7q2dqs94kj0arusmyzq8g rofl1qrqw99h0f7az3hwt2cl7yeew3wtz0fxunu7luyfg 0 0 0 -oasis1qrfeadn03ljm0kfx8wx0d5zf6kj79pxqvv0dukdm rofl1qrqw99h0f7az3hwt2cl7yeew3wtz0fxunu7luyfg 1 1 2 -oasis1qrjprejadvxjwj3m3mj8xurt0mvafw4jhymmmtlj rofl1qrqw99h0f7az3hwt2cl7yeew3wtz0fxunu7luyfg 0 0 0 -oasis1qrpptdcpsxvxn3re0cg3f6hfy0kyfujnz5ex7vgn rofl1qr95suussttd2g9ehu3zcpgx8ewtwgayyuzsl0x2 0 2 2 -oasis1qrxhk2aqwq7g5fq85a89yv2khdgn2wzccqhg2sal rofl1qrqw99h0f7az3hwt2cl7yeew3wtz0fxunu7luyfg 1 4 0 +PROVIDER ADDRESS SCHEDULER APP NODES OFFERS INSTANCES +oasis1qp2ens0hsp7gh23wajxa4hpetkdek3swyyulyrmz rofl1qrqw99h0f7az3hwt2cl7yeew3wtz0fxunu7luyfg 2 1 8 +oasis1qqw74ezqygseg32e7jq9tl637q7aa4h7qsssmwp3 rofl1qrqw99h0f7az3hwt2cl7yeew3wtz0fxunu7luyfg 1 3 0 +oasis1qrcxr6lh03xyazkg7ad7q2dqs94kj0arusmyzq8g rofl1qrqw99h0f7az3hwt2cl7yeew3wtz0fxunu7luyfg 0 0 0 +oasis1qrfeadn03ljm0kfx8wx0d5zf6kj79pxqvv0dukdm rofl1qrqw99h0f7az3hwt2cl7yeew3wtz0fxunu7luyfg 1 1 2 +oasis1qrjprejadvxjwj3m3mj8xurt0mvafw4jhymmmtlj rofl1qrqw99h0f7az3hwt2cl7yeew3wtz0fxunu7luyfg 0 0 0 +oasis1qrpptdcpsxvxn3re0cg3f6hfy0kyfujnz5ex7vgn rofl1qr95suussttd2g9ehu3zcpgx8ewtwgayyuzsl0x2 0 2 2 +oasis1qrxhk2aqwq7g5fq85a89yv2khdgn2wzccqhg2sal rofl1qrqw99h0f7az3hwt2cl7yeew3wtz0fxunu7luyfg 1 4 0 Provider oasis1qp2ens0hsp7gh23wajxa4hpetkdek3swyyulyrmz (1 offers): - playground_short [0000000000000003] diff --git a/examples/rofl/provider-list.out.static b/examples/rofl/provider-list.out.static index 4562083c..3f5005fe 100644 --- a/examples/rofl/provider-list.out.static +++ b/examples/rofl/provider-list.out.static @@ -1,8 +1,8 @@ -PROVIDER ADDRESS SCHEDULER APP NODES OFFERS INSTANCES -oasis1qp2ens0hsp7gh23wajxa4hpetkdek3swyyulyrmz rofl1qrqw99h0f7az3hwt2cl7yeew3wtz0fxunu7luyfg 2 1 12 -oasis1qqw74ezqygseg32e7jq9tl637q7aa4h7qsssmwp3 rofl1qrqw99h0f7az3hwt2cl7yeew3wtz0fxunu7luyfg 1 3 0 -oasis1qrcxr6lh03xyazkg7ad7q2dqs94kj0arusmyzq8g rofl1qrqw99h0f7az3hwt2cl7yeew3wtz0fxunu7luyfg 0 0 0 -oasis1qrfeadn03ljm0kfx8wx0d5zf6kj79pxqvv0dukdm rofl1qrqw99h0f7az3hwt2cl7yeew3wtz0fxunu7luyfg 1 1 2 -oasis1qrjprejadvxjwj3m3mj8xurt0mvafw4jhymmmtlj rofl1qrqw99h0f7az3hwt2cl7yeew3wtz0fxunu7luyfg 0 0 0 -oasis1qrpptdcpsxvxn3re0cg3f6hfy0kyfujnz5ex7vgn rofl1qr95suussttd2g9ehu3zcpgx8ewtwgayyuzsl0x2 0 2 2 -oasis1qrxhk2aqwq7g5fq85a89yv2khdgn2wzccqhg2sal rofl1qrqw99h0f7az3hwt2cl7yeew3wtz0fxunu7luyfg 1 4 0 +PROVIDER ADDRESS SCHEDULER APP NODES OFFERS INSTANCES +oasis1qp2ens0hsp7gh23wajxa4hpetkdek3swyyulyrmz rofl1qrqw99h0f7az3hwt2cl7yeew3wtz0fxunu7luyfg 2 1 12 +oasis1qqw74ezqygseg32e7jq9tl637q7aa4h7qsssmwp3 rofl1qrqw99h0f7az3hwt2cl7yeew3wtz0fxunu7luyfg 1 3 0 +oasis1qrcxr6lh03xyazkg7ad7q2dqs94kj0arusmyzq8g rofl1qrqw99h0f7az3hwt2cl7yeew3wtz0fxunu7luyfg 0 0 0 +oasis1qrfeadn03ljm0kfx8wx0d5zf6kj79pxqvv0dukdm rofl1qrqw99h0f7az3hwt2cl7yeew3wtz0fxunu7luyfg 1 1 2 +oasis1qrjprejadvxjwj3m3mj8xurt0mvafw4jhymmmtlj rofl1qrqw99h0f7az3hwt2cl7yeew3wtz0fxunu7luyfg 0 0 0 +oasis1qrpptdcpsxvxn3re0cg3f6hfy0kyfujnz5ex7vgn rofl1qr95suussttd2g9ehu3zcpgx8ewtwgayyuzsl0x2 0 2 2 +oasis1qrxhk2aqwq7g5fq85a89yv2khdgn2wzccqhg2sal rofl1qrqw99h0f7az3hwt2cl7yeew3wtz0fxunu7luyfg 1 4 0 diff --git a/examples/setup/wallet-list.out b/examples/setup/wallet-list.out index ced7e3f3..8c18fd66 100644 --- a/examples/setup/wallet-list.out +++ b/examples/setup/wallet-list.out @@ -1 +1 @@ -ACCOUNT KIND ADDRESS +ACCOUNT KIND ADDRESS diff --git a/examples/wallet/00-list.out b/examples/wallet/00-list.out index ff3c5400..11b54c63 100644 --- a/examples/wallet/00-list.out +++ b/examples/wallet/00-list.out @@ -1,6 +1,6 @@ -ACCOUNT KIND ADDRESS -emma file (secp256k1-raw) oasis1qph93wnfw8shu04pqyarvtjy4lytz3hp0c7tqnqh -eugene file (secp256k1-bip44:0) oasis1qrvzxld9rz83wv92lvnkpmr30c77kj2tvg0pednz -lenny ledger (secp256k1-bip44:3) oasis1qrmw4rhvp8ksj3yx6p2ftnkz864muc3re5jlgall -logan ledger (ed25519-legacy:0) oasis1qpl4axynedmdrrgrg7dpw3yxc4a8crevr5dkuksl -oscar (*) file (ed25519-adr8:0) oasis1qp87hflmelnpqhzcqcw8rhzakq4elj7jzv090p3e +ACCOUNT KIND ADDRESS +emma file (secp256k1-raw) oasis1qph93wnfw8shu04pqyarvtjy4lytz3hp0c7tqnqh +eugene file (secp256k1-bip44:0) oasis1qrvzxld9rz83wv92lvnkpmr30c77kj2tvg0pednz +lenny ledger (secp256k1-bip44:3) oasis1qrmw4rhvp8ksj3yx6p2ftnkz864muc3re5jlgall +logan ledger (ed25519-legacy:0) oasis1qpl4axynedmdrrgrg7dpw3yxc4a8crevr5dkuksl +oscar (*) file (ed25519-adr8:0) oasis1qp87hflmelnpqhzcqcw8rhzakq4elj7jzv090p3e diff --git a/examples/wallet/02-list.out b/examples/wallet/02-list.out index e06b1518..5a3fd43b 100644 --- a/examples/wallet/02-list.out +++ b/examples/wallet/02-list.out @@ -1,6 +1,6 @@ -ACCOUNT KIND ADDRESS -emma file (secp256k1-raw) oasis1qph93wnfw8shu04pqyarvtjy4lytz3hp0c7tqnqh -eugene file (secp256k1-bip44:0) oasis1qrvzxld9rz83wv92lvnkpmr30c77kj2tvg0pednz -lester ledger (secp256k1-bip44:3) oasis1qrmw4rhvp8ksj3yx6p2ftnkz864muc3re5jlgall -logan ledger (ed25519-legacy:0) oasis1qpl4axynedmdrrgrg7dpw3yxc4a8crevr5dkuksl -oscar (*) file (ed25519-adr8:0) oasis1qp87hflmelnpqhzcqcw8rhzakq4elj7jzv090p3e +ACCOUNT KIND ADDRESS +emma file (secp256k1-raw) oasis1qph93wnfw8shu04pqyarvtjy4lytz3hp0c7tqnqh +eugene file (secp256k1-bip44:0) oasis1qrvzxld9rz83wv92lvnkpmr30c77kj2tvg0pednz +lester ledger (secp256k1-bip44:3) oasis1qrmw4rhvp8ksj3yx6p2ftnkz864muc3re5jlgall +logan ledger (ed25519-legacy:0) oasis1qpl4axynedmdrrgrg7dpw3yxc4a8crevr5dkuksl +oscar (*) file (ed25519-adr8:0) oasis1qp87hflmelnpqhzcqcw8rhzakq4elj7jzv090p3e diff --git a/examples/wallet/05-list.out b/examples/wallet/05-list.out index 66b261a4..0b3eb959 100644 --- a/examples/wallet/05-list.out +++ b/examples/wallet/05-list.out @@ -1,6 +1,6 @@ -ACCOUNT KIND ADDRESS -emma file (secp256k1-raw) oasis1qph93wnfw8shu04pqyarvtjy4lytz3hp0c7tqnqh -eugene file (secp256k1-bip44:0) oasis1qrvzxld9rz83wv92lvnkpmr30c77kj2tvg0pednz -lenny (*) ledger (secp256k1-bip44:3) oasis1qrmw4rhvp8ksj3yx6p2ftnkz864muc3re5jlgall -logan ledger (ed25519-legacy:0) oasis1qpl4axynedmdrrgrg7dpw3yxc4a8crevr5dkuksl -oscar file (ed25519-adr8:0) oasis1qp87hflmelnpqhzcqcw8rhzakq4elj7jzv090p3e +ACCOUNT KIND ADDRESS +emma file (secp256k1-raw) oasis1qph93wnfw8shu04pqyarvtjy4lytz3hp0c7tqnqh +eugene file (secp256k1-bip44:0) oasis1qrvzxld9rz83wv92lvnkpmr30c77kj2tvg0pednz +lenny (*) ledger (secp256k1-bip44:3) oasis1qrmw4rhvp8ksj3yx6p2ftnkz864muc3re5jlgall +logan ledger (ed25519-legacy:0) oasis1qpl4axynedmdrrgrg7dpw3yxc4a8crevr5dkuksl +oscar file (ed25519-adr8:0) oasis1qp87hflmelnpqhzcqcw8rhzakq4elj7jzv090p3e diff --git a/go.mod b/go.mod index a0a35536..cf7bc9b9 100644 --- a/go.mod +++ b/go.mod @@ -20,7 +20,7 @@ require ( github.com/oasisprotocol/metadata-registry-tools v0.0.0-20220406100644-7e9a2b991920 github.com/oasisprotocol/oasis-core/go v0.2505.0 github.com/oasisprotocol/oasis-sdk/client-sdk/go v0.16.0 - github.com/olekukonko/tablewriter v0.0.5 + github.com/olekukonko/tablewriter v1.1.2 github.com/opencontainers/image-spec v1.1.1 github.com/spf13/cobra v1.10.2 github.com/spf13/pflag v1.0.10 @@ -52,6 +52,9 @@ require ( github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce // indirect github.com/cenkalti/backoff/v4 v4.3.0 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect + github.com/clipperhouse/displaywidth v0.6.0 // indirect + github.com/clipperhouse/stringish v0.1.1 // indirect + github.com/clipperhouse/uax29/v2 v2.3.0 // indirect github.com/cloudflare/circl v1.3.7 // indirect github.com/cometbft/cometbft v0.37.15 // indirect github.com/consensys/gnark-crypto v0.18.0 // indirect @@ -101,7 +104,7 @@ require ( github.com/libp2p/go-libp2p v0.42.0 // indirect github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-isatty v0.0.20 // indirect - github.com/mattn/go-runewidth v0.0.13 // indirect + github.com/mattn/go-runewidth v0.0.19 // indirect github.com/mattn/go-shellwords v1.0.12 // indirect github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b // indirect github.com/minio/sha256-simd v1.0.1 // indirect @@ -117,6 +120,9 @@ require ( github.com/multiformats/go-varint v0.0.7 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/oklog/run v1.0.0 // indirect + github.com/olekukonko/cat v0.0.0-20250911104152-50322a0618f6 // indirect + github.com/olekukonko/errors v1.1.0 // indirect + github.com/olekukonko/ll v0.1.3 // indirect github.com/opencontainers/go-digest v1.0.0 // indirect github.com/pelletier/go-toml/v2 v2.2.4 // indirect github.com/pjbgf/sha1cd v0.3.0 // indirect @@ -126,7 +132,6 @@ require ( github.com/prometheus/client_model v0.6.2 // indirect github.com/prometheus/common v0.65.0 // indirect github.com/prometheus/procfs v0.16.1 // indirect - github.com/rivo/uniseg v0.2.0 // indirect github.com/sagikazarmark/locafero v0.11.0 // indirect github.com/santhosh-tekuri/jsonschema/v6 v6.0.1 // indirect github.com/sergi/go-diff v1.3.1 // indirect diff --git a/go.sum b/go.sum index a5b4a833..d74a0cdd 100644 --- a/go.sum +++ b/go.sum @@ -99,6 +99,12 @@ github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWR github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/clipperhouse/displaywidth v0.6.0 h1:k32vueaksef9WIKCNcoqRNyKbyvkvkysNYnAWz2fN4s= +github.com/clipperhouse/displaywidth v0.6.0/go.mod h1:R+kHuzaYWFkTm7xoMmK1lFydbci4X2CicfbGstSGg0o= +github.com/clipperhouse/stringish v0.1.1 h1:+NSqMOr3GR6k1FdRhhnXrLfztGzuG+VuFDfatpWHKCs= +github.com/clipperhouse/stringish v0.1.1/go.mod h1:v/WhFtE1q0ovMta2+m+UbpZ+2/HEXNWYXQgCt4hdOzA= +github.com/clipperhouse/uax29/v2 v2.3.0 h1:SNdx9DVUqMoBuBoW3iLOj4FQv3dN5mDtuqwuhIGpJy4= +github.com/clipperhouse/uax29/v2 v2.3.0/go.mod h1:Wn1g7MK6OoeDT0vL+Q0SQLDz/KpfsVRgg6W7ihQeh4g= github.com/cloudflare/circl v1.3.3/go.mod h1:5XYMA4rFBvNIrhs50XuiBJ15vF2pZn4nnUKZrLbUZFA= github.com/cloudflare/circl v1.3.7 h1:qlCDlTPz2n9fu58M0Nh1J/JzcFpfgkFHHX3O35r5vcU= github.com/cloudflare/circl v1.3.7/go.mod h1:sRTcRWXGLrKw6yIGJ+l7amYJFfAXbZG0kBSc8r4zxgA= @@ -378,9 +384,8 @@ github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27k github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= -github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= -github.com/mattn/go-runewidth v0.0.13 h1:lTGmDsbAYt5DmK6OnoV7EuIF1wEIFAcxld6ypU4OSgU= -github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= +github.com/mattn/go-runewidth v0.0.19 h1:v++JhqYnZuu5jSKrk9RbgF5v4CGUjqRfBm05byFGLdw= +github.com/mattn/go-runewidth v0.0.19/go.mod h1:XBkDxAl56ILZc9knddidhrOlY5R/pDhgLpndooCuJAs= github.com/mattn/go-shellwords v1.0.12 h1:M2zGm7EW6UQJvDeQxo4T51eKPurbeFbe8WtebGE2xrk= github.com/mattn/go-shellwords v1.0.12/go.mod h1:EZzvwXDESEeg03EKmM+RmDnNOPKG4lLtQsUlTZDWQ8Y= github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b h1:j7+1HpAFS1zy5+Q4qx1fWh90gTKwiN4QCGoY9TWyyO4= @@ -438,8 +443,14 @@ github.com/oasisprotocol/oasis-sdk/client-sdk/go v0.16.0 h1:RR18vzfrczejDUsD5nXl github.com/oasisprotocol/oasis-sdk/client-sdk/go v0.16.0/go.mod h1:cLtdOgAtSsVGQAZ1KWCXCgnj9CzNeOOEWUMZB0PIBeA= github.com/oklog/run v1.0.0 h1:Ru7dDtJNOyC66gQ5dQmaCa0qIsAUFY3sFpK1Xk8igrw= github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= -github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= -github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= +github.com/olekukonko/cat v0.0.0-20250911104152-50322a0618f6 h1:zrbMGy9YXpIeTnGj4EljqMiZsIcE09mmF8XsD5AYOJc= +github.com/olekukonko/cat v0.0.0-20250911104152-50322a0618f6/go.mod h1:rEKTHC9roVVicUIfZK7DYrdIoM0EOr8mK1Hj5s3JjH0= +github.com/olekukonko/errors v1.1.0 h1:RNuGIh15QdDenh+hNvKrJkmxxjV4hcS50Db478Ou5sM= +github.com/olekukonko/errors v1.1.0/go.mod h1:ppzxA5jBKcO1vIpCXQ9ZqgDh8iwODz6OXIGKU8r5m4Y= +github.com/olekukonko/ll v0.1.3 h1:sV2jrhQGq5B3W0nENUISCR6azIPf7UBUpVq0x/y70Fg= +github.com/olekukonko/ll v0.1.3/go.mod h1:b52bVQRRPObe+yyBl0TxNfhesL0nedD4Cht0/zx55Ew= +github.com/olekukonko/tablewriter v1.1.2 h1:L2kI1Y5tZBct/O/TyZK1zIE9GlBj/TVs+AY5tZDCDSc= +github.com/olekukonko/tablewriter v1.1.2/go.mod h1:z7SYPugVqGVavWoA2sGsFIoOVNmEHxUAAMrhXONtfkg= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= @@ -521,8 +532,6 @@ github.com/quic-go/quic-go v0.52.0 h1:/SlHrCRElyaU6MaEPKqKr9z83sBg2v4FLLvWM+Z47p github.com/quic-go/quic-go v0.52.0/go.mod h1:MFlGGpcpJqRAfmYi6NC2cptDPSxRWTOGNuP4wqrWmzQ= github.com/quic-go/webtransport-go v0.8.1-0.20241018022711-4ac2c9250e66 h1:4WFk6u3sOT6pLa1kQ50ZVdm8BQFgJNA117cepZxtLIg= github.com/quic-go/webtransport-go v0.8.1-0.20241018022711-4ac2c9250e66/go.mod h1:Vp72IJajgeOL6ddqrAhmp7IM9zbTcgkQxD/YdxrVwMw= -github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY= -github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ= github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc= diff --git a/table/table.go b/table/table.go index c02020ca..2b7d8927 100644 --- a/table/table.go +++ b/table/table.go @@ -4,22 +4,58 @@ import ( "os" "github.com/olekukonko/tablewriter" + "github.com/olekukonko/tablewriter/renderer" + "github.com/olekukonko/tablewriter/tw" ) // New creates a new tablewriter.Table instance with suitable defaults. func New() *tablewriter.Table { - table := tablewriter.NewWriter(os.Stdout) - table.SetAutoWrapText(false) - table.SetAutoFormatHeaders(true) - table.SetHeaderAlignment(tablewriter.ALIGN_LEFT) - table.SetAlignment(tablewriter.ALIGN_LEFT) - table.SetCenterSeparator("") - table.SetColumnSeparator("") - table.SetRowSeparator("") - table.SetHeaderLine(false) - table.SetBorder(false) - table.SetTablePadding("\t") - table.SetNoWhiteSpace(true) + // Create a borderless, minimal table with space padding. + rendition := tw.Rendition{ + Borders: tw.BorderNone, + Settings: tw.Settings{ + Separators: tw.Separators{ + BetweenRows: tw.Off, + BetweenColumns: tw.Off, + }, + Lines: tw.Lines{ + ShowTop: tw.Off, + ShowBottom: tw.Off, + ShowHeaderLine: tw.Off, + ShowFooterLine: tw.Off, + }, + }, + } + + table := tablewriter.NewTable( + os.Stdout, + tablewriter.WithRenderer(renderer.NewBlueprint(rendition)), + tablewriter.WithConfig(tablewriter.Config{ + Header: tw.CellConfig{ + Formatting: tw.CellFormatting{ + AutoWrap: tw.WrapNone, + AutoFormat: tw.On, + }, + Alignment: tw.CellAlignment{ + Global: tw.AlignLeft, + }, + Padding: tw.CellPadding{ + Global: tw.Padding{Left: "", Right: " "}, + }, + }, + Row: tw.CellConfig{ + Formatting: tw.CellFormatting{ + AutoWrap: tw.WrapNone, + }, + Alignment: tw.CellAlignment{ + Global: tw.AlignLeft, + }, + Padding: tw.CellPadding{ + Global: tw.Padding{Left: "", Right: " "}, + }, + }, + }), + ) return table }