<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Lucas</title>
    <description>The latest articles on DEV Community by Lucas (@lucasm4sco).</description>
    <link>https://dev.to/lucasm4sco</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F949662%2F21467392-a43f-463b-b36f-01b879baffb9.jpg</url>
      <title>DEV Community: Lucas</title>
      <link>https://dev.to/lucasm4sco</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/lucasm4sco"/>
    <language>en</language>
    <item>
      <title>Introdução ao expo-dev-client</title>
      <dc:creator>Lucas</dc:creator>
      <pubDate>Tue, 26 Sep 2023 23:19:21 +0000</pubDate>
      <link>https://dev.to/lucasm4sco/introducao-ao-expo-dev-client-1ann</link>
      <guid>https://dev.to/lucasm4sco/introducao-ao-expo-dev-client-1ann</guid>
      <description>&lt;h2&gt;
  
  
  Introdução
&lt;/h2&gt;

&lt;p&gt;Se você iniciou no desenvolvimento de apps com Expo, deve ter notado que ele facilita muito alguns dos processos do React Native, sendo uma ferramenta conhecida por simplificar o desenvolvimento de aplicativos móveis, atuando desde em configurações do seu ambiente até em deploy dos seus aplicativos.&lt;/p&gt;

&lt;p&gt;No entanto, em alguns momentos você provavelmente vai sentir falta de ter um controle maior do seu desenvolvimento ou querer utilizar de algumas bibliotecas que precisam de dependências nativas e não são suportadas diretamente pelo Expo, esse é um problema comum e para resolver ele podemos utilizar da ferramenta &lt;a href="https://www.npmjs.com/package/expo-dev-client?activeTab=readme" rel="noopener noreferrer"&gt;expo-dev-client&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  O que é o expo-dev-client
&lt;/h2&gt;

&lt;p&gt;O expo-dev-client é um package da própria Expo que permite você a utilizar dependências nativas em sua aplicação, não ficando mais limitado apenas as libs do Expo e tendo uma experiência de desenvolvimento "quase nativa".&lt;/p&gt;

&lt;p&gt;Alguns exemplos de bibliotecas que requerem de código-fonte nativo personalizado são a &lt;a href="https://docs.expo.dev/develop/development-builds/introduction/" rel="noopener noreferrer"&gt;React Native Firebase&lt;/a&gt; e o &lt;a href="https://www.mongodb.com/docs/realm/sdk/react-native/quick-start/" rel="noopener noreferrer"&gt;Realm&lt;/a&gt;, ou seja, caso você queira utilizar algumas delas e ainda continuar utilizando do Expo, o expo-dev-client vai se tornar uma ferramenta útil para você.&lt;/p&gt;

&lt;p&gt;Para iniciar o seu uso os passos são bem simples:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Instale o package com o seguinte comando:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm i expo-dev-client
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Gere então o código-fonte nativo com o comando &lt;code&gt;prebuild&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npx expo prebuild
&lt;/code&gt;&lt;/pre&gt;


&lt;blockquote&gt;
&lt;p&gt;Esse comando gera automaticamente o código seguindo alguns fatores, recomendo dar uma olhada no comando &lt;a href="https://docs.expo.dev/workflow/prebuild/" rel="noopener noreferrer"&gt;prebuild&lt;/a&gt; pra ver melhor possíveis especificações, após finalizar serão geradas as pastas &lt;code&gt;android/&lt;/code&gt; e &lt;code&gt;ios/&lt;/code&gt; no seu ambiente de desenvolvimento.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Realize o build da aplicação com os comandos:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npx expo run:android
// ou
npx expo run:ios
&lt;/code&gt;&lt;/pre&gt;


&lt;blockquote&gt;
&lt;p&gt;Esse comando vai compilar e iniciar a sua aplicação no dispositivo conectado.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Obs: Após isso, caso tenha compilado e não iniciado seu aplicativo, você pode utilizar o comando &lt;code&gt;npx expo start --dev-client&lt;/code&gt;, e vale informar também que esse é um processo fora do aplicativo Expo Go, então você não conseguirá utilizar dele nesse caso.&lt;/p&gt;

