WebAssembly (Wasm) é uma tecnologia que vem em todos os navegadores modernos e permite que os desenvolvedores enviem programas binários portáteis.
Isso significa que os desenvolvedores podem usar quase qualquer linguagem de programação e ter como alvo a web.
No contexto do Discourse, isso abre as portas para o envio de um conjunto bastante rico de extensões que antes estavam disponíveis apenas para criadores de plugins.
Exemplos podem ser:
- Marca d’água / redimensionamento / corte de imagens
- Geração de gráficos usando graphviz ou svgbob
- Sandboxes de programação (por exemplo: posts que incorporam um runtime Ruby)
- e muito mais
No passado, devido à Content Security Policy do Discourse, o acesso ao Wasm foi desativado, exceto para instalações com uploads locais e sem CDN.
Novas interfaces foram adicionadas ao lado do cliente para suportar o envio de ativos JavaScript em um tema que são incondicionalmente alcançáveis via domínio local.
Isso permite que os desenvolvedores de temas hospedem Wasm de forma limpa, o fluxo é:
componente → worker web local → Wasm hospedado em CDN
Discourse svgbob é um exemplo ponta a ponta dos novos padrões, as 2 principais mudanças são:
- Todos os ativos
.jstambém são disponibilizados fora da CDN no servidor local:
{
...
"assets": {
"worker": "assets/will-be-avilable-on-local.js"
}
}
- A URL para o ativo local é acessível via
settings.theme_uploads_local
Portanto, no exemplo acima:
settings.theme_uploads_local.worker; // ativo local
settings.theme_uploads.worker; // ativo cdn