rustploy-gui 0.1.25

Rustploy — desktop client (glacier-ui) for the Rustploy PaaS daemon
--!strict
-- format/registry.luau — formata repositórios/tags do registry OCI embutido
-- pra exibição na sub-aba Docker > Registry.

local Time = require("time")
local Util = require("util")

local M = {}

-- Lista de repositórios (filtrada pela busca global, como docker_images etc.).
function M.repos(repositories: { any }?, term: string?): string
    local rows = {}
    for _, repository in ipairs(repositories or {}) do
        if Util.matches(term, { repository.name }) then
            table.insert(rows, {
                name = repository.name,
                tag_count = tostring(repository.tag_count or 0),
                size = Time.format_bytes(repository.size_bytes or 0),
                created = Time.date_day_month_hour_minute(
                    repository.created_at
                ),
            })
        end
    end
    return Util.encode_array(rows)
end

-- Tags de UM repositório (sem filtro de busca — lista pequena, buscada sob
-- demanda ao abrir o repositório, não vem no snapshot periódico).
function M.tags(tags: { any }?): string
    local rows = {}
    for _, tag in ipairs(tags or {}) do
        table.insert(rows, {
            tag = tag.tag,
            digest = string.sub(tag.digest, 1, 12),
            digest_full = tag.digest,
            media_type = tag.media_type,
            size = Time.format_bytes(tag.size_bytes or 0),
            updated = Time.date_day_month_hour_minute(tag.updated_at),
        })
    end
    return Util.encode_array(rows)
end

-- Tokens de acesso (Basic auth) — sem filtro de busca (lista tipicamente
-- pequena, buscada uma vez ao abrir a sub-aba, não vem no snapshot).
function M.tokens(tokens: { any }?): string
    local rows = {}
    for _, token in ipairs(tokens or {}) do
        table.insert(rows, {
            name = token.name,
            scope = token.scope,
            created = Time.date_day_month_hour_minute(token.created_at),
            last_used = token.last_used_at
                    and Time.date_day_month_hour_minute(token.last_used_at)
                or "nunca",
        })
    end
    return Util.encode_array(rows)
end

return M