&lt;p&gt;Essa foi apenas uma pequena introdução sobre a ferramenta até porque eu tinha esquecido dela e pesquisei para relembrar, você pode procurar ver mais sobre na documentação também: &lt;a href="https://docs.expo.dev/develop/development-builds/introduction/" rel="noopener noreferrer"&gt;Development builds&lt;/a&gt;&lt;/p&gt;

</description>
      <category>expo</category>
      <category>beginners</category>
      <category>reactnative</category>
      <category>braziliandevs</category>
    </item>
    <item>
      <title>O que são Lookahead e Lookbehind em Expressões regulares</title>
      <dc:creator>Lucas</dc:creator>
      <pubDate>Sun, 21 May 2023 02:25:48 +0000</pubDate>
      <link>https://dev.to/lucasm4sco/o-que-sao-lookahead-e-lookbehind-em-expressoes-regulares-32h7</link>
      <guid>https://dev.to/lucasm4sco/o-que-sao-lookahead-e-lookbehind-em-expressoes-regulares-32h7</guid>
      <description>
&lt;h2&gt;
  
  
  Introdução
&lt;/h2&gt;

&lt;p&gt;Neste post estarei falando sobre uma possibilidade das expressões regulares que aprendi já tem alguns dias, mas me pareceu bastante interessante o conhecimento, então resolvi compartilhar. &lt;/p&gt;

&lt;p&gt;Sendo mais específico, abordarei sobre essas 2 palavras do título, que a primeira vista podem soar meio estranhas e portanto, aqui vai uma tradução inicial sobre elas que talvez te ajudem a entender melhor mais a seguir:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Lookahead = &lt;strong&gt;Olhe para frente&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Lookbehind = &lt;strong&gt;Olhe para trás&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Bom, para um melhor aproveitamento sobre a leitura a seguir recomendo que já tenha noções básicas sobre as expressões regulares, mas caso não tenha ouvido falar sobre, não se preocupe, deixarei uma definição do assunto e um link de um post (ainda nesse site) que achei uma abordagem legal para se ler:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Expressões Regulares, ou regex, são sequências de caracteres que representam padrões utilizados para identificar caracteres literais em outros dados. As expressões regulares são extremamente úteis em várias situações, como validar formulários, extrair, filtrar e analisar dados, substituir e formatar textos, entre outras aplicações. Com a ajuda das regex, é possível verificar se determinados dados seguem um padrão específico, o que as torna uma ferramenta poderosa no processamento e manipulação de informações.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Post introdutório sobre as regex: &lt;a href="https://dev.to/feministech/expressoes-regulares-i-o-basico-3a3j"&gt;Expressões Regulares I - o básico&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  O que são os lookarounds e para que são úteis
&lt;/h2&gt;

&lt;p&gt;Como você já deve saber, podemos verificar padrões com o básico sobre as regex, mas nem sempre vamos conseguir fazer buscas da maneira mais eficiente se limitando ao básico. Imagine uma cena em que você precisa criar uma regex para receber apenas as quantidades de quilos sobre strings que possuem o seguinte formato:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;'2kg - R$45,00 4kg - R$122,00 ...'&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;A primeira vista você pode estar pensando em usar a seguinte regex:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;/\d+kg/g&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Nessa regex, você estaria selecionando os caracteres que seguem o padrão de: &lt;strong&gt;1 ou mais números que possuem a seguir os caracteres 'kg'&lt;/strong&gt;. E sim, ela até funcionaria para retornar os quilos, mas não retornaria apenas a quantidade como desejamos acima já que retornaria também a unidade de medida, ou seja, enquanto desejamos apenas os números &lt;strong&gt;2&lt;/strong&gt; e &lt;strong&gt;4&lt;/strong&gt; da string, receberiamos &lt;strong&gt;2kg&lt;/strong&gt; e &lt;strong&gt;4kg&lt;/strong&gt;.&lt;br&gt;
Então para resolver esse problema, poderiamos utilizar de um &lt;em&gt;lookahead positivo&lt;/em&gt;, que ficaria da seguinte forma:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;/\d+(?=kg)/g&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Com a utilização desse lookahead, estariamos selecionando apenas os caracteres numéricos que possuírem os caracteres 'kg' após eles, mas sem os incluir na nossa busca. Em outras palavras, podemos encarar &lt;strong&gt;lookahead&lt;/strong&gt; e &lt;strong&gt;lookbehind&lt;/strong&gt; como criadores de condições para o que vamos selecionar, sem realizar o consumo dos caracteres utilizados na condição para a nossa correspondência, onde:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Lookahead&lt;/strong&gt;: Verifica se os caracteres que estão após a nossa seleção possuem o padrão determinado.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lookbehind&lt;/strong&gt;: Verifica se os caracteres que estão antes da nossa seleção possuem o padrão determinado.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Bom, agora que você já tem uma ideia sobre para que servem, vamos explorar cada um deles:&lt;/p&gt;
&lt;h2&gt;
  
  
  Lookahead - olhe para frente
