Pular para o conteúdo

Views

O módulo wippy/views fornece um sistema de páginas e componentes virtuais com renderização de templates, gerenciamento de recursos e mapeamento de variáveis de ambiente. Páginas podem ser respaldadas por templates Jet ou componentes externos (SPAs, micro-frontends).

Adicione o módulo ao seu projeto:

Terminal window
wippy add wippy/views
wippy install

Declare a dependência:

version: "1.0"
namespace: app
entries:
- name: dep.views
kind: ns.dependency
component: wippy/views
version: "*"
parameters:
- name: api_router
value: app:api.public
- name: env_storage
value: app:env.storage
ParâmetroObrigatórioPadrãoDescrição
api_routersimRoteador HTTP para os endpoints da API de views
env_storagenãointernoArmazenamento de ambiente que fornece a variavel PUBLIC_API_URL

Páginas template renderizam no lado do servidor usando templates Jet:

entries:
- name: contact_page
kind: template.jet
meta:
type: view.page
name: contact
title: Contact Us
icon: mail
order: 5
group: main
group_icon: layout-grid
group_order: 1
announced: true
secure: false
data:
set: app.templates:default
data_func: app:contact_data
resources:
- contact_styles
CampoTipoPadrãoDescrição
meta.typestringDeve ser view.page
meta.namestringnome da entradaIdentificador da página
meta.titlestringTítulo de exibição
meta.iconstringIdentificador do ícone
meta.ordernumber9999Ordem de classificação dentro do grupo
meta.groupstringCategoria do grupo
meta.group_iconstringÍcone do grupo
meta.group_ordernumber9999Ordem de classificação do grupo
meta.group_placementstring"default"Posicionamento: "default", "sidebar"
meta.securebooleanfalseRequer autenticação
meta.publicbooleanfalseAcessível publicamente
meta.announcedboolean= publicMostrar na navegação
meta.inlinebooleanfalseOculto da UI
meta.content_typestringtext/htmlTipo MIME da resposta
meta.parentstringID da página pai
CampoDescrição
data.setID do registro do conjunto de templates
data.data_funcID da função que retorna dados da página
data.resourcesArray de IDs de registro de recursos

A data_func recebe { params, query } e retorna uma tabela que se torna o contexto data no template.

  1. Carrega a página do registro
  2. Verifica acesso (segurança)
  3. Chama data_func se definida
  4. Coleta recursos: globais + recursos do conjunto de templates + recursos específicos da página
  5. Carrega variáveis de ambiente
  6. Renderiza o template Jet com o contexto: { data, resources, query_params, route_params, env }

Páginas de componente apontam para aplicações externas (SPAs, micro-frontends):

entries:
- name: dashboard
kind: registry.entry
meta:
type: view.page
name: dashboard
title: Dashboard
icon: chart-bar
url: https://cdn.example.com/dashboard/
secure: true
announced: true
data:
proxy:
enabled: true
css:
prime_vue: true
theme_config: true
tailwind_config: true

A API retorna um descritor de componente com a URL base e configuração de proxy. O frontend renderiza o componente em um iframe ou inline.

CampoTipoPadrãoDescrição
meta.urlstringURL pública do componente
meta.entry_pointstringindex.html (páginas), index.js (componentes)Arquivo de entrada

O proxy controla qual CSS e comportamento é injetado no componente:

OpçãoPadrãoDescrição
proxy.enabledtrueHabilita o wrapper de proxy
proxy.css.fontstrueInjeta estilos de fontes
proxy.css.theme_configtrueInjeta variáveis de tema
proxy.css.iframetrueEstilos específicos de iframe
proxy.css.prime_vuefalseEstilos de componentes PrimeVue
proxy.css.markdownfalseEstilos de renderização Markdown
proxy.css.custom_cssfalseCSS personalizado
proxy.css.custom_variablesfalseVariáveis CSS personalizadas
proxy.tailwind_configfalseInjeta configuração do Tailwind
proxy.resize_observertrueAuto-redimensionar iframe
proxy.prevent_link_clickstrueIntercepta navegação por links
proxy.iconify_iconsfalseCarrega o conjunto de ícones Iconify

Componentes autônomos que não são páginas (sem entrada de navegação):

