class Pagy::Keyset

def initialize(set, **vars)

def initialize(set, **vars)
  default = DEFAULT.slice(:limit, :page_param,                    # from pagy
                          :headers,                               # from headers extra
                          :jsonapi,                               # from jsonapi extra
                          :limit_param, :limit_max, :limit_extra) # from limit_extra
  assign_vars({ **default, page: nil }, vars)
  assign_limit
  @set    = set
  @page   = @vars[:page]
  @keyset = extract_keyset
  raise InternalError, 'the set must be ordered' if @keyset.empty?
  return unless @page
  latest  = JSON.parse(B64.urlsafe_decode(@page)).transform_keys(&:to_sym)
  @latest = @vars[:typecast_latest]&.(latest) || typecast_latest(latest)
  raise InternalError, 'page and keyset are not consistent' \
        unless @latest.keys == @keyset.keys
end