&lt;/h2&gt;

&lt;p&gt;Como citado, com o Lookahead vamos criar uma condição para o que vem após o padrão que queremos consumir, para isso podemos utilizar de dois tipos de lookhead:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;?=&lt;/strong&gt; -&amp;gt; chamado de lookahead positivo, retorna a seleção apenas se o que vier após ela seguir o padrão especificado.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;?!&lt;/strong&gt; -&amp;gt; chamado de lookahead negativo, retorna a seleção apenas se o que vier após ela não seguir o padrão especificado.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Vamos ver um exemplo para cada um deles com JavaScript:&lt;/p&gt;
&lt;h3&gt;
  
  
  Lookahead positivo (?=)
&lt;/h3&gt;

&lt;p&gt;Para esse exemplo vamos usar o lookahead positivo para retornar apenas o nome anterior das pessoas que possuírem o sobrenome 'Silva':&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;nomes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Lucas Silva&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Maria Silva Rodrigues&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;João Guilherme Silva&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Pedro Oliveira&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Ana Julia Rodrigues&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
    &lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;pattern&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sr"&gt;/.+&lt;/span&gt;&lt;span class="se"&gt;(?=\s&lt;/span&gt;&lt;span class="sr"&gt;Silva&lt;/span&gt;&lt;span class="se"&gt;)&lt;/span&gt;&lt;span class="sr"&gt;/&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;primeirosNomes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;nomes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;reduce&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;acumulador&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;nome&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;correspondente&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;nome&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;match&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;pattern&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="nx"&gt;correspondente&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;acumulador&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;correspondente&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;acumulador&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;[])&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;primeirosNomes&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// [ 'Lucas', 'Maria', 'João Guilherme' ]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Regex utilizada: &lt;code&gt;/.+(?=\sSilva)/&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Explicação da regex:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;/&lt;/code&gt; -&amp;gt; São delimitadores, delimitam inicio e fim da regex.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;.+&lt;/code&gt; -&amp;gt; O ponto &lt;strong&gt;.&lt;/strong&gt; representa qualquer caractere, e o quantificador &lt;strong&gt;+&lt;/strong&gt; indica que o caractere anterior (qualquer caractere) deve ocorrer uma ou mais vezes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;(?=)&lt;/strong&gt; -&amp;gt; Agrupa os caracteres para o lookahead positivo.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;\sSilva&lt;/strong&gt; -&amp;gt; Representa o padrão para o lookahead, onde &lt;strong&gt;\s&lt;/strong&gt; é um metacaractere usado para representar um espaço e o resto é o sobrenome que estamos procurando.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;&lt;p&gt;Resultado da operação: &lt;code&gt;[ 'Lucas', 'Maria', 'João Guilherme' ]&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  Lookahead negativo (?!)
&lt;/h3&gt;