entries:
- name: widget
kind: registry.entry
meta:
type: view.component
name: chat-widget
title: Chat Widget
url: https://cdn.example.com/chat-widget/
data:
proxy:
enabled: true

Componentes usam meta.type: view.component em vez de view.page. Eles assumem index.js como ponto de entrada por padrão.

Recursos são arquivos CSS, JS e fontes associados a páginas:

entries:
- name: global_styles
kind: registry.entry
meta:
type: view.resource
name: Global Styles
resource_type: style
global: true
order: 1
url: https://cdn.example.com/global.css
- name: app_script
kind: registry.entry
meta:
type: view.resource
name: App Script
resource_type: script
template_set: app.templates:default
order: 10
url: https://cdn.example.com/app.js
defer: true
CampoTipoDescrição
meta.typestringDeve ser view.resource
meta.resource_typestringLivre para escolher (padrao "other"); valores comuns sao "style", "script", "font"
meta.ordernumberOrdem de classificação dentro do tipo
meta.globalbooleanAplicado a todas as páginas
meta.template_setstringEspecífico para um conjunto de templates
meta.urlstringURL do recurso
meta.integritystringHash SRI
meta.crossoriginstring"anonymous" ou "use-credentials"
meta.mediastringMedia query CSS
meta.deferbooleanCarregamento de script com defer
meta.asyncbooleanCarregamento de script assíncrono

Recursos são coletados em três camadas, mescladas em ordem:

  1. Recursos globaisglobal: true, aplicados a todas as páginas
  2. Recursos do conjunto de templates — combinados pelo ID de template_set
  3. Recursos da página — listados no array data.resources

Dentro de cada camada, recursos são agrupados por resource_type e ordenados por order.

O carregador de env mapeia variáveis de ambiente para chaves de contexto do template através de um sistema baseado em prioridade.

entries:
- name: app_env
kind: registry.entry
meta:
type: view.env_mapping
priority: 20
data:
mappings:
api_endpoint: API_BASE_URL
app_title: APP_NAME
debug_mode: DEBUG_ENABLED

Cada entrada de mapeamento associa chaves de contexto (usadas em templates como env.api_endpoint) com nomes de variáveis de ambiente.

FaixaCategoriaDescrição
0–9Padrões do frameworkMapeamentos embutidos do framework
10–19Sobrescritas do sistemaConfiguração a nível de sistema
20–29Mapeamentos da aplicaçãoMapeamentos específicos da aplicação
30–100Sobrescritas de ambienteSobrescritas em tempo de execução

A maior prioridade vence quando múltiplos mapeamentos definem a mesma chave de contexto.

Valores de ambiente resolvidos estão disponíveis no objeto de contexto env:

<script>
window.API_URL = "{{ env.api_endpoint }}";
document.title = "{{ env.app_title }}";
</script>

O módulo views registra estes endpoints no roteador configurado:

MétodoCaminhoDescrição
GET/pages/listLista páginas anunciadas e acessíveis
GET/components/listLista componentes de view
GET/pages/content/{id}Renderiza a página ou retorna o descritor do componente
GET/pages/public/{id}Obtém a URL base do componente

Para páginas template, retorna o HTML renderizado com o content_type da página.

Para páginas de componente, retorna um descritor:

{
"name": "dashboard",
"version": "1.0.0",
"specification": "wippy-component-1.0",
"title": "Dashboard",
"baseUrl": "https://cdn.example.com/dashboard/",
"wippy": {
"type": "page",
"path": "index.html",
"proxy": {
"enabled": true,
"injections": {
"css": { "fonts": true, "themeConfig": true, "iframe": true },
"tailwindConfig": false,
"resizeObserver": true,
"preventLinkClicks": true
}
}
}
}

Páginas com secure: true exigem autenticação. O registro de páginas verifica security.can("view", "page:<page_id>") contra o ator e escopo atuais.

Páginas não seguras estão sempre acessíveis. A flag announced controla a visibilidade nas listagens de navegação sem afetar o acesso.

IDs relativos em definições de páginas são qualificados com o namespace da entrada:

# No namespace "app"
data:
data_func: my_data_func # resolve para app:my_data_func
set: templates:default # permanece como templates:default (já qualificado)
resources:
- page_styles # resolve para app:page_styles