Bem vindo ao Deno
Tags: deno, javascript, typescript, node
Published: 2020-05-21 22:30:32

Olá meus queridos, sejam todos bem vindos, iremos falar sobre o novo framework Deno.

<b>O que é o Deno?</b>
Deno é um ambiente de execução para JavaScript e TypeScript baseado no V8, engine de JavaScript do Google Chrome e  na linguagem de programação Rust. Foi criado por [Ryan Dahl](https://en.wikipedia.org/wiki/Ryan_Dahl), criador original do Node.js, e é focado em segurança e produtividade.

<b>Principais características</b>
<ul>
<li>Seguro por padrão. Sem acesso a arquivos, redes ou ambientes (a menos que seja explicitamente ativado).
</li>
<li>Possui um runtime <a href="https://www.typescriptlang.org">TypeScrip</a>
Os scripts podem ser agrupados em um único arquivo JavaScript.</li>
<li>Construído em <a href="https://www.rust-lang.org">Rust</a> (o núcleo do Deno foi escrito em Rust, <a href="https://nodejs.org/en/">Node</a> e 
<a href="https://sourceforge.net/projects/orwelldevcpp/">C++</a>), <a href="https://tokio.rs">Tokio</a> (loop de eventos) e <a href="https://v8.dev">V8</a> (runtime JavaScript)</li>
</ul>

<b>Deno é mais seguro?</b>
Qualquer código no Node tem o poder de acessar as suas informações como sua rede,HD entre outros. Por outro lado, no Deno o seu código é executado em uma sandbox(semelhante a uma maquina virtual), focado em segurança por padrão.
Ou seja, se você não der permissão, um código malicioso não poderá acessar suas informações. Isso se assemelha ao JavaScript nos navegadores, que só pode acessar câmera se o usuário der permissão.


<b>TypeScript Integrado</b>
O Deno não interpreta apenas JavaScript. Ele também interpreta TypeScript sem que você precise instalar nem configurar nada.

Essa decisão foi baseada no crescimento do uso do TypeScript em grandes projetos que precisam lidar com complexas lógicas de negócio.  

<b>Promises em todo lugar</b>
O JavaScript é famoso por sua natureza assíncrona. Porém, o Node foi criado antes do JavaScript possuir coisas como Promises e Async/Await.
Como resultado da evolução do JavaScript em união da linguagem Rust, o Deno tem um moderno sistema baseado em Promises. Isso nos permite trabalhar mais facilmente com código assíncrono, nesse caso todas ações assíncronas retornaram uma <a href="https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Global_Objects/Promise">Promise.</a>


<b>Preparando o ambiente Windows</b>
Agora vamos a instalação que é bem simples, acesse a <a href="https://deno.land">Documentação</a>.
Como estou utilizando o Windows, vou instalar via Powershell:

```javascript
iwr https://deno.land/x/install/install.ps1 -useb | iex
```
<b>Subindo o Server</b>
No site oficial temos um pequeno trecho de código em TypeScript que nos mostra como é muito simples para subir um pequeno servidor.

```javascript
// ES Modules
import { serve } from "https://deno.land/std@0.50.0/http/server.ts";

//Cria o Server
const server = serve({ port: 8000 });

console.log("http://localhost:8000/");

//Async iterador para atender solicitações do servidor 
for await (const req of server) {
  req.respond({ body: "<h1>Hello World\n</h1>" });
}
```
Para executar essa aplicação usamos o comando em nosso terminal
`➜ deno run server.ts`

<b>Opsss Deu ruim!!!</b>

<img src="https://img.ibxk.com.br/2016/03/21/21195301079074.gif">

Isto ocorre porque como comentei acima as medidas de segurança do Deno interferem na execução do nosso arquivo server.ts com a seguinte mensagem:

```javascript
➜  Deno deno run server.ts 
error: Uncaught PermissionDenied: network access to "0.0.0.0:8000", 
run again with the --allow-net flag
    at unwrapResponse ($deno$/ops/dispatch_json.ts:43:11)
    at Object.sendSync ($deno$/ops/dispatch_json.ts:72:10)
    at Object.listen ($deno$/ops/net.ts:51:10)
    at listen ($deno$/net.ts:152:22)
    at serve (https://deno.land/std@0.50.0/http/server.ts:261:20)
    at file:///mnt/e/projects/Deno/server.ts:3:16
➜  Deno
```
Isso acontece porque por regra de segurança ele nos "força" a conceder o acesso a rede, impedindo que isso aconteça automaticamente como no Node.

Para que esse acesso possa acontecer precisamos incluir a tag --allow-net no nosso comando, passando a ser executado dessa maneira:
`➜ deno run --allow-net server.ts`
Se tudo ocorreu corretamente  ele vai retornar a seguinte mensagem 
`Compile file:///mnt/e/projects/Deno/server.ts
http://localhost:8000/ `

<img src="https://img.buzzfeed.com/buzzfeed-static/static/enhanced/webdr01/2013/3/4/18/anigif_enhanced-buzz-1798-1362441596-19.gif?downsize=600:*&output-format=auto&output-quality=auto">

Bom este foi um tutorial bem básico do novo framework Deno, para mais informações olhem a <a href="https://deno.land">Documentação</a> e faça parte do nosso grupo para mais novidades. 

Acompanhe nossos canais de conteúdo:
- [Youtube](https://www.youtube.com/channel/UCCnvFA6ZShN67V54UsytH0g)
- [Pagina Facebook](https://www.facebook.com/DenoLandBR)
- [Grupo Facebook](https://www.facebook.com/groups/denobr)
- [Discord](https://discord.gg/Z35yKzN)