&lt;p&gt;Lembra da string usada no inicio desse artigo? Bom, caso não lembre vou refrescar sua memória:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;'2kg - R$45,00 4kg - R$122,00 ...'&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Para esse exemplo, irei complicar um pouco mais ela acrescentando uma representação para as gramas e trocando as vírgulas por pontos:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;'2.50kg - R$45.00 4.35kg - R$122.00 5.60kg - R$122.00...'&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Pronto! Mas... E se agora você quisesse pegar apenas os valores em reais? sem a quantidade de quilos ou a representação da moeda?&lt;br&gt;
Para isso poderiamos utilizar do lookahead negativo, realizando uma lógica inversa ao que fizemos inicialmente:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;2.50kg - R$45.00 4.35kg - R$122.00 5.60kg - R$136.00&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;pattern&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sr"&gt;/&lt;/span&gt;&lt;span class="se"&gt;\d&lt;/span&gt;&lt;span class="sr"&gt;+&lt;/span&gt;&lt;span class="se"&gt;\.\d{2}(?!&lt;/span&gt;&lt;span class="sr"&gt;kg&lt;/span&gt;&lt;span class="se"&gt;)&lt;/span&gt;&lt;span class="sr"&gt;/g&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;valores&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;match&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;pattern&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;valores&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// [ '45.00', '122.00', '136.00' ]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Regex utilizada: &lt;code&gt;/\d+\.\d{2}(?!kg)/g&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Explicação da regex:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;\d+&lt;/code&gt; -&amp;gt; Utiliza do metacaractere &lt;strong&gt;\d&lt;/strong&gt; para representar um caractere numérico e do quantificador &lt;strong&gt;+&lt;/strong&gt; para representar que ele pode aparecer uma ou mais vezes.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;\.&lt;/code&gt; -&amp;gt; Representa o &lt;strong&gt;.&lt;/strong&gt; (ponto) como caractere literal.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;\d{2}&lt;/code&gt; -&amp;gt; Utiliza do quantificador &lt;strong&gt;{n}&lt;/strong&gt; para insinuar que o caractere numérico deve ocorrer duas vezes.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;(?!)&lt;/code&gt; -&amp;gt; Agrupa os caracteres para o lookahead negativo.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;kg&lt;/code&gt; -&amp;gt; Representa o conjunto de caracteres que o nosso padrão especificado anteriormente não deve possuir após ele.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;g&lt;/code&gt; -&amp;gt; Flag utilizada para fazer uma correspondência global, encontrando todas as ocorrências de um padrão em uma string.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;&lt;p&gt;Resultado da operação: &lt;code&gt;[ '45.00', '122.00', '136.00' ]&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  Lookbehind - olhe para trás
&lt;/h2&gt;

&lt;p&gt;Ao contrário do lookahead, com o lookbehind criamos uma condição que deve vir anteriormente ao padrão que queremos consumir, e assim como ele, também vamos ter dois tipos de uso:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;?&amp;lt;=&lt;/strong&gt; -&amp;gt; chamado de lookbehind positivo, retorna a seleção apenas se o que vier antes dela possuir o padrão especificado.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;?&amp;lt;!&lt;/strong&gt; -&amp;gt; chamado de lookbehind negativo, retorna a seleção apenas se o que vier antes dela não possuir o padrão especificado.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Também vou seguir os exemplos sobre eles com JavaScript, mas gostaria de deixar um aviso que alguns ambientes podem não possuir compatibilidade com o lookbehind ainda.&lt;/p&gt;

&lt;h3&gt;
  
  
  Lookbehind positivo (?&amp;lt;=)
&lt;/h3&gt;

&lt;p&gt;Como sabemos, nem sempre vai existir apenas uma forma para realizar o que queremos, então para esse exemplo podemos utilizar do mesmo anterior, a diferença é que não olharemos para a frente dos caracteres, e sim para trás. Vou apresenta-lo a string novamente para você não precisar retornar ao exemplo anterior:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;'2.50kg - R$45.00 4.35kg - R$122.00 5.60kg - R$122.00...'&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Eaí, já pensou em uma forma para retornar apenas os valores em dinheiro com o lookbehind positivo? Vou te dar uma ideia de como seria possível:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;2.50kg - R$45.00 4.35kg - R$122.00 5.60kg - R$136.00&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;pattern&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sr"&gt;/&lt;/span&gt;&lt;span class="se"&gt;(?&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;=R&lt;/span&gt;&lt;span class="se"&gt;\$)\d&lt;/span&gt;&lt;span class="sr"&gt;+&lt;/span&gt;&lt;span class="se"&gt;\.\d{2}&lt;/span&gt;&lt;span class="sr"&gt;/g&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;valores&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;match&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;pattern&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;valores&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// [ '45.00', '122.00', '136.00' ]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Regex utilizada: &lt;code&gt;/(?&amp;lt;=R\$)\d+\.\d{2}/g&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Explicação da regex:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;(?&amp;lt;=)&lt;/code&gt; -&amp;gt; Agrupa os caracteres para o lookbehind positivo.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;R\$&lt;/code&gt; -&amp;gt; Representa os caracteres &lt;strong&gt;R$&lt;/strong&gt; de forma literal, nesse caso dentro do lookbehind positivo, verificamos se eles estão antes do padrão que queremos selecionar, caso não estejam o padrão não será selecionado.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;\d+&lt;/code&gt; -&amp;gt; Representa que terá a ocorrência de um ou mais caracteres numéricos.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;\.&lt;/code&gt; -&amp;gt; Representa o &lt;strong&gt;.&lt;/strong&gt; (ponto) como caractere literal.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;\d{2}&lt;/code&gt; -&amp;gt; Indica que terá a ocorrência de dois caracteres numéricos.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;g&lt;/code&gt; -&amp;gt; Flag para a correspondência global.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;&lt;p&gt;Resultado da operação: &lt;code&gt;[ '45.00', '122.00', '136.00' ]&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  Lookbehind negativo (?&amp;lt;!)
&lt;/h3&gt;

&lt;p&gt;Confesso que foi um pouco difícil achar um bom e simples exemplo pra utilizar do lookbehind negativo, já que muitos que eu pensava teria uma forma não tão interessante ou o uso ficava um pouco mais complexo do que deveria, mas felizmente achei um que acredito que será de fácil entendimento. Nesse exemplo você possuíra uma string com vários numeros positivos e negativos:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;numeros&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;22 -32 43 -522 6 72 311 15 -13 ...&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Enfim, como você pode utilizar do lookbehind negativo para retornar apenas os números positivos? Sinta-se a vontade para pensar em uma resposta antes de ver a resolução. &lt;/p&gt;

&lt;p&gt;Como resposta pra isso você poderia utilizar da seguinte regex:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;numeros&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;22 -32 43 -522 6 72 311 15 -13 ...&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;numerosPositivos&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;numeros&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;match&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sr"&gt;/&lt;/span&gt;&lt;span class="se"&gt;(?&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;!-&lt;/span&gt;&lt;span class="se"&gt;\d&lt;/span&gt;&lt;span class="sr"&gt;*&lt;/span&gt;&lt;span class="se"&gt;)\d&lt;/span&gt;&lt;span class="sr"&gt;+/g&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;numerosPositivos&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// [ '22', '43', '6', '72', '311', '15' ]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Regex utilizada: &lt;code&gt;/(?&amp;lt;!-\d*)\d+/g&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Explicação da regex:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;(?&amp;lt;!)&lt;/code&gt; -&amp;gt; Agrupa os caracteres para o lookbehind negativo.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;-\d*&lt;/code&gt; -&amp;gt; Indica que os números que queremos não devem ter o sinal &lt;strong&gt;-&lt;/strong&gt; (negativo) anterior a ele, e utilizamos também de &lt;strong&gt;\d&lt;/strong&gt;* para dizer que após o sinal de &lt;strong&gt;-&lt;/strong&gt; vai ter um padrão de números, evitando que ocorra a seleção de unidades numéricas em números maiores que 9.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;\d+&lt;/code&gt; -&amp;gt; Representa que terá a ocorrência de um ou mais caracteres numéricos.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;g&lt;/code&gt; -&amp;gt; Flag para a correspondência global.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;&lt;p&gt;Resultado da operação: &lt;code&gt;[ '22', '43', '6', '72', '311', '15' ]&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  Sua vez
&lt;/h2&gt;

&lt;p&gt;Agora que você já sabe como utilizar os termos citados acima, consegue utilizar de lookahead e de lookbehind para retornar apenas os nomes dos provedores dos emails abaixo?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;emails&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;john_doe@gmail.com&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;marilia022@yahoo.com.br&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;gustavo_amado@outlook.com&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Vou deixar abaixo um código que você pode utilizar como base para a sua regex, e lembre-se, nesse desafio queremos apenas os nomes dos provedores, então você deve retornar uma lista com os seguintes valores: &lt;code&gt;[ 'gmail', 'yahoo', 'outlook' ]&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;emails&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; 
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;john_doe@gmail.com&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;marilia022@yahoo.com.br&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;gustavo_amado@outlook.com&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; 
&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;pattern&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;defina&lt;/span&gt; &lt;span class="nx"&gt;sua&lt;/span&gt; &lt;span class="nx"&gt;regex&lt;/span&gt; &lt;span class="nx"&gt;aqui&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;provedores&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;emails&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;reduce&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;acumulador&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;valor&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;provedor&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;valor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;match&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;pattern&lt;/span&gt;&lt;span class="p"&gt;)[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
    &lt;span class="nx"&gt;acumulador&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;provedor&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;acumulador&lt;/span&gt;
&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;[])&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;provedores&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>javascript</category>
      <category>regex</category>
      <category>beginners</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Utilizando fontes com Expo</title>
      <dc:creator>Lucas</dc:creator>
      <pubDate>Thu, 16 Feb 2023 23:28:03 +0000</pubDate>
      <link>https://dev.to/lucasm4sco/utilizando-fontes-com-expo-13gb</link>
      <guid>https://dev.to/lucasm4sco/utilizando-fontes-com-expo-13gb</guid>
      <description>&lt;p&gt;Nesse post usaremos de 3 pacotes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;expo-splash-screen&lt;/strong&gt;: permite-nos manter a SplashScreen (tela de abertura) até terminarmos de carregar os recursos da aplicação;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;expo-font&lt;/strong&gt;: permite que utilizemos de fontes da web ou customizáveis em nossos componentes;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;@expo-google-fonts/fonte-desejada&lt;/strong&gt;: nos oferece cobertura para todas as fontes encontradas no Google Fonts.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;vamos seguir então com suas instalações:&lt;/p&gt;

&lt;p&gt;1- Iniciando projeto:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npx create-expo-app myProject
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;2- Instalando expo-splash-screen:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npx expo install expo-splash-screen
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;3- Instalando expo-font:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npx expo install expo-font
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;4- Instalando @expo-google-fonts:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npx expo install @expo-google-fonts/poppins
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;obs:&lt;/strong&gt; o módulo @expo-google-fonts oferece suporte para várias outras fontes, basta que você coloque o nome da fonte desejada após o nome do pacote, você também pode encontrar uma lista com as fontes suportadas no seguinte repositório: &lt;a href="https://github.com/expo/google-fonts/tree/master/font-packages" rel="noopener noreferrer"&gt;Clique aqui&lt;/a&gt;. Nesse exemplo usaremos a Poppins.&lt;/p&gt;

&lt;p&gt;Após a instalação dos módulos acrescente o seguinte código a raiz do seu projeto:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;SplashScreen&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;expo-splash-screen&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nx"&gt;SplashScreen&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;preventAutoHideAsync&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;App&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// ...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O método &lt;strong&gt;SplashScreen.preventAutoHideAsync()&lt;/strong&gt; chamado acima, faz com que a tela de abertura da aplicação permaneça em execução até chamarmos o outro método &lt;strong&gt;SplashScreen.hideAsync()&lt;/strong&gt; que nesse caso será chamado quando já estivermos com a fonte carregada.&lt;/p&gt;

&lt;p&gt;Para organizar melhor nosso projeto podemos criar um Custom Hook que será encarregado de carregar as fontes e chamar o método que esconderá a tela de abertura, vamos chamá-lo de useLoadFonts:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Crie uma pasta para os hooks do seu projeto;&lt;/li&gt;
&lt;li&gt;Crie um arquivo chamado &lt;strong&gt;useLoadFonts.js&lt;/strong&gt;;&lt;/li&gt;
&lt;li&gt;Copie o seguinte código:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;useCallback&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;SplashScreen&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;expo-splash-screen&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;useFonts&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;expo-font&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Poppins_400Regular&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Poppins_500Medium&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@expo-google-fonts/poppins&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;useLoadFonts&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;fontsLoaded&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useFonts&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
        &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Poppins_Regular&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Poppins_400Regular&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;   
        &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Poppins_Medium&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Poppins_500Medium&lt;/span&gt;
      &lt;span class="p"&gt;});&lt;/span&gt;

    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;onLayoutRootView&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useCallback&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;fontsLoaded&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;SplashScreen&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;hideAsync&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;fontsLoaded&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;fontsLoaded&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;onLayoutRootView&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;useLoadFonts&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Caso deseje utilizar de fontes customizadas, basta trocar a linha da chamada do hook useFonts para uma estrutura semelhante à seguinte:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;fontsLoaded&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useFonts&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Nome-Fonte&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;caminho_para_a_fonte&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Após isso basta importarmos o hook criado e utilizarmos na raiz do projeto, segue o exemplo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Text&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;View&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;react-native&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;SplashScreen&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;expo-splash-screen&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;useLoadFonts&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./src/hooks/useLoadFonts&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nx"&gt;SplashScreen&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;preventAutoHideAsync&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;App&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;fontsLoaded&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;onLayoutRootView&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useLoadFonts&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

  &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;fontsLoaded&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;View&lt;/span&gt;
      &lt;span class="nx"&gt;onLayout&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;onLayoutRootView&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="c1"&gt;// ...&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/View&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora a sua aplicação já deve ser capaz de utilizar dessa fonte e precisamos apenas passar da chave que colocamos no hook &lt;strong&gt;useFonts&lt;/strong&gt; para o fontFamily do componente, ex:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;View&lt;/span&gt;
      &lt;span class="nx"&gt;onLayout&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;onLayoutRootView&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Text&lt;/span&gt;
        &lt;span class="nx"&gt;style&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{{&lt;/span&gt;
          &lt;span class="na"&gt;fontSize&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;34&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="na"&gt;fontFamily&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Poppins_Medium&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
        &lt;span class="p"&gt;}}&lt;/span&gt;
      &lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nx"&gt;Hello&lt;/span&gt; &lt;span class="nx"&gt;world&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;
      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/Text&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/View&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>css</category>
      <category>tailwindcss</category>
      <category>nextjs</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Como enviar email da Hotmail com Typescript usando o nodemailer</title>
      <dc:creator>Lucas</dc:creator>
      <pubDate>Sun, 23 Oct 2022 00:10:16 +0000</pubDate>
      <link>https://dev.to/lucasm4sco/como-enviar-email-da-hotmail-com-typescript-usando-o-nodemailer-2nl9</link>
      <guid>https://dev.to/lucasm4sco/como-enviar-email-da-hotmail-com-typescript-usando-o-nodemailer-2nl9</guid>
      <description>&lt;p&gt;primeiro iremos instalar o nodemailer e o pacote types, digite os seguintes códigos no terminal:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;npm install nodemailer --save&lt;/p&gt;

&lt;p&gt;npm install @types/nodemailer --save&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;após a instalação, no arquivo em que deseja realizar o envio de e-mail, faça os seguintes passos:&lt;/p&gt;

&lt;p&gt;1- Importe o nodemailer:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;nodemailer&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;nodemailer&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;2- crie um transporter (objeto que vai ser capaz de realizar o envio):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;transporter&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;nodemailer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createTransport&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;host&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;smtp.office365.com&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;587&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;secure&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;auth&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;user&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;myEmail@outlook.com&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;pass&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Password&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Para isso usamos o método nodemailer.createTransport() e passamos como argumento um objeto com algumas informações:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;host: o endereço do hospedeiro do e-mail, nesse caso passamos o valor 'smtp.office365.com';&lt;/li&gt;
&lt;li&gt;port: é a porta em que vamos realizar a conexão, por padrão ela será 587 se secure for false e 465 se verdadeiro, nesse transporter definiremos ela como 587;&lt;/li&gt;
&lt;li&gt;secure: recebe true ou false, se receber true a conexão usará TLS ao conectar-se ao servidor, se false o TLS será usado se o servidor suportar a extensão STARTTLS. Como estamos usando a porta 587 manteremos seu valor como false;&lt;/li&gt;
&lt;li&gt;auth: vai receber um objeto de autenticação do e-mail, dentro dele definiremos a chave user com seu valor contendo o e-mail que vamos utilizar para o envio, e a chave pass que contém a senha do e-mail;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Com essas informações já podemos testar as nossas configurações SMTP com a chamada de verify(callback), use:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;transporter&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;verify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;function &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;success&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Server is ready to take our messages&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;caso ocorra tudo bem, a mensagem "Server is ready to take our messages" aparecerá no seu servidor, se ocorrer algum erro recomendo olhar o site &lt;a href="https://nodemailer.com/smtp/" rel="noopener noreferrer"&gt;nodemailer&lt;/a&gt;, nele você poderá ver como configurar melhor o seu objeto transporter para atender ao seu caso.&lt;/p&gt;

&lt;p&gt;3- Crie um objeto com as informações que serão enviadas:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;mailOptions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;nodemailer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;SendMailOptions&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;from&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;username &amp;lt;myEmail@outlook.com&amp;gt;&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;to&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;email@example.com&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;subject&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;hello world!&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;html&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;&amp;lt;h1&amp;gt; Hello world &amp;lt;/h1&amp;gt;&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;text&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;hello world&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;nesse objeto criado definimos seu tipo e passamos as seguintes chaves:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;from: vai receber uma string com seu nome de usuário e em seguinda o e-mail que estamos utilizando no transporter entre os símbolos &amp;lt;&amp;gt;;&lt;/li&gt;
&lt;li&gt;to: nesse exemplo usamos uma string com o e-mail destinatário que irá receber o e-mail, mas caso deseja enviar para múltiplos e-mails pode ser passado uma lista com eles como seu valor;&lt;/li&gt;
&lt;li&gt;subject: recebe o assunto do e-mail que vai ser enviado;&lt;/li&gt;
&lt;li&gt;html: recebe o conteúdo do e-mail no padrão html pra ser interpretado;&lt;/li&gt;
&lt;li&gt;text: recebe como valor a versão de texto simples da mensagem, tbm necessário caso não seja possível a interpretação do html;&lt;/li&gt;
&lt;li&gt;attachments: nesse caso nós não utilizamos dele, mas pode ser utilizado para fazer o envio de anexos, você pode ver um exemplo em: &lt;a href="https://nodemailer.com/message/attachments/" rel="noopener noreferrer"&gt;attachments&lt;/a&gt;;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;4- usar o método para enviar o email:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// sending with callback&lt;/span&gt;

&lt;span class="nx"&gt;transporter&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sendMail&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;mailOptions&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Error&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;info&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;nodemailer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;SentMessageInfo&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// code   &lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;

&lt;span class="c1"&gt;// sending with promisse&lt;/span&gt;

&lt;span class="nx"&gt;transporter&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sendMail&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;mailOptions&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;info&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;SentMessageInfo&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;info&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;messageId&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Para realizar o envio do email usamos o método sendMail() do transporter passando como argumento o objeto criado anteriormente.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;e é isso, espero que tenha ajudado! :)&lt;/em&gt;&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>node</category>
      <category>typescript</category>
      <category>hotmail</category>
    </item>
  </channel>
</rss>
