<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.7.4">Jekyll</generator><link href="http://cangaceirojavascript.com.br/feed.xml" rel="self" type="application/atom+xml" /><link href="http://cangaceirojavascript.com.br/" rel="alternate" type="text/html" /><updated>2018-12-23T22:43:34+00:00</updated><id>http://cangaceirojavascript.com.br/feed.xml</id><title type="html">Cangaceiro JavaScript</title><subtitle>JavaScript, Node.js e muito mais
</subtitle><author><name>Flávio Almeida</name></author><entry><title type="html">Rxjs: lidando com eventos elegantemente</title><link href="http://cangaceirojavascript.com.br/rxjs-lidando-com-eventos-elegantemente/" rel="alternate" type="text/html" title="Rxjs: lidando com eventos elegantemente" /><published>2018-12-23T23:00:00+00:00</published><updated>2018-12-23T23:00:00+00:00</updated><id>http://cangaceirojavascript.com.br/rxjs</id><content type="html" xml:base="http://cangaceirojavascript.com.br/rxjs-lidando-com-eventos-elegantemente/">&lt;p&gt;Neste artigo especial de natal será demonstrado como o Rxjs pode ajudar o desenvolvedor a lidar elegantemente com eventos do DOM.&lt;/p&gt;

&lt;h2 id=&quot;contexto&quot;&gt;Contexto&lt;/h2&gt;
&lt;p&gt;Temos uma aplicação hipotética construída com HTML, CSS e JavaScript. Ela alerta o usuário que estiver inativo por mais de cinco minutos que sua sessão vai expirar. Neste contexto, a aplicação precisa monitorar o clique, mover do mouse e o pressionar de qualquer tecla, detectando assim atividade por parte do usuário e consequentemente reiniciando o timer de inatividade.&lt;/p&gt;

&lt;p&gt;Vamos começar pelo trecho de código responsável por reiniciar o timer de inatividade:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;startWatching&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;nb&quot;&gt;document&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;addEventListener&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'click'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;resetTimer&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    &lt;span class=&quot;nb&quot;&gt;document&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;addEventListener&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'mousemove'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;resetTimer&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    &lt;span class=&quot;nb&quot;&gt;document&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;addEventListener&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'keypress'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;resetTimer&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;resetTimer&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;cm&quot;&gt;/* reseta o timer da sessão, código omitido */&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;
&lt;span class=&quot;nx&quot;&gt;startWatching&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Um olhar atento no código que acabamos de ver verificará que ele possui um problema de performance. Cada coordenada alterada do mouse na tela dispara a chamada de &lt;code class=&quot;highlighter-rouge&quot;&gt;resetTimer&lt;/code&gt;, isto é, desligará o timer atual criando um novo logo em seguida. A mesma coisa para cada tecla pressionada pelo usuário, assim como cliques. Uma solução é aplicar o &lt;em&gt;debounce pattern&lt;/em&gt;. Porém, em vez de implementarmos nossa própria função &lt;em&gt;debounce&lt;/em&gt;, utilizaremos o operador &lt;code class=&quot;highlighter-rouge&quot;&gt;debounceTime&lt;/code&gt; do Rxjs.&lt;/p&gt;

&lt;h2 id=&quot;lidando-com-elementos-do-dom-através-do-rxjs&quot;&gt;Lidando com elementos do DOM através do Rxjs&lt;/h2&gt;
&lt;p&gt;Primeiro, precisamos tratar os eventos que vimos até agora através da função &lt;code class=&quot;highlighter-rouge&quot;&gt;fromEvent&lt;/code&gt; do Rxjs. Esta função criará um &lt;code class=&quot;highlighter-rouge&quot;&gt;Observable&lt;/code&gt; que emitirá valores toda vez que um evento for disparado:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;// importando fromEvent do pacote rxjs&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;fromEvent&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'rxjs'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;startWatching&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;fromEvent&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;document&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'click'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;subscribe&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;resetTimer&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;fromEvent&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;document&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'mousemove'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;subscribe&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;resetTimer&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;fromEvent&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;document&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'keypress'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;subscribe&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;resetTimer&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;resetTimer&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;cm&quot;&gt;/* reseta o timer da sessão */&lt;/span&gt;
&lt;span class=&quot;nx&quot;&gt;startWatching&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;A função &lt;code class=&quot;highlighter-rouge&quot;&gt;fromEvent&lt;/code&gt; recebe como primeiro parâmetro o elemento que desejamos associar um &lt;em&gt;handler&lt;/em&gt; para um evento e o segundo é o tipo de evento em si. Como o método retorna um &lt;code class=&quot;highlighter-rouge&quot;&gt;Observable&lt;/code&gt;, nos inscrevemos nele através do método &lt;code class=&quot;highlighter-rouge&quot;&gt;subscribe&lt;/code&gt;, que recebe o &lt;em&gt;handler&lt;/em&gt; do evento. Quando cada um dos eventos for disparado, a função &lt;code class=&quot;highlighter-rouge&quot;&gt;resetTimer&lt;/code&gt; passada para &lt;code class=&quot;highlighter-rouge&quot;&gt;subscribe&lt;/code&gt; será executada. Excelente, mas até agora trocamos seis por meia dúzia. O maior benefício vem com a aplicação do operador &lt;code class=&quot;highlighter-rouge&quot;&gt;debounceTime&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;fromEvent&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'rxjs'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;debounceTime&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'rxjs/operators'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;startWatching&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;fromEvent&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;document&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'click'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;pipe&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;debounceTime&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;200&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;subscribe&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;resetTimer&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;fromEvent&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;document&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'mousemove'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;pipe&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;debounceTime&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;200&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;    
        &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;subscribe&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;resetTimer&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;fromEvent&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;document&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'keypress'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;pipe&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;debounceTime&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;200&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;    
        &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;subscribe&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;resetTimer&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;resetTimer&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;cm&quot;&gt;/* reseta o timer da sessão */&lt;/span&gt;
&lt;span class=&quot;nx&quot;&gt;startWatching&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Perfeito, mas se não quisermos mais responder aos eventos que acabamos de nos inscrever? Precisaremos guardar o retorno de cada chamada à função &lt;code class=&quot;highlighter-rouge&quot;&gt;fromEvent&lt;/code&gt; em uma variável. O retorno nada mais é do que um objeto do tipo &lt;code class=&quot;highlighter-rouge&quot;&gt;Subscription&lt;/code&gt;, aquele que nos permitirá cancelar nosso registro ao &lt;code class=&quot;highlighter-rouge&quot;&gt;Observable&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;fromEvent&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'rxjs'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;debounceTime&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'rxjs/operators'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;// variáveis que guardaram cada Subscription&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;clickSubscription&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;mouseMoveSubscription&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;keyPressSubscription&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;null&lt;/span&gt;

&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;startWatching&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;clickSubscription&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;fromEvent&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;document&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'click'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;pipe&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;debounceTime&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;200&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;subscribe&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;resetTimer&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;mouseMoveSubscription&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;fromEvent&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;document&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'mousemove'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;pipe&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;debounceTime&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;200&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;    
        &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;subscribe&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;resetTimer&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;keyPressSubscription&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;fromEvent&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;document&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'keypress'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;pipe&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;debounceTime&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;200&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;    
        &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;subscribe&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;resetTimer&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;c1&quot;&gt;// alterou o método stopWatching também!&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;stopWatching&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;clickSubscription&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;unsubscribe&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;mouseMoveSubscription&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;unsubscribe&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;keyPressSubscription&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;unsubscribe&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;resetTimer&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;cm&quot;&gt;/* reseta o timer da sessão */&lt;/span&gt;
&lt;span class=&quot;nx&quot;&gt;startWatching&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Nossa solução funciona, mais não é nada elegante. Primeiro, estamos repetindo a mesma chamada de &lt;code class=&quot;highlighter-rouge&quot;&gt;resetTimer&lt;/code&gt; em cada uma das inscrições dos observables. Além disso, foi necessário declararmos variáveis mutáveis para guardarem as inscrições de cada &lt;code class=&quot;highlighter-rouge&quot;&gt;Observable&lt;/code&gt;. São essas variáveis que serão utilizadas pela função &lt;code class=&quot;highlighter-rouge&quot;&gt;stopWatching&lt;/code&gt;. Com certeza podemos melhorar o código escrito até agora.&lt;/p&gt;

&lt;p&gt;Primeiro, vamos tentar evitar a repetição da chamada de &lt;code class=&quot;highlighter-rouge&quot;&gt;subscribe&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;fromEvent&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'rxjs'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;debounceTime&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'rxjs/operators'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;startWatching&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'click'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'mousemove'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'keypress'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;forEach&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;event&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; 
            &lt;span class=&quot;nx&quot;&gt;fromEvent&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;document&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;event&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
                &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;pipe&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;debounceTime&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;200&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;
                &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;subscribe&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;resetTimer&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;stopWatching&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;cm&quot;&gt;/* como implementar ? */&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;resetTimer&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;cm&quot;&gt;/* reseta o timer da sessão */&lt;/span&gt;
&lt;span class=&quot;nx&quot;&gt;startWatching&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Criamos um array com três elementos no qual cada um de seus elementos é o tipo do evento que desejamos escutar. Através de &lt;code class=&quot;highlighter-rouge&quot;&gt;forEach&lt;/code&gt;, criamos um &lt;code class=&quot;highlighter-rouge&quot;&gt;Observable&lt;/code&gt; para cada evento, aplicando o operador &lt;code class=&quot;highlighter-rouge&quot;&gt;debounceTime&lt;/code&gt; e a chamada de &lt;code class=&quot;highlighter-rouge&quot;&gt;subscribe&lt;/code&gt; uma única vez. Porém, temos um problema. Precisamos ter a capacidade de remover a inscrição de cada um dos três observables criados e da maneira que organizamos nosso código, isso não será possível. Como proceder?&lt;/p&gt;

&lt;h2 id=&quot;a-função-merge&quot;&gt;A função merge&lt;/h2&gt;
&lt;p&gt;Uma solução para o problema é continuar criando um &lt;code class=&quot;highlighter-rouge&quot;&gt;Observable&lt;/code&gt; para cada um dos eventos, mas tratando-os como um único &lt;code class=&quot;highlighter-rouge&quot;&gt;Observable&lt;/code&gt;. Em outras palavras, o que queremos realizar é o merge de três observables. Conseguimos isso através da função &lt;code class=&quot;highlighter-rouge&quot;&gt;merge&lt;/code&gt; do Rxjs:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;fromEvent&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;merge&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'rxjs'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;// importou merge &lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;debounceTime&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'rxjs/operators'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;startWatching&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;subscription&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;merge&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;
            &lt;span class=&quot;c1&quot;&gt;// através do spread operador, passamos três &lt;/span&gt;
            &lt;span class=&quot;c1&quot;&gt;// observales para o métdo merge, em vez do array&lt;/span&gt;
            &lt;span class=&quot;p&quot;&gt;...[&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'click'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'mousemove'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'keypress'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;
                &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;map&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;event&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;fromEvent&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;document&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;event&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;
         &lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
         &lt;span class=&quot;c1&quot;&gt;// neste ponto, temos três Observables mergeados&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;pipe&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;debounceTime&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;200&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;
        &lt;span class=&quot;c1&quot;&gt;// o debounceTime será aplicado na emissão de cada Observable&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;subscribe&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;resetTimer&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;subscription&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;resetTimer&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;cm&quot;&gt;/* reseta o timer da sessão */&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;// guarda o retorno, a inscricão&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;eventsSubscription&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;startWatching&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;// utiliza a inscrição para cancelar a própria inscrição&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;stopWatching&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;eventsSubscription&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;unsubscribe&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;A função &lt;code class=&quot;highlighter-rouge&quot;&gt;merge&lt;/code&gt; recebe um ou mais observables que no final serão tratados como um apenas. Isto é, independente de qual &lt;code class=&quot;highlighter-rouge&quot;&gt;Observable&lt;/code&gt; emita um valor, seu resultado será disponibilizado para quem se inscrever no &lt;code class=&quot;highlighter-rouge&quot;&gt;Observable&lt;/code&gt; gerado por &lt;code class=&quot;highlighter-rouge&quot;&gt;merge&lt;/code&gt;. Através do &lt;em&gt;spread operador&lt;/em&gt; garantimos que a função &lt;code class=&quot;highlighter-rouge&quot;&gt;merge&lt;/code&gt; receberá três parâmetros em vez de um array de observables. Reparem teremos apenas uma &lt;code class=&quot;highlighter-rouge&quot;&gt;Subscription&lt;/code&gt; que nos permitirá cancelar a inscrição dos três observables de uma só vez:&lt;/p&gt;

&lt;p&gt;Podemos simplicar nosso código um pouco mais omitindo a declaração da variável &lt;code class=&quot;highlighter-rouge&quot;&gt;subscription&lt;/code&gt; retornando diretamente o resultado de &lt;code class=&quot;highlighter-rouge&quot;&gt;merge&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;fromEvent&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;merge&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'rxjs'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;debounceTime&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'rxjs/operators'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;startWatching&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; 
    &lt;span class=&quot;nx&quot;&gt;merge&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;...[&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'click'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'mousemove'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'keypress'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;map&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;event&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;fromEvent&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;document&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;event&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;pipe&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;debounceTime&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;200&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;subscribe&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;resetTimer&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;

&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;resetTimer&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;cm&quot;&gt;/* reseta o timer da sessão */&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;eventSubscriptions&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;startWatching&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;stopWatching&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;eventSubscriptions&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;unsubscribe&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Mas o que acontecerá se alguém chamar a função &lt;code class=&quot;highlighter-rouge&quot;&gt;stopWatching&lt;/code&gt; mais de uma vez? Um erro, com certeza, pois não podemos chamar o método &lt;code class=&quot;highlighter-rouge&quot;&gt;unsubscribe&lt;/code&gt; de uma &lt;code class=&quot;highlighter-rouge&quot;&gt;Subscription&lt;/code&gt; mais de uma vez.&lt;/p&gt;

&lt;p&gt;Podemos solucionar o problema citado no parágrafo anterior retornando uma função no lugar da &lt;code class=&quot;highlighter-rouge&quot;&gt;Subscription&lt;/code&gt;. Esta função ao ser chamada garantirá que a inscrição será cancelada apenas uma vez:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;fromEvent&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;merge&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'rxjs'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;debounceTime&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'rxjs/operators'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;startWatching&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;kd&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;subscription&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;merge&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;...[&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'click'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'mousemove'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'keypress'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;
            &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;map&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;event&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;fromEvent&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;document&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;event&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;pipe&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;debounceTime&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;200&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;subscribe&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;resetTimer&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;

    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;c1&quot;&gt;// evita erro caso seja chamado duas vezes&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;subscription&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;nx&quot;&gt;subscription&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;unsubscribe&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
            &lt;span class=&quot;nx&quot;&gt;subscription&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;resetTimer&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;cm&quot;&gt;/* reseta o timer da sessão */&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;stopWatching&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;startWatching&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
&lt;span class=&quot;cm&quot;&gt;/* ... */&lt;/span&gt;
&lt;span class=&quot;nx&quot;&gt;stopWatching&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;// cancela as inscrições&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Agora não temos mais variáveis mutáveis fora do escopo da função &lt;code class=&quot;highlighter-rouge&quot;&gt;startWatching&lt;/code&gt; e garantimos que o cancelamento da inscrição não será realizado mais de uma vez.&lt;/p&gt;

&lt;h2 id=&quot;conclusão&quot;&gt;Conclusão&lt;/h2&gt;
&lt;p&gt;A biblioteca Rxjs é muito poderosa, não é à toa que as extensões reativas estão presentes em diversas linguagens, não apenas em JavaScript.&lt;/p&gt;</content><author><name>Flávio Almeida</name></author><category term="javascript" /><category term="rxjs" /><category term="observable" /><summary type="html">Neste artigo especial de natal será demonstrado como o Rxjs pode ajudar o desenvolvedor a lidar elegantemente com eventos do DOM.</summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://cangaceirojavascript.com.br/logo.png" /></entry><entry><title type="html">O retorno do Cangaceiro JavaScript, meu novo livro</title><link href="http://cangaceirojavascript.com.br/o-retorno-do-cangaceiro-javascript/" rel="alternate" type="text/html" title="O retorno do Cangaceiro JavaScript, meu novo livro" /><published>2018-09-03T15:00:00+00:00</published><updated>2018-09-03T15:00:00+00:00</updated><id>http://cangaceirojavascript.com.br/retorno-cangaceiro-javascript</id><content type="html" xml:base="http://cangaceirojavascript.com.br/o-retorno-do-cangaceiro-javascript/">&lt;p&gt;É com muito entusiasmo que venho comunicar o lançamento do meu terceiro livro, “O Retorno do Cangaceiro JavaScript: de padrões a uma abordagem funcional”. Quero agradecer à comunidade pelo feedback extremamente positivo do livro anterior que foi fundamental para que eu desse continuidade aos trabalhos que resultaram neste novo livro.&lt;/p&gt;

&lt;h2 id=&quot;um-livro-com-uma-pegada-mais-funcional-mas-acessível-para-um-amplo-espectro-de-desenvolvedores&quot;&gt;Um livro com uma pegada mais funcional, mas acessível para um amplo espectro de desenvolvedores&lt;/h2&gt;

&lt;p&gt;Nas mais de 500 páginas do meu livro anterior, dei maior ênfase ao paradigma da orientação a objetos. Desta vez, “O Retorno do Cangaceiro Javascript” foca no paradigma funcional. Assim como no primeiro livro, utilizo uma abordagem evolutiva começando de problemas mais simples até os mais complexos, tudo dentro de um único projeto com início, meio e fim.&lt;/p&gt;

&lt;p&gt;Em vez de bombardear o leitor com todo o jargão da programação funcional, elaborei o conteúdo de uma maneira que permitisse que conceitos emergissem a partir de problemas práticos. Em suma, trabalhei conceitos e técnicas que o desenvolvedor poderá aplicar assim que adquirí-los. Temos aqui um livro prático!&lt;/p&gt;

&lt;h2 id=&quot;mais-padrões-de-projetos&quot;&gt;Mais padrões de projetos&lt;/h2&gt;

&lt;p&gt;Abordei padrões de projetos aplicáveis tanto ao paradigma da orientação a objeto quanto ao funcional, dando subsídios para que o leitor utilize-os conscientemente e não meramente por uma questão de estilo ou modinha.&lt;/p&gt;

&lt;h2 id=&quot;subsídios-para-que-o-leitor-aprenda-bibliotecas-e-frameworks-famosos-do-mercado&quot;&gt;Subsídios para que o leitor aprenda bibliotecas e frameworks famosos do mercado.&lt;/h2&gt;

&lt;p&gt;Meu novo manuscrito ajudará tanto o desenvolvedor experiente que deseja aplicar técnicas avançadas quanto aqueles que já possuem uma base tímida em JavaScript, mas que desejam avançar. O livro também preparará o &lt;em&gt;mindset&lt;/em&gt; do leitor para trabalhar com bibliotecas utilizadas pela comunidade, pois perceberão com mais clareza suas vantagens e motivações quando comparadas ao uso de vanilla JavaScript.&lt;/p&gt;

&lt;h2 id=&quot;considerações-finais&quot;&gt;Considerações finais&lt;/h2&gt;

&lt;p&gt;A jornada do cangaceiro ainda não terminou! Aguardem notícias!&lt;/p&gt;</content><author><name>Flávio Almeida</name></author><category term="javascript" /><category term="funcional" /><category term="padrões de projeto" /><category term="design pattern" /><summary type="html">É com muito entusiasmo que venho comunicar o lançamento do meu terceiro livro, “O Retorno do Cangaceiro JavaScript: de padrões a uma abordagem funcional”. Quero agradecer à comunidade pelo feedback extremamente positivo do livro anterior que foi fundamental para que eu desse continuidade aos trabalhos que resultaram neste novo livro.</summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://cangaceirojavascript.com.br/logo.png" /></entry><entry><title type="html">Preview de imagens antes do upload</title><link href="http://cangaceirojavascript.com.br/preview-imagens-upload/" rel="alternate" type="text/html" title="Preview de imagens antes do upload" /><published>2018-04-06T11:00:00+00:00</published><updated>2018-04-06T11:00:00+00:00</updated><id>http://cangaceirojavascript.com.br/preview-imagens-upload</id><content type="html" xml:base="http://cangaceirojavascript.com.br/preview-imagens-upload/">&lt;p&gt;Realizar o upload de arquivos é uma tarefa corriqueira do desenvolvedor web. Em se tratando do upload de imagens, realizar o preview antes do envio pode evitar que o usuário selecione a imagem errada. Neste artigo aprenderemos como realizar o preview da imagem escolhida.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Sobre upload de arquivos o leitor pode consultar o artigo &lt;a href=&quot;http://cangaceirojavascript.com.br/express-realizando-upload-multer&quot; target=&quot;_blank&quot;&gt;Express, realizando upload com multer&lt;/a&gt; deste mesmo autor.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2 id=&quot;o-problema&quot;&gt;O problema&lt;/h2&gt;

&lt;p&gt;Temos o arquivo &lt;code class=&quot;highlighter-rouge&quot;&gt;index.html&lt;/code&gt; que define um simples &lt;code class=&quot;highlighter-rouge&quot;&gt;&amp;lt;form&amp;gt;&lt;/code&gt; com as tags &lt;code class=&quot;highlighter-rouge&quot;&gt;&amp;lt;input type=&quot;file&quot;&amp;gt;&lt;/code&gt; e &lt;code class=&quot;highlighter-rouge&quot;&gt;&amp;lt;input type=&quot;submit&quot;&amp;gt;&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;language-html highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;cp&quot;&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;html&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;meta&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;charset=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;UTF-8&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;meta&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;name=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;viewport&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;content=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;width=device-width, initial-scale=1.0&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;meta&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;http-equiv=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;X-UA-Compatible&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;content=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;ie=edge&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;title&amp;gt;&lt;/span&gt;Preview&lt;span class=&quot;nt&quot;&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;

&lt;span class=&quot;nt&quot;&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;form&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;action=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'api-url-here'&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;method=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'post'&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;encType=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;multipart/form-data&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;nt&quot;&gt;&amp;lt;input&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;file-chooser&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;type=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;file&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;accept=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;image/*&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;nt&quot;&gt;&amp;lt;input&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;type=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;submit&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;value=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;upload&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;/form&amp;gt;&lt;/span&gt;  
&lt;span class=&quot;nt&quot;&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Quando selecionamos uma imagem apenas seu nome será exibido ao lado do &lt;code class=&quot;highlighter-rouge&quot;&gt;&amp;lt;input type=&quot;file&quot;&amp;gt;&lt;/code&gt;. Veremos a seguir como realizar o preview da imagem selecionada.&lt;/p&gt;

&lt;h2 id=&quot;solução&quot;&gt;Solução&lt;/h2&gt;

&lt;p&gt;Vamos adicionar uma tag &lt;code class=&quot;highlighter-rouge&quot;&gt;&amp;lt;img&amp;gt;&lt;/code&gt; com a classe &lt;code class=&quot;highlighter-rouge&quot;&gt;preview-img&lt;/code&gt; entre a escolha do arquivo e o botão de submissão. É este elemento que fará o preview da imagem selecionada:&lt;/p&gt;

&lt;div class=&quot;language-html highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;cp&quot;&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;html&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;meta&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;charset=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;UTF-8&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;meta&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;name=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;viewport&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;content=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;width=device-width, initial-scale=1.0&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;meta&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;http-equiv=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;X-UA-Compatible&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;content=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;ie=edge&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;title&amp;gt;&lt;/span&gt;Preview&lt;span class=&quot;nt&quot;&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;

&lt;span class=&quot;nt&quot;&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;form&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;action=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'api-url-here'&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;method=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'post'&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;encType=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;multipart/form-data&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;nt&quot;&gt;&amp;lt;input&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;file-chooser&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;type=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;file&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;accept=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;image/*&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;nt&quot;&gt;&amp;lt;img&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;preview-img&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;nt&quot;&gt;&amp;lt;input&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;type=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;submit&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;value=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;upload&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;/form&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;script&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;c1&quot;&gt;// nosso script fica aqui!&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;    
&lt;span class=&quot;nt&quot;&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Para darmos continuidade à solução precisamos obter do DOM os elementos de input da seleção do arquivo e a da imagem. Para o input de seleção planejaremos uma resposta para o evento &lt;code class=&quot;highlighter-rouge&quot;&gt;onchange&lt;/code&gt;, aquele disparado quando um arquivo qualquer for selecionado:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;$&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;document&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;querySelector&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;bind&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;document&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;previewImg&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'.preview-img'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;fileChooser&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'.file-chooser'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;nx&quot;&gt;fileChooser&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;onchange&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;e&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;cm&quot;&gt;/* falta implementar */&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Excelente! O evento &lt;code class=&quot;highlighter-rouge&quot;&gt;onchange&lt;/code&gt; de um &lt;code class=&quot;highlighter-rouge&quot;&gt;&amp;lt;input type=&quot;file&quot;&amp;gt;&lt;/code&gt; nos dá acesso ao arquivo selecionado através de &lt;code class=&quot;highlighter-rouge&quot;&gt;e.target.files.item(0)&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;$&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;document&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;querySelector&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;bind&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;document&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;previewImg&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'.preview-I=img'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;fileChooser&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'.file-chooser'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;

&lt;span class=&quot;nx&quot;&gt;fileChooser&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;onchange&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;e&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;c1&quot;&gt;// arquivo que faremos o upload&lt;/span&gt;
    &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;fileToUpload&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;target&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;files&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;item&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Não podemos simplesmente atribuir &lt;code class=&quot;highlighter-rouge&quot;&gt;fileToUpload&lt;/code&gt; à &lt;code class=&quot;highlighter-rouge&quot;&gt;previewImg.src&lt;/code&gt;, pois o primeiro é um binário (blob). Precisamos converter o arquivo para &lt;strong&gt;DataURL&lt;/strong&gt; que nada mais é do que a representação do binário como uma string que é automaticamente decodificada pelo navegador. Faremos essa conversão através de um &lt;code class=&quot;highlighter-rouge&quot;&gt;FileReader&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;$&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;document&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;querySelector&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;bind&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;document&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;previewImg&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'.preview-img'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;fileChooser&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'.file-chooser'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;

&lt;span class=&quot;nx&quot;&gt;fileChooser&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;onchange&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;e&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;fileToUpload&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;target&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;files&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;item&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;reader&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;FileReader&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;

    &lt;span class=&quot;c1&quot;&gt;// evento disparado quando o reader terminar de ler &lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;reader&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;onload&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;e&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;previewImg&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;src&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;target&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;result&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;c1&quot;&gt;// solicita ao reader que leia o arquivo &lt;/span&gt;
    &lt;span class=&quot;c1&quot;&gt;// transformando-o para DataURL. &lt;/span&gt;
    &lt;span class=&quot;c1&quot;&gt;// Isso disparará o evento reader.onload.&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;reader&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;readAsDataURL&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;fileToUpload&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Quando &lt;code class=&quot;highlighter-rouge&quot;&gt;reader.readAsDataURL&lt;/code&gt; terminar, o evento &lt;code class=&quot;highlighter-rouge&quot;&gt;reader.onload&lt;/code&gt; será disparado. Através do parâmetro do evento temos acesso ao resultado da conversão através de &lt;code class=&quot;highlighter-rouge&quot;&gt;e.target.result&lt;/code&gt;. É importante perceber que esta é uma operação assíncrona.&lt;/p&gt;

&lt;p&gt;Pronto! Ao selecionarmos uma imagem ela será exibida para o usuário permitindo-o verificar se ela é a que ele realmente deseja subir.&lt;/p&gt;

&lt;h2 id=&quot;bônus-alterando-a-label-do-botão-de-seleção-de-arquivo&quot;&gt;Bônus: alterando a label do botão de seleção de arquivo&lt;/h2&gt;

&lt;p&gt;Uma coisa bem incômoda do &lt;code class=&quot;highlighter-rouge&quot;&gt;&amp;lt;input type=&quot;file&quot;&amp;gt;&lt;/code&gt; é que ele não permite mudar o texto do botão. Inclusive quem utiliza &lt;a href=&quot;https://getbootstrap.com/&quot; target=&quot;_blank&quot;&gt;Bootstrap&lt;/a&gt; pode ter alguma dificuldade em estilizá-lo.&lt;/p&gt;

&lt;p&gt;Uma das soluções é escondermos o &lt;code class=&quot;highlighter-rouge&quot;&gt;&amp;lt;input type=&quot;file&quot;&amp;gt;&lt;/code&gt; e dispará-lo através do clique de um &lt;code class=&quot;highlighter-rouge&quot;&gt;&amp;lt;input type=&quot;button&quot;&amp;gt;&lt;/code&gt;. Vejamos a solução.&lt;/p&gt;

&lt;p&gt;Primeiro, vamos adicionar o &lt;code class=&quot;highlighter-rouge&quot;&gt;&amp;lt;input type=&quot;button&quot;&amp;gt;&lt;/code&gt; e tornar o &lt;code class=&quot;highlighter-rouge&quot;&gt;&amp;lt;input type=&quot;file&quot;&amp;gt;&lt;/code&gt; invisível através do atributo &lt;code class=&quot;highlighter-rouge&quot;&gt;hidden&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;language-html highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;cp&quot;&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;html&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;meta&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;charset=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;UTF-8&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;meta&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;name=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;viewport&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;content=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;width=device-width, initial-scale=1.0&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;meta&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;http-equiv=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;X-UA-Compatible&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;content=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;ie=edge&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;title&amp;gt;&lt;/span&gt;Preview&lt;span class=&quot;nt&quot;&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;

&lt;span class=&quot;nt&quot;&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;form&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;action=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'image/upload'&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;method=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'post'&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;encType=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;multipart/form-data&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
        
        &lt;span class=&quot;c&quot;&gt;&amp;lt;!-- novo elemento! --&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;nt&quot;&gt;&amp;lt;input&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;file-button&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;type=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;button&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;value=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;Choose your beautiful image&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;

        &lt;span class=&quot;c&quot;&gt;&amp;lt;!-- invisível --&amp;gt;&lt;/span&gt;

        &lt;span class=&quot;nt&quot;&gt;&amp;lt;input&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;file-chooser&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;type=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;file&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;accept=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;image/*&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;hidden&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;nt&quot;&gt;&amp;lt;img&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;preview-img&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;nt&quot;&gt;&amp;lt;input&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;type=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;submit&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;value=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;upload&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;/form&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;script&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;c1&quot;&gt;// nosso script fica aqui!&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;    
&lt;span class=&quot;nt&quot;&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Agora, vamos obter o novo botão para em seguida adicionarmos o evento &lt;code class=&quot;highlighter-rouge&quot;&gt;onclick&lt;/code&gt;. É neste evento que chamaremos &lt;code class=&quot;highlighter-rouge&quot;&gt;fileChooser.click()&lt;/code&gt;, forçando assim o click e como resultado a seleção do arquivo:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;$&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;document&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;querySelector&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;bind&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;document&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;

&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;previewImg&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'.preview-img'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;fileChooser&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'.file-chooser'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;fileButton&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'.file-button'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;

&lt;span class=&quot;nx&quot;&gt;fileButton&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;onclick&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;fileChooser&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;click&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;

&lt;span class=&quot;nx&quot;&gt;fileChooser&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;onchange&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;e&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;fileToUpload&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;target&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;files&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;item&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;reader&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;FileReader&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;reader&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;onload&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;e&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;previewImg&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;src&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;target&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;result&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;reader&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;readAsDataURL&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;fileToUpload&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Perfeito. Agora temos maior liberdade para estilizar nosso botão.&lt;/p&gt;

&lt;h2 id=&quot;conclusão&quot;&gt;Conclusão&lt;/h2&gt;

&lt;p&gt;Muitas vezes a tecnologia vigente não traz uma resposta direta para determinado problema de usabilidade e com isso força o desenvolvedor a elaborar soluções utilizando os recursos que tem. E você? Já precisou realizar o preview de imagens antes? Deixe sua opinião.&lt;/p&gt;</content><author><name>Flávio Almeida</name></author><category term="javascript" /><category term="image" /><category term="upload" /><category term="preview" /><summary type="html">Realizar o upload de arquivos é uma tarefa corriqueira do desenvolvedor web. Em se tratando do upload de imagens, realizar o preview antes do envio pode evitar que o usuário selecione a imagem errada. Neste artigo aprenderemos como realizar o preview da imagem escolhida.</summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://cangaceirojavascript.com.br/logo.png" /></entry><entry><title type="html">Evitando a serialização de propriedades dinâmicas de objetos</title><link href="http://cangaceirojavascript.com.br/evitando-serializacao-propriedades-dinamicas-objetos/" rel="alternate" type="text/html" title="Evitando a serialização de propriedades dinâmicas de objetos" /><published>2018-03-12T11:00:00+00:00</published><updated>2018-03-12T11:00:00+00:00</updated><id>http://cangaceirojavascript.com.br/evitando-serializacao-propriedades-dinamicas-objetos</id><content type="html" xml:base="http://cangaceirojavascript.com.br/evitando-serializacao-propriedades-dinamicas-objetos/">&lt;h2 id=&quot;o-problema&quot;&gt;O problema&lt;/h2&gt;

&lt;p&gt;Existem várias maneiras de adicionarmos &lt;em&gt;flags&lt;/em&gt; de controle em objetos JavaScript. Uma delas é modificando o objeto diretamente:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;// dados que podem vir de uma API web&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;photo&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;title&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'Cangaceiro JavaScript'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;author&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'Flávio Almeida'&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;// propriedade de controle que define um identificador único&lt;/span&gt;
&lt;span class=&quot;nx&quot;&gt;photo&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;_key&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Todavia, ao serializarmos o dado para ser enviado para uma API, a propriedade &lt;code class=&quot;highlighter-rouge&quot;&gt;_key&lt;/code&gt; estará presente:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;serializedPhoto&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;JSON&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;stringify&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;photo&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;nx&quot;&gt;console&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;serializedPhoto&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;cm&quot;&gt;/* 
{
    title: 'Cangaceiro JavaScript', 
    author: 'Flávio Almeida', 
    _key: 1
}
*/&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Isso não seria um problema caso a API seguisse a boa prática de pinçar (pluck) apenas as propriedades que espera receber. Mas caso a API não siga esse caminho, fica evidente que não podemos enviar a propriedade &lt;code class=&quot;highlighter-rouge&quot;&gt;_key&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Serializar o JSON em disco na plataforma Node.js também seria um problema, pois a propriedade também faria parte do dado serializado.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Uma solução é apagarmos a propriedade adicionada dinamicamente antes da serialização:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;// código anterior omitido&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;delete&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;photo&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;_key&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;// apagando a propriedade&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;serializedPhoto&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;JSON&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;stringify&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;photo&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;delete&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;serializedPhoto&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;_key&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;nx&quot;&gt;console&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;serializedPhoto&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;A motivação para o post veio do problema enfrentado por um colega em sua aplicação feita com Ionic 3. Uma das bibliotecas utilizadas por ele modificava diretamente o modelo associado ao componente o que acabava lhe causando problemas na arquitetura definida por ele.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;O exemplo acima não causaria grandes problemas de performance, mas o cenário seria diferente caso tivéssemos que iterar em um grande lista de objetos para então deletarmos a propriedade &lt;code class=&quot;highlighter-rouge&quot;&gt;_key&lt;/code&gt; de cada um deles. A boa notícia é que há outra solução.&lt;/p&gt;

&lt;h2 id=&quot;definindo-propriedades-não-iteráveis&quot;&gt;Definindo propriedades não iteráveis&lt;/h2&gt;

&lt;p&gt;Uma solução para o problema anterior é adicionarmos no objeto a propriedade &lt;code class=&quot;highlighter-rouge&quot;&gt;_key&lt;/code&gt; como não enumerável. Uma propriedade não enumerável não será enxergada por repetições &lt;code class=&quot;highlighter-rouge&quot;&gt;for...in&lt;/code&gt; ou pelo método &lt;code class=&quot;highlighter-rouge&quot;&gt;Object.keys()&lt;/code&gt;. Como a função &lt;code class=&quot;highlighter-rouge&quot;&gt;JSON.stringify()&lt;/code&gt; utiliza alguma estrutura de iteração para construir o JSON resultante, propriedades não enumeráveis serão ignoradas.&lt;/p&gt;

&lt;h2 id=&quot;um-pouco-sobre-objectdefineproperty&quot;&gt;Um pouco sobre Object.defineProperty&lt;/h2&gt;

&lt;p&gt;Criamos propriedades não iteráveis com auxílio da função &lt;a href=&quot;https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty&quot; target=&quot;_blank&quot;&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;Object.defineProperty&lt;/code&gt;&lt;/a&gt;. Ela recebe como primeiro parâmetro o objeto que desejamos modificar e como segundo o nome da propriedade que será adicionada. Por fim, um objeto descritor (descriptor) é passado como último parâmetro. É nele que indicamos que a propriedade é não enumerável através de &lt;code class=&quot;highlighter-rouge&quot;&gt;enumerable: false&lt;/code&gt;, inclusive seu valor através de &lt;code class=&quot;highlighter-rouge&quot;&gt;value: 1&lt;/code&gt;:&lt;/p&gt;

&lt;p&gt;Modificando nosso código:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;photo&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;title&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'Cangaceiro JavaScript'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;author&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'Flávio Almeida'&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;nb&quot;&gt;Object&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;defineProperty&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;photo&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'_key'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; 
    &lt;span class=&quot;na&quot;&gt;enumerable&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; 
    &lt;span class=&quot;na&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;

&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;serializedPhoto&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;JSON&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;stringify&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;photo&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;nx&quot;&gt;console&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;serializedPhoto&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;cm&quot;&gt;/* 
{
    title: 'Cangaceiro JavaScript', 
    author: 'Flávio Almeida', 
}
*/&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;O JSON resultante não contém mais a propriedade &lt;code class=&quot;highlighter-rouge&quot;&gt;_key&lt;/code&gt;, excelente.&lt;/p&gt;

&lt;h2 id=&quot;conclusão&quot;&gt;Conclusão&lt;/h2&gt;

&lt;p&gt;Podemos adicionar dinamicamente em objetoa propriedades não enumeráveis através de &lt;code class=&quot;highlighter-rouge&quot;&gt;Object.defineProperty&lt;/code&gt;. Uma consequência dessas propriedades é que elas não farão parte do JSON criado através da função &lt;code class=&quot;highlighter-rouge&quot;&gt;JSON.stringify&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;A função &lt;code class=&quot;highlighter-rouge&quot;&gt;Object.defineProperty&lt;/code&gt; permite definir ainda outras características da propriedade adicionada dinamicamente. E você? Já precisou utilizar essa função antes? Qual problema você tentou resolver? Deixe sua opinião.&lt;/p&gt;</content><author><name>Flávio Almeida</name></author><category term="javascript" /><category term="JSON.stringify" /><category term="serialization" /><category term="Object.defineProperty" /><summary type="html">O problema</summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://cangaceirojavascript.com.br/logo.png" /></entry><entry><title type="html">Entendendo Redux com vanilla JavaScript</title><link href="http://cangaceirojavascript.com.br/entendendo-redux-com-vanilla-javascript/" rel="alternate" type="text/html" title="Entendendo Redux com vanilla JavaScript" /><published>2018-03-02T11:00:00+00:00</published><updated>2018-03-02T11:00:00+00:00</updated><id>http://cangaceirojavascript.com.br/entendendo-redux-com-vanilla-javacript</id><content type="html" xml:base="http://cangaceirojavascript.com.br/entendendo-redux-com-vanilla-javascript/">&lt;p&gt;Existe um número considerável de soluções no mercado para construção de &lt;em&gt;Single Page Applications&lt;/em&gt; e cada uma delas resolve questões arquiteturais de sua maneira. Todavia, &lt;a href=&quot;https://redux.js.org/&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;Redux&lt;/strong&gt;&lt;/a&gt; é um padrão para gerenciamento centralizado de estado da aplicação que vem ganhando muita atenção da comunidade. Esse padrão se tornou tão popular que foram criadas diversas bibliotecas para integrá-lo com frameworks SPA. Vejamos algumas delas:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/ngrx/store&quot; target=&quot;_blank&quot;&gt;nxStore&lt;/a&gt;, Angular&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/reactjs/react-redux&quot; target=&quot;_blank&quot;&gt;react-redux&lt;/a&gt;, React&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://vuex.vuejs.org/en/intro.html&quot; target=&quot;_blank&quot;&gt;vuex&lt;/a&gt;, Vuejs&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.ember-redux.com/&quot; target=&quot;_blank&quot;&gt;ember-redux&lt;/a&gt;, Emberjs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Neste artigo aplicaremos na prática Redux com vanilla JavaScript&lt;/strong&gt;. Essa abordagem minimalista nos ajudará a focar nos seus principais conceitos sem termos o peso cognitivo de bibliotecas que fazem a ponte entre Redux e determinado framework.&lt;/p&gt;

&lt;p&gt;Vejamos a seguir a infraestrutura mínina que o leitor precisará para colocar em prática o que aprenderá.&lt;/p&gt;

&lt;h2 id=&quot;infraestrutura&quot;&gt;Infraestrutura&lt;/h2&gt;

&lt;p&gt;A única infraestrutura necessária para que o leitor possa colocar em prática o código deste artigo é ter instalado em sua máquina a plataforma &lt;a href=&quot;https://nodejs.org/en/&quot; target=&quot;_blank&quot;&gt;Node.js&lt;/a&gt;. A versão 8.9.4 foi utilizada por este autor.&lt;/p&gt;

&lt;h2 id=&quot;preparando-um-pequeno-projeto&quot;&gt;Preparando um pequeno projeto&lt;/h2&gt;

&lt;p&gt;Para que possamos ver a arquitetura Redux em ação, criaremos um pequeno projeto que utilizará o básico do &lt;a href=&quot;https://webpack.js.org/&quot; target=&quot;_blank&quot;&gt;Webpack&lt;/a&gt; para que possamos carregar módulos baixados através do &lt;code class=&quot;highlighter-rouge&quot;&gt;npm&lt;/code&gt;, o gerenciador de módulos do Node.js.&lt;/p&gt;

&lt;p&gt;Primeiro, criaremos a pasta &lt;code class=&quot;highlighter-rouge&quot;&gt;project&lt;/code&gt; e dentro dela o arquivo &lt;code class=&quot;highlighter-rouge&quot;&gt;index.html&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;language-html highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c&quot;&gt;&amp;lt;!-- project/index.html --&amp;gt;&lt;/span&gt;
&lt;span class=&quot;cp&quot;&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;html&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;meta&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;charset=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;UTF-8&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;meta&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;name=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;viewport&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;content=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;width=device-width&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;title&amp;gt;&lt;/span&gt;Redux with vanilla JavaScript&lt;span class=&quot;nt&quot;&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;input&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;userName&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;placeholder=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;user name&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;p&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;status&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;script &lt;/span&gt;&lt;span class=&quot;na&quot;&gt;src=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;dist/bundle.js&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;É uma página simples que possui apenas um &lt;code class=&quot;highlighter-rouge&quot;&gt;&amp;lt;input&amp;gt;&lt;/code&gt; no qual o usuário informará seu nome e um &lt;code class=&quot;highlighter-rouge&quot;&gt;&amp;lt;p&amp;gt;&lt;/code&gt; que exibirá em tempo real uma mensagem de status contendo o nome informado. Por fim, a tag &lt;code class=&quot;highlighter-rouge&quot;&gt;&amp;lt;script&amp;gt;&lt;/code&gt; carregará  o &lt;code class=&quot;highlighter-rouge&quot;&gt;bundle.js&lt;/code&gt; gerado através do Webpack. Esse &lt;em&gt;bundle&lt;/em&gt;, além do nosso código, conterá a biblioteca padrão do Redux que utilizaremos.&lt;/p&gt;

&lt;p&gt;Agora, dentro da pasta &lt;code class=&quot;highlighter-rouge&quot;&gt;project/app&lt;/code&gt; vamos criar o módulo &lt;code class=&quot;highlighter-rouge&quot;&gt;app.js&lt;/code&gt; com o script necessário para que o &lt;code class=&quot;highlighter-rouge&quot;&gt;&amp;lt;p&amp;gt;&lt;/code&gt; seja atualizado a cada dígito do usuário em &lt;code class=&quot;highlighter-rouge&quot;&gt;&amp;lt;input&amp;gt;&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;// app/app.js&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;statusParagraph&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;document&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;querySelector&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'.status'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;

&lt;span class=&quot;nb&quot;&gt;document&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;querySelector&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'.userName'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;oninput&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;e&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;userName&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;target&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;statusParagraph&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;textContent&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;userName&lt;/span&gt; 
        &lt;span class=&quot;p&quot;&gt;?&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;target&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt; is typing`&lt;/span&gt; 
        &lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;''&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Agora que já temos a estrutura mínima do projeto, vamos instalar e configurar rapidamente o Webpack para que possamos ver a aplicação em ação:&lt;/p&gt;

&lt;h2 id=&quot;instalando-o-webpack-e-o-webpack-dev-server&quot;&gt;Instalando o Webpack e o Webpack Dev Server&lt;/h2&gt;

&lt;p&gt;No terminal e dentro da pasta &lt;code class=&quot;highlighter-rouge&quot;&gt;project&lt;/code&gt;, vamos criar o arquivo &lt;code class=&quot;highlighter-rouge&quot;&gt;package.json&lt;/code&gt; através do comando:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;npm init &lt;span class=&quot;nt&quot;&gt;-y&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Com o &lt;code class=&quot;highlighter-rouge&quot;&gt;package.json&lt;/code&gt; criado, baixaremos os módulos do Webpack e do Webpack Dev Server de uma só vez:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;npm install webpack@3.11.0 webpack-dev-server@2.11.1 &lt;span class=&quot;nt&quot;&gt;-D&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Por fim, vamos criar o arquivo &lt;code class=&quot;highlighter-rouge&quot;&gt;project/webpack.config.js&lt;/code&gt; com a configuração mínima que gerará o &lt;code class=&quot;highlighter-rouge&quot;&gt;bundle.js&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;// project/webpack.config.js&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;path&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;require&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'path'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;

&lt;span class=&quot;nx&quot;&gt;module&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;exports&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;entry&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'./app/app.js'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;output&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;filename&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'bundle.js'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;resolve&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;__dirname&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'dist'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;publicPath&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'dist'&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;};&lt;/span&gt; 
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Para terminar a configuração, adicionaremos em &lt;code class=&quot;highlighter-rouge&quot;&gt;project/package.json&lt;/code&gt; o script &lt;code class=&quot;highlighter-rouge&quot;&gt;&quot;start&quot;&lt;/code&gt;, o responsável pela execução do &lt;code class=&quot;highlighter-rouge&quot;&gt;webpack-dev-server&lt;/code&gt; que carregará as configurações definidas em &lt;code class=&quot;highlighter-rouge&quot;&gt;webpack.config.js&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;s2&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;project&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;s2&quot;&gt;&quot;version&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;1.0.0&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;s2&quot;&gt;&quot;description&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;s2&quot;&gt;&quot;main&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;index.js&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;s2&quot;&gt;&quot;scripts&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;s2&quot;&gt;&quot;test&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;echo &lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;Error: no test specified&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt; &amp;amp;&amp;amp; exit 1&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;s2&quot;&gt;&quot;start&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;webpack-dev-server&quot;&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;
  &lt;span class=&quot;s2&quot;&gt;&quot;keywords&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[],&lt;/span&gt;
  &lt;span class=&quot;s2&quot;&gt;&quot;author&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;s2&quot;&gt;&quot;license&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;ISC&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;s2&quot;&gt;&quot;devDependencies&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;s2&quot;&gt;&quot;webpack&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;^3.11.0&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;s2&quot;&gt;&quot;webpack-dev-server&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;^2.11.1&quot;&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Ainda dentro da pasta &lt;code class=&quot;highlighter-rouge&quot;&gt;project&lt;/code&gt;, iniciamos nosso servidor através do comando:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;npm start
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Acessamos nossa aplicação através do endereço &lt;code class=&quot;highlighter-rouge&quot;&gt;http://localhost:8080&lt;/code&gt;. Depois de carregada, experimente digitar no único &lt;code class=&quot;highlighter-rouge&quot;&gt;&amp;lt;input&amp;gt;&lt;/code&gt; da página. Instantaneamente o valor digitado será exibido no &lt;code class=&quot;highlighter-rouge&quot;&gt;&amp;lt;p&amp;gt;&lt;/code&gt; logo abaixo.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Alterações nos módulos da aplicação dispararão a geração de um novo &lt;code class=&quot;highlighter-rouge&quot;&gt;bundle.js&lt;/code&gt; sem que o desenvolvedor tenha que se preocupar.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Antes de modificarmos nosso projeto para utilizar Redux, veremos brevemente seus principais princípios.&lt;/p&gt;

&lt;h2 id=&quot;sobre-redux&quot;&gt;Sobre Redux&lt;/h2&gt;

&lt;p&gt;O próprio site do &lt;a href=&quot;https://redux.js.org/&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;Redux&lt;/strong&gt;&lt;/a&gt; o define como um container de estado previsível. Ele se baseia em três princípios:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;SSOT (&lt;em&gt;Single Source of Truth&lt;/em&gt;): o estado de toda a aplicação é armazenado em uma árvore de objetos dentro de uma única &lt;strong&gt;store&lt;/strong&gt;. Ela é a única fonte de verdade sobre o estado da aplicação.&lt;/li&gt;
  &lt;li&gt;O estado é somente leitura: a única maneira de mudar o estado é emitindo uma &lt;strong&gt;action&lt;/strong&gt;, um objeto que descreve o que aconteceu.&lt;/li&gt;
  &lt;li&gt;Mudanças são realizadas através de funções puras: essas funções puras são chamadas &lt;strong&gt;reducers&lt;/strong&gt;. A partir de &lt;strong&gt;actions&lt;/strong&gt; os reducers especificam como a árvore de estado deve ser transformada.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;em&gt;Uma função pura (&lt;/em&gt;pure function&lt;em&gt;) é aquela que ao receber os mesmos argumentos retornará sempre o mesmo valor. Esse termo faz parte do jargão da programação funcional, inclusive funções desse tipo são fáceis de testar.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Não nos aprofundaremos nas definições, pois elas emergirão ao longo do nosso projeto. O autor entende que &lt;strong&gt;para compreender Redux é necessário conciliar teoria e prática&lt;/strong&gt;. Aliás, chegou a hora de realizarmos a integração com Redux.&lt;/p&gt;

&lt;h2 id=&quot;instalando-o-módulo-redux&quot;&gt;Instalando o módulo redux&lt;/h2&gt;

&lt;p&gt;Com o servidor parado, ainda na pasta &lt;code class=&quot;highlighter-rouge&quot;&gt;project&lt;/code&gt;, vamos instalar o módulo &lt;code class=&quot;highlighter-rouge&quot;&gt;redux&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;npm install redux@3.7.2 &lt;span class=&quot;nt&quot;&gt;-S&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Lembre-se que ao utilizarmos Redux, teremos uma &lt;strong&gt;única store&lt;/strong&gt; que armazenará o estado de toda a aplicação. Não poderia ser diferente, já que ela será nossa única fonte de verdade sobre seu estado. Vamos criar nossa &lt;code class=&quot;highlighter-rouge&quot;&gt;store&lt;/code&gt; no módulo &lt;code class=&quot;highlighter-rouge&quot;&gt;app/store.js&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nx&quot;&gt;app&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;store&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;js&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;// vazio, por enquanto&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Por enquanto nosso módulo não terá qualquer código, porque seu estado inicial será definido através do único &lt;strong&gt;reducer&lt;/strong&gt; que nossa simples aplicação terá. Aliás, uma aplicação pode ter um ou mais &lt;code class=&quot;highlighter-rouge&quot;&gt;reducers&lt;/code&gt; que no final são combinados para criar a única &lt;code class=&quot;highlighter-rouge&quot;&gt;store&lt;/code&gt; da aplicação. Vamos criar nosso primeiro &lt;em&gt;reducer&lt;/em&gt;.&lt;/p&gt;

&lt;h2 id=&quot;o-papel-do-reducer&quot;&gt;O papel do reducer&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;O reducer é o responsável em especificar como o estado da aplicação deve ser alterado em resposta às actions recebidas pela store&lt;/strong&gt;. Vamos criar nosso primeiro &lt;em&gt;reducer&lt;/em&gt;:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;// app/reducers/statusReducer.js&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;initialState&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;status&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;''&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;statusReducer&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;state&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;initialState&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;action&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;c1&quot;&gt;// ainda falta implementar&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;Devido à forte relação com reducers, a única store da aplicação é criada a partir da combinação de todos os reducers, pois cada um é o responsável por atualizar parte do estado da aplicação. Isso ficará mais claro quando criarmos nossa store.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A variável &lt;code class=&quot;highlighter-rouge&quot;&gt;initialState&lt;/code&gt; é um objeto que representa o estado incial da aplicação sob a jurisdição do &lt;em&gt;reducer&lt;/em&gt;. Esse objeto pode ter uma ou mais propriedades, em nosso caso, ele possui apenas a propriedade &lt;code class=&quot;highlighter-rouge&quot;&gt;status&lt;/code&gt;, aquela que guardará a mensagem de status da aplicação. Seu valor inicial é uma string em branco.&lt;/p&gt;

&lt;p&gt;Em seguida, definimos nossa função pura, isto é, nosso &lt;code class=&quot;highlighter-rouge&quot;&gt;reducer&lt;/code&gt; que recebe &lt;strong&gt;sempre&lt;/strong&gt; como parâmetro o &lt;strong&gt;estado&lt;/strong&gt; da aplicação e a &lt;strong&gt;action&lt;/strong&gt; recebida. Através de &lt;em&gt;default parameter&lt;/em&gt; indicamos que o valor padrão do parâmetro &lt;code class=&quot;highlighter-rouge&quot;&gt;state&lt;/code&gt; será &lt;code class=&quot;highlighter-rouge&quot;&gt;initialState&lt;/code&gt;, aquele objeto que define o estado inicial da aplicação.&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;// app/reducers/statusReducer.js&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;initialState&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;status&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;''&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;statusReducer&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;state&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;initialState&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;action&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;c1&quot;&gt;// Nova mensagem de status para ser atualizada &lt;/span&gt;
    &lt;span class=&quot;c1&quot;&gt;// no estado da aplicação, isto é, na store&lt;/span&gt;
    &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;status&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;action&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;payload&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Ainda não criamos &lt;em&gt;actions&lt;/em&gt; em nossa aplicação, mas o mais importante nesse momento é entender que uma &lt;em&gt;action&lt;/em&gt; nada mais é do que um objeto JavaScript com as propriedades &lt;strong&gt;type&lt;/strong&gt; e &lt;strong&gt;payload&lt;/strong&gt;. O primeiro guarda uma string que identifica o seu tipo, já o segundo o valor associado, isto é, aquele que desejamos que seja atualizado no estado da aplicação. É por isso que o valor de &lt;code class=&quot;highlighter-rouge&quot;&gt;action.payload&lt;/code&gt; será a nova mensagem de status que desejamos atualizar na &lt;em&gt;store&lt;/em&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Em breve, quando digitarmos no &lt;code class=&quot;highlighter-rouge&quot;&gt;&amp;lt;input&amp;gt;&lt;/code&gt; da página, despacharemos para nossa store a action com o &lt;code class=&quot;highlighter-rouge&quot;&gt;type&lt;/code&gt; ‘CHANGE_STATUS’ e que terá como &lt;code class=&quot;highlighter-rouge&quot;&gt;payload&lt;/code&gt; o valor digitado. Todavia, lembre-se que é papel do &lt;em&gt;reducer&lt;/em&gt; realizar a atualização do estado na store e não da action.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Como um &lt;em&gt;reducer&lt;/em&gt; potencialmente pode lidar com uma ou mais &lt;em&gt;actions&lt;/em&gt;, faremos um &lt;code class=&quot;highlighter-rouge&quot;&gt;switch&lt;/code&gt; que decidirá qual lógica executar com base no tipo da &lt;em&gt;action&lt;/em&gt; recebida:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;// app/reducers/statusReducer.js&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;initialState&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;status&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;''&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;statusReducer&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;state&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;initialState&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;action&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    
    &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;status&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;action&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;payload&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;k&quot;&gt;switch&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;action&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;case&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'CHANGE_STATUS'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
            &lt;span class=&quot;c1&quot;&gt;// modificar o estado aqui&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;default&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
            &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;state&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;É importante que nosso &lt;em&gt;reducer&lt;/em&gt; retorne o estado atual da aplicação caso a &lt;em&gt;action&lt;/em&gt; disparada não tenha sido definida, por isso adicionamos a cláusula &lt;code class=&quot;highlighter-rouge&quot;&gt;default&lt;/code&gt; em nosso &lt;code class=&quot;highlighter-rouge&quot;&gt;switch&lt;/code&gt;.&lt;/p&gt;

&lt;h2 id=&quot;imutabilidade-do-estado-da-aplicação&quot;&gt;Imutabilidade do estado da aplicação&lt;/h2&gt;

&lt;p&gt;Excelente, todavia chegamos a uma das partes mais importantes do &lt;code class=&quot;highlighter-rouge&quot;&gt;Redux&lt;/code&gt;. O estado da aplicação deve ser imutável, isto é, não deve mudar. Para quem esta começando com Redux essa questão da imutabilidade pode dar um nó na cabeça. Quando dizemos imutável, significa que para modificarmos o estado da aplicação precisaremos criar um novo object &lt;code class=&quot;highlighter-rouge&quot;&gt;state&lt;/code&gt; com base no &lt;code class=&quot;highlighter-rouge&quot;&gt;state&lt;/code&gt; anterior.&lt;/p&gt;

&lt;p&gt;Nesse sentido, uma abordagem imprópria na hora de atualizar o estado da aplicação é a seguinte:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;// app/reducers/statusReducer.js&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;initialState&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;status&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;''&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;statusReducer&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;state&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;initialState&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;action&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    
    &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;status&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;action&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;payload&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;k&quot;&gt;switch&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;action&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;case&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'CHANGE_STATUS'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
            &lt;span class=&quot;c1&quot;&gt;// NÃO FAÇAM ISSO!&lt;/span&gt;
            &lt;span class=&quot;nx&quot;&gt;state&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;status&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;status&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;nl&quot;&gt;default&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
            &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;state&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;No código anterior, ocorreu a mutação do &lt;code class=&quot;highlighter-rouge&quot;&gt;state&lt;/code&gt; da aplicação. Isto é, aproveitamos o mesmo objeto (referência) e modificamos sua propriedade &lt;code class=&quot;highlighter-rouge&quot;&gt;status&lt;/code&gt;. Uma abordagem imutável é a seguinte:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;// app/reducers/statusReducer.js&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;initialState&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;status&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;''&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;statusReducer&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;state&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;initialState&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;action&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    
    &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;status&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;action&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;payload&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;k&quot;&gt;switch&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;action&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;case&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'CHANGE_STATUS'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
            &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;Object&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;assign&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;({},&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;state&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;status&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;
        &lt;span class=&quot;nl&quot;&gt;default&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
            &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;state&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;blockquote&gt;
  &lt;p&gt;Se temos um artefato imutável, como realizamos alterações? Criamos um novo artefato e copiamos os valores do artefato atual, inclusive definindo novos valores para as propriedades que desejamos que sejam diferentes no artefato final.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A função &lt;code class=&quot;highlighter-rouge&quot;&gt;Object.assign()&lt;/code&gt; é usada para copiar os valores de todas as propriedades próprias enumeráveis de um ou mais objetos de origem para um objeto destino. Este método irá retornar o objeto destino.&lt;/p&gt;

&lt;p&gt;Em nosso caso, o primeiro parâmetro &lt;code class=&quot;highlighter-rouge&quot;&gt;{}&lt;/code&gt; é o objeto destino, isto é, um novo objeto sem qualquer propriedade. Já os demais parâmetros são os objetos cujas propriedades serão copiadas para o objeto destino. Se um ou mais desses objetos tiverem a mesma propriedade, será o valor do último objeto passado como parâmetro que fará parte do objeto destino. É por isso que passamos &lt;code class=&quot;highlighter-rouge&quot;&gt;{ status }&lt;/code&gt; como último parâmetro.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;A partir do ES2018 podemos usar o Spread Operator com propriedades de objeto. Isso nos permitirá substituir o verboso &lt;code class=&quot;highlighter-rouge&quot;&gt;Object.assign({}, state, { status })&lt;/code&gt; por &lt;code class=&quot;highlighter-rouge&quot;&gt;{ ...state, status }&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2 id=&quot;construindo-nossa-store&quot;&gt;Construindo nossa store&lt;/h2&gt;

&lt;p&gt;Agora que já temos nosso &lt;em&gt;reducer&lt;/em&gt; implementado, construiremos nossa &lt;em&gt;store&lt;/em&gt; que o utilizará durante sua criação.&lt;/p&gt;

&lt;p&gt;Vamos alterar o módulo &lt;code class=&quot;highlighter-rouge&quot;&gt;app/store.js&lt;/code&gt; importando a função &lt;code class=&quot;highlighter-rouge&quot;&gt;createStore&lt;/code&gt; do módulo &lt;code class=&quot;highlighter-rouge&quot;&gt;redux&lt;/code&gt; e nosso &lt;code class=&quot;highlighter-rouge&quot;&gt;statusReducer&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;// app/store.js&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;createStore&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'redux'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;statusReducer&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'./reducers/statusReducer'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;store&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;createStore&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;statusReducer&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;A função &lt;code class=&quot;highlighter-rouge&quot;&gt;createStore&lt;/code&gt; recebeu como parâmetro o &lt;code class=&quot;highlighter-rouge&quot;&gt;statusReducer&lt;/code&gt; para criar a nossa &lt;code class=&quot;highlighter-rouge&quot;&gt;store&lt;/code&gt;. É a &lt;code class=&quot;highlighter-rouge&quot;&gt;store&lt;/code&gt; criada que será exportada pelo módulo. Lembre-se, em Redux podemos ter vários &lt;em&gt;reducers&lt;/em&gt; responsáveis em lidar com ações e atualizar determinados estados da aplicação, mas os estados ficam centralizados em um único lugar, a &lt;em&gt;store&lt;/em&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Se tivéssemos mais de um reducer precisaríamos combiná-los para então passar o resultado da combinação para a função &lt;code class=&quot;highlighter-rouge&quot;&gt;createStore&lt;/code&gt;. Esse processo de combinar &lt;em&gt;reducers&lt;/em&gt; é feito através da função &lt;code class=&quot;highlighter-rouge&quot;&gt;combineStores&lt;/code&gt;, também definida no módulo &lt;code class=&quot;highlighter-rouge&quot;&gt;redux&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Agora que já temos a &lt;em&gt;store&lt;/em&gt; pronta, partiremos para a implementação da única &lt;em&gt;action&lt;/em&gt; da aplicação.&lt;/p&gt;

&lt;h2 id=&quot;implementando-uma-action&quot;&gt;Implementando uma action&lt;/h2&gt;

&lt;p&gt;Já falamos um pouco sobre &lt;em&gt;action&lt;/em&gt;, ela descreve o fato de que algo aconteceu, mas não define como o estado da aplicação deve ser alterado. A mudança do estado é feita sincronamente através de &lt;em&gt;reducers&lt;/em&gt;. Chegou a hora de implementá-la em nossa aplicação.&lt;/p&gt;

&lt;p&gt;Estruturalmente, uma &lt;em&gt;action&lt;/em&gt; é definida através de um objeto com as propriedades &lt;code class=&quot;highlighter-rouge&quot;&gt;type&lt;/code&gt; e &lt;code class=&quot;highlighter-rouge&quot;&gt;payload&lt;/code&gt;. Por fim, elas são despachadas através da função &lt;code class=&quot;highlighter-rouge&quot;&gt;dispatch&lt;/code&gt; da nossa &lt;code class=&quot;highlighter-rouge&quot;&gt;store&lt;/code&gt;. Vejamos um exemplo isolado, que não entra em nossa aplicação:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;// EXEMPLO apenas, não entra em nossa aplicação&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;// importa a store da aplicação&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;store&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'./store.js'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;// Solicita a store o depacho da action,&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;// pode ser disparado a partir de alguma &lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;// ação do usuário&lt;/span&gt;
&lt;span class=&quot;nx&quot;&gt;store&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;dispatch&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;({&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'CHANGE_STATUS'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;payload&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'Calopsita is typing'&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;No código anterior, nosso &lt;em&gt;reducer&lt;/em&gt; responderá à ação &lt;code class=&quot;highlighter-rouge&quot;&gt;CHANGE_STATUS&lt;/code&gt; recebendo o valor do &lt;code class=&quot;highlighter-rouge&quot;&gt;payload&lt;/code&gt;. É com base nesse valor que a &lt;em&gt;store&lt;/em&gt; será atualizada. Um ponto a destacar é que efeitos colaterais (side effects) são realizados em &lt;em&gt;actions&lt;/em&gt; e não em nossos &lt;em&gt;reducers&lt;/em&gt;. Exemplos de &lt;em&gt;side effects&lt;/em&gt; são chamadas a console.log() e requisições ajax. Ainda veremos como lidar com efeitos colaterais em nossas &lt;em&gt;actions&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Todavia, a abordagem que adotamos deixa um pouco a desejar. Se uma &lt;code class=&quot;highlighter-rouge&quot;&gt;action&lt;/code&gt; deste tipo é usada em diversos lugares da aplicação e de uma hora para outra precisarmos mudar seu tipo, teremos que alterar em diversos lugares. Uma solução para o problema é criarmos  &lt;strong&gt;action creators&lt;/strong&gt;.&lt;/p&gt;

&lt;h2 id=&quot;flexibilidade-com-action-creators&quot;&gt;Flexibilidade com Action Creators&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Action creators&lt;/em&gt; são funções que ao serem invocadas retornam uma &lt;strong&gt;action&lt;/strong&gt;. Vamos criar o módulo &lt;code class=&quot;highlighter-rouge&quot;&gt;app/actions/status.js&lt;/code&gt; e dentro dele definir um &lt;em&gt;action creator&lt;/em&gt; para a ação ‘CHANGE_STATUS’:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;// app/actions/status.js&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;changeStatus&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;userName&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'CHANGE_STATUS'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;payload&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;userName&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt; is typing`&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;O módulo &lt;code class=&quot;highlighter-rouge&quot;&gt;app/actions/status.js&lt;/code&gt; exporta apenas um &lt;em&gt;action creator&lt;/em&gt; que declaramos na função &lt;code class=&quot;highlighter-rouge&quot;&gt;changeStatus&lt;/code&gt;. Essa função recebe como parâmetro um &lt;code class=&quot;highlighter-rouge&quot;&gt;userName&lt;/code&gt; e ao ser chamada retorná uma &lt;em&gt;action&lt;/em&gt;. Podemos simplificar ainda mais o código desta maneira:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;// app/actions/status.js&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;changeStatus&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;userName&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;({&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'CHANGE_STATUS'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;payload&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;userName&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt; is typing`&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Agora, voltando ao exemplo isolado exibido anteriormente e fazendo uso do nosso &lt;em&gt;action creator&lt;/em&gt;:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;// EXEMPLO apenas, não entra em nossa aplicação&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;store&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'./store.js'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;// importou o action creator&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;changeStatus&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'./actions/status.js'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;// não sabemos mais os detalhes da action!&lt;/span&gt;
&lt;span class=&quot;nx&quot;&gt;store&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;dispatch&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;changeStatus&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'Calopsita is typing'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Excelente, escondemos os detalhes da &lt;em&gt;action&lt;/em&gt; &lt;code class=&quot;highlighter-rouge&quot;&gt;'CHANGE_STATUS'&lt;/code&gt;. Todavia, nosso código pode ficar ainda melhor.&lt;/p&gt;

&lt;h2 id=&quot;action-types-como-constantes&quot;&gt;Action Types como constantes&lt;/h2&gt;

&lt;p&gt;Se analisarmos os módulos &lt;code class=&quot;highlighter-rouge&quot;&gt;app/reducers/statusReducer.js&lt;/code&gt; e &lt;code class=&quot;highlighter-rouge&quot;&gt;app/actions/status.js&lt;/code&gt; veremos que cada um deles define a string &lt;code class=&quot;highlighter-rouge&quot;&gt;CHANGE_STATUS&lt;/code&gt;. Além de termos o nome duplicado, nada impede o programador de acidentalmente escrever o tipo da action errado.&lt;/p&gt;

&lt;p&gt;Para solucionar o problema que acabamos de ver, vamos declarar os tipos das actions como constantes em um módulo em separado chamado &lt;code class=&quot;highlighter-rouge&quot;&gt;app/constants/actionTypes.js&lt;/code&gt; e usar esse módulo em todos os lugares que os tipos forem necessários:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;// app/constants/actionTypes.js&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;actionTypes&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;CHANGE_STATUS&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'CHANGE_STATUS'&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Utilizando a constante em &lt;code class=&quot;highlighter-rouge&quot;&gt;app/actions/status.js&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;// app/actions/status.js&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;// importa as constantes&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;actionTypes&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'../constants/actionTypes.js'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;changeStatus&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;userName&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;({&lt;/span&gt;
    &lt;span class=&quot;c1&quot;&gt;// utiliza a constante&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;actionTypes&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;CHANGE_STATUS&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;payload&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;userName&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt; is typing`&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;E também no módulo &lt;code class=&quot;highlighter-rouge&quot;&gt;app/reducers/statusReducer.js&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;// app/reducers/statusReducer.js&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;// importa as constantes&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;actionTypes&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'../constants/actionTypes'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;initialState&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;status&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;''&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;statusReducer&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;state&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;initialState&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;action&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    
    &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;status&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;action&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;payload&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;k&quot;&gt;switch&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;action&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;c1&quot;&gt;// utiliza a constante&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;case&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;actionTypes&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;CHANGE_STATUS&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
            &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;Object&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;assign&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;({},&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;state&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;status&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;
        &lt;span class=&quot;nl&quot;&gt;default&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
            &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;state&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Nosso código ficou mais organizado e menos sujeito a erro.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;A criação das pastas &lt;code class=&quot;highlighter-rouge&quot;&gt;reducers&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;actions&lt;/code&gt; e &lt;code class=&quot;highlighter-rouge&quot;&gt;constants&lt;/code&gt; segue o padrão &lt;em&gt;Rails-Style&lt;/em&gt;. Você pode consultar outras formas de estruturar um projeto na própria &lt;a href=&quot;https://redux.js.org/faq/code-structure&quot; target=&quot;_blank&quot;&gt;documentação do Redux&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Temos nossa &lt;em&gt;store&lt;/em&gt; (criada a partir de &lt;code class=&quot;highlighter-rouge&quot;&gt;statusReducer&lt;/code&gt;) e nosso &lt;em&gt;action creator&lt;/em&gt; &lt;code class=&quot;highlighter-rouge&quot;&gt;changeStatus&lt;/code&gt; utilizando uma constante em comun definida em &lt;code class=&quot;highlighter-rouge&quot;&gt;actionTypes&lt;/code&gt;. Chegou a hora de realizamos mudanças no estado da aplicação despachando ações através das ações do usuário.&lt;/p&gt;

&lt;h2 id=&quot;despachando-actions&quot;&gt;Despachando actions&lt;/h2&gt;

&lt;p&gt;Vamos importar nossa &lt;code class=&quot;highlighter-rouge&quot;&gt;store&lt;/code&gt; e o &lt;em&gt;action creator&lt;/em&gt;  &lt;code class=&quot;highlighter-rouge&quot;&gt;changeStatus&lt;/code&gt; no módulo &lt;code class=&quot;highlighter-rouge&quot;&gt;app/app.js&lt;/code&gt;. Despachamos atualizações no estado da aplicação através da função &lt;code class=&quot;highlighter-rouge&quot;&gt;store.dispatch()&lt;/code&gt;. Ela recebe a &lt;em&gt;action&lt;/em&gt; retornada pelo &lt;em&gt;action creator&lt;/em&gt; &lt;code class=&quot;highlighter-rouge&quot;&gt;changestatus&lt;/code&gt;. Lembre-se que isso chegará na cláusula &lt;code class=&quot;highlighter-rouge&quot;&gt;switch&lt;/code&gt; de &lt;code class=&quot;highlighter-rouge&quot;&gt;statusReducer&lt;/code&gt;, o &lt;em&gt;reducer&lt;/em&gt; que foi utilizado para criar nossa &lt;code class=&quot;highlighter-rouge&quot;&gt;store&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;// app/app.js&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;store&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'./store'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;changeStatus&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'./actions/status'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;statusParagraph&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;document&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;querySelector&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'.status'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;document&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;querySelector&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'.userName'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;oninput&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;e&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;userName&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;target&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;c1&quot;&gt;// changeStatus retorna uma action &lt;/span&gt;
    &lt;span class=&quot;c1&quot;&gt;// que é passada para store.dispatch&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;store&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;dispatch&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;changeStatus&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;userName&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;));&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Excelente, mas como saberemos que o estado da aplicação mudou? Precisamos dessa informação para que possamos atualizar nossa página. Fazemos isso através da função &lt;code class=&quot;highlighter-rouge&quot;&gt;store.subscribe()&lt;/code&gt;. Ela será chamada toda vez que a nossa &lt;em&gt;store&lt;/em&gt; mudar:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;// app/app.js&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;store&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'./store'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;changeStatus&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'./actions/status'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;statusParagraph&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;document&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;querySelector&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'.status'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;document&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;querySelector&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'.userName'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;oninput&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;e&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;userName&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;target&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;store&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;dispatch&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;changeStatus&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;userName&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;));&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;

&lt;span class=&quot;nx&quot;&gt;store&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;subscribe&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;c1&quot;&gt;// obtemos o estado atual, depois da modificação&lt;/span&gt;
    &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;state&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;store&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;getState&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
    &lt;span class=&quot;c1&quot;&gt;// atualizamos o elemento com o novo valor&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;statusParagraph&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;textContent&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;state&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;status&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;Em uma aplicação com &lt;code class=&quot;highlighter-rouge&quot;&gt;React&lt;/code&gt;, os componentes são conectados à &lt;code class=&quot;highlighter-rouge&quot;&gt;store&lt;/code&gt; através da função &lt;code class=&quot;highlighter-rouge&quot;&gt;connect&lt;/code&gt; do módulo &lt;a href=&quot;https://github.com/reactjs/react-redux&quot; target=&quot;_blank&quot;&gt;react-redux&lt;/a&gt;, aquele que realiza uma ponte entre o Redux e o React, dispensando o uso de &lt;code class=&quot;highlighter-rouge&quot;&gt;store.subscribe&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Quando o estado da aplicação for alterado, o &lt;em&gt;callback&lt;/em&gt; passado para &lt;code class=&quot;highlighter-rouge&quot;&gt;store.subscribe()&lt;/code&gt; será chamado. Nele, acessamos o estado atual da aplicação através de &lt;code class=&quot;highlighter-rouge&quot;&gt;store.getState()&lt;/code&gt; para que possamos atualizar o elemento do DOM com valor atualizado de &lt;code class=&quot;highlighter-rouge&quot;&gt;state.status&lt;/code&gt;.&lt;/p&gt;

&lt;h2 id=&quot;trabalhando-com-middlewares&quot;&gt;Trabalhando com middlewares&lt;/h2&gt;

&lt;p&gt;Nosso código é funcional, inclusive podemos testar no navegador,  mas para transcendermos nosso entendimento sobre o que esta acontecendo podemos ativar o middleware &lt;a href=&quot;https://github.com/evgenyrodionov/redux-logger&quot; target=&quot;_blank&quot;&gt;redux-logger&lt;/a&gt;. O &lt;code class=&quot;highlighter-rouge&quot;&gt;redux-logger&lt;/code&gt; nos permitirá visualizar as &lt;em&gt;actions&lt;/em&gt; que chegam aos reducers, inclusive o estado da aplicação antes e depois de modificado.&lt;/p&gt;

&lt;p&gt;Ainda sobre middleware, seu conceito é o mesmo empregado no framework web &lt;a href=&quot;http://expressjs.com/&quot; target=&quot;_blank&quot;&gt;Express.js&lt;/a&gt;. Nele, adicionamos um ou mais middlewares em sua pilha de middlewares e cada um deles lidará com a requisição passando o controle para o próximo middleware da pilha.&lt;/p&gt;

&lt;p&gt;No caso do Redux, seus middlewares permitem adicionar um código específico entre o despacho da &lt;em&gt;action&lt;/em&gt; e o momento que ela chega ao &lt;em&gt;reducer&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Dentro da pasta &lt;code class=&quot;highlighter-rouge&quot;&gt;project&lt;/code&gt;, vamos instalar o middleware:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;npm install redux-logger@3.0.6 &lt;span class=&quot;nt&quot;&gt;-S&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Agora, em &lt;code class=&quot;highlighter-rouge&quot;&gt;app/store.js&lt;/code&gt; vamos importar a função &lt;code class=&quot;highlighter-rouge&quot;&gt;applyMiddeware&lt;/code&gt; do módulo &lt;code class=&quot;highlighter-rouge&quot;&gt;redux&lt;/code&gt;. Essa função recebe uma quantidade indeterminada de middlewares que desejamos adicionar em uma pilha. Em seguida, vamos importar &lt;code class=&quot;highlighter-rouge&quot;&gt;createLogger&lt;/code&gt; do módulo &lt;code class=&quot;highlighter-rouge&quot;&gt;redux-logger&lt;/code&gt; para então ativá-lo em nossa &lt;em&gt;store&lt;/em&gt;:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;createStore&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;applyMiddleware&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'redux'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;statusReducer&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'./reducers/statusReducer'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;createLogger&lt;/span&gt;  &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'redux-logger'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;middlewares&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;applyMiddleware&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;createLogger&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;());&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;store&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;createStore&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;statusReducer&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;middlewares&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;O segundo parâmetro de &lt;code class=&quot;highlighter-rouge&quot;&gt;createStore&lt;/code&gt; é a pilha de middlewares que desejamos aplicar. Em nosso caso, teremos um niddleware apenas, o &lt;code class=&quot;highlighter-rouge&quot;&gt;createLogger&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Agora, no navegador, com o aba do console aberta, podemos verificar que a cada dígito no &lt;code class=&quot;highlighter-rouge&quot;&gt;&amp;lt;input&amp;gt;&lt;/code&gt; é exibida informações valiosas sobre o que esta ocorrendo com o estado da aplicação.&lt;/p&gt;

&lt;h2 id=&quot;lidando-com-o-operações-assíncronas&quot;&gt;Lidando com o operações assíncronas&lt;/h2&gt;

&lt;p&gt;Vimos que &lt;em&gt;side effects&lt;/em&gt; devem ser realizados em nossas &lt;em&gt;actions&lt;/em&gt; e nunca dentro dos nossos &lt;em&gt;reducers&lt;/em&gt;. Todavia, como faremos para lidar com operações assíncronas, por exemplo, requisições ajax? Nesse caso, nossos &lt;em&gt;actions creator&lt;/em&gt; precisarão ser declarados de uma maneira especial.&lt;/p&gt;

&lt;p&gt;Vamos simular uma operação assíncrona através de um &lt;code class=&quot;highlighter-rouge&quot;&gt;setTimeout&lt;/code&gt; facilitando assim nosso teste sem dependermos de uma API para tal tarefa.&lt;/p&gt;

&lt;p&gt;Nosso módulo &lt;code class=&quot;highlighter-rouge&quot;&gt;app/actions/status.js&lt;/code&gt; ficará assim:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;as&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;types&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'../constants/actionTypes.js'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;changeStatus&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;text&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;

    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;dispatch&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;

        &lt;span class=&quot;nx&quot;&gt;setTimeout&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;dispatch&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;
            &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
                &lt;span class=&quot;na&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;types&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;CHANGE_STATUS&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
                &lt;span class=&quot;na&quot;&gt;payload&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;text&lt;/span&gt;
            &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;),&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1000&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;O mesmo código pode ser reescrito dessa forma:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;as&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;types&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'../constants/actionTypes.js'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;changeStatus&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;text&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; 
    &lt;span class=&quot;nx&quot;&gt;dispatch&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;nx&quot;&gt;setTimeout&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; 
            &lt;span class=&quot;nx&quot;&gt;dispatch&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;({&lt;/span&gt;
                &lt;span class=&quot;na&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;types&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;CHANGE_STATUS&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
                &lt;span class=&quot;na&quot;&gt;payload&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;text&lt;/span&gt;
            &lt;span class=&quot;p&quot;&gt;})&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1000&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Nosso &lt;em&gt;action creator&lt;/em&gt; não retornará mais um objeto, ele retornará uma função que ao ser chamada nos dará acesso ao &lt;code class=&quot;highlighter-rouge&quot;&gt;dispatch&lt;/code&gt;. Sendo assim, como estamos retornando uma função, podemos executar dentro dela uma operação assíncrona. Quando ela terminar, despachamos a ação. No entanto, para que o código acima funcione, precisamos de um middleware especial. No caso, utilizaremos o &lt;code class=&quot;highlighter-rouge&quot;&gt;redux-thunk&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Vamos instalá-lo através do terminal, ainda dentro da pasta &lt;code class=&quot;highlighter-rouge&quot;&gt;project&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;npm install redux-thunk@2.2.0 &lt;span class=&quot;nt&quot;&gt;-S&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Como todo middleware, ele precisa ser registrado em nossa &lt;em&gt;store&lt;/em&gt;:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;// project/store.js&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;createStore&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;applyMiddleware&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'redux'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;statusReducer&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'./reducers/statusReducer'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;createLogger&lt;/span&gt;  &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'redux-logger'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;// importou o novo middleware&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;thunk&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'redux-thunk'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;// adicionou o middleware thunk&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;middlewares&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;applyMiddleware&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;thunk&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;createLogger&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;());&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;store&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;createStore&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;statusReducer&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;middlewares&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Pronto. Basta recarregarmos nossa aplicação para verificarmos que tudo continua funcionando. Ao digitarmos no &lt;code class=&quot;highlighter-rouge&quot;&gt;&amp;lt;input&amp;gt;&lt;/code&gt;, depois de um intervalo de tempo o &lt;em&gt;username&lt;/em&gt; digitado será exibido no &lt;code class=&quot;highlighter-rouge&quot;&gt;&amp;lt;p&amp;gt;&lt;/code&gt; como antes.&lt;/p&gt;

&lt;h2 id=&quot;time-travel-debugging&quot;&gt;Time travel debugging&lt;/h2&gt;

&lt;p&gt;Através do &lt;a href=&quot;https://chrome.google.com/webstore/detail/redux-devtools/lmhkpmbekcpmknklioeibfkpmmfibljd&quot; target=&quot;_blank&quot;&gt;Redux DevTools&lt;/a&gt;, uma extensão do Chrome, podemos gravar &lt;em&gt;actions&lt;/em&gt; despachadas e o estado da &lt;em&gt;store&lt;/em&gt;. Nessa linha de tempo, podemos verificar o estado da aplicação e viajar de volta no tempo para um estado anterior sem recarregarmos a página. Esse técnica de depuração é chamada de &lt;em&gt;time travel debugging&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Não basta termos instalado o Redux DevTools no Google Chrome, precisamos realizar uma pequena configuração em nossa &lt;em&gt;store&lt;/em&gt; para ligá-la à ferramenta de depuração.&lt;/p&gt;

&lt;p&gt;Vamos alterar o módulo &lt;code class=&quot;highlighter-rouge&quot;&gt;app/store.js&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;// importou a função compose&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;createStore&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;applyMiddleware&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;compose&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'redux'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;statusReducer&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'./reducers/statusReducer'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;createLogger&lt;/span&gt;  &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'redux-logger'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;thunk&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'redux-thunk'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;c1&quot;&gt;// configuração especial&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;middlewares&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;compose&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;applyMiddleware&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;thunk&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;createLogger&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()),&lt;/span&gt;
    &lt;span class=&quot;nb&quot;&gt;window&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;devToolsExtension&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;?&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;window&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;devToolsExtension&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;f&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;f&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;store&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;createStore&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;statusReducer&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;middlewares&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;A função &lt;code class=&quot;highlighter-rouge&quot;&gt;compose&lt;/code&gt; é  um utilitário para programação funcional e foi adicionada no módulo &lt;code class=&quot;highlighter-rouge&quot;&gt;redux&lt;/code&gt; para facilitar a vida do desenvolvedor. O autor já falou sobre composição no artigo &lt;a href=&quot;http://cangaceirojavascript.com.br/compondo-funcoes-javascript/&quot; target=&quot;_blank&quot;&gt;“Compondo funções em JavaScript”&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;No código anterior, realizamos a composição do resultado da função &lt;code class=&quot;highlighter-rouge&quot;&gt;applyMiddleware&lt;/code&gt; com um trecho de código que se conectará ao React DevTools caso ele tenha sido instalado como extensão do Chrome.&lt;/p&gt;

&lt;p&gt;Vamos reduzir a tela do Chrome e reservar um espaço à esquerda. É nesse espaço que trabalharemos com o console do Redux DevTools. Para ativá-lo, vamos clicar com o botão direito na página e escolher a opção &lt;em&gt;Redux DevTools-&amp;gt;to Left&lt;/em&gt;.&lt;/p&gt;

&lt;div style=&quot;text-align: center&quot;&gt;
&lt;img style=&quot;display: inline-block; width: 60%&quot; src=&quot;data:image/png;base64,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NudKAiRAAiRAAiRAAiTQ6ghcN/IKSyieOXNmo0KxnrwWTr0fb360tJTFE5q23ngsaW2jj0RE30Tq2L3xmwRIgARIgARIgARIgARIgARIgARIgARaNwEKxa37/HJ2JEACJEACJEACJEACrZxALEtPawRecVjSfmXePDMt8XhC09YbjyWtbfSRiOibSB27N36TAAmQAAmQAAmQAAmQAAmQAAmQAAmQQOsmQKG4dZ9fzo4ESIAESIAESIAESKCVEwgSivW0U1JSrNmLKOwXagMz35sWodUMzbjYRwvNMm88lrS20Yf0a6di+06kTmwt04oESIAESIAESIAESIAESIAESIAESIAEWjYBCsUt+/xx9CRAAiRAAiRAAiRAAklOQITiSZMmWcJwLOKwFk9FQJW4hBqnxL02ZpnEYwlNG2/cLx1PXn19vTYPPGQOgQYsIAESIAESIIEECPD5kgA0ViEBEiABEiABEiABEjjnCFAoPudOCQdEAiRAAiRAAiRAAiRAArET8ArFpsgbLa578Cv35ptpiUsoL8kbC8Veh/oQezvVMC353tBbz1vul06kjl87zCMBEiABEiCBRAjwOZQINdYhARIgARIgARIgARI4UwQoFJ8p0uyHBEiABEiABEiABEiABE4DgVsnXm+1Kh7F+oV0LB9dyc/OzI8nLrZ+oZmn4/po7MW5X7lfnt1a8HcidYJbYwkJkAAJkAAJNJ0An01NZ8gWSIAESIAESIAESIAEmocAheLm4chWSIAESIAESIAESIAESOCsELj0ot5Wvz//+c+tpaf1y+fGPrpCkI1ZFk9cbM3QjJsvxfVy0WbajOs6+og1z7YO/vZrJ9iaJSRAAiRAAiRw5gnwWXXmmbNHEiABEiABEiABEiABmwCFYl4JJEACJEACJEACJEACJNCCCcTrUaynql9I+328ZWbaL+7NC0rrfO9hvhQ342IXa57YB4V+7QTZ6vzG9jyOVpdlJEACJEAC5y6BeJ8HZ2smLWWcZ4sP+yUBEiABEiABEiABEmheAhSKm5cnWyMBEiABEiABEiABEiCBM0rgXBeKBYb3xbeZNuNB9l4vZLFrLPRru7E6LCcBEiABEiCBRAk013OnudpJdB6sRwIkQAIkQAIkQAIkkBwEKBQnx3nmLEmABEiABEiABEiABFopgViEYj31lJQUi4B+8ez30YXefDPP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gAACgStAUBy4754nRwABBBBAAAEEjqZAqYPi228dpSFXD9QZZ/dVXFysXn3lecXExOi773+05htepnPP6WX1UOkkJyi+acQwjbjhOpmhmud9OldvzXlXD4x/XHff8S9dOWiAHSb//PNv2rd/vz2ssxMUmw8of/v5K7319nt6+NGJecyKGxTv2rVbH378uYZee5Xdq+OifgPtDySdigmKHQnWCCCAAAIIIFCYQGmCYnfv39179tpDK1erFlfg0NNnnXGy2rZpaTdr85bt1nzDX3k1sU/vXmrWtLFX2OruOesUNtN+zH3/M2c3z9o9l7A7cHYKRlmjwJgeyqbnsul5+857n2jvvgPOaa+1e/5lM+y1CZfNXMzuoadNfVdfean9B4PuobG9KirhjtNj298zm9B34D8use9rzn/z7c/2sNMmFPY3h7IzNLa/oLsozSMoJiguys8JZRBAAAEEAkuAoDiw3jdPiwACCCCAAAIIVBaBUgfFk558WN2P62oHxY898h9d0OdcPfr4JM167S37GR9/9AH1Of8cmSB2vTXM39lnnaGnJj5i9eIdp8ceGacHrR7Cv/62QO+/85o1P90u9R8wWImJiWrevKk+eu8Nffb5l7rtzn/bdc19a6Z2WgGvmVfYdyluULzH+iD2Umuo7M8+mqOoqCi7HW+6eioTFPsKs48AAggggAAC+QmUJijubw3tXK9eHTtoNT1o/3HpRdYf3UXnGxSb8PIKK9SsboXJZjFz+M56fa5Xr1ZnLl4zdPPb1tDNZnFCXxPoHrSm9qhpTQ9i5iN+850P7fO+39q3bWX3cjZh7t59+zVn7se+RWR6NZ995ime479bPXHNl+/inn/ZzA381jsf2UNj+wbFdmB7+f/JPOO7H3ymrMwsa5jnrva8ymlp6dqwcbPVw3elb/VF2j/nzFPVulVz2+vV2W8rw6rbWZw5ms3+Tmu+5M/mfeMJrH/59Q/9uXi5U9Ses9gZPtsExXPf/1S79+zznC/KRqAHxSed5N17vihmlEEAAQQQQKCqC/z2229q166d1QkjTqGhofYfsJnR9swf5Jm182X+/eTedvaNj9l2fznH3Guz7SymLAsCCCCAAAIIIIBAYAuUOig2w0EfOHBAN996j37+fp61fdAOjc0HZ2bxDYobWcNKf/7x23plxmxdO2SQrhpyg8468zRdd81VXsNK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CYrzPqoECBAgQIAAAQIECBAgQIBAfQUExfXtfdPIBcVNHDYIECBAgAABAh0jICjOt0pQnPdRJUCAAAECBAgQIECAAAECBOorICiub++bRi4obuKwQYAAAQIECBDoGAFBcb5VguK8jyoBAgQIECBAgAABAgQIECBQXwFBcX173zRyQXEThw0CBAgQIECAQMcICIrzrRIU531UCRAgQIAAAQIECBAgQIAAgfoKCIrr2/umkQuKmzhsECBAgAABAgQ6RkBQnG+VoDjvo0qAAAECBAgQIECAAAECBAjUV0BQXN/eN41cUNzEYYMAAQIECBAg0DECguJ8qwTFeR9VAgQIECBAgAABAgQIECBAoL4CguL69r5p5ILiJg4bBAgQIECAAIGOERAU51slKM77qBIgQIAAAQIECBAgQIAAAQL1FRAU17f3TSMXFDdx2CBAgAABAgQIdIyAoDjfKkFx3keVAAECBAgQIECAAAECBAgQqK+AoLi+vW8auaC4icMGAQIECBAgQKBjBATF+VYJivM+qgQIECBAgAABAgQIECBAgEB9BQTF9e1908gFxU0cNggQIECAAAECHSMgKM63SlCc91ElQIAAAQIECBAgQIAAAQIE6isgKK5v75tGLihu4rBBgAABAgQIEOgYAUFxvlWC4ryPKgECBAgQIECAAAECBAgQIFBfAUFxfXvfNHJBcROHDQIECBAgQIBAxwgIivOtEhTnfVQJECBAgAABAgQIECBAgACB+goIiuvb+6aRC4qbOGwQIECAAAECBDpGQFCcb5WgOO+jSoAAAQIECBAgQIAAAQIECNRXoCOC4gP227PXHXrxxZfi9DPP6fXxDnxDoBOD4qFDh8YO232kbQuffXZ8PPTwI3HHnXfH1KlT2x5jJwECBAgQIEBgMAgIivNdFBTnfVQJECBAgAABAgQIECBAgACB+gp0RFB8+y3X9LpDzz03IdZab7NeH+/ANwQ6MSieZZbh8cufnZdt4b8e+Hcce9wP4r77/5U9TpEAAQIECBAg0KkCguJ85wTFeR9VAgQIECBAgAABAgQIECBAoL4CHREUr7jCsk0dSl/2nHnaSfHCpElx4MGfaqq9+uqr8Y9b72jaZ6NngU4OiidOfD6++NVvdg1y+LBhsfxyy8Taa60e48aOifHFjwf2O/B/Ih1nIUCAAAECBAgMNgFBcb6jguK8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IECAAAECBAjUV0BQXN/eN41cUNzEYYMAAQIECBAg0DECguJ8qwTFeR9VAgQIECBAgAABAgQIECBAoL4CguL69r5p5ILiJg4bBAgQIECAAIGOERAU51slKM77qBIgQIAAAQIECBAgQIAAAQL1FRAU17f3TSMXFDdx2CBAgAABAgQIdIyAoDjfKkFx3keVAAECBAgQIECAAAECBAgQqK+AoLi+vW8auaC4icMGAQIECBAgQKBjBATF+VYJivM+qgQIECBAgAABAgQIECBAgEB9BQTF9e1908gFxU0cNggQIECAAAECHSMgKM63SlCc91ElQIAAAQIECBAgQIAAAQIE6isgKK5v75tGLihu4rBBgAABAgQIEOgYAUFxvlWC4ryPKgECBAgQIECAAAECBAgQIFBfAUFxfXvfNHJBcROHDQIECBAgQIBAxwgIivOtEhTnfVQJECBAgAABAgQIECBAgACB+goIiuvb+6aRC4qbOGwQIECAAAECBDpGQFCcb5WgOO+jSoAAAQIECBAgQIAAAQIECNRXQFBc3943jVxQ3MRhgwABAgQIECDQMQKC4nyrBMV5H1UCBAgQIECAAAECBAgQIECgvgKC4vr2vmnkguImDhsECBAgQIAAgY4REBTnWyUozvuoEiBAgAABAgQIECBAgAABAvUVEBTXt/dNIxcUN3HYIECAAAECBAh0jICgON8qQXHeR5UAAQIECBAgQIAAAQIECBCor4CguL69bxq5oLiJwwYBAgQIECBAoGMEBMX5VgmK8z6qBAgQIECAAAECBAgQIECAQH0FBMX17X3TyAXFTRw2CBAgQIAAAQIdIyAozrdKUJz3USVAgAABAgQIECBAgAABAgTqKyAorm/vjZwAAQIECBAgQGAQCOyy49blKLbZZpsYMmRIpGC0P/+lkzU+v7vtxv3VervHnvalelpaA93W7XbHlE/s4Z925+nhKcoECBAgQIAAAQIECBAgQIAAgVoICIpr0WaDJECAAAECBAgQGKwCguJ8ZwXFeR9VAgQIECBAgAABAgQIECBAoL4CguL69t7ICRAgQIAAAQIEBoGAoDjfREFx3keVAAECBAgQIECAAAECBAgQqK+AoLi+vTdyAgQIECBAgACBQSAgKM43UVCc91ElQIAAAQIECBAgQIAAAQIE6isgKK5v742cAAECBAgQIEBgEAgIivNNFBTnfVQJECBAgAABAgQIECBAgACB+goIiuvbeyMnQIAAAQIECBAYBAKC4nwTBcV5H1UCBAgQIECAAAECBAgQIECgvgKC4vr23sgJECBAgAABAgQGgYCgON9EQXHeR5UAAQIECBAgQIAAAQIECBCor4CguL69N3ICBAgQIECAAIFBICAozjdRUJz3USVAgAABAgQIECBAgAABAgTqKyAorm/vjZwAAQIECBAgQGAQCAiK800UFOd9VAkQIECAAAECBAgQIECAAIH6CgiK69t7IydAgAABAgQIEBgEAoLifBMFxXkfVQIECBAgQIAAAQIECBAgQKC+AoLi+vbeyAkQIECAAAECBAaBgKA430RBcd5HlQABAgQIECBAgAABAgQIEKivgKC4vr03cgIECBAgQIAAgUEgICjON1FQnPdRJUCAAAECBAgQIECAAAECBOorICiub++NnAABAgQIECBAYBAICIrzTRQU531UCRAgQIAAAQIECBAgQIAAgfoKCIrr23sjJ0CAAAECBAgQGAQCguJ8EwXFeR9VAgQIECBAgAABAgQIECBAoL4CguL69t7ICRAgQIAAAQIEBoGAoDjfREFx3keVAAECBAgQIECAAAECBAgQqK+AoLi+vTdyAgQIECBAgACBQSAgKM43UVCc91ElQIAAAQIECBAgQIAAAQIE6isgKK5v742cAAECBAgQIEBgEAgIivNNFBTnfVQJECBAgAABAgQIECBAgACB+goIiuvbeyMnQIAAAQIECBAYBAKC4nwTBcV5H1UCBAgQIECAAAECBAgQIECgvgKC4vr23sgJECBAgAABAgQGgYCgON9EQXHeR5UAAQIECBAgQIAAAQIECBCor4CguL69N3ICBAgQIECAAIFBICAozjdRUJz3USVAgAABAgQIECBAgAABAgTqKyAorm/vjZwAAQIECBAgQGAQCAiK800UFOd9VAkQIECAAAECBAgQIECAAIH6CgiK69t7IydAgAABAgQIEBgEAoLifBMFxXkfVQIECBAgQIAAAQIECBAgQKC+AoLi+vbeyAkQIECAAAECBAaBgKA430RBcd5HlQABAgQIECBAgAABAgQIEKivgKC4vr03cgIECBAgQIAAgUEgICjON1FQnPdRJUCAAAECBAgQIECAAAECBOorICiub++NnAABAgQIECBAYBAICIrzTRQU531UCRAgQIAAAQIECBAgQIAAgfoKCIrr23sjJ0CAAAECBAgQGAQCguJ8EwXFeR9VAgQIECBAgAABAgQIECBAoL4CMzUonnXWWWPEiFniuecm1FfcyAl0gMAcc8we6UvV559/oQPerbdIgAABAgTqLSAozvdfUJz3USVAgAABAgQIECBAgAABAgTqKzDDg+IFFpg/1l5ztVhssXEx11xzxfXX3xC/+8Nl9RU3cgIzSSD9MOOgA/Zq+2rfOeaEeP3119vW0s6VVlwutth8k5g8eXI8/PCjcfU118d/Hnq42+MVCBAgQIAAgTdPQFCctxcU531UCRAgQIAAAQIECBAgQIAAgfoKzLCgeMSIEbHFZhvHUkstUc5MnDp1ajz++JNx7XV/i9vvuGtAxceNGxOzDJ8lHn/iiZg0afKAnrvdyYYOHRpvX2zRsvTAvx+MNDYLgbeaQAqKD9z/v0HxkCFvi7QvLV/9+lHZoHixRcfFBuuvHYsssnAMGzasfM4///lA/OaS37siQKnhHwIECBAg8NYREBTneyEozvuoEiBAgAABAgQIECBAgAABAvUVmCFBcQqjdt5pu1h44QXjtVdfi2uv/3tcdfV18dJLL80Q6YMP3CfmnXeeuPCii+Ouu++dIa/ReNI555wjPnnogeWuo77z/Zgy5cXGsnUCb0mBNLv/gP32LN9bT0FxNYD0o4iVV1o+1ltnrRgxckRMnDgxzvrxT+LZZ8dXh3gkQIAAAQIE3mQBQXG+AYLivI8qAQIECBAgQIAAAQIECBAgUF+BAQ+Khw8fHnvtsXOMHr1AvPLyK3HamT+OJ554aoYKC4pnKK+TDxKB6QmKq6Gnexbvvecu5eXjX3hhUpxy2tllaFzVPRIgQIAAAQJvnoCgOG8vKM77qBIgQIAAAQIECBAgQIAAAQL1FRjwoHjjjdaPNVZfpRT9+cW/jttuv3OG6wqKZzixFxgEAv0JitPwx45ZJHbfdccYUswyvvfe++P8C342CFQMgQABAgQIdL6AoDjfQ0Fx3keVAAECBAgQIECAAAECBAgQqK/AgAbFCy44OvbZa9cYMmRI3HDjzfHbS/7QJ9k0a3HB0aOLWYtzlvc1fuaZZ+PpZ57p8b7D/Q2KZ5lllphnnrlj1pGzxosvvhiTp0yJ116bWt57eEqx3rr099LTadZ1ugfsqFFzxcTnX4hHH308XnjhhdaXmWZ7en2mOVEfd/TFJx2bxvfqq692XWo8fTm32GLjYr55542XX3k5nnn62XjiyacK49favpPp9Wl7sl7unGOOOWLs2EVijtlnj6effiYee/yJrvff0ynSPXxHjZo7Un9eeunlmDx5cjH+N8Y2adKkrqdXNq+88kq8/PLLXfsbV9Jl29P/P+lz2J1POn622WaLeYrXHDps6Buf2ckvlvccbnRvPG9a729QnM6x6iorxaabbJhW44LiUu93z4RLvZcv5h8CBAgQIECgWwFBcbc0ZUFQnPdRJUCAAAECBAgQIECAAAECBOorMKBB8Uc+vFUsteTi8dhjT8RpZ/w4G3Q1kqegbbNNN4rlllmqnK3YWEvrKTQ74aRTug2MpzcoTvc1Xn+9tWPJxd8XbyvCudZl/PjxcdwJJ7fujv4ExSutuHxssP7akQLBruX11+Pqa6+Py/58RRn2de3//5X++rSer7fb0+Oz6SYbFWHiinHTzf+IX//md/Ge97wrtths45h77rmbXvass8+Pfz/4n6Z9aWN6fKY5SR92pFB28003juWXW7rps5eC3F8V7/+OO+7q9myzF6HyeuusGcsVz009ard85Wvf7tq9WWGzSrK5qbD57e+69jeuHLj/XjH//PPFRT/7Zdx5592NpXL9He9YLDYoPrNjx46ZppZ23HzzrcX7vrRtbSCC4nTibT+6dSxe/D/zeBGm/+iUM9u+lp0ECBAgQIDAzBMQFOetBcV5H1UCBAgQIECAAAECBAgQIECgvgIDFhSn2ZKHf/LgGDZ8WPT1ktMf2mrzWG7Zpctg+YEHHoyHHn4kXnnl1VhoodGx8EILxvzzzRvfO+4H8Xwx+zYtc889Vxx6yP697trxJ54czz47vun4FPLts9cb91xNszDTrN6nnnq6nBWaZkanGaKNQfGyRYi99Ye2aDpHdxvpfR5z7InTlJdeaon48NZbxutF5dZb74hHHn20eJ1RsXIRHg+fZXi3AWJffaZ54enY0Vef6iUag+KHH340PrjlpvH61Knxzwf+HROemxhLL71EjBgxItoFxdPrU7329DxuufkmseKKy8VLL74UNxbh9nPPPVeGsMssvWR5up//orh8+m3TXj49BcN77LZTLLzwQuXM88cff7IMTkfOOjJGLzB/GfamEwxkUJxmZe+y03ZloJ1muj/yyGMxYcLEGFXMhl+keB/pxwczIyheqPh/ct+9dyt9TvrhaeX/N+WGfwgQIECAAIE3RUBQnGcXFOd9VAkQIECAAAECBAgQIECAAIH6CgxYULzMMkvGNh/aMl4rLrl71HeP6/bSuq3UKXD77KcPLcOvP112eVx9zfWth5SzNdNleF8vZt6mJc3o3WmHj3Udl2ZgDi3umzphwoRi9vFLXfurlXQv1RSoVUs6dtedd4hx48aU4d6FP/1FEQo/V5VjiWK25MeKWZMpXE4hc1re9953l7OP03qahZpmZ6YlhctTiyC0cZlUXHr4x+dc0LgrFl10bBHybV+Mc0icd/5P4/5//qur/vbFFo1dd9mhPE+aOd34XqbHp+vE07kyPT7VS1VB8WOPPR6jRy9QGqbZsckpLQcdsHfMVwT/Z559Xjz44EPV06bbp+sE07Gy5hqrxkYbrldc9ntSnHr62U2fkfXWXSvWLWYLp8/AiT84dZoeV7Pn02fuwot+EY8W462WhYofGuy7z+7l5kAFxemHC3vvuUt5yel03+80Wztdwrpa0qzolVdeoWsmd7W/8XGgZhSncx5y0D7F5drniSuvuib+/JcrG1/GOgECBAgQIDCTBQTFeXBBcd5HlQABAgQIECBAgAABAgQIEKivwIAFxR/YeINYfbWVi1mOjxah2497LZpmQR5+2MHlPYl/8cvfxj9uvb3Xz60O7Oulp9NlrldZecXyvsDp0tKNgVs6Z7uguHqt9Dg9l57ea49dYsyYheOGG4p7N1867b2bP3noAcV55yyD8hSYV8tA+FTn6u1jf3yqoDi9VpqRfdoZ5xaXDP/vfXq7C4qn16e3Y2o9Ls2A/8zhnygvOf7TIsi+o+Uyz+my2+lzlZZzz78o7r//v8F+dZ/eNBM9BfuNP0JIxw90UJy+3EwzeNNM93vuvS9+csHP08s0LTM7KP7QB4urABSX3L7vvn/GeT/5adN7sUGAAAECBAjMXAFBcd5bUJz3USVAgAABAgQIECBAgAABAgTqKzBgQXF139K77r63mGF5cZ9Ed9tlx0iX1U33Ir7iymvj5lv+0XZmcHcn7UtQPHz48DKYTo9pVma6l27rMtBBceOs4BSipzC9ddli8w+U9+e96657Is1wblz669N4rp7W++tTBcXpctOnn3luPNwy1jSDd445Zo+rrr4unn76mfLt9NenpzG1q7/zHW+PnT++XXnJ6aOPOb7t/bSr+wVf+rs/xt/+flPXaarP29XXXBd/uuyvXfurlYEOitP/G+kzkExP+tHpXW7V66XHmR0Up3t7r7P2GvHkk0/FD4r3ZCFAgAABAgTePAFBcd5eUJz3USVAgAABAgQIECBAgAABAgTqKzBgQXG6X+u4cWPjxhtvid9c8vs+iY4Zs0hsv+02RYA4R/m8V4v7E9919z1xyz9uj38V97btaamCuxRQp6A6t7zvfe8pXuvD5SFHfef7MWXKi9McPtBBcRX0pRdKwVp1Ce3GF073BE4B6qOPPhannHZ2Y6mYidw/n6aT9bDRX58qKE4zdNNM3d4s/fXpzWu0HpMuK50uL51mk7fev7o6dp55RkWaeXzNtdfHH/90ebm78fLNpxZ9eqToV+sy0EHxJh/YMFZbdaVsKDuzg+JVV1kxUq8nF5dZP/q7x7cS2CZAgAABAgRmooCgOI8tKM77qBIgQIAAAQIECBAgQIAAAQL1FRiwoHi7j20T73//e+POYkbsRS0zYnvDO2LEiFh5peUjBVBVYJyel4LVFNI13tO39Xx9CYpT4JaCtxeLgPjbRVDcbhnooLi6VPHU4j7LT/3/LNp2r5v2Pf/CC3HueRdNU+6PzzQny+zor08VFKeZ2mnGdm+WgfDpzes0HrNd8WOB9xc/GkifgwkT/3v/6sZjqvV77r0//nL5G/fhfe973hU7bP/RstTdDw0GOihOP2xIAf7dxY8gLuhmtv7MDoqrezine0+f9MPTKiqPBAgQIECAwJsgICjOowuK8z6qBAgQIECAAAECBAgQIECAQH0FBiwo3rQIX1ctQtiHHnqkuOTwOdMtOmTIkDLAW3HF5SJdHrhcXn89flWEjjffcusb2y3/9iUo3nCDdWKtNVcvL9974g9ObTnTG5urrbpyESZvUM40Pf7Ek6c5pq/3KF566SXiw1t/MKYWlw7+1lHHTnNP5GleILNjenwyp5um1F+f6QmKB9JnmgF1s+ODW24aKyy/bDz88CPFfZR7/3ldfrllYqsPblb28mtHHt327O9977tjh+0+Uta+8rVvdx1TzQzuLkQfOnRoHHrIfuUPJS4qZmPfWczKTsueu388xo4dEzfcWNzf+pI/dJ2vcWX77Yow+b3vKS+l3l1A3zgb+qtfP6rtzPbGc+bWK7/0A452P2zIPVeNAAECBAgQGFgBQXHeU1Cc91ElQIAAAQIECBAgQIAAAQIE6iswYEFxCt1SePTKy6/EUd89Ll599dV+qy644AKx1ZabxyKLLJS9xO3+++4Ro0cvED+/+Ndx2+13Zl+3CoHT/ZC/ffS0M4rTbNA9d985hg0fFuPHj4/jTpg2KJ511pHx6U99onydY449MZ5//oXsa6b3lt5jWs46+/z494P/yR7f22JvfXp7vnRcf32mJyieUT65ca+y8oqx2aYblfcm/ua3v9f2HsXtnt8YAh/1neOKS5dPaTos/Yhgn712Ky8jngqNQXEVwt966+1x8S9/2/S8tLHVlpvF8ssvU+5Pl+1Ol+9OSxUC333PfXHBhT8v9zX+s+IKy8WWW2xS7rr55luLH1Vc2ljuWh/IoPiA/faMdL5rrv1bMeP/L12vYYUAAQIECBCY+QKC4ry5oDjvo0qAAAECBAgQIECAAAECBAjUV2DAguIUnh72PwdFmhXZm3sF95b8Xe96R3x8x23Lw9Ns3Jdeemmap+668w7x9rcvGn+67PK4+prrp6k37kiXG06XHU7Lj045Mx5//ImuchrDPnvtGqNGjSr3TZgwMY497gdd9Wolfdl0xOcPj/R46uk/jkceebQqdfu43z67x4JFCH3bbXfEz3/xm26P62uhNz59OWd/faYnKE7vb0b5dDf22WefLT556IGRZminGbhplm9vltGj5y9C/z3LQxtn/aYd6bO/2y47FrN/F+k6VWNQvPZaq8cG669TXka9dRbuSsUM+i02fyPsTU9uDIqr2fqTJk0uP4+NP8IYW9y/erdddyxfOz3vH0UI/Ys2IXSqDVRQPP/888WB+++VThknF/8PPdbw/1C50z8ECBAgQIDATBUQFOe5BcV5H1UCBAgQIECAAAECBAgQIECgvgIDFhQnwuq+rw8++FCc9ePze3Vp27XWXC1mm222+Nvfb4znnpswTSeqWZbPP/98HHPsSdPU046NNlw31lxjtfJS0WecdW688MKkruPSvX3nnnvO4l7HT5f70mt94uB9Y5ZZZokHi5m9557/0/JS0PPNN29xeegti9nLC8dNN/0jVlhh2ehu1nE60V577BxjipAuzfJM92ROl5WullGj5i5nqDbONE7H7rrz9jF8+PD46xVXx+V/vao6vHxMgeXii78v5i/eR6pXy0D4VOfqzWN/faY3KJ5en96M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6zZ84yVAgAABAgRmsoCgOA8uKM77qBIgQIAAAQIECBAgQIAAAQL1FRAU17f3Rk6AAAECBAgQIDAIBATF+SYKivM+qgQIECBAgAABAgQIECBAgEB9BQTF9e29kRMgQIAAAQIECAwCAUFxvomC4ryPKgECBAgQIECAAAECBAgQIFBfAUFxfXtv5AQIECBAgAABAoNAQFCcb6KgOO+jSoAAAQIECBAgQIAAAQIECNRXQFBc394bOQECBAgQIECAwCAQEBTnmygozvuoEiBAgAABAgQIECBAgAABAvUVEBTXt/dGToAAAQIECBAgMAgEBMX5JgqK8z6qBAgQIECAAAECBAgQIECAQH0FBMX17b2REyBAgAABAgQIDAIBQXG+iYLivI8qAQIECBAgQIAAAQIECBAgUF8BQXF9e2/kBAgQIECAAAECg0BAUJxvoqA476NKgAABAgQIECBAgAABAgQI1FdAUFzf3hs5AQIECBAgQIDAIBAQFOebKCjO+6gSIECAAAECBAgQIECAAAEC9RUQFNe390ZOgAABAgQIECAwCAQExfkmCorzPqoECBAgQIAAAQIECBAgQIBAfQUExfXtvZETIECAAAECBAgMAgFBcb6JguK8jyoBAgQIECBAgAABAgQIECBQX4H/A2EU4r/sJTHrAAAAAElFTkSuQmCC&quot; alt=&quot;Painel do Redux DevTools&quot; /&gt;
&lt;/div&gt;
&lt;p&gt;&lt;br /&gt;
Vamos digar duas letras no &lt;code class=&quot;highlighter-rouge&quot;&gt;&amp;lt;input&amp;gt;&lt;/code&gt; da página. Inspecionando o console vemos as seguintes informações:&lt;/p&gt;

&lt;div style=&quot;text-align: center&quot;&gt;
&lt;img style=&quot;display: inline-block; width: 60%&quot; src=&quot;data:image/png;base64,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0r1bV5luwq6Te58tWo8XAggggAACCJRfgGAjV4CRq5xgo/yjlj1AAIFKEohksJEOqMHGl5++KzNnzpItttk5fTHz9RCIcrChl50cdtSJWY964Pn9ZPPNNpaHxj4uY+6u/eyOrA1QiAACCCCAAAJFFyDYyBVg5Con2Cj6IKRBBBCItEBsgo2jjjhEunZdToZfNko22nB92W7bLaXXGqvLqNHX+c7o6LTM0rLXnrvKaqutKi1atJDvv/9BXnr5Nfn2u//l7Ogdtt9GNjZtrrTyCjJp0p/y1dffyqOPPSV6tkhUX9UabGy4wXpy8ZDz5aOPP5OBQy7xdU+zZs3k3ztsI2v1WkM6duwgGpD874cf5ZnnXpIFCxYk6x5/7JGyaNEiufOu+5JlOqFjZ//99pLfzb08nnrmBd+y1c142m7breT99z+UTz77wreMGQQQQAABBOIuQLCRK8DIVU6wEfefGY4fAQT8ArEJNu6962ZZe61ectY5A2T0qEulYcOGVqL3Gf3kzbfetdNbbL6JXHbJYOnQob3MmTPXfpht376dDShGjrpW7rt/rE9Pg4+LBp0nu+6yo+g/yH9NmSpLL9XRtq3hxll9zjdBx2TfOlGZqdZgY43Ve8qVI4bJN99+L336X5jsjs6dlpHLL71I9F1fs/7+W9q2aWOn//zzLznjnPPsGUFacMnFA2V9c2nL4easkKkm/HBfe+6+s5xy0nEy21wSdeChx/puUqo3vN1jt52l34DB8tVX37ir8I4AAggggAACRoBgI1eAkaucYIMfHAQQQMArEKtgY9111rL34Xj+hVfkafONuj4hY8mSxSbAWChLmUDi+afHmg+ji+TCwcPl1dfetP/IrrP2mnLFiItl2c6d5ODDjrPruIB9zu4txxx1mLz6+lsyZOhlMn36DGnevLmcdfrJcvhhB8obb74jp53Z360eqfdqDTb233dPOe6YI+xZOFeZm4i6r6GDB9gzeZ546jl54MFHbLDRtctycujB+8v2223tq7/v3rvLCccdJZePvFreeOsdtwkTcg2QjTda38736T/QhCffJZfdeN2V5oyOZUzgcYw92yO5gAkEEEAAAQQQINgwY8BEFfpH8t0dFtnLCTZcH94RQAABFYhdsDFq9A1ZH/868Py+ctCB+8rtd94rV119g2906IfVO269Tt55931z08lz7LJll+0s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&quot; alt=&quot;Actions ao longo do tempo&quot; /&gt;
&lt;/div&gt;
&lt;p&gt;&lt;br /&gt;
Visualizamos as &lt;em&gt;actions&lt;/em&gt; disparadas em ordem cronológica, inclusive podemos verificar a mudança de estado da aplicação. Clicando na &lt;em&gt;action&lt;/em&gt; a opção &lt;strong&gt;jump&lt;/strong&gt; será exibida e, quando clicada, fará com que o estado da aplicação volte para o estado de quando aquela &lt;em&gt;action&lt;/em&gt; foi executada:&lt;/p&gt;

&lt;div style=&quot;text-align: center&quot;&gt;
&lt;img style=&quot;display: inline-block; width: 50%&quot; src=&quot;data:image/png;base64,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CZAACZAACZAACRSZAAV+kRGyABIgARIgARIgARIgARIoOwR++OEHWvDLzuVgS0iABEiABEiABEiABEigaAS+//57mRAyG0Fbt24150ktWonMTQIkQAIkQAIkQAIkQAIkUGoEKPBLDT0rJgESIAESIAESIAESIIHAE1i9ejUt+IHHyhJJgARIgARIgARIgARIoHQIuAV+zwH300WndK4BayUBEiABEiABEiABEiCBgBG47vLWTgs+BX7AmLIgEiABEiABEiABEiABEig1Am0jGzoF/lXXRtOCX2qXgRWTAAmQAAmQAAmQAAmQQGAIDLgzhgI/MChZCgmQAAmQAAmQAAmQAAmUPoH+fXtQ4Jf+ZWALSIAESIAESIAESIAESCAwBO7u0x05OTkIootOYICyFBIgARIgARIgARIgARIoTQIU+KVJn3WTAAmQAAmQAAmQAAmQQIAJ3NX7FlrwA8yUxZEACZAACZAACZAACZBAqRFo3qS2UTdddErtErBiEiABEiABEiABEiABEggcgd633cRBtoHDyZJIgARIgARIgARIgARIoHQJ9Lr1RrrolO4lYO0kQAIkQAIkQAIkQAIkEDgCFPiBY8mSSIAESIAESIAESIAESKDUCdx2S2eoGWzpg1/ql4INIAESIAESIAESIAESIIGiE6iADAr8omNkCSRAAiRAAiRAAiRAAiRQNggcjN2LoCBa8MvG1WArSIAESIAESIAESIAESKCIBI4cOoDMM2foolNEjsxOAiRAAiRAAiRAAiRAAmWCQLUQcdJJz6DALxNXg40gARIgARIgARIgARIggSISaHpePfHBz6HALyJHZicBEiABEiABEiABEiCBMkHgeOIhhFQJocAvE1eDjSABEiABEiABEiABEiCBIhKIj93DKDpFZMjsJEACJEACJEACJEACJFBmCBxLOIicILrolJkLwoaQAAmQAAmQAAmQAAmQQFEIHI7fb2TnRFdFoci8JEACJEACJEACJEACJFBGCBwUFx21UOCXkQvCZpAACZAACZAACZAACZBAUQjs/3s7ffCLApB5SYAESIAESIAESIAESKAsEdj/9w6jObTgl6WrwraQAAmQAAmQAAmQAAmQQCEJKAu+OOjQRaeQ/JiNBEiABEiABEiABEiABMoUgX2GwKcPfpm6KGwMCZAACZAACZAACZAACRSWQNz+XZKV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2+mbAk33uGTpcuN77byG/7ZdVdUKz3AEvj0GbbkJfNQXL15U6mrufDsRQJ2z/NcCH/ECzXQSggAQt4KH/vt583X56jUBre32vFACH/cR7jmYxY9TV6iN6hIVqFiXGeyfMnWGTgLXuh4arsDHyXid2K5tS2Op928M4n7k6PFx/iGLJh//a/I7CZAACZAACYQikJQCP1RfuD/pCXhO4FtEmPmVUBGMzCkoe3Tho30684IvVUoqBdVyjAwtmL2eOnVKDh48rOkhD8b7lY2TTeuWt5u3Hs66UNtv9n0vFmNkG4JbURYEDevkC28cENyaEu8FluHG/cCbG6zWCxexUH5xlxKfUM8O95MACZAACSQdAQr8pGOdHK/kWYGfHGF6rU/16t6iwR3FI+r2F0NH+mICIjqRB5MACZAACZAACSQZAQr8JEOdLC9EgZ8sbws7RQIkQAIkQAIkQALxJ0CBH392KeFMCvyUcBc5BhIgARIgARIgARJwEKDAd8C4BDcp8C/Bm84hkwAJkAAJkAAJpGwCOTR2zy39YsoeNUcHAkg6c0RjIqNZGtevaRLdpCpXoUbopWajeWW2RQIkQAIkQAIkQAIkYAggraRdcIpILi0CWJ/p+ImTUR00BX5UcbIxEiABEiABEiABEoicQMYMGSRz5kyRn8gzPE/g9Okzmtf/XFTHQYEfVZxsjARIgARIgARIgATiR4BW/Phx8/JZiWG9Bw8KfC8/Few7CZAACZAACZBAiiGAhSIv0xVS6aqTYm5p0IFA3J/UhUYvXrwY9Lj47KTAjw81nkMCJEACJEACJEACiUQA7jrp06eTNGnSMPA2kRj/V80ioPbChQtmjaJou+U4x0SB76TBbRIgARIgARIgARIgARLwOAEKfI/fQHafBEiABEiABEiABEiABJwEKPCdNLhNAiRAAiRAAiRAAiRAAh4nQIHv8RvI7pMACZAACZAACZAACZCAkwAFvpMGt0mABEiABEiABEiABEjA4wQo8D1+A9l9EiABEiABEiABEiABEnASoMB30uA2CZAACZAACZAACZAACXicAAW+x28gu08CJEACJEACJEACJEACTgIU+E4a3CYBEiABEiABEiABEiABjxOgwPf4DWT3SYAESIAESIAESIAESMBJgALfSYPbJEACJEACJEACJEACJOBxAhT4Hr+B7D4JkAAJkAAJkAAJkAAJOAlQ4DtpcJsESIAESIAESIAESIAEPE6AAt/jN5DdJwESIAESIAESIAESIAEnAQp8Jw1ukwAJkAAJkAAJkAAJkIDHCVDge/wGsvskQAIkQAIkQAIkQAIk4CRAge+kwW0SIAESIAESIAESIAES8DgBCnyP30B2nwRIgARIgARIgARIgAScBCjwnTS4TQIkQAIkQAIkQAIkQAIeJ0CB7/EbyO6TAAmQAAmQAAmQAAmQgJMABb6TBrdJgARIgARIgARIgARIwOMEKPA9fgPZfRIgARIgARIgARIgARJwEqDAd9LgNgmQAAmQAAmQAAmQAAl4nAAFvsdvILtPAiRAAiRAAiRAAiRAAk4CFPhOGtwmARIgARIgARIgARIgAY8ToMD3+A1k90mABEiABEiABEiABEjASYAC30mD2yRAAiRAAiRAAiRAAiTgcQIU+B6/gew+CZAACZAACZAACZAACTgJUOA7aXCbBEiABEiABEiABEiABDxOgALf4zeQ3ScBEiABEiABEiABEiABJwEKfCcNbpMACZAACZAACZAACZCAxwlQ4Hv8BrL7JEACJEACJEACJEACJOAkQIHvpMFtEiABEiABEiABEiABEvA4ASvw/w8AAP//kM3/ZwAAQABJREFU7d0HnBNFG8fxh96r9CZSRZpiBbGiKGDvoqKodFSkSpMiIEhXURBFUGxgAcWG5UURKxYEFASk996kwzvP4MZcLrlL7pLLZu+3fiTJZsvsd/bu/rs7O5ulZt36J4QBAQQQQAABBBBAAAEEElqgaeOGkj17dslCwE/oeqTwCCCAAAIIIIAAAghYAQI+OwICCCCAAAIIIIAAAh4SIOB7qDLZFAQQQAABBBBAAAEECPjsAwgggAACCCCAAAIIeEiAgO+hymRTEEAAAQQQQAABBBAg4LMPIIAAAggggAACCCDgIQECvocqk01BAAEEEEAAAQQQQICAzz6AAAIIIIAAAggggICHBAj4HqpMNgUBBBBAAAEEEEAAAQI++wACCCCAAAIIIIAAAh4SIOB7qDLZFAQQQAABBBBAAAEECPjsAwgggAACCCCAAAIIeEiAgO+hymRTEEAAAQQQQAABBBAg4LMPIIAAAggggAACCCDgIQECvocqk01BAAEEEEAAAQQQQICAzz6AAAIIIIAAAggggICHBAj4HqpMNgUBBBBAAAEEEEAAAQI++wACCCCAAAIIIIAAAh4SIOB7qDLZFAQQQAABBBBAAAEECPjsAwgggAACCCCAAAIIeEiAgO+hymRTEEAAAQQQQAABBBAg4LMPIIAAAggggAACCCDgIQECvocqk01BAAEEEEAAAQQQQICAzz6AAAIIIIAAAggggICHBAj4HqpMNgUBBBBAAAEEEEAAAQI++wACCCCAAAIIIIAAAh4SIOB7qDLZFAQQQAABBBBAAAEECPjsAwgggAACCCCAAAIIeEiAgO+hymRTEEAAAQQQQAABBBAg4LMPIIAAAggggAACCCDgIQECvocqk01BAAEEEEAAAQQQQICAzz6AAAIIIIAAAggggICHBAj4HqpMNgUBBBBAAAEEEEAAAQI++wACCCCAAAIIIIAAAh4SIOB7qDLZFAQQQAABBBBAAAEECPjsAwgggAACCCCAAAIIeEiAgO+hymRTEEAAAQQQQAABBBAg4LMPIIAAAggggAACCCDgIQECvocqk01BAAEEEEAAAQQQQICAzz6AAAIIIIAAAggggICHBAj4HqpMNgUBBBBAAAEEEEAAAQI++wACCCCAAAIIIIAAAh4SIOB7qDLZFAQQQAABBBBAAAEECPjsAwgggAACCCCAAAIIeEiAgO+hymRTEEAAAQQQQAABBBAg4LMPIIAAAggggAACCCDgIQECvocqk01BAAEEEEAAAQQQQICAzz6AAAIIIIAAAggggICHBAj4HqpMNgUBBBBAAAEEEEAAAQI++wACCCCAAAIIIIAAAh4SIOB7qDLZFAQQQAABBBBAAAEECPjsAwgggAACCCCAAAIIeEiAgO+hymRTEEAAAQQQQAABBBAg4LMPIIAAAggggAACCCDgIQECvocqk01BAAEEEEAAAQQQQICAzz6AAAIIIIAAAggggICHBAj4HqpMNgUBBBBAAAEEEEAAAQI++wACCCCAAAIIIIAAAh4SIOB7qDLZFAQQQAABBBBAAAEECPjsAwgggAACCCCAAAIIeEiAgO+hymRTEEAAAQQQQAABBBAg4LMPIIAAAggggAACCCDgIQECvocqk01BAAEEEEAAAQQQQICAzz6AAAIIIIAAAggggICHBAj4HqpMNgUBBBBAAAEEEEAAAQI++wACCCCAAAIIIIAAAh4SIOB7qDLZFAQQQAABBBBAAAEECPjsAwgggAACCCCAAAIIeEiAgO+hymRTEEAAAQQQQAABBBAg4LMPIIAAAggggAACCCDgIQECvocqk01BAAEEEEAAAQQQQICAzz6AAAIIIIAAAggggICHBAj4HqpMNgUBBBBAAAEEEEAAAQI++wACCCCAAAIIIIAAAh4SIOB7qDLZFAQQQAABBBBAAAEECPjsAwgggAACCCCAAAIIeEiAgO+hymRTEEAAAQQQQAABBBAg4LMPIIAAAggggAACCCDgIQECvocqk01BAAEEEEAAAQQQQICAzz6AAAIIIIAAAggggICHBAj4HqpMNgUBBBBAAAEEEEAAAQI++wACCCCAAAIIIIAAAh4SIOB7qDLZFAQQQAABBBBAAAEECPjsAwgggAACCCCAAAIIeEiAgO+hymRTEEAAAQQQQAABBBAg4LMPIIAAAggggAACCCDgIQECvocqk01BAAEEEEAAAQQQQICAzz6AAAIIIIAAAggggICHBAj4HqpMNgUBBBBAAAEEEEAAAQI++wACCCCAAAIIIIAAAh4SIOB7qDLZFAQQQAABBBBAAAEECPjsAwgggAACCCCAAAIIeEiAgO+hymRTEEAAAQQQQAABBBAg4LMPIIAAAggggAACCCDgIQECvocqk01BAAEEEEAAAQQQQICAzz6AAAIIIIAAAggggICHBAj4HqpMNgUBBBBAAAEEEEAAAQI++wACCCCAAAIIIIAAAh4SIOB7qDLZFAQQQAABBBBAAAEECPjsAwgggAACCCCAAAIIeEiAgO+hymRTEEAAAQQQQAABBBAg4LMPIIAAAggggAACCCDgIQECvocqk01BAAEEEEAAAQQQQICAzz6AAAIIIIAAAggggICHBAj4HqpMNgUBBBBAAAEEEEAAAQI++wACCCCAAAIIIIAAAh4SIOB7qDLZFAQQQAABBBBAAAEECPjsAwgggAACCCCAAAIIeEiAgO+hymRTEEAAAQQQQAABBBAg4LMPIIAAAggggAACCCDgIQECvocqk01BAAEEEEAAAQQQQICAzz6AAAIIIIAAAggggICHBAj4HqpMNgUBBBBAAAEEEEAAAQI++wACCCCAAAIIIIAAAh4SIOB7qDLZFAQQQAABBBBAAAEECPjsAwgggAACCCCAAAIIeEiAgO+hymRTEEAAAQQQQAABBBAg4LMPIIAAAggggAACCCDgIQECvocqk01BAAEEEEAAAQQQQICA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&quot; alt=&quot;Time travel debugging&quot; /&gt; 
&lt;/div&gt;
&lt;p&gt;&lt;br /&gt;
É um recurso incrível que permite depurar a aplicação sem termos que reiniciá-la ou repetirmos determinada &lt;em&gt;action&lt;/em&gt; manualmente através da interface da aplicação.&lt;/p&gt;

&lt;h2 id=&quot;dan-abramovich-e-uma-proposta-para-substituir-o-redux-o-future-fetcher&quot;&gt;Dan Abramovich e uma proposta para substituir o Redux, o Future-Fetcher&lt;/h2&gt;

&lt;p&gt;Durante a JSConf 2018, Dan Abramovich, o criador do Redux, anunciou um &lt;a href=&quot;https://react-etc.net/entry/rip-redux-dan-abramov-announces-future-fetcher&quot; target=&quot;_blank&quot;&gt;substituto para Redux chamado &lt;strong&gt;Future-Fetcher&lt;/strong&gt;.&lt;/a&gt; Pouco se sabe sobre sua implementação, a não ser que foi motivada pela debanda de desenvolvedores do Redux para soluções menos complexas como &lt;a href=&quot;https://github.com/mobxjs/mobx&quot; target=&quot;_blank&quot;&gt;MobX&lt;/a&gt;. O objetivo de Dan com o &lt;em&gt;Future-Fetcher&lt;/em&gt; é trazer de volta a simplicidade no gerenciamento de estado na plataforma JavaScript. Com certeza é algo que o leitor deve ficar de olho e que não esta muito longe de se concretizar.&lt;/p&gt;

&lt;h2 id=&quot;código-no-github&quot;&gt;Código no Github&lt;/h2&gt;

&lt;p&gt;Você encontra o código completo deste artigo no meu &lt;a href=&quot;https://github.com/flaviohenriquealmeida/redux-with-vanilla-javascript&quot; target=&quot;_blank&quot;&gt;github&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;conclusão&quot;&gt;Conclusão&lt;/h2&gt;

&lt;p&gt;O conceito do Redux é simples, o que pode complicar seu entendimento é a quantidade de artefatos envolvidos durante sua implementação e a relação entre eles. Frameworks do mercado oferecem módulos especializados para realizar a ponte entre eles e o módulo &lt;code class=&quot;highlighter-rouge&quot;&gt;redux&lt;/code&gt;. E você? Já utiliza Redux em suas aplicações? Ele trouxe benefícios? Tornou mais complexo o projeto? Deixe sua opinião.&lt;/p&gt;</content><author><name>Flávio Almeida</name></author><category term="javascript" /><category term="redux" /><category term="SSOT" /><summary type="html">Existe um número considerável de soluções no mercado para construção de Single Page Applications e cada uma delas resolve questões arquiteturais de sua maneira. Todavia, Redux é um padrão para gerenciamento centralizado de estado da aplicação que vem ganhando muita atenção da comunidade. Esse padrão se tornou tão popular que foram criadas diversas bibliotecas para integrá-lo com frameworks SPA. Vejamos algumas delas:</summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://cangaceirojavascript.com.br/logo.png" /></entry><entry><title type="html">Suportando Decorators com vanilla JavaScript</title><link href="http://cangaceirojavascript.com.br/suportando-decorators-com-vanilla-javascript/" rel="alternate" type="text/html" title="Suportando Decorators com vanilla JavaScript" /><published>2018-02-26T11:00:00+00:00</published><updated>2018-02-26T11:00:00+00:00</updated><id>http://cangaceirojavascript.com.br/implementando-pattern-decorator-javascript</id><content type="html" xml:base="http://cangaceirojavascript.com.br/suportando-decorators-com-vanilla-javascript/">&lt;p&gt;Não há suporte nativo a &lt;em&gt;decorators&lt;/em&gt; na linguagem JavaScript (ano base 2018), apesar de existir formalmente uma &lt;a href=&quot;https://github.com/tc39/proposal-decorators&quot; target=&quot;_blank&quot;&gt;proposta&lt;/a&gt; em andamento. Neste artigo Implementaremos uma solução padronizada para que possamos utilizar decorators com vanilla JavaScript hoje.&lt;/p&gt;

&lt;h2 id=&quot;o-problema&quot;&gt;O problema&lt;/h2&gt;

&lt;p&gt;Temos a seguinte classe &lt;code class=&quot;highlighter-rouge&quot;&gt;Person&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;// app/models/person.js;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Person&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;

    &lt;span class=&quot;kd&quot;&gt;constructor&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;surname&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;_name&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;_surname&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;surname&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;nx&quot;&gt;speak&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;phrase&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;_name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt; is speaking... &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;phrase&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;`&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;nx&quot;&gt;getFullName&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;_name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;_surname&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Queremos logar o tempo de execução dos métodos &lt;code class=&quot;highlighter-rouge&quot;&gt;speak&lt;/code&gt; e &lt;code class=&quot;highlighter-rouge&quot;&gt;getFullName&lt;/code&gt;. Uma solução é alterarmos os métodos adicionando todo o código necessário para cronometrar o tempo:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;// app/models/person.js;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Person&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;

    &lt;span class=&quot;kd&quot;&gt;constructor&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;surname&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;_name&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;_surname&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;surname&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;nx&quot;&gt;speak&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;phrase&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;nx&quot;&gt;console&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;time&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'speak'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
        &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;result&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;_name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt; is speaking... &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;phrase&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;nx&quot;&gt;console&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;timeEnd&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'speak'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;result&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;nx&quot;&gt;getFullName&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;nx&quot;&gt;console&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;time&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'speak'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
        &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;result&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;_name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;_surname&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;nx&quot;&gt;console&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;timeEnd&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'speak'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;result&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Não precisamos meditar muito para verificarmos que duplicamos nosso código. Aliás, teríamos ainda mais código duplicado se outras classes da nossa aplicação precisassem cronometrar também a execução de seus métodos.&lt;/p&gt;

&lt;p&gt;Uma solução é isolar o código duplicado em um único lugar e aplicá-lo aos métodos da classe. Aliás, outras linguagem já resolveram essa questão adicionando em sua sintaxe o suporte a &lt;strong&gt;decorators&lt;/strong&gt;.&lt;/p&gt;

&lt;h2 id=&quot;decorators&quot;&gt;Decorators&lt;/h2&gt;

&lt;p&gt;Decorators são suportados nativamente em linguagens como Python, Java, C# e por outras linguagens, inclusive TypeScript. Em suma, um decorator nada mais é do que um trecho de código isolado aplicável em uma ou mais funções, inclusive em métodos de classe. A lógica a ser aplicada depende do problema a ser resolvido, mas o mais importante é que teremos essa lógica em um lugar apenas, evitando assim duplicação de código.&lt;/p&gt;

&lt;p&gt;Vejamos a seguir um exemplo do uso de decorators na linguagem TypeScript.&lt;/p&gt;

&lt;h2 id=&quot;typescript-e-decorators&quot;&gt;TypeScript e decorators&lt;/h2&gt;

&lt;p&gt;Em TypeScript, podemos isolar um código e aplicá-lo em métodos de classes através da sintaxe &lt;code class=&quot;highlighter-rouge&quot;&gt;@nomeDoDecorator&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;// app/models/person.js;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Person&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;

    &lt;span class=&quot;kd&quot;&gt;constructor&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;surname&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;_name&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;_surname&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;surname&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;p&quot;&gt;@&lt;/span&gt;&lt;span class=&quot;nd&quot;&gt;logExecutionTime&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;speak&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;phrase&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;_name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt; is speaking... &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;phrase&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;`&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;p&quot;&gt;@&lt;/span&gt;&lt;span class=&quot;nd&quot;&gt;logExecutionTime&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;getFullName&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;_name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;_surname&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;em&gt;A implementação da função &lt;code class=&quot;highlighter-rouge&quot;&gt;logExecutionTime&lt;/code&gt; em TypeScript foi omitida, pois focaremos na implementação da nossa solução.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Será que podemos chegar a um resultado semelhante diretamente na linguagem JavaScript, inclusive sem o uso de um transcompilador como Babel? Vamos tentar.&lt;/p&gt;

&lt;h2 id=&quot;primeira-solução&quot;&gt;Primeira solução&lt;/h2&gt;

&lt;p&gt;Pela característica dinâmica da linguagem JavaScript, podemos alterar diretamente no prototype de &lt;code class=&quot;highlighter-rouge&quot;&gt;Person&lt;/code&gt; o método &lt;code class=&quot;highlighter-rouge&quot;&gt;speak&lt;/code&gt;. Para isso, precisamos guardar o método original para então chamá-lo na nova função que o substituirá:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;// app/app.js&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Person&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'./models/person.js'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;c1&quot;&gt;// guardou o método original&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;method&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Person&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;prototype&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;speak&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;c1&quot;&gt;// substitui o método por uma função&lt;/span&gt;
&lt;span class=&quot;nx&quot;&gt;Person&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;prototype&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;speak&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(...&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;args&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;console&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;`Argumentos do método: &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;args&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;console&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;time&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'speak'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    &lt;span class=&quot;c1&quot;&gt;// executa o código original&lt;/span&gt;
    &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;result&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;method&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;bind&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)(...&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;args&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;console&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;`Resultado do método: &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;result&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;console&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;timeEnd&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'speak'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;result&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;

&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;person&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Person&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'Flávio'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'Almeida'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;nx&quot;&gt;person&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;speak&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'Canganceiro JavaScript'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;blockquote&gt;
  &lt;p&gt;&lt;em&gt;Foi utilizada a sintaxe de carregamento nativo de módulos suportado pelo Google Chrome. Saiba mais no artigo &lt;a href=&quot;http://cangaceirojavascript.com.br/importacao-nativa-modulos-browser/&quot; target=&quot;_blank&quot;&gt;“Importação nativa de módulos no browser”&lt;/a&gt;, deste mesmo autor.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Vamos analisar o código. Guardarmos uma referência para o método definido no prototype da classe &lt;code class=&quot;highlighter-rouge&quot;&gt;Person&lt;/code&gt; na variável &lt;code class=&quot;highlighter-rouge&quot;&gt;method&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;em&gt;Não esqueça que ao declararmos uma classe com a sintaxe &lt;code class=&quot;highlighter-rouge&quot;&gt;class&lt;/code&gt; as definições de seus métodos são adicionadas em seu prototype. É por isso que acessarmos &lt;code class=&quot;highlighter-rouge&quot;&gt;Person.prototype.speak&lt;/code&gt; e não &lt;code class=&quot;highlighter-rouge&quot;&gt;Person.speak&lt;/code&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Com o método original guardado, substituímos &lt;code class=&quot;highlighter-rouge&quot;&gt;Person.prototype.speak&lt;/code&gt; por uma função que redefiná o método. Ela recebe um número indeterminado de parâmetros através do &lt;em&gt;Rest operator&lt;/em&gt;, pois não sabemos quantos parâmetros o método original recebe.&lt;/p&gt;

&lt;p&gt;Vale ressaltar que  utilizamos uma função no lugar de uma &lt;em&gt;arrow function&lt;/em&gt; pois necessitamos de um escopo dinâmico, isto é, precisamos que o &lt;code class=&quot;highlighter-rouge&quot;&gt;this&lt;/code&gt; seja a instância que invoca o método naquele momento.&lt;/p&gt;

&lt;p&gt;Dentro da função que define o novo método, executamos um código arbitrário antes e depois da chamada do método original, todavia, um trecho de código merece destaque:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;result&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;method&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;bind&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)(...&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;args&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Através de &lt;code class=&quot;highlighter-rouge&quot;&gt;method.bind(this)&lt;/code&gt; criamos uma nova referência para o método original que tem como contexto o &lt;code class=&quot;highlighter-rouge&quot;&gt;this&lt;/code&gt; da nova função. Lembre-se que esse &lt;code class=&quot;highlighter-rouge&quot;&gt;this&lt;/code&gt; referenciará a instância que estiver invocando o novo método. Em seguida, passamos através do &lt;em&gt;spread operator&lt;/em&gt; cada parâmetro recebido no array &lt;code class=&quot;highlighter-rouge&quot;&gt;args&lt;/code&gt; como parâmetros individuais para a função.&lt;/p&gt;

&lt;p&gt;Executando nosso código, a saída do console será:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;Método chamado com os parâmetros: Canganceiro JavaScript
Resultado &lt;span class=&quot;k&quot;&gt;do &lt;/span&gt;método: Flávio is speaking... Canganceiro JavaScript
speak: 0.494873046875ms
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Excelente, mas essa estratégia deixa a desejar. Lembrem-se que precisamos aplicar a mesma lógica ao método &lt;code class=&quot;highlighter-rouge&quot;&gt;getFullName&lt;/code&gt; e em outras classes quando necessário. Sendo assim, precisamos padronizar nossa solução em algo que seja fácil de usar pelos demais desenvolvedores da equipe.&lt;/p&gt;

&lt;h2 id=&quot;isolando-decorators-e-definindo-uma-api&quot;&gt;Isolando decorators e definindo uma API&lt;/h2&gt;

&lt;p&gt;Para facilitar a vida do desenvolvedor, queremos a seguinte solução:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;// app/app.js&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Person&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'./models/person.js'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;// as demais funções ainda não existem!&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;decorate&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'./utils/decorate.js'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;logExecutionTime&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'./models/decorators.js'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;nx&quot;&gt;decorate&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Person&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;speak&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;logExecutionTime&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; 
    &lt;span class=&quot;na&quot;&gt;getFullName&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;logExecutionTime&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;

&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;person&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Person&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'Flávio'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'Almeida'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;nx&quot;&gt;person&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;speak&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'Canganceiro JavaScript'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Na solução que acabamos de ver temos a função utilitária &lt;code class=&quot;highlighter-rouge&quot;&gt;decorate&lt;/code&gt; receberá dois parâmetros. O primeiro é a &lt;em&gt;classe&lt;/em&gt; que desejamos decorar seus métodos. O segundo é o objeto &lt;em&gt;handler&lt;/em&gt;. &lt;strong&gt;As propriedades do objeto &lt;em&gt;handler&lt;/em&gt; equivalem aos nomes dos métodos que desejamos decorar na classe&lt;/strong&gt;. Seu valor será o decorator que desejamos aplicar.&lt;/p&gt;

&lt;p&gt;Vamos dar uma olhada na implementação do decorator &lt;code class=&quot;highlighter-rouge&quot;&gt;logExecutionTime&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;// app/models/decorators.js &lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;logExecutionTime&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;method&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;property&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;args&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;console&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;`Método decorado: &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;property&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;console&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;`Argumentos do método &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;args&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;console&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;time&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;property&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;result&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;method&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(...&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;args&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;console&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;timeEnd&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;property&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;console&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;`resultado do método: &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;result&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;result&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;É a função utilitária &lt;code class=&quot;highlighter-rouge&quot;&gt;decorate&lt;/code&gt; que passará os parâmetros que nosso decorator precisa. Em ordem, esses parâmetros são:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;O método original a ser decorado, com seu contexto já modificado&lt;/li&gt;
  &lt;li&gt;O nome do método&lt;/li&gt;
  &lt;li&gt;Os parâmetros que o método recebe (ou não)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;O mais interessante é que &lt;strong&gt;definimos uma API para criação de decorators&lt;/strong&gt;. Essa padronização é importante, pois permitirá que a solução seja utilizada por outros desenvolvedores mais facilmente. Sabendo o que cada parâmetro representa, fica fácil entender a lógica do nosso decorator.&lt;/p&gt;

&lt;p&gt;A grande questão agora é a implementação da função utilitária &lt;code class=&quot;highlighter-rouge&quot;&gt;decorate&lt;/code&gt;, centro nervoso da nossa solução.&lt;/p&gt;

&lt;h2 id=&quot;implementando-a-função-decorate&quot;&gt;Implementando a função decorate&lt;/h2&gt;

&lt;p&gt;Vamos criar o módulo &lt;code class=&quot;highlighter-rouge&quot;&gt;app/utils/decorate.js&lt;/code&gt;. Nele declararemos a função &lt;code class=&quot;highlighter-rouge&quot;&gt;decorate&lt;/code&gt; que receberá a &lt;code class=&quot;highlighter-rouge&quot;&gt;clazz&lt;/code&gt; e o &lt;code class=&quot;highlighter-rouge&quot;&gt;handler&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;// app/utils/decorate.js&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;decorate&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;clazz&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;handler&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;// falta o resto&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;A primeira coisa que faremos é listar todas as chaves do objeto &lt;code class=&quot;highlighter-rouge&quot;&gt;handler&lt;/code&gt;, pois são elas que indicam qual método decorar da classe.&lt;/p&gt;

&lt;p&gt;Todavia, só podemos iterar nas propriedades do próprio objeto &lt;code class=&quot;highlighter-rouge&quot;&gt;handler&lt;/code&gt; (aquelas que adicionamos ao criá-lo) e não do seu prototype, no caso &lt;code class=&quot;highlighter-rouge&quot;&gt;Object&lt;/code&gt;. Se iteramos nas propriedades do &lt;code class=&quot;highlighter-rouge&quot;&gt;prototype&lt;/code&gt; acabaremos encontrando outras chaves que não dizem respeito aos métodos que desejamos decorar. A função &lt;code class=&quot;highlighter-rouge&quot;&gt;Object.keys()&lt;/code&gt; nos atende muito bem:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;// app/utils/decorate.js&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;decorate&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;target&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;handler&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; 
    &lt;span class=&quot;c1&quot;&gt;// retorna todas as propriedades enumeráveis do objeto&lt;/span&gt;
    &lt;span class=&quot;nb&quot;&gt;Object&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;keys&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;handler&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;forEach&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;property&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;c1&quot;&gt;// falta implementar     &lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Em cada iteração precisaremos guardar o método original, um dos parâmetros que nossos decorators dependem:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;// app/utils/decorate.js&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;decorate&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;target&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;handler&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; 
    &lt;span class=&quot;nb&quot;&gt;Object&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;keys&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;handler&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;forEach&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;property&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;method&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;clazz&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;prototype&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;property&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Armazenamos na variável &lt;code class=&quot;highlighter-rouge&quot;&gt;method&lt;/code&gt; uma referência para o método que será decorado. Agora precisamos fazer a mesma coisa, mas dessa vez para armazenar o decorator do método:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;// app/utils/decorate.js&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;decorate&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;target&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;handler&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; 
    &lt;span class=&quot;nb&quot;&gt;Object&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;keys&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;handler&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;forEach&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;property&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;method&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;clazz&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;prototype&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;property&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;
        &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;decorator&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;handler&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;property&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Ótimo! Só precisamos modificar o método original da classe para que invoque nosso decorator. Lembrando que o decorator receberá como parâmetro uma referência para o método original, inclusive já associado ao &lt;code class=&quot;highlighter-rouge&quot;&gt;this&lt;/code&gt; da função que substituiu o método na classe:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;// app/utils/decorate.js&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;decorate&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;clazz&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;handler&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;nb&quot;&gt;Object&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;keys&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;handler&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;forEach&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;property&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;method&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;clazz&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;prototype&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;property&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;
        &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;decorator&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;handler&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;property&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;
        &lt;span class=&quot;c1&quot;&gt;// Adiciona novo método que ao ser chamado &lt;/span&gt;
        &lt;span class=&quot;c1&quot;&gt;// chamará o decorator por debaixo dos panos&lt;/span&gt;
        &lt;span class=&quot;nx&quot;&gt;clazz&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;prototype&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;property&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(...&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;args&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;decorator&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;method&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;bind&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;property&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;args&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;  
    &lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;    
&lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Excelente, o código que escrevemos até agora é suficiente para que nosso decorator seja aplicado. Mas se quisermos aplicar mais de um decorator por método?&lt;/p&gt;

&lt;h2 id=&quot;métodos-com-mais-de-um-decorator&quot;&gt;Métodos com mais de um decorator&lt;/h2&gt;

&lt;p&gt;O decorator &lt;code class=&quot;highlighter-rouge&quot;&gt;logExecutionTime&lt;/code&gt; esta com muita responsabilidade. Extrairemos dele o código que loga os dados da função como o seu nome, parâmetros recebidos e seu retorno em um novo decorator que chamaremos de &lt;code class=&quot;highlighter-rouge&quot;&gt;inspectMethod&lt;/code&gt;:&lt;/p&gt;

&lt;p&gt;Alterando &lt;code class=&quot;highlighter-rouge&quot;&gt;app/models/decorators.js&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;// app/models/decorators.js&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;logExecutionTime&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;method&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;property&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;args&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;console&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;time&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;property&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;result&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;method&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(...&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;args&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;console&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;timeEnd&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;property&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;result&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;inspectMethod&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;method&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;property&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;args&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;console&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;`Método decorado: &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;property&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;console&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;`Argumentos do método &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;args&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;result&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;method&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(...&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;args&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;console&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;`resultado do método: &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;result&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;result&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;blockquote&gt;
  &lt;p&gt;&lt;em&gt;Reparem que nossos decorators seguem a mesma API, fantástico!&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Agora, alterando &lt;code class=&quot;highlighter-rouge&quot;&gt;app/app.js&lt;/code&gt; para fazer uso do nosso novo decorator:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Person&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'./models/person.js'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;decorate&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'./utils/decorate.js'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;logExecutionTime&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;inspectMethod&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'./models/decorators.js'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;c1&quot;&gt;// passando um array de decorators&lt;/span&gt;
&lt;span class=&quot;nx&quot;&gt;decorate&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Person&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;speak&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;inspectMethod&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;logExecutionTime&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;],&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;getFullName&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;logExecutionTime&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;

&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;person&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Person&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'Flávio'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'Almeida'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;nx&quot;&gt;person&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;speak&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'Canganceiro JavaScript'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Recebemos um erro no console:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nx&quot;&gt;Uncaught&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;TypeError&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;decorator&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;is&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;not&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;a&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;at&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Person&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;clazz&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;anonymous&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Infelizmente a função &lt;code class=&quot;highlighter-rouge&quot;&gt;decorate&lt;/code&gt; não esta preparada para lidar com um &lt;code class=&quot;highlighter-rouge&quot;&gt;Array&lt;/code&gt; de decorators. Precisamos alterá-la para que funcione:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;// app/utils/decorate.js&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;decorate&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;clazz&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;handler&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;nb&quot;&gt;Object&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;keys&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;handler&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;forEach&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;property&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;decorators&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;handler&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;property&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;
        &lt;span class=&quot;nx&quot;&gt;decorators&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;forEach&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;decorator&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;c1&quot;&gt;// o método já pode ter sido decorado antes&lt;/span&gt;
            &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;method&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;clazz&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;prototype&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;property&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;
            &lt;span class=&quot;nx&quot;&gt;clazz&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;prototype&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;property&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(...&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;args&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
                &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;decorator&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;method&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;bind&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;property&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;args&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
            &lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;  
        &lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;    
&lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Excelente, agora podemos combinar decorators em um mesmo método.&lt;/p&gt;

&lt;h2 id=&quot;ordem-dos-decorators&quot;&gt;Ordem dos decorators&lt;/h2&gt;

&lt;p&gt;Se analisarmos atentamente a aplicação dos decorators, veremos que são aplicados da direita para a esquerda. Para facilitar o entendimento, vamos alterar nosso código para que o primeiro decorator da lista seja o primeiro a ser aplicado e assim por diante.&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;// app/util/decorate.js&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;decorate&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;clazz&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;handler&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;

    &lt;span class=&quot;nb&quot;&gt;Object&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;keys&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;handler&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;forEach&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;property&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;c1&quot;&gt;// faz reverse&lt;/span&gt;
        &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;decorators&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;handler&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;property&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;].&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;reverse&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
        &lt;span class=&quot;nx&quot;&gt;decorators&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;forEach&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;decorator&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;method&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;clazz&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;prototype&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;property&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;
            &lt;span class=&quot;nx&quot;&gt;clazz&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;prototype&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;property&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(...&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;args&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
                &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;decorator&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;method&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;bind&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;property&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;args&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
            &lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;  
        &lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;    
&lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Agora, vamos alterar a ordem dos decorators em &lt;code class=&quot;highlighter-rouge&quot;&gt;app/app.js&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;// app/app.js&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;// código anterior omitido &lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;// agora aplicará da esquerda para a direita&lt;/span&gt;
&lt;span class=&quot;nx&quot;&gt;decorate&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Person&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;speak&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;logExecutionTime&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;inspectMethod&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;],&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;getFullName&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;logExecutionTime&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;// código posterior omitido&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Agora fica mais fácil para quem lê o código entender a ordem de aplicação dos decorators.&lt;/p&gt;

&lt;p&gt;Tudo excelente, mas se nosso decorator precisar receber uma configuração incial?&lt;/p&gt;

&lt;h2 id=&quot;decorators-que-recebem-parâmetros&quot;&gt;Decorators que recebem parâmetros&lt;/h2&gt;

&lt;p&gt;Criamos o decorator &lt;code class=&quot;highlighter-rouge&quot;&gt;inspectMethod&lt;/code&gt;, mas nem sempre queremos logar o resultado do método, apenas seus parâmetros. Podemos atender a este requisito facilmente. Primeiro, vamos alterar o decorator &lt;code class=&quot;highlighter-rouge&quot;&gt;inspectMethod&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;inspectMethod&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;({&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;excludeReturn&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{})&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; 
    &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;method&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;property&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;args&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;nx&quot;&gt;console&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;`Método decorado: &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;property&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
        &lt;span class=&quot;nx&quot;&gt;console&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;`Argumentos do método &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;args&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
        &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;result&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;method&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(...&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;args&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;excludeReturn&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;console&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;`resultado do método: &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;result&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;result&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Vejam que nosso decorator recebe como parâmetro um objeto JavaScript que ao sofrer o &lt;em&gt;destructuring&lt;/em&gt; disponibilizará a variável &lt;code class=&quot;highlighter-rouge&quot;&gt;excludeReturn&lt;/code&gt;, utilizada para controlar a exibição da variável &lt;code class=&quot;highlighter-rouge&quot;&gt;result&lt;/code&gt;. Por fim,  o retorno do decorator será a função que adere à API que define nossos decorators.&lt;/p&gt;

&lt;p&gt;Alterando o módulo &lt;code class=&quot;highlighter-rouge&quot;&gt;app/app.js&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Person&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'./models/person.js'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;decorate&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'./utils/decorate.js'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;logExecutionTime&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;inspectMethod&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'./models/decorators.js'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;nx&quot;&gt;decorate&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Person&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;speak&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;inspectMethod&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;({&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;excludeReturn&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}),&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;logExecutionTime&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;],&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;getFullName&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;logExecutionTime&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;

&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;person&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Person&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'Flávio'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'Almeida'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;nx&quot;&gt;person&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;speak&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'Canganceiro JavaScript'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;nx&quot;&gt;person&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;getFullName&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Se não passarmos parâmetro nenhum para &lt;code class=&quot;highlighter-rouge&quot;&gt;inspectMethod&lt;/code&gt; o padrão continuará sendo inspecionar o retorno do método.&lt;/p&gt;

&lt;p&gt;Podemos tornar ainda melhor a maneira pela qual aplicamos nossos decorators.&lt;/p&gt;

&lt;h2 id=&quot;aplicando-o-decorator-diretamente-na-definição-da-classe&quot;&gt;Aplicando o decorator diretamente na definição da classe:&lt;/h2&gt;

&lt;p&gt;É possível decorar a classe diretamente no módulo no qual foi declarada. Vamos alterar &lt;code class=&quot;highlighter-rouge&quot;&gt;app/models/person.js&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;decorate&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'../utils/decorate.js'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;logExecutionTime&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;inspectMethod&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'./decorators.js'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Person&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;

    &lt;span class=&quot;kd&quot;&gt;constructor&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;surname&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;_name&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;_surname&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;surname&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;nx&quot;&gt;speak&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;phrase&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;_name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt; is speaking... &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;phrase&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;`&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;nx&quot;&gt;getFullName&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;_name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;_surname&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;nx&quot;&gt;decorate&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Person&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;speak&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;inspectMethod&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;({&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;excludeReturn&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}),&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;logExecutionTime&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;],&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;getFullName&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;logExecutionTime&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Por fim, nosso nódulo &lt;code class=&quot;highlighter-rouge&quot;&gt;app/app.js&lt;/code&gt; ficará dessa forma:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;// app/app.js&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Person&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'./models/person.js'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;person&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Person&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'Flávio'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'Almeida'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;nx&quot;&gt;person&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;speak&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'Canganceiro JavaScript'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;nx&quot;&gt;person&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;getFullName&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Nosso módulo dependerá dos decorators e da função &lt;code class=&quot;highlighter-rouge&quot;&gt;decorate&lt;/code&gt;. Se o JavaScript suportasse nativamente decorators, dependeríamos apenas dos decorators, além de podermos aplicá-los com a sintaxe &lt;code class=&quot;highlighter-rouge&quot;&gt;@&lt;/code&gt;, aliás, muito sexy.&lt;/p&gt;

&lt;h2 id=&quot;código-no-github&quot;&gt;Código no Github&lt;/h2&gt;

&lt;p&gt;Você encontra o código completo deste artigo no meu &lt;a href=&quot;https://github.com/flaviohenriquealmeida/decorator-pattern-javascript-implementation&quot; target=&quot;_blank&quot;&gt;github&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;conclusão&quot;&gt;Conclusão&lt;/h2&gt;

&lt;p&gt;Apesar de o suporte a decorator ter sido especificado na linguagem JavaScript, ainda não há um consenso sobre sua implementação. Alguns frameworks do mercado, inclusive a linguagem TypeScript suportam este recurso com sintaxe &lt;code class=&quot;highlighter-rouge&quot;&gt;@&lt;/code&gt;, a mesma utilizada na linguagem Python que há anos suporta nativamente este recurso. Todavia, nada nos impede de implementá-lo em vanilla JavaScript. E você? Deixe sua opnião!&lt;/p&gt;</content><author><name>Flávio Almeida</name></author><category term="javascript" /><category term="decorator" /><category term="design pattern" /><category term="decorate" /><summary type="html">Não há suporte nativo a decorators na linguagem JavaScript (ano base 2018), apesar de existir formalmente uma proposta em andamento. Neste artigo Implementaremos uma solução padronizada para que possamos utilizar decorators com vanilla JavaScript hoje.</summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://cangaceirojavascript.com.br/logo.png" /></entry><entry><title type="html">IndexedDB, implementando a persistência com o pattern Active Record</title><link href="http://cangaceirojavascript.com.br/indexeddb-implementando-persistencia-com-pattern-active-record/" rel="alternate" type="text/html" title="IndexedDB, implementando a persistência com o pattern Active Record" /><published>2018-02-19T11:00:00+00:00</published><updated>2018-02-19T11:00:00+00:00</updated><id>http://cangaceirojavascript.com.br/indexeddb-implementando-persistencia-com-pattern-active-record</id><content type="html" xml:base="http://cangaceirojavascript.com.br/indexeddb-implementando-persistencia-com-pattern-active-record/">&lt;p&gt;No artigo &lt;a href=&quot;http://cangaceirojavascript.com.br/indexeddb-implementando-persistencia-com-pattern-data-mapper/&quot; target=&quot;_blank&quot;&gt;“IndexedDB, implementando a persistência com o pattern Data Mapper”&lt;/a&gt; implementamos o padrão de projeto &lt;em&gt;Data Mapper&lt;/em&gt; para persistir objetos com o IndexedDB. Desta vez, implementaremos a solução de persistência com o pattern &lt;strong&gt;Active Record&lt;/strong&gt;.&lt;/p&gt;

&lt;h2 id=&quot;o-problema&quot;&gt;O problema&lt;/h2&gt;

&lt;p&gt;Nossa aplicação define as classes &lt;code class=&quot;highlighter-rouge&quot;&gt;Person&lt;/code&gt; e &lt;code class=&quot;highlighter-rouge&quot;&gt;Animal&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;// app/person.js&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Person&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;kd&quot;&gt;constructor&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;_name&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;kd&quot;&gt;get&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;_name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;// app/animal.js&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Animal&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;kd&quot;&gt;constructor&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;_name&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;kd&quot;&gt;get&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;_name&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Precisamos persistir instâncias dessas classes no &lt;code class=&quot;highlighter-rouge&quot;&gt;IndexedDB&lt;/code&gt;, um banco de dados presente nos navegadores do mercado:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;// app/app.js&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Person&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'./Person.js'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Animal&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'./Animal.js'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;person&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Person&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'Flávio Almeida'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;animal&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Animal&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'Calopsita'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;// como realizar a persistência no banco IndexedDB?&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Podemos obter uma conexão do banco, criar transações e lidar com a persistência no módulo &lt;code class=&quot;highlighter-rouge&quot;&gt;app/app.js&lt;/code&gt;, mas queremos uma solução que facilite a vida do desenvolvedor e que também possa ser reutilizada pela aplicação. Nesse sentido, podemos aplicar o padrão de projeto &lt;strong&gt;Active Record&lt;/strong&gt;.&lt;/p&gt;

&lt;h2 id=&quot;o-padrão-de-projeto-active-record&quot;&gt;O padrão de projeto Active Record&lt;/h2&gt;

&lt;p&gt;Segundo Martin Fowler:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;“Um objeto traz dados e comportamento. Grande parte desses dados é persistente e precisa ser armazenado em um banco de dados. O Active Record usa a abordagem mais óbvia, colocando lógica de acesso a dados no objeto de domínio. Desta forma, todas as pessoas sabem como ler e escrever seus dados de e para o banco de dados”. - &lt;a href=&quot;https://www.martinfowler.com/eaaCatalog/index.html&quot; target=&quot;_blank&quot;&gt;Patterns of Enterprise Application Architecture.&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Vamos criar uma API que implemente o pattern &lt;em&gt;Active Record&lt;/em&gt; com a finalidade de isolar a complexidade de persistência com o IndexedDB. Depois de pronta, ela funcionará dessa maneira:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;// app/app.js&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;activeRecord&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'./active-record.js'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Person&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'./Person.js'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Animal&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'./Animal.js'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;async&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;kr&quot;&gt;await&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;activeRecord&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;({&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'cangaceiro'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;version&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; 
        &lt;span class=&quot;na&quot;&gt;mappers&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;
            &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; 
                &lt;span class=&quot;na&quot;&gt;clazz&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Person&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
                &lt;span class=&quot;na&quot;&gt;converter&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;data&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Person&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;data&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;_name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
            &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;
            &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; 
                &lt;span class=&quot;na&quot;&gt;clazz&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Animal&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
                &lt;span class=&quot;na&quot;&gt;converter&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;data&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Animal&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;data&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;_name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
            &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;
        
    &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;person&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Person&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'Flávio Almeida'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;animal&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Animal&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'Calopsita'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    &lt;span class=&quot;c1&quot;&gt;// As instâncias sabem se persistir&lt;/span&gt;
    &lt;span class=&quot;kr&quot;&gt;await&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;person&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;save&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
    &lt;span class=&quot;kr&quot;&gt;await&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;animal&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;save&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
    &lt;span class=&quot;c1&quot;&gt;// Operações que não operam diretamente em instâncias &lt;/span&gt;
    &lt;span class=&quot;c1&quot;&gt;// são invocadas através de métodos estáticos da classe&lt;/span&gt;
    &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;persons&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kr&quot;&gt;await&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Person&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;list&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;persons&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;forEach&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;console&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;

    &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;animals&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kr&quot;&gt;await&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Animal&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;list&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;animals&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;forEach&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;console&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;

&lt;span class=&quot;p&quot;&gt;})().&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;catch&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;console&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;blockquote&gt;
  &lt;p&gt;&lt;em&gt;O padrão Active Record tem uma forte relação com bancos relacionais. Todavia, nada nos impede de ampliarmos seu uso para bancos noSQL ou orientados a documentos. Por mais que a estrutura de dados desses bancos seja semelhante ao JSON, ainda há impedância (discrepância) entre os dados armazenados no banco (dado) e os mesmos dados em memória (dado e comportamento).&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A função &lt;code class=&quot;highlighter-rouge&quot;&gt;activeRecord&lt;/code&gt; receberá um objeto com as configurações necessárias para nossa solução de persistência e retornará uma &lt;code class=&quot;highlighter-rouge&quot;&gt;Promise&lt;/code&gt;. Sobre as propriedades de configuração temos:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;name&lt;/strong&gt;: define o nome do banco. Quando omitida será adotado como nome a string “default”.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;version&lt;/strong&gt;: define a versão do banco. Quando omitida será adotado &lt;code class=&quot;highlighter-rouge&quot;&gt;1&lt;/code&gt; como versão.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;mappers&lt;/strong&gt;: contém uma lista de objetos de mapeamento com as propriedades &lt;code class=&quot;highlighter-rouge&quot;&gt;clazz&lt;/code&gt; e &lt;code class=&quot;highlighter-rouge&quot;&gt;converter&lt;/code&gt;. A primeira recebe a classe que terá uma &lt;code class=&quot;highlighter-rouge&quot;&gt;store&lt;/code&gt; criada no banco. A segunda é a lógica de mapeamento dos dados retornados do banco para sua respectiva classe que será utilizada pelo método &lt;code class=&quot;highlighter-rouge&quot;&gt;list()&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Internamente, &lt;code class=&quot;highlighter-rouge&quot;&gt;activeRecord&lt;/code&gt; criará as &lt;code class=&quot;highlighter-rouge&quot;&gt;stores&lt;/code&gt; do banco, inclusive é durante a chamada desta função que o &lt;strong&gt;prototype das classes definidas na lista de &lt;code class=&quot;highlighter-rouge&quot;&gt;mappers&lt;/code&gt; será modificado para incluir a operação de persistência &lt;code class=&quot;highlighter-rouge&quot;&gt;save()&lt;/code&gt;. Já o método &lt;code class=&quot;highlighter-rouge&quot;&gt;list()&lt;/code&gt; será adicionado como método estático na própria classe&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;em&gt;Diferente do post deste mesmo autor sobre a implementação de uma solução de persistência através do pattern Data Mapper, o autor decidiu abdicar do pattern &lt;code class=&quot;highlighter-rouge&quot;&gt;Builder&lt;/code&gt; utilizado para atribuir as configurações de persistência. O motivo é que passar um objeto como configuração é muito menos verboso e cumpre seu papel indicando as propriedades de configuração.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Sobre os métodos de persistências temos:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;save&lt;/strong&gt;: persiste a instância do objeto no qual o método foi invocado. Internamente identifica a classe a qual o objeto pertence para decidir em qual &lt;code class=&quot;highlighter-rouge&quot;&gt;store&lt;/code&gt; deve ser salvo. Retorna uma Promise.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;list&lt;/strong&gt;: método estático da classe que internamente identifica sua respectiva &lt;code class=&quot;highlighter-rouge&quot;&gt;store&lt;/code&gt; retornando os dados persistidos. Faz uso do &lt;code class=&quot;highlighter-rouge&quot;&gt;converter&lt;/code&gt; para guiar o processo de transformação dos dados armazenados em instâncias da classe.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Um ponto a se destacar é que &lt;strong&gt;podemos usar a mesma conexão durante toda a aplicação sem que seja necessário fechá-la&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Agora que já sabemos até onde queremos chegar, vamos dar início a nossa implementação.&lt;/p&gt;

&lt;h2 id=&quot;implementando-a-função-activerecord&quot;&gt;Implementando a função activeRecord&lt;/h2&gt;

&lt;p&gt;Vamos criar o módulo &lt;code class=&quot;highlighter-rouge&quot;&gt;app/active-record.js&lt;/code&gt; que terá em seu escopo o objeto &lt;code class=&quot;highlighter-rouge&quot;&gt;dbConfig&lt;/code&gt;. Suas propriedades serão inicializadas com valores padrões. Em seguida, definiremos a função &lt;code class=&quot;highlighter-rouge&quot;&gt;activeRecord&lt;/code&gt; que terá acesso ao objeto &lt;code class=&quot;highlighter-rouge&quot;&gt;dbConfig&lt;/code&gt;. A função &lt;code class=&quot;highlighter-rouge&quot;&gt;activeRecord&lt;/code&gt; será o único artefato exportado pelo módulo &lt;code class=&quot;highlighter-rouge&quot;&gt;active-record.js&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;// app/active-record.js&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;// configuração do banco encapsuladas no módulo&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;dbConfig&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'default'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;version&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;stores&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;Map&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;activeRecord&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;({&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;version&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;mappers&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;})&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;c1&quot;&gt;// passou as configurações para o objeto dbConfig&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;dbConfig&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;version&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;version&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;dbConfig&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;name&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;c1&quot;&gt;// processa a lista de mappers&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;mappers&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;forEach&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;mapper&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; 
        &lt;span class=&quot;nx&quot;&gt;dbConfig&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;stores&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;kd&quot;&gt;set&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;mapper&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;clazz&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;mapper&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;converter&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Atribuímos às propriedades &lt;code class=&quot;highlighter-rouge&quot;&gt;dbConfig.version&lt;/code&gt; e &lt;code class=&quot;highlighter-rouge&quot;&gt;dbConfig.name&lt;/code&gt; a versão do banco e seu nome respectivamente. Por fim, para cada item da lista de &lt;code class=&quot;highlighter-rouge&quot;&gt;mappers&lt;/code&gt; recebida utilizaremos o valor da propriedade &lt;code class=&quot;highlighter-rouge&quot;&gt;clazz.name&lt;/code&gt; como &lt;em&gt;key&lt;/em&gt; e o valor da propriedade &lt;code class=&quot;highlighter-rouge&quot;&gt;converter&lt;/code&gt; como seu valor no &lt;code class=&quot;highlighter-rouge&quot;&gt;Map&lt;/code&gt; &lt;code class=&quot;highlighter-rouge&quot;&gt;dbConfig.stores&lt;/code&gt;. Esse dado é importante, pois é através dele que saberemos quais stores serão criadas e qual lógica de conversão será utilizada ao obter seus dados.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;em&gt;Objetos recuperados da store só possuem propriedades e nenhum método, por isso é importante definir a lógica de conversão dos dados trazidos do banco para sua respectiva classe.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Vamos criar a página &lt;code class=&quot;highlighter-rouge&quot;&gt;index.html&lt;/code&gt; que importará o módulo &lt;code class=&quot;highlighter-rouge&quot;&gt;app/app.js&lt;/code&gt; utilizando o sistema de importação de módulos nativo do Chrome:&lt;/p&gt;

&lt;div class=&quot;language-html highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c&quot;&gt;&amp;lt;!-- index.html --&amp;gt;&lt;/span&gt;
&lt;span class=&quot;cp&quot;&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;html&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;meta&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;charset=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;UTF-8&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;meta&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;name=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;viewport&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;content=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;width=device-width, initial-scale=1.0&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;meta&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;http-equiv=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;X-UA-Compatible&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;content=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;ie=edge&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;title&amp;gt;&lt;/span&gt;Active Record&lt;span class=&quot;nt&quot;&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
&lt;span class=&quot;c&quot;&gt;&amp;lt;!-- importou o módulo --&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;script &lt;/span&gt;&lt;span class=&quot;na&quot;&gt;type=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;module&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;src=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;app/app.js&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;em&gt;É necessário servir a página através de um servidor Web de sua escolha, caso contrário o carregamento dos módulos não funcionará.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Vejamos como fica o uso inicial da função &lt;code class=&quot;highlighter-rouge&quot;&gt;activeRecord&lt;/code&gt; no módulo &lt;code class=&quot;highlighter-rouge&quot;&gt;app/app.js&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;// app/app.js&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;activeRecord&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'./active-record.js'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;nx&quot;&gt;activeRecord&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;({&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'cangaceiro'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;version&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; 
    &lt;span class=&quot;na&quot;&gt;mappers&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; 
            &lt;span class=&quot;na&quot;&gt;clazz&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Person&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
            &lt;span class=&quot;na&quot;&gt;converter&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;data&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Person&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;data&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;_name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; 
            &lt;span class=&quot;na&quot;&gt;clazz&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Animal&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
            &lt;span class=&quot;na&quot;&gt;converter&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;data&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Animal&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;data&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;_name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;blockquote&gt;
  &lt;p&gt;&lt;em&gt;Todos os módulos que importarem nosso &lt;code class=&quot;highlighter-rouge&quot;&gt;activeRecord&lt;/code&gt; trabalharão com a mesma instância.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Excelente, mas no ato de passarmos as configurações para a função &lt;code class=&quot;highlighter-rouge&quot;&gt;activeRecord&lt;/code&gt; precisamos criar a conexão com o banco.&lt;/p&gt;

&lt;h2 id=&quot;obtendo-uma-conexão&quot;&gt;Obtendo uma conexão&lt;/h2&gt;

&lt;p&gt;Vamos criar uma função responsável pela criação da conexão. Ela viverá no escopo do módulo &lt;code class=&quot;highlighter-rouge&quot;&gt;active-record.js&lt;/code&gt; e apenas o objeto &lt;code class=&quot;highlighter-rouge&quot;&gt;activeRecord&lt;/code&gt; poderá acessá-la.&lt;/p&gt;

&lt;p&gt;Como a obtenção de uma conexão é uma operação assíncrona, retornaremos uma &lt;code class=&quot;highlighter-rouge&quot;&gt;Promise&lt;/code&gt; como resposta, reduzindo assim a complexidade de termos que trabalhar com &lt;em&gt;callbacks&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Vamos criar a propriedade &lt;code class=&quot;highlighter-rouge&quot;&gt;conn&lt;/code&gt; no objeto &lt;code class=&quot;highlighter-rouge&quot;&gt;dbConfig&lt;/code&gt;. Ela guardará uma referência para a conexão criada. Seu valor será atribuído através da função &lt;code class=&quot;highlighter-rouge&quot;&gt;createConnection&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;// app/active-record.js&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;dbConfig&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'default'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;version&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;stores&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;Map&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(),&lt;/span&gt; 
    &lt;span class=&quot;na&quot;&gt;conn&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;null&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;// nova propriedade&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;

&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;createConnection&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; 
    &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;Promise&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;((&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;resolve&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;reject&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    
    &lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;

&lt;span class=&quot;c1&quot;&gt;// definição da função activeRecord omitida&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Vamos solicitar à função &lt;code class=&quot;highlighter-rouge&quot;&gt;indexedDB.open()&lt;/code&gt; a abertura da conexão com o banco usando as configurações definidas em &lt;code class=&quot;highlighter-rouge&quot;&gt;dbConfig.name&lt;/code&gt; e &lt;code class=&quot;highlighter-rouge&quot;&gt;dbConfig.version&lt;/code&gt;. Porém, não temos a garantia de que a conexão foi efetuada, motivo pelo qual precisamos lidar com os eventos &lt;code class=&quot;highlighter-rouge&quot;&gt;onupgradeneeded&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;onsuccess&lt;/code&gt; e &lt;code class=&quot;highlighter-rouge&quot;&gt;onerror&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;// app/active-record.js&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;dbConfig&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'default'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;version&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;stores&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;Map&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(),&lt;/span&gt; 
    &lt;span class=&quot;na&quot;&gt;conn&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;null&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;

&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;createConnection&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; 
    &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;Promise&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;((&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;resolve&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;reject&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;c1&quot;&gt;// requisitamos a abertura, um evento assíncrono!&lt;/span&gt;
        &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;request&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;indexedDB&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;open&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;dbConfig&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;dbConfig&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;version&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;

        &lt;span class=&quot;nx&quot;&gt;request&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;onupgradeneeded&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;e&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{};&lt;/span&gt;

        &lt;span class=&quot;nx&quot;&gt;request&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;onsuccess&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;e&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{};&lt;/span&gt;

        &lt;span class=&quot;nx&quot;&gt;request&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;onerror&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;e&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{};&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;

&lt;span class=&quot;c1&quot;&gt;// código posterior omitido&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;O evento &lt;code class=&quot;highlighter-rouge&quot;&gt;onupgradeneeded&lt;/code&gt; disponibiliza uma conexão transacional que nos permite criar todas as &lt;code class=&quot;highlighter-rouge&quot;&gt;stores&lt;/code&gt; do banco. Utilizaremos as chaves do nosso &lt;code class=&quot;highlighter-rouge&quot;&gt;Map&lt;/code&gt; &lt;code class=&quot;highlighter-rouge&quot;&gt;stores&lt;/code&gt; como nome das &lt;code class=&quot;highlighter-rouge&quot;&gt;stores&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;//app/active-record.js&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;dbConfig&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'default'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;version&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;stores&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;Map&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(),&lt;/span&gt; 
    &lt;span class=&quot;na&quot;&gt;conn&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;null&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;

&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;createConnection&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; 
    &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;Promise&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;((&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;resolve&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;reject&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;

        &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;request&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;indexedDB&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;open&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;dbConfig&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;dbConfig&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;version&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;

        &lt;span class=&quot;nx&quot;&gt;request&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;onupgradeneeded&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;e&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;

            &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;transactionalConn&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;target&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;result&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
            &lt;span class=&quot;c1&quot;&gt;// utilizando for...of e destructuring ao mesmo tempo&lt;/span&gt;
            &lt;span class=&quot;c1&quot;&gt;// para ter acesso facilitado à key do Map&lt;/span&gt;
            &lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kd&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;classKey&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;of&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;dbConfig&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;stores&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
                &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;store&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;classKey&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
                &lt;span class=&quot;c1&quot;&gt;// se já existe, apagamos a store&lt;/span&gt;
                &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;transactionalConn&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;objectStoreNames&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;contains&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;store&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt; 
                    &lt;span class=&quot;nx&quot;&gt;transactionalConn&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;deleteObjectStore&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;store&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
                &lt;span class=&quot;nx&quot;&gt;transactionalConn&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;createObjectStore&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;store&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;autoIncrement&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;
            &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;     
        &lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;

        &lt;span class=&quot;nx&quot;&gt;request&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;onsuccess&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;e&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;nx&quot;&gt;dbConfig&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;conn&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;target&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;result&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;// guarda uma referência para a conexão&lt;/span&gt;
            &lt;span class=&quot;nx&quot;&gt;resolve&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;// tudo certo, resolve a Promise!&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
        &lt;span class=&quot;c1&quot;&gt;// lida com erros, retornando uma mensagem de alto nível&lt;/span&gt;
        &lt;span class=&quot;nx&quot;&gt;request&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;onerror&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;e&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;nx&quot;&gt;console&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;target&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;error&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
            &lt;span class=&quot;nx&quot;&gt;reject&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'Não foi possível obter a conexão com o banco'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;};&lt;/span&gt; 
    &lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;// código posterior omitido&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;blockquote&gt;
  &lt;p&gt;&lt;em&gt;A estratégia utilizada durante um eventual upgrade do banco é derrubar todas as stores para em seguida criá-las novamente.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Excelente, agora precisamos chamar a função &lt;code class=&quot;highlighter-rouge&quot;&gt;createConnection&lt;/code&gt; através da função &lt;code class=&quot;highlighter-rouge&quot;&gt;ActiveRecord&lt;/code&gt;. Vamos tornar a função &lt;code class=&quot;highlighter-rouge&quot;&gt;async&lt;/code&gt; para que possamos utilizar a instrução &lt;code class=&quot;highlighter-rouge&quot;&gt;await&lt;/code&gt; com a Promise retornada por &lt;code class=&quot;highlighter-rouge&quot;&gt;createConnection&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;// app/active-record.js&lt;/span&gt;

&lt;span class=&quot;c1&quot;&gt;// código anterior omitido&lt;/span&gt;

&lt;span class=&quot;c1&quot;&gt;// tornou a função async&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;activeRecord&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;async&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;({&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;version&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;mappers&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;})&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
 
    &lt;span class=&quot;nx&quot;&gt;dbConfig&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;version&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;version&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;dbConfig&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;vame&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    
    &lt;span class=&quot;nx&quot;&gt;mappers&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;forEach&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;mapper&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; 
        &lt;span class=&quot;nx&quot;&gt;dbConfig&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;stores&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;kd&quot;&gt;set&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;mapper&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;clazz&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;mapper&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;converter&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    &lt;span class=&quot;c1&quot;&gt;// awaitter na função createConnection&lt;/span&gt;
    &lt;span class=&quot;kr&quot;&gt;await&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;createConnection&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Agora, em &lt;code class=&quot;highlighter-rouge&quot;&gt;app/app.js&lt;/code&gt;, criaremos um wrapper &lt;code class=&quot;highlighter-rouge&quot;&gt;async&lt;/code&gt; para que possamos utilizar a instrução &lt;code class=&quot;highlighter-rouge&quot;&gt;await&lt;/code&gt; com o método &lt;code class=&quot;highlighter-rouge&quot;&gt;register&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;// app/app.js&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;activeRecord&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'./active-record.js'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Person&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'./Person.js'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Animal&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'./Animal.js'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;// wrapper async&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;activeRecord&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'./active-record.js'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Person&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'./Person.js'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Animal&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'./Animal.js'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;async&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;kr&quot;&gt;await&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;activeRecord&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;({&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'cangaceiro'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;version&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; 
        &lt;span class=&quot;na&quot;&gt;mappers&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;
            &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; 
                &lt;span class=&quot;na&quot;&gt;clazz&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Person&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
                &lt;span class=&quot;na&quot;&gt;converter&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;data&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Person&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;data&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;_name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
            &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;
            &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; 
                &lt;span class=&quot;na&quot;&gt;clazz&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Animal&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
                &lt;span class=&quot;na&quot;&gt;converter&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;data&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Animal&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;data&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;_name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
            &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;

&lt;span class=&quot;p&quot;&gt;})().&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;catch&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;console&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Recarregando a página &lt;code class=&quot;highlighter-rouge&quot;&gt;index.html&lt;/code&gt; no Chrome, na aba &lt;em&gt;Application -&amp;gt; Storage -&amp;gt; IndexedDB&lt;/em&gt; podemos constatar a criação do banco.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;em&gt;Abra outra aba no Chrome para que possa verificar os dados mais atualizados, pois este autor constatou que o Chrome não realiza o refresh automático da aba Application -&amp;gt; Storage -&amp;gt; IndexedDB.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div style=&quot;text-align: center; margin-bottom: 20px&quot;&gt;
&lt;img src=&quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASwAAACXCAYAAACvB2Z3AAAMIGlDQ1BpY2MAAEiJlVcHWFPJFp5bUklogQhICb2J0gkgNbQIAlIFGyEJJJQQE4KKHRUVWAsqFqzoqoiiawFksWEvi2LvDwsqyrqoiw2UN0kAXf3ee987+ebeP2fOnPOfc2fmmwFAK5Ynleag2gDkSvJlceHBrLEpqSzSY4DAHxmwgRGPL5cGxcZGASgD73/K+5vQFso1J6Wvn/v/q+gIhHI+AEgsxOkCOT8X4oMA4J58qSwfAEIn1FtOyZdCTIQsgZ4MEoTYSokz1ZitxOlqHKWySYjjQJwGAJnG48kyAdBU8mIV8DOhH80yiJ0lArEE4iaI/fkingDiXoiH5ebmQaxlB7Fd+nd+Mv/hM33QJ4+XOYjVuaiEHCKWS3N40/7Pcvxvyc1RDMSwhI0mkkXEKXNW1i07L1KJaRCfk6RHx0CsC/F1sUBlr8TPRIqIxH77j3w5B9YMMAFAaQJeSCTExhBbSHKio/r1/hniMC7EsPZogjifm6AeiwpkeXH9/tGpQnlo/ADmyVSxlDYliuzEoH6fG0VC7oDPxkJRQrKaJ3qlQJwUDbEmxPfl2fGR/TYvC0Wc6AEbmSJOyRl+cwxkyMLi1DaYVa58IC/MRyTmRvfjqHxRQoR6LDaRz1NxM4A4SygfGzXAUyAMCVXnhRUJJYn9/LFyaX5wXL/9NmlObL891iTMCVfqLSBukRfED4ztyoeTTZ0vDqT5sQlqbrheFm9UrJoD7gCiAAeEABZQwJYO8kAWELd01nfCf+qeMMADMpAJhMCpXzMwIlnVI4HPeFAI/oRICOSD44JVvUJQAPVfBrXqpxPIUPUWqEZkg2cQ54JIkAP/K1SjJIPRksBTqBH/FJ0PuebApuz7ScfSGtARQ4khxAhiGNEeN8L9cV88Cj4DYXPF2bj3AK9v9oRnhFbCY8INQhvhziRxkewH5iwwGrRBjmH92aV/nx1uA7164MG4H/QPfeNM3Ag44e4wUhAeAGN7QO33XBWDGX+rZb8vijMFpQyhBFLsfmSg6aDpMehFWanva6HmlT5YLc5gz495cL6rnwC+I3+0xBZhB7Cz2AnsPNaE1QMWdgxrwC5hR5R4cG48Vc2NgWhxKj7Z0I/4p3i8/pjKqsmda5w7nHv7+0C+cGq+crFw8qTTZOJMUT4rCO7WQhZXwh8+jOXq7AJ3UeXer95a3jFVezrCvPBNN/cTACNf9/X1NX3TRcE94OBLAKid33R2S+FytgXg3AK+Qlag1uHKBwFQgRZcKYbAFO5ddjAjV+AJfEEgCAWjQAxIAClgIqyzCM5TGZgCZoC5oBiUgmVgFVgHNoGtYCfYA/aDetAEToAz4CK4Am6Ae3CutINXoAu8Bz0IgpAQOsJADBEzxBpxRFwRNuKPhCJRSBySgqQhmYgEUSAzkHlIKVKOrEO2INXIb8hh5ARyHmlF7iCPkA7kLfIZxVAaqoeaoDboCJSNBqGRaAI6Ac1EJ6OF6Hx0CboGrUJ3o3XoCfQiegNtQ1+h3RjANDAmZo45YWyMg8VgqVgGJsNmYSVYBVaF1WKN8Etfw9qwTuwTTsQZOAt3gvM1Ak/E+fhkfBZehq/Dd+J1+Cn8Gv4I78K/EugEY4IjwYfAJYwlZBKmEIoJFYTthEOE03DttBPeE4lEJtGW6AXXXgoxizidWEbcQNxLPE5sJT4hdpNIJEOSI8mPFEPikfJJxaS1pN2kY6SrpHbSR7IG2YzsSg4jp5Il5CJyBXkX+Sj5Kvk5uYeiTbGm+FBiKALKNMpSyjZKI+UypZ3SQ9Wh2lL9qAnULOpc6hpqLfU09T71nYaGhoWGt8YYDbHGHI01Gvs0zmk80vhE06U50Di08TQFbQltB+047Q7tHZ1Ot6EH0lPp+fQl9Gr6SfpD+kdNhuZwTa6mQHO2ZqVmneZVzddaFC1rrSCtiVqFWhVaB7Qua3VqU7RttDnaPO1Z2pXah7VvaXfrMHRcdGJ0cnXKdHbpnNd5oUvStdEN1RXoztfdqntS9wkDY1gyOAw+Yx5jG+M0o12PqGerx9XL0ivV26PXotelr6vvrp+kP1W/Uv+IfhsTY9owucwc5lLmfuZN5uchJkOChgiHLB5SO+TqkA8GQw0CDYQGJQZ7DW4YfDZkGYYaZhsuN6w3fGCEGzkYjTGaYrTR6LRR51C9ob5D+UNLhu4fetcYNXYwjjOebrzV+JJxt4mpSbiJ1GStyUmTTlOmaaBplulK06OmHWYMM38zsdlKs2NmL1n6rCBWDmsN6xSry9zYPMJcYb7FvMW8x8LWItGiyGKvxQNLqiXbMsNypWWzZZeVmdVoqxlWNVZ3rSnWbGuR9Wrrs9YfbGxtkm0W2tTbvLA1sOXaFtrW2N63o9sF2E22q7K7bk+0Z9tn22+wv+KAOng4iBwqHS47oo6ejmLHDY6twwjDvIdJhlUNu+VEcwpyKnCqcXo0nDk8anjR8Prhr0dYjUgdsXzE2RFfnT2cc5y3Od9z0XUZ5VLk0ujy1tXBle9a6Xrdje4W5jbbrcHtjbuju9B9o/ttD4bHaI+FHs0eXzy9PGWetZ4dXlZeaV7rvW6x9dix7DL2OW+Cd7D3bO8m708+nj75Pvt9/vJ18s323eX7YqTtSOHIbSOf+Fn48fy2+LX5s/zT/Df7twWYB/ACqgIeB1oGCgK3Bz4Psg/KCtod9DrYOVgWfCj4A8eHM5NzPAQLCQ8pCWkJ1Q1NDF0X+jDMIiwzrCasK9wjfHr48QhCRGTE8ohbXBMun1vN7RrlNWrmqFORtMj4yHWRj6McomRRjaPR0aNGrxh9P9o6WhJdHwNiuDErYh7E2sZOjv19DHFM7JjKMc/iXOJmxJ2NZ8RPit8V/z4hOGFpwr1Eu0RFYnOSVtL4pOqkD8khyeXJbWNHjJ059mKKUYo4pSGVlJqUuj21e1zouFXj2sd7jC8ef3OC7YSpE85PNJqYM/HIJK1JvEkH0ghpyWm70np5MbwqXnc6N319ehefw1/NfyUIFKwUdAj9hOXC5xl+GeUZLzL9MldkdogCRBWiTjFHvE78Jisia1PWh+yY7B3ZfTnJOXtzyblpuYclupJsyak807ypea1SR2mxtG2yz+RVk7tkkbLtckQ+Qd6QrwcP2ZcUdooFikcF/gWVBR+nJE05MFVnqmTqpWkO0xZPe14YVvjrdHw6f3rzDPMZc2c8mhk0c8ssZFb6rObZlrPnz26fEz5n51zq3Oy5fxQ5F5UX/T0veV7jfJP5c+Y/WRC+oKZYs1hWfGuh78JNi/BF4kUti90Wr138tURQcqHUubSitLeMX3bhF5df1vzStyRjSctSz6UblxGXSZbdXB6wfGe5Tnlh+ZMVo1fUrWStLFn596pJq85XuFdsWk1drVjdtiZqTcNaq7XL1vauE627URlcuXe98frF6z9sEGy4ujFwY+0mk02lmz5vFm++vSV8S12VTVXFVuLWgq3PtiVtO/sr+9fq7UbbS7d/2SHZ0bYzbuepaq/q6l3Gu5bWoDWKmo7d43df2ROyp6HWqXbLXube0n1gn2Lfy9/Sfru5P3J/8wH2gdqD1gfXH2IcKqlD6qbVddWL6tsaUhpaD4863Nzo23jo9+G/72gyb6o8on9k6VHq0flH+44VHus+Lj3eeSLzxJPmSc33To49ef3UmFMtpyNPnzsTdubk2aCzx875nWs673P+8AX2hfqLnhfrLnlcOvSHxx+HWjxb6i57XW644n2lsXVk69GrAVdPXAu5duY69/rFG9E3Wm8m3rx9a/ytttuC2y/u5Nx5c7fgbs+9OfcJ90seaD+oeGj8sOpf9v/a2+bZduRRyKNLj+Mf33vCf/Lqqfxpb/v8Z/RnFc/Nnle/cH3R1BHWceXluJftr6SvejqL/9T5c/1ru9cH/wr861LX2K72N7I3fW/L3hm+2/G3+9/N3bHdD9/nvu/5UPLR8OPOT+xPZz8nf37eM6WX1Lvmi/2Xxq+RX+/35fb1SXkynuoogMGGZmQA8HYHAPQUABhX4PlhnPpuphJEfZ9UIfCfsPr+phJPAGrhS3kM5xwHYB9s8PgB6IEAKI/gCYEAdXMbbP0iz3BzVfuiwRsL4WNf3zsTAEiNAHyR9fX1bOjr+7INkr0DwPHJ6juhUpR30M0qH1eZBb3gB/k3J9ZyR3dVhLEAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAAWJQAAFiUBSVIk8AAAAAd0SU1FB+ICBRMXIPrLCgwAAA4lelRYdFJhdyBwcm9maWxlIHR5cGUgaWNjAABYha2ZaXLrOg6F/2sVvQSRBAFyORyrev8b6A+S7MS5ud31qtopRjbFAcRwcCAd/x7j+BefVON5nP7Z+dRgp506zhiuLp26TCzmKCYxnrnkmls8T1v8O8PTynkmWmiHBk2W7JSQz3zKOJ/Pz9//7bPZ9XhWvj4zxfmW7B9+jn82PAQVzZY03T/z06/xUPFunfeNLtdVknLg06Ldv/N6JIzJDM2dT7++DhPkQJ2XGp+F5XVD7Xu/K/Tp/xj/0uG9kGCZW1TVu7+cAyMEi2rX7/XSWTwNWdUeiVZ5+tN56OLUVdd9o79uLIYXFnsm7NdCAwNN3U//jo+ksRz6N4ns75LqL5Ie1w3788aHdb4+RZDf/U5Z0urXjX9o/r9//v8LocJh+edR4uv30GJRSo73z3ArG7/Trlt6jq+Fbt2EUbBilCX7mXBPDNMtK18bvPqXskFmg3x87rCLh7Ckx+HOcJsrIpFoEJH+9N8bxxjZeLDxOD4n4D+qVVQeezwhgItgK5Ga355/9xNgUTdusl8L3aJGK250yTn90Y+ffzvas1Bp6LXnLOG10CNqXfhzlvqOoUfS3qxpwUXtQ6dxesjUrLJeyl7PjYET9pzeungWWtdCkmT9sVC0nONb2U/UJ48GzKxvM98LJbqmfXON58gpsTw6rW+JXjdkmPgRpHzsnLIHcfimu/t+0uY6zeXLal9KRRzM/EDfY7VUomZd+acRSB8OchLfDvnaoYmH4xfovyb0wUJD7HXk+PSPRQArOn075LPzPq8UJD9Cgf++M3nl5Ue37gTEbBy55fMzRCTi0S6N45CIuzRL5Puq/FNCRxmjdaw1ujmW+71LR69Jojeau+M5Pmm+7Pux8M9N3K/uOSzkMOs/XJHGbms+fSzkJr93/LZY/Lahj3EB3Px7/jL4+87zxtrX5Gvis4l2h9WXRC4+HQ6z14D8tZtL9vN4mYlLnjH1df/4+/kd5C7ljvv6mvj7uOP7QLr3HwMVqyvfFW/HWzFexeyNIYvWGTb8+3ELc3VGWqHVnzr7dQOi5swzcIXzTBwyo4Y8a95aS3Tx/6vi/d68wcJ1+eUyx6PUeCv2FwtK1EfafAknaT4nuCUXvJyjHpfWAZr7WBK47vvsPjH9Vbm3RF+WPm5rfHnol4P+kKxyqXRWmFhlzep5/2vM8aseFjG3Uv5Fmpdv/eEej0QfcRZ/ibFffOpT4uMXq/zFET1B+u8rCv5Y9HOhVAoglgAsowVadVCj2bVJ6pvGmOF9893/J4y8Y8h+ibFv8aev2Ky/LfRTseHzqG/YSOlsiL2wozO5D6tx24lVsTdRgNhu4LWSkitEjDv44sPBPVsJdFFTXHFEshUcMoWbsb5LhG+fnS5sfnPgoKP9Nq6EXY8nGax9ffr4baCMm+Z0WTdLaeuPcddCsZSbD6145fZRCpTLMulYP1d8f/O854vuO9MElyism5ldLj89P3sKdVvfMz1ZimcXJnk6yvW8IOPy7HIj7BX9hhQ2/KQ0Fijdg4rGApUFKgs0JjUmNSZ1NnL/cU6Or8HBaJ2FvAyZTJr9xpmVnblfUlNA0Trq9j+jTVSeaJW2ScSZxv2ERG61AL5AEWiDiifS6pVMYeA07gEZAalDYREkDpSMAWlDY4PG2A7RCp0viBgIhwB0hsl1cV1cNxN2wy+T80iqS6FNUr/SNqotMKJA42hkeho32T0anSTJWOgrCwbHQGwcG4t0JrNhHB2bZMiXEzC+U8cmN386++mOlyhmqSAhTwQlYZGwkrNbSrczER7JFkHN78pvFk+N373dAT4JEdRDI5o3aeZ0/E1XVpYLgj3dAMEZ2MXcgsTCgkJ5JehIsKQgKR5LOpoMQCfuJrIXrjbPDDnNWCOnhuvUM+dCgjUQmYaLZKTKjdZhOtCpJx3xBTNff8ETIHHp5Y8nRKyn0Bi1ju8NUGPCavaNIBhGVwIYspOn4zR8wtjdSDOGWAZ8eIUICyT4uYeiDUCzSfnIprYLdVv3SD0LUVDAsZJJR1QfZyl0IG5pDcfmN5PKsrPgjDV4xshkkUb22KfXJJVKrRKftfEdhdcB+Fd2qUxoIZyNYzUka7hE40iNsGm4QMNCDV20Oc623c78QRU6ea/ncHYlaIHgszO4dw8frii+Y8EBER2kpYErjDxOijBgYZ2j2Tk8zHDcwaLT/6Ie5xQPtXZO9DIZOHH5ORgw+Y4+Fu6w8L6F9Sikz2UblO2Eo0Lu4rnWIiyRaHP+jZtvoGHj1Rtd7e5wvM+9PLzRUlTP5ZiJ8xsi147Y9E/ziYFAPmhcZYOjM4QyQmhoa9QQVuFwFoirECUHSqpA6ITYUoiDtkBpYgLADkTCEaikAQBaw6dHBggyoQl5JvCo0JxJBykdMj0Bh8WegEOIAZYectZAygAs+hFyn4FTebR5QR8o+oLqCFp20B4RlL7dggENJiFA9IMVqERbAd8Kti2UwEIEeqBGC6W0UNoOZfKdiRfkcKSqPVROWjuuO6eTvtBiCw3VNDPgaAVc4whkBHBJQk89dI7ZWbAjSZ8tOALhAmFkrtbDQD9jjDBQ8AS0JlE8zSGsHgFTh8liK2ggY1M4NzBNwsKh1qphY42dVoAakr4k7L7DXi1eUIruCTxIUznwOkADsMNUAGDh0Gzf0OZYkVkU0tBdisRY+Np2jHOSc1oEtyJYFVOVmEY8IkwPtNxRZEaxEaX1KLN5dMXM4Kw0MncetE0GZ2Gye/QnCtppCw4bkMiE6s2IMhawOchuM5a0Y8GFSkOQKTBr2DWLovhY64ygCcGDgClHitHYMD9wvAGRGHtSYLnGzkA8Ijq0DUrEoRAFFhzTwMwRJ3qZpnGy8Vz4JU7jDxAikoHhFomZyAHB8hZ3DXFzlL1BrkTZpARfI3pnJw5wZcF8qCh0rjsmZDtS1JRi7eC+QHxmSoBzsp1gZilhMkFW8WqzriSzJHw/ZfA5F6riEVPek+CwI1GeUyyvpBAnKnVKVBJGHcmoz0uAfWdnhCOVUUCffBmpslHtHHwDdyzTTI7EUcksO3Hi1BW3bC31VbCoJShVGhxprJRmjIloSfhpAmESJUiiHEkwnQSSHNgnpM2AjWvsFcmMSa5yqF3gg2rxQiWi28BLF/KQqRA99oxCDX2wk82D7S4+S61PAV8aVdNy0CCVUWwDynku0RhFFXbYukAnBe2IWcftSHEkrELKFgJZCvBYiZyq6LRVgclgF5NmUxAEZj3kemLCwh2piT/BqDJ6o1bCf6UdMivGmEMWJGDpElzhzpVCzuDenp7oAWwLGWAH6oEKUiFwkAnMjBPkaOPA6ywDaxk7klhbRmHZH1JI2Vi5E2UlZ+Ogg2gBV5XUqq1mSG9GGdmIJLL4kQsuWGzmMnquoEzVCuCR8qidGtNao+2cO1rrlbZYM9EAsTE1T6SdVo48R81AE5XlyKvPDOSTwUMmAehVUmc8i9XIBuAvdxowimARjcY6FJqkjtmKd2kit1z1rz9eWxXvYatKkC9/xjuVEFSiXEnrahUfZgyBrWRnLWto9YVqbVq3e0rh6BuOYNrZuTeueyOnwdM33LUA33CHDucP/rSv6xp4AxrfHE03mA4dI9HDWxa2weFDzQZHwMBEc0MQGGRCE8QfHir3o/GBlQAbmLuhm8PPZQqy6y5mkCDriQRDotBlhcE1NqsF2rBALVHDsJAcMfDdOnEErtooLDQ8q1CuEEPm/HUBgYsBoAMMRmwvWJYYTKI4pSjkqBLGBEROkA4A3gIk2FGIUvLnLPh6kUWwMym3Djty7UYUQ9HkZ6qbslBK0QoYrFIB7VqRda9CWB6ljVZI9QUdlr5HGQpi0DeBrsmcuXdZl3FW2Ym0WVe9Kj5w55ykFshnaOWopA9Au1VyuQdLBUuAHDhVIeiIk5x3zaNeYYh5KwyqosyKHmqRUUtHsCgH0p217oETlNomTg3W97YrabAOxoxtdeJhZKFK3qurLbxlctBe94biKfR2lgOGYKRWBd5pVSlfaEYjUwpRRZgTgKXlxl5QFRTQ8Bm8bDWkaoVEUqDHDYBlSIXMjNZI+mSU1gmzviopfbQBE5wCFyGXL3LHIu27/yKRP4eFxWZYVzs6NKSHScISMv4A6RO6b4sTEqeVSA6p59LgZ8httQNsOF3pSENoE96TagY86pXJoHRvPbPS4ov7Weijdic8fUJtOQEwDqZRrMLqiBxIJVTyXDAKNYhDOkCZTdYjJQAkaVIMQPuB25GFAte9QSirBxWHOCHBP9IcpY9B/mCvCkEpA10cA7QYvetgpcFBBhlrgGckDh2AAsTVxuYAVDPz7NC2NDgMNDTtSbU0QftJujnQY0UOgEjWzBNt5Tx1guKshx5mUdLiwjcVQozdMddsu6N7yC9VyCgN+nUekxGk8DGhPHNDD3ajsiFdnp1uodwZ8JtMGpsdIdMCuxZpZMkeRCEwf86lVY8FXiwcgJQIDegDjoXvTwwKqLYFaAIuHX37mw5475r+mJaqELuuLf5+Ch6dywH7zjvAF8LecBlUEuoGkraQQMg7oDXYO9dWnVvdaBDNwpiC00F1CAHbIMuxG1S+m23sSaAUNFj3JEaW9L3mACOnP6Ow83rfFr49Tng9ugeG9XqZCflv99uFma/3IST3ewjH+3gx9/V5vV79eKQRvt38Ofiv/R8v+M73S6h0PQNpT/fr+brzgvOKp+ftxeutyHzecT4/SajXQhDUlH65fnzMX5Sm9P0xTqD0un/njdX8A9O+R/frsc6ezvr8KVC9FA1oPO9N5qVD7BI+3kW+j/YYA8r0loQqQ8ks//MN8vEfg8FJFRrfhnIAAFM3SURBVHja7b1peFzXeaD53q32vQqFfScWLuC+iqQWSrJk2ZbipOPEiT1J2+l00t2zpefpeSa/+sf8mMz0kknPdGdsx0mcOI7tSLZlWytFiftOggRAgACIfSsABdS+3mV+FAASJEVRJGWK1H2fhxLudu65p+p+9Z3vfIuQTCYNTB5bBEFgZGSEUChEeXn5w+6Oicl9IT7sDpiYmJjcLabAMjExeWS4o8ASBOFjNSYIwj1dY2JiYnI3fKjAKhbyxOIJjLu0cBULedLpDKlkkoKqfeT5um5gGDqJRAJN0x/2OJiYmDwC3FZgiaJA17ljfOu732M+kVnSnJZOXdKibtSmJElmZqSfk6c76e/rJhpLIkni0unXzzUwEAQRrZDh5MkTpNJpei5dIpUtIoqrz1+9/bCHyeTTQqGQp3gXP4gmjyfyrbsECtkU/ddGcVugr38I/+Zmjh85SjyVwRAVdu7eQ3xqiIGxKYpFlab2jbiNAtlsDsHnRsCg+8IZegdHcXgC7Ny+hf6eTqZmF/CVVRF2GXzwwfsURQt2SUZXc5w8epLx6ShlVfVsbKun88IFUtkcosXJ/v378bqsd63tmTy+HH7npzhqOti7ed3D7orJQ0D60z/9039/4w5RFBm/1kv30BxbOtbQ03eNNY3VvP32u7Rv3oFSjNHVN0pieoy05GFzewPHjh3H6XKRVyEZi1BUVc6e7WTLzl1kFyKkcjnmoouUhwJcPHuOxjWtxGKLrF+/nsHePjLJOD3XJtmzeztdF06RSOfpudTN5l17mOy/hOAIUl0ewjAl1sdGEARisRgOhwOXy3WPrRhEpicZGRtHQ8TtdKCpBcZGR5iYnsEQZZx2GwsLC6SSCUbHxihq4HI5EdCZmpxgbHIaTdcpaDoOm4XI9BQjY+NkCypulwtREIjORRgaGSWn6rhdLgQB5iJTDI+OgyTjdNhRi3m8gTJEQyOTTTMTmcXucDA7M8noxCSGKONy2B/2sJt8QtyiYRm6Rk93N4n4Iv2DGpHJGUYmIwQrqtmwoYPCnJPht45gd9pYv34D69uruNR5nlgqjSA4QRRJJxZx+oOsX7eOhooQ09OTjF5LsYCOYeg4PR58Pj/hUABJFFhYiFFZu4YN69cTGe1lPLpIMFzLuvZ2okNdFNUimNPCh8aFEwf5qx+9RWVFmOmZeb7+jW8SuXqG989epdzvYnoxx//yJ3/MD7/1lwwvZqgu9zExE+dP/uRPiI9e5K9fe4/K8jIGBwbZsP8FPtdRwXf+/ifU1FQxMjzO7/yLP6LKkuYvvvV9guVhIjMRvvjrv0uNM8ff/PgN/F4P0Xiaf/nH/5K+7os4ajXe7znFqUvXqKyuZV1zBcdOdRIuCzIzn+AP/sUfsrW98WEPm8knwCoNSxAEkgszHD/bxa/95m+xZ8c2yC4yMD5DdHqCbL7I8LV+JHcYSyHO1dEpsokFRqbiNNdWkMnpoOcIllcxfm2AVDbPuVMnWViIEYnGaairZmRomOqmJiZHryHZXMTno1TXVtF/9QrZbIbu3ms0NjQSX0iyrmMtYwNXsHjLqa0sMzWse+B+NSy9kOGvvvXXbH7mS/yr3/9tfA4JVQcBjY6tu2ivL+fU8ZOs27qVnjNn2PbsF/ijr/8m/eePU7Q6Of7eIZ548Tf4F7/7GyxO9DOXl2mvC+GvamTfjo30d15A8YXoO3cUb/M2/uRffYO6oIdYKskH77yJp66Nzz+7h7HeywzO5bFpi0iecqaGrmAJtfKvv/YF/vGHr/KF3/w9vvHbXyYx1c/RrjGe2rPN9Nl5DLlFwxJkC/ufOkBNeRBJFNm2Zz+u/gEuZ5JYFRFXRQMdGzdw6t1fEnJ5KegiL3z+RYIuhcVkHkEv4A2GqQh46R8apX3Tdlqaaui70kNOhaefPYDf62f3rl0UsbJ5+zYqqqrw+TxMTM2x96lnaawJU1lZjSwKtG3cjuIKYOimsHoYqMU86azO2pZGBEFi+449pLMZ3vn5Za6e7yXkd1Bc+iFRFCv1VZWIsg2P3UYulyWbhTUNtQiiTFNDNVNjBTLxFOdPnmZypJx4Nodh6KRTGTqeaEESRNZt3kr5fISjv3yVrDrMm8koeclJbcCLkYgAINud7N62C49NQlOsrGluRBBl1q5t4ezbPaiagSSZavnjxiqBZRgGTm+Q9b4Qul6avnmDYTZ2WEhk8uzZux+HRcTQdfxlFbQ2b2BNbRm6pmMAHv/1tryeFmobW1ba3bl776r7CELN9W1dp23dRtrWXT/e1uZF13VqGtYAhqldPSQUqx2/z8Lh46ep8Vv48ff/HtET5vKpi3z5975BtUPj/OmLZLM5dF1H10suKpquYbE5CAQsvHf4OG5pKwePnkWqWs+Rw8cI12/gy8/vZKqvh1xexR/wceL4STY1lXPo568SFTxU1dQglLXxlZf28cG7b+IIeUkmjNKPlyAgySJWhxePoHHk6HHc+zfz/uFTVFa2YjGF1WPJLUZ3YLVwMAxk2UJdbS2KLGIYBgZQUVWNz+1Y2ebWRkrHltoy7mF7qaGHPUaPNPc7JRREmeqKECePHOH46XMUFTe//soX0LOLnDh9jmvjUwiijMPhx2WRaGhtpzzkY3JsmLL6dnZtauXsqeNcuNxDKpPCV9nAE5taOH36DD1XB9AkBU238KWXnqPv0mkOnzjDXFrnlVdeYeu6Zk4eP8zxU2eJZgyeO/A0hWQUT6gaQctRXtNITUU51WE/h99/n+Onz2LYg3ztt34dn8s0vD+OCGbw8+PNgwp+LuRzZHI5HE4XFllG11RS6TSKxYYkGGg6yJKIKMtIoohaLCKK8PprP2Sh6GBHRyM/+dGPaNz+HF9/5VnSqSS6IGK3WsjnizidDtRigVQmg93uxGpRgCWH5GwOh8OJRZFR1SKCIKLrOqIkIS356xXyWTK5Ak6nC0WWHvawm3xCmALrMedhZ2sY6u/m9TcPkSuoBKtq+GevfAm/qf2Y3COmwHrMedgCCwDDQNU0ZFm+/7ZMPtPc9zdoOYRmmWWjq4nJCoJgCiuTB8J9fYtUVWViYoJcLodhGLhcLqqrq28RYssIgrDKoH/z9oexfN5y7KK5Ymhi8tnkngWWIAgsLi7ywx/+kGQyiWEYrFu3jv3791NTU3OL0FKLBXL5Ik6nE0EAXddIpzPYHU5k6cNd/AxdJ5PLYbfbSSbiIFlwO00biInJZ5F7dgYWBAFVVSkUCiv+Nz6fD1EUGRkZWTU1FEWRicEuvv3dvyGymESSJCauXeFb3/oO0/MxJElaydBw8/+LuSSdFy6zMDfNa6/+mP7RacSV85cyOyxleJAkiamRAXqujnyolmdiYvLo8sAMC4Ig0N3dzfj4OKIo8tWvfhWPx7M0fRMo5nNMjw9zpX+I6tAmerq6iC4sks/nuHz+NMPj0zh9Zaxva+Bqbx/pdBqL08+2Te3IskjXhXNMRRbZZRW5eOYEY1Nz1DW30lgZ5Pz586TzKs1rWuk7d4zJlEBFZRkhr8ucPpqYPEY8UIEVj8dZXFwkEAjcYnw3EGhpbmZq9BozjWXMxXOsaawhl04yNDJJsCxI54XTiGKeM+c6ef65Z7lw7jRut4OR4TEa68KEw5XEZkY533WVjvY1HD10kOHKMOPTUda2NTAxPY3X5yNnUbBbLZj5aK6jadpS9II5JiaPLg906ebG6dzNGLpBqLIGo5Dm0OGj+Mpr0RIzaJqKbqgsLCxQ1DVUTaOyoZ6NmzoYH+qjkC8iSTJl4TKC81n0fI5MKk8skcTlclNeXQ8CTE5OEaptoaYsBDknbocNTTMTvS1TKBTIZrOmwDJ5pPmVrTUbGEgWO41VXn7ws0P83je+Sd/ZGeLRCOOTM+zcsY2hgV4SiRQYoBt6KY0y18N2NE0nXFGJzz9FdXUVhaJGPp9CsLqpr3HSPThEeEMtU1OjxNMbcNstppK1hN1ux+l0PuxumJjcF5+IwLr5V9wwdMprGpH9GtVlHn5D8tJQU45U2IonWI7NYiWZzrFtxxNYnG7cbjeiILB+4ybsLi/hoJ9AmZ+ODjuNjTXkCiqTkSitazfQUBXi8qVLZAs6L77wLGGvhbxxlUKhCHYrZiyiicnjwz17uguCwOzsLN/97ndJJBKrfKTC4TDf+MY3bjC6X6+OYwCiIKDrOoIowg3+VSsnYKAbxlIeeaOUvG+pl4ZhrFoBNFZdb2AYy35buqld8SnxdDcxeUDcs4ZlGAZ+v5+vfOUrZLPZVcdcLhdOp3OVpnXj3/pyRoYlw/yH2VUMY8lwf9PhWwz6t2h0pqQyMXkcua8poSzLNDc33/aYGaJjYmLyoLlvG9ayYDLDZkxMTD5pHojRXdd14vE4oiji8XjMas4mJiafCPcVv7Lsd5XNZvmHf/gHXnvtNVRVva0vliAI6LpGNpdF1fSPJdQ+jsPj6qyl168zdH3Fdnabq8wprInJI8B9aVjd3d0AxONxZmdnURSFrq4uJEnC6XTS0tKysoqXWJjl0KH3iadziIqVA899jpry4EpbhqGDICJQWhTUlwSPJApcudyJp7yO+qrypUXEkoBZFpjG0rYoily70sl0Smfvjs2cOPQumrOcJ3dv5tSxIwTr21jbXLtKAIqiSHJxlgs9A+zetRvLUhro5QrUN095l/9evqeJicmvjnsSWMthOO+//z6zs7NIkkRlZSWapvH666+jaRqNjY3U1NRgt9sRRIHeSxeIpgR+/cu/xqVTR+nrHybksdLXexVNUGhrXUN8YY54IkkyX6SpsZmAy8rI6CQaIrIkMTczwbXhMZzeIK1rmohHIwyNjOMLldPcWI8ISCL0XrnKpvYmLl3uRHXVsHV9E/2D19he2cDFc2coGjKtba3kUjEWY3EW5+cYn5pnayHP8OAIZRU1pBZmmJqNUtPQjMcqMjM3T0HVcNosRGbn8QfDNDXWI4nm9NfE5FfFbYtQ3NWFkoQoigwMDLB27Vp+67d+i46ODiYnJ8lkMjz33HNUVFSsaCqFXJqeK1eYjS7iC5XT3trI6aPvMRpZJDo1wsRsjL7OE/SORsjE5oks5gg64b0jp8nnU6iawfEjRxAsDob6e8kXdU4dP4YuSVy6eA5XoJJwwIcii/R0X8FqtRDPFLFKBhZFYSoyz+LsOHOxLOmFSa6OTBEZ7+fomW6CAR/JZILI+Ahjs0kcYoH3j5xCknTOX+xCzcR58+1DWO0Wjh8/gaRYGBkaprKuEZfD+rA/wzvyYCo/m5h8OrhnG5bFYqG6uhpZlgkGg7hcLjweDz6fD6vVSnV1NZJUKgag6zreYDkvv/Il2hprGOnv5u33DtHbN0I+V0A3BBbmoxgoPPv85/nC555mcWaMS129VNY34bQpRKenkKw+XnzxRb785Vew6xmmpmbI5XKga0TnFwADu8tH0K1w7uIlapvaqS1zc/ZiJw6Xm0wuz4EXX+SFzz1HcnaWZLbI7v3PsHPbeiaH+jl5oYv1GzeSWJxmIZUmXyhSLGaZX0jSum4Ln3v2AM11VcQXY9gcTkzlysTkV8s9CazlKeHBgwfJZDJ0dnZy6tQpjh07Rl9fH7FYjIMHD5LL5ZbyVcGVztOcudhLTUMzLc11ZLI5vD4P1XX1tKxppqq6HEWRsVhk/GVVeBWV0xev0ta6BkPTsDrsZNJxRsdGOXX8OLPxHN5AgDWt7TTU1RMM+gEDUbZQVR7kav81aurqqKmq4OqVPuqa12ARDYYGhxi+NgiKgtUqY7Nb0TWN8voWPv/sXk4eOYyKQsAfpL29nbqaarwuOxbFhqbmsbm9bNncQWRykKHJiLkiamLyK+SebFiGYWC1WnG5XKxdu5ZcLsfrr7+OIAg0NjYCJW93RVFKxm1BYOO2PcQOH+WtN99AlBWef/Y5rHqKk2cusIjMxi1b8VpFXDYrgqSwaesWlECUipCfWEU17lAVHrvCyaNHcLj9PLl/Fz6Plb7uS9idPirCwZVQnIY17ex7wqAi5MNwNLJ37xO0NjdT7VE4ebYTXRDZ99ST5BIzuHxuFKtMa2sL2zZvIJ87jL+8nqZcgUuXuwlXN1AfdBHLiVgsdqwS9Pb1U9PQzpraStPvzMTkV8h9Vc3JZrPIskwsFuPb3/42drudP/iDP8BisQBgtV637yzH9xWLKpIkIy2lRV5OASNJ0ke+/MtZTkVJQlzSbG7cvpvrS/cTkCTxI8/XNA1JkrkxNkgAVE2763s+bMxYQpPHiftya3A4HAB4PB6efPJJFEXB4XAgy/KHxPcJKIpyw/b1qjt38+IbhrFiF1s+/+btj7r+49yv1PZNz/Ex72liYvLguC+BtfzCWq1WnnzySeDjOXmafLYxbs7UYWLyETywfFimE6XJ3ZJNxejsvEwincXlDbB58yacNss9tRWdmSSRNwh4HAiKDY/L8bGuL2QSXBubpqWtDfkG2Rmfn2Y2WaClsf6u24qMXWMokmTPjs0AGFqR8akpqmvqWZydRHb48Lk/PImiruY5dOgwm3fvIzV9jQt9w9Q1rmH7xnUf65l6uy6gyzbm5ufZtWcfdvnu1tamJsbwhipWPovY/AyHjx2ngMLevU/itxt8cPgI8ZzG7j37qfRZ+eDIEaLJPDt276Wp3MexY0eYmFtk05YdbGhtuqfP9E7csx8WXA/NKRaLKznDAbNo5qeIT6MfVve5E0wldLZuXMf4tavkBDvhgIuZ6WnS2TwOpwOtmGd6eppUJo/VqpBKpVAsVgq5LLlCkXwuSzKRIB6Poekw3NfFbDyL02FDUSwIhk48kcRisZZsl2qByMw08WQam91BIZshmUyyGIuRKxYJBgIszs2yEIuj6QZqMUe2oGG1yMRjMaILMRSrFeUO3+3R3ku8fawTv89FQTXILE7zne/9kGBZOe+/8ToTSY2qoJvZyAxj45OIihWbIjA5HcHp8jA33s+hsz3s3r6Jg2+/STyXYX4xx+b1rYwMDTIxM4/L5caiSEyOjzI8NonV7sAiwdC1a0zMzOJ2uzh3+gjziQznLl7A4/aRSmXwer3oxSwDAwPMx5J4fV4KmST9A4PE0zkk8vzt3/wtms2PxyKSyxd455c/Za5gRUxFuDAYITnVx+WRBYIOgyPneshEJzg3ME2VV+G9451Y1DjvHL/Mmvoy3nz3MJu2bsdhVR7od+e+JMv09DTxeJzz58+TTCYBCAaDbN68GZ/PRygUWnX+chgNsFSb0LjrYqp3RBBKOf7Mqegjgc3uIDM+wVRknqa2dQRCAc6fOs58Ik8xn6GhZS2puQkWMypGMUeovILFWIz9Tz/H+EA3CxmZ2NQQaV2iPOBFEBUW5xcw0iqLsxM0r99GQMlysW+CZ599CtHQuHjmBBPzaRRBxRWswlqMc3UsQm1VBcgyklHgytVhXHYLkYUEmze0kCroTI9eZSaaxWOXUFxlHHhyz4f630miQH/vJT5wiUxHFtizqY2x0XF6eq8wMDyOX3BzaGGY98/1sa69gZnFDF//Z1/kg5On+Y1f/wqXOi/Ttn4zuYVp5jMi2zc1cHU0weF3fs6hU334PBKyq4J9mxp49c0PqAj5yQp2drSVc7JzAFnL4a9bS9gqIYoSkalJ3j98jPh8hOdf/jIzvacYms1hFFM0rttCYXaI8ZiKpBVo37ie4fFJPEPDaPOj4Cxj15PPoek6b/ziNaRgmPHxOfY/8zLb6138h7/4Ll198zz13JfZt66cwT//Sy5297Nlz36+8NxWeq8MMB2NE3I/2Bqi9yWwEokEk5OThEIhgsFSXKAgCIyPjyPL8k0Cy2Cgt4vu3n50JNrXb6I27GZ0MsradS1It8TuiUtCbXWg9I0ZTJeFXT6bJpHOEwoFSrGIS/tvZyMRBAFD1zHglnZX2lw6bvLJUNPUhuL0Mzc7S+fAVcIVlUyOjuCvqEUqGFy90oMgCjz34hew6jkiM5NE5uYAUDWVYhF0XWDnnn0QmySSMmior0XxV+MkwdXhQWIWjXBVLYookM9kmJiaZ8+zL+ASMrx16CROGVrWb2JDXYCTF7sYHhqnvWMrLVU+3njzHYpqkWJRR9UM1m7YSrVP5PjpHjTdQJRuL7F03aB9w3b+6Jtf4y//4s8pr61ny+aNfOHFz+NWY/jX7iE1cJ69z32er37hKb715/8nY3N5vvm1r5FPLtA/HuU3n/4il06+Q33LOrwODbWQ4ULXCK/81tfYWOvkz/7Df+ON6SF27X+Blw9sZ2BwiMTCNA015UyPjDAxFiG0xoVg6IQqqvn9f/57nD/4M3p7u5meXOSP/9X/iLhwjf/v+69TVRGgqGYJl4dpb1lLatM425/Yxdq6MJquo2kakclxEESSi3PYigYWiwVBlJAEA7WoYbEoCKKIRTYoaip2uxUQUSQZ9RMoAnNfhVQDgQC9vb10d3fT09NDT08PXV1dXLt2jVAotCIQBFFkcriPNw8epbqhhabaMB8cfIeBwUH6egcwdIjORRgdGydfVNG1ItOT44yOTZAvFEmnkkTn55lbiJdubhgszM8xMjJKKpNhuK+bt979gFQmTyaVYGRkhOhiHEPXiMfjRCKzxJNpItNTjI6OkckXMHSNmelJJqemWYzF0Q2DxegsI6NjZPNFTFvwJ4XO5YvnieUMduzeQ1tjNbNzc8gWG6FQmKrKKsrDIURDJ51OMzc7w3wsiaFrpFMp4otxDMNAlhU8zpK9qhQQr5PL5qioaSC7OM3IdIyGuhqApewhBslkqlSlnFLRXbfHhSQKGAbIskgikWAxFiNbKF7Pyi0IpZcUAaFUEuVDn8zAwGp1IItiye3GgGIhTyaXR1dLlc41TWMxGiWVjBHPFJBEg7n5Obq7LuEsr8Nv0egZmmLLpvVLGXkFFElifj7KQnSeom7gcFhZjMdYmJvl4vlODr53jJRmob6uEtDQNB1DN7BYlZJAQUCSFAS1SDQaZS4aRRMkampqeXb/HlKzY5w4ewFV00hnMsRiiywszPH33/trFlQLLz27n8TiAhYFhoaGGB8fISsolId9DAwNMz4+TiwvUx0Oca1/kLmpCaKJFH73gy96cl+l6ovF0gBks9lVCfw0TVtVYkvAoL+/j6b1W9i1fTOGplJZ3UA6PocgCgz3XeL42UsosoA7VE21V6ZncAKjkKGiuQPio3QPzbDryecoC3YQGe/n1dffJeD3Ilpc2MgyPjbJ0GAfly9cQLLaSSXS7Nm7m1NHDmLYA9RXhojMRRG0At7KNdR6DS70DGGTdBYLEs88sYWz5y5iVWRkV4iXX3oey10aK00+DiJr1jRz5vwlZieGUFWNrdt3oSZnGRgZQxCgdf1GQh4HF04dB0Fgw6bN6PkMZ08eQ1OL1DW5yRkFJEnE6nDixsApS1wZnqC1rYlwwEvMcONfmo4oNgcb1rfR03kWgLa16yE9j91qRZQt+P0BKsMBLl3qYX5CJ1fUsDlcYDHQFQm7TUFWJPwB3x1XNZ0eP5WVKgYC5ZVVeH1+fA6R85e6KKuo5MzFC5TbNa72XOG/zo1iL2+mtcbDz998A0VS2LnnGRbmpghVN1ITcjMcdVNRWc2azWt49Rfvck7U2bR7Hzvaq/iHV1/nv129TEPLWjrWreF87zCLMoiGgmxxEggGqUtXI4sCPn8AsTzI+konP/vR99EQePaFF8hNDXLsRD+S5GLDunaiQyrnzl1kwW9BcIdZ17aGn7/2I0R09u97hrZqJz947U16L+rsfOIAG+u8fO9HP+Ovuw0279rL/k31/O3f/ZC//JtrrFm/jeqQ94F/e+7ZcVQURSYnJ/nOd75zi8Dy+/384R/+IT6fr+T7JMDbv/gxSngtz+7ehK5rLMzPsjA7zaUrEwjZWSJZgcqQk9HxeXZu7yCVyTEzNgz2CjxiFHf9Jp7evQVRFJkZG+TVn71JeWU1ofIq6oJ2Lg1GaK10cnFwlt/57V/jxHtvMDafJbU4w4tf/ira4gQDozMsRKaI5SQc1iI7nnqJCnuef/zZewRdAjNxlcaqIIPDE/zW13+fqqDnkbeLfVodR4uFPNlcHovVhs1qAQxy2SyGIGG3WcEwSt8rScZmtaBrKtl8HkWxIIkShqGvOBsbBogiqKrGwtwUJ0+dY+PO/TTVhFfdM5fLYiBgt5VqVl43K+iMDlyhbySC0yKwmFZ5/rkDWC1SqUiKWEp7pGnaHReUdF1D0wwURaZYKCDJCppaipVVFIliUeX9N36CEGpi75Z12GwOZFkgn8+jaTo2ux1dLaIZYLVYSu3pBoosk82kKWgGHrcLAcjnsuTyRdweN4Khk0ylURQLhqEjyzKiJGHoOrKioKkqCAKyJJFKJkCUcTkdYOgkkykEWcblcKCpKnlVRRFFEEQURSadSqIj4naVtKVsJk1RM3Av9SOXzVAoarjdbgQBCvkc2XwBl8v9iWQy+dUs5wkiZcEQZ3sus2VdM2Ihxes/+SlNbW0ggKIo+Jw+GhsrkS1Orvb2UVbXQijoZz6tI4oKoWAAaclor1gsbNqyBUHLcfbSeZzbt6KpRRCgWCyQzeXJ5/JIkojD7sLntnPkaDcFa4iysgCJiThgkE6nSBazFFUNWXbgD/ior69HkGw4bKWXyOSTQbFYUSw3ZroQsNlvcEkQBOyO69uiJON03Ph1FZdOu/5SKIqIJCms37SN+qqyW+5ps103AC87/5bakKiqa6KITL6os35LHQ7bratbH7X6LYoSywWdlKVoD/GGZ7RaJbbt2Q9W56oVW6vVdr0NxbLyUt7Ynt3h5EbztdVmx7r8PIKEx+O5tUNLz3hjv13uG84TRNw3XCfJMo6bntHpcq/avrkfNruDG4YVi9WG5YbnedD8SgSWbhis27Sdialf8to//RhRVwnVtdHaVE++MElbUysfHDtFd0+MYEUd1ZVlTE6PI+gFNMGG5HJgs9zgp2MYDA8OIFssVFbUEA6X0dPVg95Sj88+xj/96IeAwt4nttPXcwVRFAkE/PSNTpOWdBAlWpqb6T5zFF3Nk9cENm7ZwamTp+jqvoInVIXdahZhfRQJlVcRugdF0mp30tq29hPvX1lF9UMYlceH+6pLGIlE+Pa3v00ymVw1JSwrK+MP//APb6lLqKlF4okECBJerwcBg+LSSkM2kyZfVHG7PaCrpNJpFIsVQy+p/opiWYk/hJIqmssXcDhdWBSJbCaLbLEiUlKPbXYHNotCvlDAYrViaCqpVBpZUQCD3gtnGItmkPU0Sc3GV37jZbRchmy+iMvtRpYeD/vVp3VKaGJyL9xX8HOxWOTEiROMjo6u2t/W1saOHTtWFTxdueGHVNe5ef/tXBluumCV79WN/lwf5tt1Y5uJhTmu9PVT1EXWrltPKOApuTrwePlzmQLL5HHivgTWMjeH5dxOUH3aWDa4wurCFY8bpsAyeZx4IDasR0FA3czjLKRMTB5XHj1JY2Ji8pnFFFgmJiaPDKbAMjExeWQwBZaJickjgymwHnPMjJ4mjxOyqqoPuw8mnyA3puwxMXnUMTUsExOTRwbZTGf8eCOK4iPpJ2dicjvMb/Jjjukca/I4YQosk8eGQjbNhQsXSeeKAEyNDXGlf+iurp2aHGVsZv6+7q+rBU4fO8I//PCHnL10Bd38rXjgmALL5LFBkkUmRwYZm54DdK70dJMtaCxG55iYmCRfKJJJp4hG50sph+fnGBufIJ3NoWsahm6gqUWmJieYmo6UUgank8zPzTI+PkEml7/j/fu7zvGTd48T8nv5yY//kbGZhYc9JI8dpgHL5LFBUuw01FYyPjZOrV8hkdUI5OMcPd6HRRGxOHzIapzRmThhv5dYKoXP40Z2eAl6ZAyLxvS1y8zG8whanmB1A8XEDDMLOdw2CYs7zIEnd39o1Ry3L8zXfue3aQjbOXbsFEX1wRdh+Kxzew1rqd6gJEmlZPqY/jwmjwa19Q2kFiL0Dwzi9AZZiEyQUw0sikxkeoKFeJr2jm1s27weEQNEGa/LhaYWScWjTM0n2fvkAfbt3k5kYphErsjaDVvZtX0LmVgM7Q7zvOrGNdiMBP/PX36Xtm17aagOfYyem9wNt2pYgkAuneTq1aukMnlq6puoq6kgm8lgsVqRRBEQEASD26epWp2L6qO2TUweJN5gGLeicv5SH/sPPEd0OIXb4qSyMoAgWchnEzjdbkTZoKFxDTJF+q72UlEdxGL1IRg66XQKIZMCQUIUxKWqOdoNVXNu/+M9crWTv/ybV3nxSy+za/P6VZWkTR4MtwgsQVc5cvANZrMSNSEXP//ZT/niyy9z9fJ51m57gvrKENlMBh0Bh92OrpcqPmuajiJLZHNZZMWKzWpB01Sy2RwWi6WkrYkC6XQaSbZgs1pMwWXywBEkC03NTSS1SWqrKgjZDc5cuMzwSIpAeRUepwWHzYIkFpmLTCFIMuVVNYT8dmRHGSGHSOfZEwC0r+sgE59dqZrj89+5as7M9ASqINJ14SwDVwf5ym+8QtDruNuum9wFtybw04r86O/+Crmsmb07NhONzFDIp3jzrbdp2/4UrRVOzl+6ggGs27wTp5rg1MUeKmvrEAppFpNpdCSeffYAXWdOEImnKWTTbNq9HzE9T++1MZAUnn72eWrCAVNofcJ8FhP4GbqOqusrZeUL+TxFVcPusGPoGoJQ+vEsFvIUiio2m700Y0BAEgWymSyIpeo9peo6paK+H1U1Ry0WyeUL6IaOIEo47XbET6ByzGeZW2xYgqSw/7kXEPMJfvHzn3G6swt/eQ0tLS2sW1PH+YuX2LLnaZ7fv5Ou82cYGx1DsnrZuXUTNquTxoZ65mdnuHD+LNPxPC+/8gpBj5XR4WucPHmWQLiCQnKOc+e7MKuVmnwSCKK4IqwALFYrTqcDURCQJHlFiCgWK06nE0kSEUVpxdxhdzhKpcZgZWYgCMJHVs2RFQWXy4nH7cbtdJjC6hPgJoElUMyn6eod4IkDL/B7X/9dvFKRnt5RFKsFiyKhI+L3B/D7A0iGhmaINDa1YJU0RiYmKKg6FouFYr6AxWbD7XbjcjnQ1SK6YaAoCpVV9ZSX+U3tysTE5GNx00+GgaxYkYopXv/Jq1SXh5hPFdm7vZpr3WNcGRijobKMQ2+9jiJoBGqaCIgFNFFEVYtkMhkSiTjZTArJ7sWIjPHaq//Etat9bN73LHZBZXFhgWI6SWXzBkRBQDeFlomJyV1ymyIUAloxz+TkBKlsnkAwTEU4SCK2QDqvEfJ7mJ6aQjVEqmuqUbNpdFHB7bQRmZ4ilSvisFnJ53L09PTi9rrp7+lm61Mv0NFcxfj4BIrdRVVlxSdSGdZkNZ9FG5bJ48uHVs1ZDphdLtYgLJXV0g1j5Ziu66sqzyyX9AYo5rOcOXWS6fkFvIEK9uzegdNmWTrfQDfjFn4lmALL5HHiQ62IN+dQMgxjpXD7jcdutEMZur5yjqRYeeLJZ9B1vSTglgSfabcyMTG5Vz7R0JxlzcwUUiYmJg8CM/jZxMTkkcEUWCYmJo8MpsAyMTF5ZLgvG5YgCKtiq5ZtVsvcaJy/cTXxHm+GcNP1oigu2ch0c9XRxOQzwEcKrDsJmkgkwuzsLAC2Ja/2ubk5ACwWCw0NDaVId0EgnYiRLmiUBYPAxxMugiCQy6RIpAuUhfwA6GqRoeFrRGNJyiqqqa+pQi0WECQZWTIVx5sxFz5MHgc+VGAJgkAymWR4eJg1a9bgdDpvcWc4dOgQnZ2dCIJAeXk57e3tHD58GEEQsFqt/P7v/z6NjY0ATFy7Qn8kyxc//xzoJU1M11TyhSJWqxVRFNF1nXw+j2KxIEsSmqpSKBax2uzMT45wfmCWL33+WSTR4OKZY5zrHaWxrpIzp0/zzOdfITk5gKeqlfWtdRQLeVTNwGq1Yhg6hmGsBK8W8nlEWcaiKBiGTj5fKMWYSSKSKFLI5zEEEatFeWxe9Gw2SzqdNkt+mTzS3FHDyuVyvPHGG5SVlbF3716am5tXBYA2NTXhcJTSZ3g8HsLhMHv27EFYSgDodDqXpokihq6hLWVgLGlcUQ6++x6xdA5PsJID+3dy7vhhJudi2Jxe9uzcyoUzJ0nlCrj9laytC6Br2lIqIoPZmVmsDj+btu6gtrqaTGyOM6dP466JYSXDmdNnKGo6Da0bqPQpnDrXidsTxmOH6bkouiBz4LnnmBy4TN/QBLqm0dS6gaqAlbMXLqMjsmvvU6ypr3oshJbNZsPhcDwWz2Ly2eUjp4SaptHf38/Y2Bi7du3iwIED2Gw2DMMgGo0yPj6OIAgEAgGsVisTExMIgoAkSeTz+dvmDxIEgd7OCyQ1G1/64gHe/uXPOPhekoV4lle++EXGBnuJRhewOP3UBeHc5StUh3YgsDw9Fdixbx/Hjp/k9Z/+BFG2sG//k6xpbiLY0EZP5xlC9e1sbAzy+i8OEqsKspjROfDsRq72dtPY1ETnmZNcudzJ2PAIn/vSy/SfO8zYyBD9l+fwVzeiJ2c5cuwMDbW/hvQYRBAt2/vMzLEmjzIfaewxDAOLxcKaNWtoa2tDUa5Pk/L5PJlMhkwmQy6Xo1gsrmxnMhk07aac1ksvjCBAJpvHHyynPFxOyO9mIbaAw+snXBaiuqaafCZGZC5CQdWQZGmV1cvQigwODLB5z9P8/n/3derDTs5cuoLV7sBus6GqKuWVFZRXVGJXZAoFlea2NoJuOzMTU6TSGRRZppDPIUpWysrKCAUCCGjkskVEQ8DtC1FVUQamRmJi8qnhjhqWIAjU1dWxceNG1q5di81mW2UDqa+vx263A+B2uwmFQmzcuBEo/aK7XK6VlUNRkhgb6uMXPy8gCCIel5OJvku8+pMIk9Mp9u3dzdnjx/nZ6z9jfnaWyvIg6UyWXCZLNpliMZ5CkqVSvyQJQ83x5us/Y01zA+PT8zR17EJcHKWv/yrVlTWc/uAQQ34rht1NRdhLklLCtng8gacsTzqdRRUVnDZ4/ac/ITLaT1n9etrbHcyl0mg5laCvEkkSwTDtPiYmnwY+NPgZQFVVisXibW0fhmHwgx/8gEuXLiEIAhUVFbS1ta0Y3S0WC//8n/9zmpqaMAyDTDLOxPTMivtBuLKKYjrBbHSRsvIqKsJBorMzTEXm8IfKCQc8jI6MoAsSiiRitTuxWq0EAz4AdK3I+Ngoi/EUbl+A+rpacskY87EElRUVzExNkMoWqK2rRzKK5HWBgMfN9OQYi8kMTrsdBBi61o8uWpkeGSTU0MFzezcxPDSEJig01NdjsyoP+zO6vw/YDH42eYy4o8CCOxeNGBsbY3JyEsMwcDqd+Hw+pqamALBaraxdu3ZF2N3OZ6tUzOKmjBClHegGqzI2LvfhZj+sZZYzRwiCcD3g+qbzjRsyTUBJ6J0/c5Lh8RkUu5O9e/dT5ndfd+W4IZj7UcUUWCaPEx8psO548cdwHP20IggCmqoiLJU0e9xW0UyBZfI4cV+e7rdLF/OovfCGYSBK0iPZdxOTzxqmS7iJickjw33HEt6JmzWW5SnkvSbyK+Uq/Xj9u5/7mZiYfLq4q1jCD3vZ0+k06XQawzCQZRmLxUImkyk1LMv4fL4VI7cAJOMxFhMJXC4vfp/nY3W0kM+hGcJK+aWP7DeQiC0QS6Rwe3z4vB6MJfcE03nSxOTR5CNDcxYXFykvL0eSpFtW3A4ePEhnZycA4XCYlpYWjh8/jiAI2O12vvrVr1JbW4thwPRoP2+++wF2p4vFxUWefP4LdLQ1YqwyzAsln6ebDPmSJDEzMUysILN5Q/tN15RO15cuK+WWF5gY7OWt947hdDtZWEzy/BdexppfJIWTDW0Nq1Yi7y4z6u31O1NzMzH51XHH4OdUKsWPf/xjmpub2bVrF2VlZateUKfTSU1NDYIg4Pf78Xq91NbWrsQSLmtXogjDA/1okpcvvvwlxvq7SCZTRGcmOHPuAioKO3buIDYzxtVrI1hdfrZv7uBqdyeziwmqG1oo80jIssT02BBnL1zCEBW2bd9Jcm6MkclZstkcrRs2s66lAQEYHryC6CnjSy+/wHDvJeZmJhjpvkBcdxDy2Rm40sXsQoLaxlaaawJc7u4lr4tUlvkZGxnFkGS279yDlprlwuVeZEUhXNNIa205Z8+eJZ3X2Lh1Bw3VYVNomZj8ipD+9E//9N/f7oAgCGQyGU6ePMng4CADAwMAVFRUIC2tqk1PT5PP57FYLLhcLnw+H4lEAovFgtVqpaGhYSkAGuw2KyNDfXRe7iKV12lZU8+xQ+9SkJ0YmSg9/aNcu9KDzVeGUcyQTSc5ceo8tQ11JBIJ9GKayGyMns4LBGtbcZLh3OV+YpERErqTxgoXF3v6Wb9+PbIgYLXaGOrr5nJXNxlVoH3tWnLxKIonRDE2wdXJOFs72jh9/DiFYp5TZ87Rtr6DeGQCq8tHZHSIuXiW/p7L1LWsJxsd5+pYlNjMMJGEikspcqF7gPXr16F8ioMNBUEgFovhcDhwuVwPuzsmJvfFXRndl4OZJUlalR9rdHSU3t5eBEEgHA4jCALd3d0r52/durU01dJ1kukMTz3/Ei6rxIXTx3jz7YMUYosERAcOWcHldNPaUMHY+CSxbIHK2kY6NrQSmZpEtHlx210Uc1mKqsC2LZuQ8vP0vfY2mlWmo2M9dT6DK2Oz6LqBIRok0nme+fwrOBWDM8cPc+T4adZVBbBZguRmrtLS2s6mzZsYvNrL/EKCppa17Ni8gaPvjrO4sEA+X0ROxMnLVjo2bWLObTB7boBIdB5VcpO3WnG5HBQ1Hbvy2VpsNQyDRCJBsVh82F35VCGKIm63G0UpRUcsx9Sa3BlBEHA6ndhsto889yMFlsfjYdu2bezcuZNAILAy/REEgY6ODiorKwFwuVwEAgEURVlZnfP5fCs2pfnpUS72n2HP7h0UVRWPz4/DY0Vy+3HLGlkUInNRquoauXblElevDqLIAk1NjZw514XHUYfV6cZhn+fIsWMouQUcbh92UhiGga7rK3HKgigQGR/iyuRFntixmaKqY7c5EDAYHxmhqcLH5e5OrHqKyZlF2tubiETTFPIZrg4M07xhC4m5SYo62IwCRw+/T3S8n4IcormqitmUQFnQQTRtYLNIj7w3/Mclk8mQSqXweD7ewsnjTj6fZ2FhgfLycjRNY2FhAbfbvSq6wuRWNE0jGo1SWVn5kWP1oQLLMAzcbjdf+cpXKCsrQxTFW2w1PT099PT0rCTwa21t5dixYwAoikJ9fT3BYBBdN9i86ylk+yUmxkex+6t5adMmZD3LpcvdqIadHR0dZGMRBobGaN2wlbXtrYxdu8rcYpJnn3+eMr+ToiHj2tTOpa4eDGs5L+7fSGoxgsMXwGGFXdu2oogChiGwc//T2C5fYnxsFG9FPZs2bULIJ8gJw7SsbcfuGiASjfPUc5+jMugkEk1gs7l49tmnGZ2ao61jC5JswcglmUtkQJRwuZ3seXIvlzsvksprbN2yAUUSP3MZHVRVxW6343a7H3ZXPlVYrVai0SjASniY1+t92N361GMYBplM5q5swfcVS9jZ2bli2/J6vVRWVtLX1weA3W5n//79K1oWCLeNDVyVglkQVipH3xzmc2MfVqdtLq3eGUsrftfDgT78fqvbLl1bWmm8MdZQwNAKHDv0LqOzMXRVZdsTT7O+pW5Vm592g/snEZoTj8fRNI1AIPCwH+9TRaFQWNEUisUic3NzVFZWmm40H4Gu68zMzKx4I9yJj5wS3umF3LJlC5s3b161r6OjA+A2Dpu3L0+/qv0bqkvf6d6r91//e3X7d77frSFF1wdvBUFizzPP05FKIckWnE7HIxEfaWLyuHLfsYT3cuxRQhQlvF7fY/VMnzSGXuTM6eOMTs0hihJ1jS1s6Vhfmj7fwNWeTgqyi462Nav2xxbmKCJTFvB/5L1GBnpJFCU2rmtdtT+ZWCCd16koC63an0stcKbzCtu278Jpe7ipg5KxWQ4fO0GmoCIKEs0ta9m4rg1JXK2RDfReYmgqyv79+3FYPrrPw4M9JFU7G9ubPnzc+rtJGlY62lpW9ym+QKaoUx5aPW6ZZJRzl3rZvnM3DssnWjD+jpjWwLvgUZj6fZowtDyv/fSndPePszgf4f/5L3/Bz987BcDc7AyTMxHA4NQHhzh85jIAM9NTzMzOo2tFfvbaD/ibH/6cnKqRTiUYG58gnc2vukc6GWdqeopTR49w+NgFDENnenqKiekIqlrk0Nuv81+/+48kcwVSiRijY+PEUxmSCzN8/4evcfXaCDORWTTdQNdUItPTTExNU1A1dE1lZnqKyekZVE3H0DUi01NMR+Z4kNXk5mZG+Psf/ZxEusj8zBj/8c//gv6JOQq5NGPj4yTTWTLxOf7qO9/h5OVBEotxFheiRBdiJBMxxsYnyOQKACxG5xkbnyBfKHD+3Ene/OA0U1NTxFPpVfdMJWJMTU9z9sj7HD17Gd3QmZ6aYnJp3A7+/Kf8f9/7MamlcRsbGyORyhBbmObvf/Aq14ZGmJktjUNp3KaYnJqmqGroWnFp3CIr47b8uT6o1+e+ReXtrPrmC24iigpPH/gcB3ZtoCbwt7x17BgeMcbb751ERGf7/mcwDAEBnXdf/ycOnr6EgcHGbds4f6mHyYyV7RubOPn+IVJFHYszxL/5o28Q8jhYnB3nP/75f0WzupgaHGTbk5/j7V/+E+8e70ZCpXXDJkZ6urg4HOf9o4e5eOwYmiST0RV+9+VnSMZm+Lsf/AA9lWDvC1/Cb0R5+8hFBEFl7fYnqZFT/PLYeRRZYOdTLxIozvPuyU50NPY9/wqvPLPrgYyRYRg4nB52796FkIpw7vIg8zMTvPXDt5lLFxAVN3s66ukbnGBTRRvf+X//C8NzMVrWNJNLLVDQwemr4qV9G/n7H76K1WHDX9VMuUPl7KkjxCZ70C0B/rd/+6/xOawszIzyH//8v4HdxdRQP9uff5k3fvojDp+9gqEXae3YyujFLrqnMhw9fITTJ4+gCwoFzcJvfvlJFqKzfO/vvk8hk+DJF38NTyHC2ycvIaoqHbueIizHeOPYJRRRYN8zL+IoznDwdDeapnPghVf4wtM77v97dT8Xq6rK+Pg458+f5+jRoxw7doyLFy8yPT19Sz53w9DRPsL+U3JNuHdBt3y9pqoUCgVUVUMQSo+oaRqFQoFisbhkZDcNoZ80yyFUlaEw2WSUn//sTSyeADXlbg69d4h4Jk8uEeWX7xzEV16F3y7Sebmftevb2LNjF8XoCD2jc7S3NnKtr5POgTEABnouMK87+Xd/8j/y5Pb16JqGzWZnbVsTDklleCbGtm0b2bRxM9vWNlNVW01zfSXjwyPMzC7i9gT55jf+gK++/AyH3ztIQZBYu7YZj02kq6ufxYUFMrkiFeUVWPUMv3jrHTzhSkIuhfcPfUCm+GDsmIIgEp2f5q//+q/4L9/6G4qCk2RkkDNXRmhrbWZqpI8F3c66lgb27dtNPp3kiWdfZE25wrXpOO0t9fT1XOBcz1XiyTRur5/yoBdd11i3cTv/+g++TmJ6nFi8pGX1dF8gobv5d//2f2LvlrXomobd6WRtezM2SWVkKs6OrR1s3b6VjrVNVNXU0FBfwdjQNeaiMdz+EN/4F/+S3/78fj449B45wUJ7ezN2q0BvTy/R2AKZfKmegqSn+flb7+EPVxJ0irz9wRGy6v2P210XUoVbV+rOnj3LwYMHyeVyK8bo5fJeX/ziF9m0adOSH5bIxEAPAzMpntn/BCLXDd/LWUAFNM6eOkFtSwfVYT8gLNUTZFUWUcPQEQRxZVXv+vUGF06dxldRxaXzJ0jnShlI65ra2LV1PUcOvc3kXBJFFLG5fTzzzDMEPGbZq08KXddJJBLMz05z8OhpwuXVFGeHcXvd1FVX4wxp5GbHKeg6uiHg8vgor3DToHjJRYdJFUvVvC2KnXC4nJ3btlIZXPL7EoSlCkoGmqFTzGU4cbQHR007fr+XCCBLEoJhMH6tl7NXhnjp6Z3YLDK6rqHppetEUUQv5Dhx4gTe6jaCfi/ReY2qpmaetHsY7u/l4HsfUCjquL1eKqu9VOBEFh/Mj52u64Qravlf/u2/g8Qk//t//haT84soso2yUIgdW7fQXF1OnyAgyTJWi52O9hbm+6awWmyEwxXs2raZxsZ6bBaZTCrGofcO0dZSRShUR8DrxaUoLC9lXU+4aaDqOsVskmMnOvHWriPg8xA1WIoZzjM40MPZriG+cGDH0rjp6LqGbugIoohWyHD4+Akq61oJBbxMxXXq6lt40hJguLebdw7PkC0aeN1eysrd1EjeW2xz98IdYwn7+/vp6upa2ed0Otm3bx8ulwtd17FYLLS0tBCLxcjnSzYGm82G3+9ftTwpIJCKRZmaWWRmYpz5hXmSqQx1jS1UBFz09PaSzuXpuzpAqK6N6fERro1MEq6qJei2Mh/PUF9TwcjICFW19cxOjDAzH6O+uYXygJvevl6SmTyDff2sdbhYSGZ4+sDnsRlZ3nrjLRRFZm5hgY7tT1IfcvLzn/yMgeEp9mxuQTMF1oNHEPF53fz01R/x7i9lHL4y/vC/+wqRgbP89OAZkjMCa7ftxa1l8XgqaK/yceR8LxOiwL5nP0+dW+TMG0fZuv7zNIavceLkOSSLm7KlDB9tG7ZT8f5Z/uw//GdikRl27jtAXohzbXQYoZAhJwk4O+pYjHRyZcyNxdC41N2HoBeZmZ3F5ZD4u7/9LoVEnH0Hnic92Uvv2CgWI0cxLzM8PMrl/mEUCTZs2UaFTePYhStMSiK79j2P5QGFYikWK+GyMpwOB05nNVXlAWrq2tkwPcvJU+cwsPK5UJBgWQiH3YovEMSiKGzbuZ+TncOcOHkemyuI127hnctd2J1O6hsbqCr3ozscIEj4AyHkpXdxw8ZtvHv4LP/H//Wfic1Ps/PpdSjZBUaGhxDyCTRFxL15I7MnuxgMWLCi0tXTB5LG1NwCDofM9/7qO2TSMfY//QLx0W76x0axGBkyho3h0TE6r45iEQw6Nm2nXM5w/NJVxgyDJw68iOUBCKwP9cMSBIGZmRm+973vMT8/jyAI7N27ly984QsrTqRvvfUWMzMz+P1+LBYLcN3bt6WlhaeeempJA5LoPfcBF0ZjBMkwMJdlTY2fSKxIS7WX3pFZGmvKOH22kxdefJ7Oc+eprK1hZGSUnTt3cen8WVxeD7rkZENzBSfOdlFTGWQiEmNNXZhrY/O0NJRz8sxFXvjCS3R1dfLyl3+LMo+dU+/9kvGkTjI6geIqx28Xudw7wCv/7Hdpbyi/revD48RD8cMyDOKJONlcAUEQ8Hq92KwWDENnbm6Wogrl5WGKuQyGKGOzysxGZjFEmfJwGEMtsLAYx+X1oRcyRGMJ/IEQbqd95RaZdILoQgKH04HN5kASNOaiC9jtDjRVw+fzkkwmsdod5NNJ8pqBVRERJAVZEsnnshQ1gYryMGo+y9z8Ala7DV3X8Hq9xBcXKOoC5eEwsgiRSARdlCkvK/tQTeHj+mGpaoFUKofH60YE4ok4FpsD1DxzCzG8vgBet4NkIlF6jmwWq92BRZFJJmIsxpMEgmW4HDZiC/Mk0lkCwRCSYKAZIk6bQiKRxuV2lao/AelUgoXF0rjZ7Q4EQ2M+uojdYUPTNHxeH8lEApvDSS6doKCDRRYRJAuSKFDIZSkaAhXhMGo+w2x0AbvdjqbpeL1eYgtRVEOkvDyMLOhEIrMYokJ5OIT4IePwQPywDMOgoqKC3bt38+abbxIKhdizZ8+qNDPhcJhCoUAymVwpmmqz2SgrK1sVxrPy8mCAILNl6242N3n5yS/eYnAkzeYdT7NrfQ2x+TlmJ8aZm4/iDQZB0xCtbja01vAPrx/hX/0P/xPTV08Sz2QI5t2ohQy9V/vZ+fRLPLFxDdHZ+esOoghgQKFQRBItSJJEOFxOVcDF/NwMoxMTtDVU8PFSAprcFYKA1+vjZidvQRAJhytWtmXn9WDsisqq6ycqFsrCZaW/rV6c7lu9xR1ODw7n6tCg2hrnqm2rtZQ7ze103NpHz/U2JbuDmtrV59gqqlZtr+rfA0KWLfh8lpXtZfcZrBbqnNejCNxLfbUoyg37fLg9vpVtXyCE7za/H96b8s45XR6crpvGzXHTuJWVxt51u3Hz3jhuzlvGfPU4iQ983D7ShrV582auXLnCunXrbkkvMz8/z9TUFB6PZyWuLJfLMTExQSAQWOUlbxgG+pJjqCiI6IaGgYjP7WBkeJCQLc/E9Bxbtlbj8QdobWvHKklIRp6e4Wk2rlvDxQvnqQ24CPrLWNvWhqJY0ItphgevUeGEicgsDesgn8swMT7GZHaBC1eusf/5l+heGMfhcuH1ebHJEvl84YEOpInJ7TAXdz6aj85Fd507CqzleMIvfvGL+Hy+W475fD4aGxvJZrMUCiX13+PxUFZWtlJEdflcb7CcNYIHl2hg9XtQrFaamltobW3i1IkTnD4fo7phDa3rN2KRBK50d+ENhJH0AnWtm9i+sYVjx09RWd9GNttFV08vlfVr6FhTy4ljxzh19iI19Y2UBYNUh8P0dJ5HlCT2HniB9a0NxGaGGLnaw8SAgM1Xxd5tHZ+5GMAHhaIoJJPJh92NTx2FQgFZLr1Sy2aT+fl5M/j5I9A0bSWH3kdxV2W+PkwCfvDBB1y6dAmbzYbFYsEwDAqFAoVCgT179rBz586PlJyltnV0HSRJXInz0zQNUZQA46bYwVL0oKbrK/Pd0vXGqulqqR1xdXzhsoZ3m5qFjyufhA3LMAyy2ayZXuYmltOkLH8vC4UC2Wz2YXfrkcDhcKyk5bkT91WXUFVVpqamiEQiK3l/XC4XlZWVd2VAM/nkMesSmjxOyPejY8iyTH19Aw0NDav2L/tXPf76y6cf04Ji8jgh/6efzj7sPph8ghgIBKQUv30gdP+NmZg8ZOTDPalPrHHDWPp3wz5RWFUUx+QTRjcENobzpqpl8lggPwh3+dtRKjwhEvYpeB0ykiiQK+jMJ4osJIsPNOr9Xvt3r4Lz5mv15YSAS8L5I4dUKAVxlsqMlUqU3VM/lv5zp+cQDOGj+2Ni8ohwz9kaDKP0ot6IKAilGD8DGsJW/uVLlbRU2bFbRURBoKjqxNMab51f4EdH59FukFrL7QlC6QW7cXu5IqBxh+OwtI2AKH54ewDlZXZ21ll5tzNOfklYCKw+/8Oe2eu38mSbk3fOLZIt6kiiSGu1g5mFHE6XglXXGZkvwA2ZTcWlMVkWLAe2BInOppnOwis7fETn87x5YZGMuuynJizVWFzdJ90wVjwx2htc1LskrA6Zy/1xhhdVJKk0Frq+vBoqLI3bw/6amZg8GO5JYBkGBD0yu9o8yDfEVV0eTjESKcUUOm3SkpAyUCQDUYSiZlDUDJw2CVkSUHVjRRgF/BbWlFuJLuYZmStQHrJSF7IQieaZS2kEXDJhn4XFeIHh2TxBv4WmMiuLiSKzySKiJNJSaSOdKTIwlcPhVGittBFPFBicyeP0KLRX2piN5smKAnaLiM8lY7PLuGSBWE6jtszK7Hye0WjhQxYMDJwOC092+JiPF0kkVSIpnd89UM7xrgVqalx4i3n+7mQMt12mzKcQjRUYmy9Q6bOQSBURrTL72l38/UiCnesDVPlkat0y71+KUVlhp8wpcW0yy3xaozJopb7MwuRsjsm4SnO5nXKPzLWpLNVhG1vCFjwhKw5BIxhVGZzMktOgtcaOXYS+iQyqIBL2W+7iUzUx+fRzzxqWqhk8t9nHxsaSa34kVqR7NL2iCQXcMpm8xvuXYxTU0qqhJAq4HRI+p4xFFsgVSsLKH7Dxb75UCTkNj1Pk4MUYuzt85As6ZU6BU4MZnt/kY2Q2T8Ap8o+Ho7y0J4ReVKkN2zl8eZFg0IZbgbBP4a1T82xc58dmGLgcEu+fW6S93YtDMHDbRE72p6gNyjy7287z7U7G53K4nTKLKY2AS+If3pnmzFgOUQRJFJb8vkqVonXDIOS18MIWPx6nTNdIhtqQhSfWenF7LVgKMs9sk/j8Jg9D0zmCHpmfHJ5n01oPxy7MY/E7SSxkmcvDhkorp64m2NHkYleHn89t8RLP6kibNX5yPsZXniojndFw2QSO9KXY1+4mkzd4cbPGuYkcqm4gKRL7OvxsReTatTgxQWFXg42cDvNzWeKGzFq3aGpZJo8FUtP+P/73H/ciQYBsXieV09nd7kGRBH54ZI6j3Yml6ZSA2y7RUmWnscJGU4WdhnIbFX4LFllkOJKjezSDqpfCdbau9bLeL/Jnr04yuqgiiuB3yWQLOo0VdhI5HQpF/tMvIqxv8VIesGA3VP7stUn8ZQ6s6GQLBrqmUxGy4bUpeCWD//DqBL2RAo1VTva1OhmazlIeslHmLKWjySMyP5vhYkQjKBv82asTeMsctAZlTg+m8XitfO25cg5s8JJJ5JmKqXi8VjbXWvm/X5skEHRQXMiTFgTeODVLQheJRVKMpqFM1vk/Xp3C7Xewxivwtx/MMZvW+dKuIOeuxHAFHNS7BE4NZdjU4KQqbOfM5QX+9miUJ7b4WVfnZHE+y396fYq5tIZVEfHYRHIa1IYsjC8W8coCNrvEL49G6F7Q2dvmpi5o4UdvT/Hm1Swv7giiaQZ2krid1pUsGytuJ+Y/898j9u+eNSxRFDg3kORUX4KakJV3LiyuHDMMg6BbJuCWGZvNk8pp6DpYFIGgW6G+zIYiCWSXfvU1zcCiiHidMs2VdppCCg0hhSO9KXK1DmRRIFfQyBdLNpyCqmN1SpT5LPhdEjaHQthr4VRPnES2ZJSSFBGPU6apyo7fKZHL60xFC1jtMqqq45ZLdqtIokgiJ2KzWvG7ZDx2iWK8NK3NZVVOdsdxKAJTMRVBKAVVF1SDdLGkcS3bnEpTYLBbJOSigM0i4ndKuO0iWgrKvApujwW/YtA3XeA3nw9yqW+RvFYy0udVHa9TwueSsUoCqYyGw1aatrbWOGiptmPTNC5NF2guU5BXbHMG6byG4Cx9oBrgd8sEChKyCAuJIslMlqDXSiqVMotomDzS3FeK5HzR4MdH5/G7ZKIJdcWoLAgCCymVsbk8ZV6F2jIrkiiQL+osJFVGIqXpTGm1TODKcJqRVjf//a9Vk0+rnBxIEw5Y2VDvQFUNLBaBqdkihmEQWczTO5TC3eHjj16soKrcyoW+HIgS6+qdKEA8U2AuJ/HHL1ejFnVePT5PQYAtLS7UvM7JkQy1IZloQSCT1rgynGLvGgd/8us1FPMa3zuaAEGgWNTpGkqtMoQXChoT83l03SAaL1BIFTHiRXa1uLgSKVLR4iQeVakIO/g3r1SDYfCji2me3x7A6ZC4MpjAsMk4BINLY1lkt4Wp+RwXRrK8/ESQdS1epiZS/LwzyVeeKeN//rVqEski3SMZ9q5xsq5SBAO8MszEiqQEgUzRQMhpXJvOMhjTeHFPGICzXQskBIVtZaXQKZvN9pkIRzJ5fBGe+9PLD/wbrOkG+9Z7+dozYeYTRRKZUpZHmyJS5lWIpVX+008mSWW1ldUwi1WkzC2TTKkk8zp+t4IiQkEtCbZsTiOvGlhkkYDfxjefLWMxXqCpxsHrH0xzdjyPzy6RyeuIokEqb1DmkUlnNGIZDYsiUuaVSac1knkdRRaW/MQMCqqBzSoSXLp/Iqd/qKuAIAhY5ZLwVeSl4rKCgEWCvGogSwI7NgbYVS7y/ROLpHI6yayGzSLisEvkshoFAzw2kcWkiiAKKFKpPY9TxmUVmY8XyamlxYmAS2IhqZIrGoS8CrqmA6UV11yxlFVV1XQQBGSx1Ifg0tjNxovoCGyrivE/vNJAWbjcFFgmjzSfiMACsCgiW5tdbGxwUuZVkCWBVE5jbDbPqasJxufyt1yzvPQvcOtS/LIAMQyQZJFNTS5qgwrRaJ5zQyly6q3nLylxK9fevH2n+39clku66gaUBa1UOAS6x7OAsKrv3PB8N/fDuMmPy7jhvDuNyS19MW4cA4ENZQv8r19pMgWWySOPrH1CHpyZvMaR7jjHeuKlTINL9pYlZeCOvk63P3D9T72ocaY3zuklASCKtxEyxg3/M27afYdHfhDvc2QuxwzLz3iTq/+H/X0D2k3772ZMPuy4bph+WCaPD/Jv7PE97D6YfJIIAnY1ZwaimzwWCOn0vaeXMfn0IwoiQ8PDeDxeysvNKaHJo438sFa5l5Po3Zgc8Ma/b1x+Xy7rtYy5NH/3GIJhTglNHhvuu/LzvaCqKv39/StpdsvKyigUCsTjcQBCoRBNTU0rNdQmRweZml0AwOsvo7GhDlkSbsmEKtwQvwfGDcZnYSXb6NKepdVJ8002MXmU+JULLEEQiMfjvP7668RiMQzDYMeOHcTjcfr7+0vFT+vq+OY3v4nNZgND5+Lpo8R0JxVBD6dPnGTP819k29oGEokkFqsdqyJRVDVUtYgsK+TzWURZwWG3Y+gaqWQaSbFgt1lRi0VUtYiqGTidTjPVjYnJI8RD0bBsNhu7du1aKb5aU1NDLpejuroaAI/Hs5KfXTAMECTWb9zCxtY60ouzTE1Pk5zqY2ImimRxsmvbBo4fPYomO3DbLKQzGXRg/1PPMDXYxeB4BAOR3Xv3M3L5FJFUEV0tsHHHfnZsal8pqW5iYvLp5qEIrEKhQH9/P+l0muVS88lkkpGREQDKy8vZtm0bsqIAArqa58j779Jz3kEmr7OxFo4eu8LmrVsYvNLNhYuwmEjx0iuf4+IH72BITirDfhZmJ+gZmOLXfvOfMT1wgbNnz2DEY2x68nNYMhNcuTbIto3tZm47E5NHhIcisARBQFGUlUo7kiQhy/JK9eiV6hlLnpOiZGH7rp2sX1OL1e5kfrwfwZCx2ezUNTRht9vI58PUVFVS2LqV2YU4wwP9ROY8iIoNj9tNxuNG1yaRFQehQBDNiCJilqoyMXmUeCgCS5ZlamtryefzGIZBKBTC5XIhiuJKbcPSKmLJM9RiseH3+QkEgui6TllFDXU1fiKRGTLpLOsqwiwsJsDQGR8dZiGtI4oiFVV1pOeH+clrPyaTTLB20zbmrw2UHFclaUVAmpiYPBrcV5mve7qhIBCNRvn2t79NLBZD1/VbjO719fV84xvfWCk1nozHUGxObFZlpY1MKsFMZA6H20fQ5yKVzuD1+Shk08zMzCJZbFRUlKMXc0zPRFBsTirCIVKJBHaXG0MtkC2oeD3u+3mcTz3LZb68XtMPy+TR51cusKBU6XV4eJh0Og1AIBCgWCyuuDn4/X5qa2tXCqje6pZQ2rfsxrDsyrAciCwuuTXo+g3bhrGSbnj5vFJ83uP9ApsCy+Rx4qFMCSVJorW19Y7n3OgceruXbFlQ3XLOkmC64cCq7RvPM19dE5NHi4cisMD0VjcxMfn4iA+7AyYmJiZ3y0PTsJZtUMCqWMLlbeM2yZ/uZHO6OUznbu5v2nNMTB4tHorA0nWd+fl5crkcAC6XC1VVV20HAoFV1xSyaZKZPIGA/xZHT0PXiSeSON2ry459GGqxQDqbx+Nxm06jJiaPEA8lljCRSPD973+fhYUFDMNg27ZtJBIJBgYGEASBhoYGvv71r6/4SYmiwIWT73P4wjDf+INvEPaVSovpeilFsK7m6e7qYeP2HXgdFlRNQ5IkdF0DQVxaNSytTkqyTDw6xfEL/bz0+c8hmxLLxOSR4aGtEjY0NFBZWYlhGFRVVeH3+1cElN/vX5keIgjkUjGujc4ScClcHRjG017FocPHyebzGJKd/Xt3IkkC08P9vD84SD6Xx2q3Y6gFdMnBU08+wdWuC0zMzGH3lLF+TcVKHKOJicmjw0MxuhuGgaqqFAoFCoUCmqatbBeLRVRVXbEviYLA+PAASV1mw9pmrvR0EYvHuNrfT9uGLeiZWa5eG2FqYpKZiXGmInE6NrRztW+A5vaNFBKzjIyNE09lqa2pYfjKJWbmFxFFU7UyMXnUeCgaVrFYZHx8fCX4ORAIkEgkGB0dBSCfz69M9wytSE/3FTLpFMNjBvNTEUYnGwmHK2hd00hk5BKqppU0MkGiurqB+rpqQuEK6hvqmRm9Qj6bIRmPYyAgCIZpbDcxeUR5KALLbrezc+dOisXiypQwl8tRWVkJgNvtRpZlQCA2P81MvMjv/M7XCPscHHnnl1zu6sVms6IbpSR9y7pSySP++irjctqYdGyRyNwi4YoKctkci/EE91Ybx8TE5GHyUARWNpvl+PHjJBKJVbGEAwMDANTW1tLR0YGiKMhWJ88+/xzhgAdJFNi2Zx/h6VlsdgeKKLBh43YExUGhpgqbzUpeE7DY3Dz91F7sVoUNG7dhsTupqionmVX53EsvYXU4cNhd3MWCoomJyaeIhxJLWCgUOHv27EpK5NraWrLZLPPz8wBUVFSwefPmlewNgiCseMbf6L+1PG0sHeB6aa+lHFs3HhduUwRQ/wxMDc1YQpPHiYeiYVksFvbv37+yfSfH0dvFDN4+hnD1PZYF3I3tmJiYPNp8qmIJTaFiYmJyJ/5/u7DAhPXg8yoAAAAldEVYdGRhdGU6Y3JlYXRlADIwMTgtMDItMDVUMTg6MjM6MzIrMDE6MDAYLONeAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE4LTAyLTA1VDE4OjIzOjMyKzAxOjAwaXFb4gAAACh0RVh0aWNjOmNvcHlyaWdodABDb3B5cmlnaHQgQXBwbGUgSW5jLiwgMjAxOC9MBUEAAAAXdEVYdGljYzpkZXNjcmlwdGlvbgBEaXNwbGF5FxuVuAAAABh0RVh0aWNjOm1hbnVmYWN0dXJlcgBEaXNwbGF5mRrp2QAAABF0RVh0aWNjOm1vZGVsAERpc3BsYXn4nJwgAAAAKHRFWHRDb21tZW50AFJlc2l6ZWQgd2l0aCBlemdpZi5jb20gR0lGIG1ha2VyjxQU2wAAABJ0RVh0U29mdHdhcmUAZXpnaWYuY29toMOzWAAAAABJRU5ErkJggg==&quot; alt=&quot;stores criadas no banco cangaceiro&quot; /&gt;
&lt;/div&gt;
&lt;p&gt;Agora vamos implementar o método &lt;code class=&quot;highlighter-rouge&quot;&gt;save&lt;/code&gt;.&lt;/p&gt;

&lt;h2 id=&quot;implementando-a-função-save&quot;&gt;Implementando a função save&lt;/h2&gt;

&lt;p&gt;A função &lt;code class=&quot;highlighter-rouge&quot;&gt;save&lt;/code&gt; da nossa classe &lt;code class=&quot;highlighter-rouge&quot;&gt;ActiveRecord&lt;/code&gt; também retornará uma &lt;code class=&quot;highlighter-rouge&quot;&gt;Promise&lt;/code&gt;, pois a operação de persistência também é uma operação assíncrona:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;// app/active-record.js&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;dbConfig&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'default'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;version&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;stores&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;Map&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(),&lt;/span&gt; 
    &lt;span class=&quot;na&quot;&gt;conn&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;null&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;

&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;createConnection&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; 
    &lt;span class=&quot;c1&quot;&gt;// código omitido&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;

&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;save&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;async&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;

    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;Promise&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;((&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;resolve&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;reject&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;

        &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;dbConfig&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;conn&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;reject&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'Você precisa registrar o banco antes de utilizá-lo'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;

        &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;object&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;store&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;kd&quot;&gt;constructor&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
        
        &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;request&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;dbConfig&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;conn&lt;/span&gt;
            &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;transaction&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;([&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;store&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;],&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;readwrite&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
            &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;objectStore&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;store&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
            &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;add&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;object&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    
        &lt;span class=&quot;nx&quot;&gt;request&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;onsuccess&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;resolve&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;

        &lt;span class=&quot;nx&quot;&gt;request&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;onerror&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;e&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;nx&quot;&gt;console&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;target&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;error&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
            &lt;span class=&quot;nx&quot;&gt;reject&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'Não foi possível persistir o objeto'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;

&lt;span class=&quot;c1&quot;&gt;// função activeRecord omitida&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Vamos analisar o código anterior. A Promise retornada verifica se a variável &lt;code class=&quot;highlighter-rouge&quot;&gt;dbConfig.conn&lt;/code&gt; possui algum valor e caso não possua, rejeitamos a &lt;code class=&quot;highlighter-rouge&quot;&gt;Promise&lt;/code&gt; imediatamente. Esse &lt;em&gt;fail fast&lt;/em&gt; é importante, pois sinalizará para o desenvolvedor que ele deve realizar antes o registro do banco. O restante do código é padrão da API do IndexedDB.&lt;/p&gt;

&lt;p&gt;Agora chegou a hora de implementarmos a função &lt;code class=&quot;highlighter-rouge&quot;&gt;list()&lt;/code&gt;, aquela que retornará os dados persistidos.&lt;/p&gt;

&lt;h2 id=&quot;implementando-o-método-list&quot;&gt;Implementando o método list&lt;/h2&gt;

&lt;p&gt;Assim como a função &lt;code class=&quot;highlighter-rouge&quot;&gt;save()&lt;/code&gt;, a função &lt;code class=&quot;highlighter-rouge&quot;&gt;list()&lt;/code&gt; retornará uma &lt;code class=&quot;highlighter-rouge&quot;&gt;Promise&lt;/code&gt;. Ele receberá como parâmetro uma classe e, a partir dela, extrairá o nome da sua respectiva &lt;code class=&quot;highlighter-rouge&quot;&gt;store&lt;/code&gt;. Sabemos que o nome da &lt;code class=&quot;highlighter-rouge&quot;&gt;store&lt;/code&gt; é a &lt;em&gt;key&lt;/em&gt; do &lt;code class=&quot;highlighter-rouge&quot;&gt;Map&lt;/code&gt; &lt;code class=&quot;highlighter-rouge&quot;&gt;stores&lt;/code&gt;. É através dessa &lt;code class=&quot;highlighter-rouge&quot;&gt;key&lt;/code&gt; que temos acesso a lógica de conversão, aquela que sabe converter os dados retornados da &lt;code class=&quot;highlighter-rouge&quot;&gt;store&lt;/code&gt; para uma instância da sua respectiva classe.&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;// app/active-record.js&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;// código anterior omitido &lt;/span&gt;

&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;list&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;async&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        
    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;Promise&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;((&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;resolve&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;reject&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    
        &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;store&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
        
        &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;transaction&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;dbConfig&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;conn&lt;/span&gt;
            &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;transaction&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;([&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;store&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;],&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'readwrite'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
            &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;objectStore&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;store&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt; 
        
        &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;cursor&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;transaction&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;openCursor&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
    
        &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;converter&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;dbConfig&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;stores&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;kd&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;store&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    
        &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;list&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[];&lt;/span&gt;
    
        &lt;span class=&quot;nx&quot;&gt;cursor&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;onsuccess&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;e&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;

            &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;current&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;target&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;result&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

                &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;current&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
                    &lt;span class=&quot;nx&quot;&gt;list&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;push&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;converter&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;current&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;));&lt;/span&gt;
                    &lt;span class=&quot;nx&quot;&gt;current&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;continue&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
            &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;resolve&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;list&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;

        &lt;span class=&quot;nx&quot;&gt;cursor&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;onerror&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;e&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;nx&quot;&gt;console&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;target&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;error&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
            &lt;span class=&quot;nx&quot;&gt;reject&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;`Não foi possível lista os dados da store &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;store&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;.`&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;  
    &lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;    
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Ótimo, para concluirmos o módulo &lt;code class=&quot;highlighter-rouge&quot;&gt;active-record.js&lt;/code&gt;, precisamos adicionar a função &lt;code class=&quot;highlighter-rouge&quot;&gt;save&lt;/code&gt; como método no prototype das classes que representarão nossas stores para que esteja disponível em todas as instâncias dessas classes. Já o a função &lt;code class=&quot;highlighter-rouge&quot;&gt;list()&lt;/code&gt; será adicionada na própria classe, como método estático. Realizamos os passos que faltam na função &lt;code class=&quot;highlighter-rouge&quot;&gt;activeRecord&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;// app/active-record.js&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;// código anterior omitido &lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;activeRecord&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;async&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;({&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;version&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;mappers&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;})&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
 
    &lt;span class=&quot;nx&quot;&gt;dbConfig&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;version&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;version&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;dbConfig&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;name&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    
    &lt;span class=&quot;nx&quot;&gt;mappers&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;forEach&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;mapper&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;nx&quot;&gt;dbConfig&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;stores&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;kd&quot;&gt;set&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;mapper&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;clazz&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;mapper&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;converter&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
        &lt;span class=&quot;c1&quot;&gt;// Adiciona save ao proprotype da classe para &lt;/span&gt;
        &lt;span class=&quot;c1&quot;&gt;// que esteja disponível em todas as instâncias&lt;/span&gt;
        &lt;span class=&quot;c1&quot;&gt;// da classe.&lt;/span&gt;
        &lt;span class=&quot;nx&quot;&gt;mapper&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;clazz&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;prototype&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;save&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;save&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;c1&quot;&gt;// Adiciona list diretamente na classe como método estático&lt;/span&gt;
        &lt;span class=&quot;nx&quot;&gt;mapper&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;clazz&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;list&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;list&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;

    &lt;span class=&quot;kr&quot;&gt;await&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;createConnection&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Excelente, nosso módulo &lt;code class=&quot;highlighter-rouge&quot;&gt;app/app.js&lt;/code&gt; ficará assim:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;activeRecord&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'./active-record.js'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Person&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'./Person.js'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Animal&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'./Animal.js'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;async&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;kr&quot;&gt;await&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;activeRecord&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;({&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'cangaceiro'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;version&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; 
        &lt;span class=&quot;na&quot;&gt;mappers&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;
            &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; 
                &lt;span class=&quot;na&quot;&gt;clazz&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Person&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
                &lt;span class=&quot;na&quot;&gt;converter&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;data&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Person&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;data&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;_name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
            &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;
            &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; 
                &lt;span class=&quot;na&quot;&gt;clazz&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Animal&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
                &lt;span class=&quot;na&quot;&gt;converter&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;data&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Animal&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;data&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;_name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
            &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;
        
    &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;person&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Person&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'Flávio Almeida'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;animal&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Animal&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'Calopsita'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;

    &lt;span class=&quot;c1&quot;&gt;// salva o método da instância&lt;/span&gt;
    &lt;span class=&quot;kr&quot;&gt;await&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;person&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;save&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
    &lt;span class=&quot;kr&quot;&gt;await&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;animal&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;save&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;

    &lt;span class=&quot;c1&quot;&gt;// chama o método estático&lt;/span&gt;
    &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;persons&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kr&quot;&gt;await&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Person&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;list&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;persons&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;forEach&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;console&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;

    &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;animals&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kr&quot;&gt;await&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Animal&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;list&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;animals&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;forEach&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;console&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;

&lt;span class=&quot;p&quot;&gt;})().&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;catch&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;console&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Melhor organizado do que se tivéssemos utilizado diretamente a API do IndexedDB. Você pode conferir o código completo deste artigo no &lt;a href=&quot;https://github.com/flaviohenriquealmeida/indexeddb-active-record-implementation&quot; target=&quot;_blank&quot;&gt;meu github&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;conclusão&quot;&gt;Conclusão&lt;/h2&gt;

&lt;p&gt;O padrão de projeto Active Record pode ser aplicado não apenas com o IndexedDB, mas qualquer meio de persistência, inclusive banco de dados utilizados por API.&lt;/p&gt;

&lt;p&gt;E você? Já utilizou alguma biblioteca que faz uso desse padrão? Como lidava com persistência no IndexedDB? Deixe sua opinião.&lt;/p&gt;</content><author><name>Flávio Almeida</name></author><category term="javascript" /><category term="indexedDB" /><category term="active record" /><category term="persistence" /><category term="persistência" /><summary type="html">No artigo “IndexedDB, implementando a persistência com o pattern Data Mapper” implementamos o padrão de projeto Data Mapper para persistir objetos com o IndexedDB. Desta vez, implementaremos a solução de persistência com o pattern Active Record.</summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://cangaceirojavascript.com.br/logo.png" /></entry><entry><title type="html">Suportando Method Chaining em uma API já existente</title><link href="http://cangaceirojavascript.com.br/suportando-method-chaining-em-api-ja-existente/" rel="alternate" type="text/html" title="Suportando Method Chaining em uma API já existente" /><published>2018-02-12T11:00:00+00:00</published><updated>2018-02-12T11:00:00+00:00</updated><id>http://cangaceirojavascript.com.br/suportando-method-chaining-em-api-ja-existente</id><content type="html" xml:base="http://cangaceirojavascript.com.br/suportando-method-chaining-em-api-ja-existente/">&lt;p&gt;Neste artigo aprendemos a suportar &lt;em&gt;Method Chaining&lt;/em&gt; em uma API sem suporte a esse recurso.&lt;/p&gt;

&lt;h2 id=&quot;o-problema&quot;&gt;O Problema&lt;/h2&gt;

&lt;p&gt;O IndexedDB disponibiliza uma API para que possamos persistir objetos. Vejamos um trecho desta API em ação:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;// conexão criada com o banco antes&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;store&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'books'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;nx&quot;&gt;object&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'Cangaceiro JavaScript'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;isbn&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;9788594188014&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;

&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;request&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;connection&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;transaction&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;([&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;store&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;],&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;readwrite&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;objectStore&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;store&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;add&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;object&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
        
&lt;span class=&quot;nx&quot;&gt;request&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;onsuccess&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;console&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'persistiu com sucesso'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;

&lt;span class=&quot;nx&quot;&gt;request&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;onerror&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;e&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;console&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;target&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;error&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Queremos encadear as chamadas de &lt;code class=&quot;highlighter-rouge&quot;&gt;onsuccess&lt;/code&gt; e &lt;code class=&quot;highlighter-rouge&quot;&gt;onerror&lt;/code&gt;. Em outras palavras, queremos o suporte à &lt;strong&gt;Method Chaining&lt;/strong&gt;. Mas para que isso seja possível, precisamos criar uma requisição encadeável. Por padrão, o IndexedDB não suporta requisições que suportem &lt;em&gt;chaining&lt;/em&gt;, no entanto, podemos criar um wrapper que encapsule a requisição e permita utilizar o recurso desejado:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;// conexão criada com o banco antes&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;store&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'books'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;nx&quot;&gt;object&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'Cangaceiro JavaScript'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;isbn&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;9788594188014&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;

&lt;span class=&quot;c1&quot;&gt;// cria um wrapper a partir da requisição&lt;/span&gt;
&lt;span class=&quot;nx&quot;&gt;ChainableRequest&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;of&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;connection&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;transaction&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;([&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;store&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;],&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;readwrite&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;objectStore&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;store&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;add&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;object&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;success&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;console&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'persistiu com sucesso'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;error&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;e&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;console&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;target&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;error&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;No código anterior temos a chamada de &lt;code class=&quot;highlighter-rouge&quot;&gt;ChainableRequest.of()&lt;/code&gt;, mas a classe &lt;code class=&quot;highlighter-rouge&quot;&gt;ChainableRequest&lt;/code&gt; não existe. Precisamos implementá-la.&lt;/p&gt;

&lt;h2 id=&quot;implementando-a-classe-chainablerequest&quot;&gt;Implementando a classe ChainableRequest.&lt;/h2&gt;

&lt;p&gt;A classe &lt;code class=&quot;highlighter-rouge&quot;&gt;ChainableRequest&lt;/code&gt; receberá em seu &lt;code class=&quot;highlighter-rouge&quot;&gt;constructor&lt;/code&gt; o objeto request que encapsulará:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kd&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;ChainableRequest&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;

    &lt;span class=&quot;kd&quot;&gt;constructor&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;request&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;_request&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;request&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;blockquote&gt;
  &lt;p&gt;&lt;em&gt;A classe ChainableRequest é um wrapper que encapsula o objeto original.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Excelente, mas do jeito que construímos nossa classe, precisaremos utilizar o operador &lt;code class=&quot;highlighter-rouge&quot;&gt;new&lt;/code&gt; para criar instâncias de &lt;code class=&quot;highlighter-rouge&quot;&gt;ChainableRequest&lt;/code&gt;. Podemos evitar o uso do operador através do método estático &lt;code class=&quot;highlighter-rouge&quot;&gt;of&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kd&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;ChainableRequest&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;

    &lt;span class=&quot;kd&quot;&gt;constructor&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;request&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;_request&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;request&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;kr&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;of&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;request&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;ChainableRequest&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;request&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Da maneira que organizamos o código é o próprio método &lt;code class=&quot;highlighter-rouge&quot;&gt;of()&lt;/code&gt; que se encarregará de criar a instância de &lt;code class=&quot;highlighter-rouge&quot;&gt;ChainableRequest&lt;/code&gt; lidando com o operador &lt;code class=&quot;highlighter-rouge&quot;&gt;new&lt;/code&gt;. Vamos continuar nossa implementação.&lt;/p&gt;

&lt;h2 id=&quot;criando-métodos-que-retornam-a-própria-instância&quot;&gt;Criando métodos que retornam a própria instância&lt;/h2&gt;

&lt;p&gt;Vamos criar um método para cada propriedade de uma requisição do IndexedDB:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kd&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;ChainableRequest&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;

    &lt;span class=&quot;kd&quot;&gt;constructor&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;request&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;_request&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;request&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;kr&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;of&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;request&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;ChainableRequest&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;request&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;

    &lt;span class=&quot;nx&quot;&gt;success&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;fn&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;_request&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;onsuccess&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;fn&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;nx&quot;&gt;error&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;fn&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;_request&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;onerror&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;fn&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Vejam que os métodos &lt;code class=&quot;highlighter-rouge&quot;&gt;success&lt;/code&gt; e &lt;code class=&quot;highlighter-rouge&quot;&gt;error&lt;/code&gt; recebem a lógica que será aplicada nas respectivas propriedades &lt;code class=&quot;highlighter-rouge&quot;&gt;_request.onsuccess&lt;/code&gt; e &lt;code class=&quot;highlighter-rouge&quot;&gt;_request.onerror&lt;/code&gt;. Todavia, o retorno de ambos é a própria instância de &lt;code class=&quot;highlighter-rouge&quot;&gt;ChainableRequest&lt;/code&gt;. É esse retorno que permitirá as chamadas encadeadas. Com a classe completa, o código proposto no início deste artigo funcionará:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;// conexão criada com o banco antes&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;store&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'books'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;nx&quot;&gt;object&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'Cangaceiro JavaScript'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;isbn&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;9788594188014&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;
&lt;span class=&quot;nx&quot;&gt;ChainableRequest&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;of&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;connection&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;transaction&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;([&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;store&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;],&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;readwrite&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;objectStore&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;store&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;add&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;object&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;success&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;console&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'persistiu com sucesso'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;error&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;e&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;console&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;target&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;error&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;O ganho na legibilidade pode ser ainda maior dependendo da quantidade de métodos encadeáveis utilizados para resolver o problema em questão.&lt;/p&gt;

&lt;h2 id=&quot;conclusão&quot;&gt;Conclusão&lt;/h2&gt;

&lt;p&gt;Não é pelo fato de uma API não ser encadeável que ela nos privará desse recurso. Com um pouco de código podemos criar uma pequena camada sob a API já existente possibilitando chamadas encadeáveis.&lt;/p&gt;

&lt;p&gt;E você? Já aplicou essa estratégia antes? Tem algum exemplo de outra API no qual essa estratégia se torna ainda mais interessante. Deixe seu comentário.&lt;/p&gt;</content><author><name>Flávio Almeida</name></author><category term="javascript" /><category term="pattern" /><category term="method chaining" /><category term="fluent interface" /><summary type="html">Neste artigo aprendemos a suportar Method Chaining em uma API sem suporte a esse recurso.</summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://cangaceirojavascript.com.br/logo.png" /></entry><entry><title type="html">IndexedDB, implementando a persistência com o pattern Data Mapper</title><link href="http://cangaceirojavascript.com.br/indexeddb-implementando-persistencia-com-pattern-data-mapper/" rel="alternate" type="text/html" title="IndexedDB, implementando a persistência com o pattern Data Mapper" /><published>2018-02-05T12:00:00+00:00</published><updated>2018-02-05T12:00:00+00:00</updated><id>http://cangaceirojavascript.com.br/indexeddb-implementando-persistencia-com-pattern-data-Mapper</id><content type="html" xml:base="http://cangaceirojavascript.com.br/indexeddb-implementando-persistencia-com-pattern-data-mapper/">&lt;p&gt;Os navegadores do mercado suportam o banco de dados &lt;a href=&quot;https://developer.mozilla.org/pt-BR/docs/IndexedDB&quot; target=&quot;_blank&quot;&gt;IndexedDB,&lt;/a&gt; especificado pela W3C. Todavia, realizar operações de persistência através de sua API é uma tarefa um tanto árdua. Neste artigo implementaremos o padrão de projeto &lt;em&gt;Data Mapper&lt;/em&gt; para reduzir bastante a complexidade da API do IndexedDB. É necessário que o leitor tenha algum conhecimento desta API para que aproveite melhor este artigo.&lt;/p&gt;

&lt;h2 id=&quot;prólogo&quot;&gt;Prólogo&lt;/h2&gt;

&lt;p&gt;A motivação para a escrita deste artigo veio de um &lt;em&gt;coding dojo&lt;/em&gt; no qual o autor foi questionado por um dos participantes o motivo de não ter abordado o pattern &lt;em&gt;Data Mapper&lt;/em&gt; em seu livro &lt;a href=&quot;https://www.casadocodigo.com.br/products/livro-cangaceiro-javascript&quot; target=&quot;_blank&quot;&gt;&lt;em&gt;Cangaceiro JavaScript, uma aventura no sertão da programação&lt;/em&gt;&lt;/a&gt;. Como resposta lhe foi dito que nas mais de 500 páginas do livro inevitavelmente algum assunto teria que ficar de fora. Foi então que o participante perguntou se era possível implementá-lo durante o dojo, tarefa que foi aceita por este autor e implementada em 7 minutos.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;em&gt;É importante frisar que a implementação foi realizada em 7 minutos, porém as discussões sobre a API a ser criada levaram aproximadamente 20 minutos. Outro ponto é que apenas as operações de persistência &lt;code class=&quot;highlighter-rouge&quot;&gt;save()&lt;/code&gt; e &lt;code class=&quot;highlighter-rouge&quot;&gt;list()&lt;/code&gt; foram implementadas.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Agora que já sabemos os eventos que antecederam a escrita deste artigo, vamos ao problema a ser resolvido.&lt;/p&gt;

&lt;h2 id=&quot;o-problema&quot;&gt;O problema&lt;/h2&gt;

&lt;p&gt;Nossa aplicação define as classes &lt;code class=&quot;highlighter-rouge&quot;&gt;Person&lt;/code&gt; e &lt;code class=&quot;highlighter-rouge&quot;&gt;Animal&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;// app/person.js&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Person&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;kd&quot;&gt;constructor&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;_name&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;kd&quot;&gt;get&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;_name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;// app/animal.js&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Animal&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;kd&quot;&gt;constructor&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;_name&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;kd&quot;&gt;get&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;_name&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Precisamos persistir instâncias dessas classes no &lt;code class=&quot;highlighter-rouge&quot;&gt;IndexedDB&lt;/code&gt;, um banco de dados presente nos navegadores do mercado:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;// app/app.js&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Person&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'./Person.js'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Animal&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'./Animal.js'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;person&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Person&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'Flávio Almeida'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;animal&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Animal&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'Calopsita'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;// como realizar a persistência no banco IndexedDB?&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Podemos obter uma conexão do banco, criar transações e lidar com a persistência no módulo &lt;code class=&quot;highlighter-rouge&quot;&gt;app/app.js&lt;/code&gt;, mas queremos uma solução que facilite a vida do desenvolvedor e que também possa ser reutilizada pela aplicação. Nesse sentido, podemos aplicar o padrão de projeto &lt;strong&gt;Data Mapper&lt;/strong&gt;.&lt;/p&gt;

&lt;h2 id=&quot;o-padrão-de-projeto-data-mapper&quot;&gt;O padrão de projeto Data Mapper&lt;/h2&gt;

&lt;p&gt;Segundo a &lt;a href=&quot;https://en.wikipedia.org/wiki/Data_mapper_pattern&quot;&gt;Wikipedia&lt;/a&gt; um
Data Mapper é uma camada de acesso a dados que executa transferência bidirecional de dados entre um armazenamento de dados persistente e uma representação de dados na memória. Quanto maior a &lt;em&gt;impedância&lt;/em&gt; entre esses dois mundos, maior trabalho o Data Mapper terá que realizar.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;em&gt;Impedância é a discrepância entre os dados em memória e os mesmos dados armazenados no banco.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Vamos criar uma API que isole a complexidade de persistência com o IndexedDB. Depois de pronta, ela funcionará dessa maneira:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;// app/app.js&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;manager&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'./manager.js'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Person&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'./Person.js'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Animal&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'./Animal.js'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;async&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;c1&quot;&gt;// configuração mínima&lt;/span&gt;
    &lt;span class=&quot;kr&quot;&gt;await&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;manager&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;setDbName&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'cangaceiro'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;setDbVersion&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; 
        &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;register&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;
            &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; 
                &lt;span class=&quot;na&quot;&gt;clazz&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Person&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
                &lt;span class=&quot;na&quot;&gt;converter&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;data&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Person&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;data&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;_name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
            &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;
            &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; 
                &lt;span class=&quot;na&quot;&gt;clazz&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Animal&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
                &lt;span class=&quot;na&quot;&gt;converter&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;data&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Animal&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;data&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;_name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
            &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;

    &lt;span class=&quot;c1&quot;&gt;// criando instâncias&lt;/span&gt;
    &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;person&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Person&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'Flávio Almeida'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;animal&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Animal&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'Calopsita'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;

    &lt;span class=&quot;c1&quot;&gt;// persistindo dados&lt;/span&gt;
    &lt;span class=&quot;kr&quot;&gt;await&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;manager&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;save&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;person&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    &lt;span class=&quot;kr&quot;&gt;await&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;manager&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;save&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;animal&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;

    &lt;span class=&quot;c1&quot;&gt;// buscando dados persistidos&lt;/span&gt;
    &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;persons&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kr&quot;&gt;await&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;manager&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;list&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Person&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;persons&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;forEach&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;console&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;animals&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kr&quot;&gt;await&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;manager&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;list&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Animal&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;animals&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;forEach&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;console&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;

&lt;span class=&quot;p&quot;&gt;})().&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;catch&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;console&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Sobre os métodos do objeto &lt;code class=&quot;highlighter-rouge&quot;&gt;manager&lt;/code&gt;, nosso &lt;em&gt;Data Mapper&lt;/em&gt;, temos:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;setDbName&lt;/strong&gt;: define o nome do banco de dados. Quando omitido, será adotado o nome “default”. Seu retorno será uma referência para a própria instância de &lt;code class=&quot;highlighter-rouge&quot;&gt;manager&lt;/code&gt;.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;setDbVersion&lt;/strong&gt;: define a versão o banco. Quando informado uma versão superior a vigente, todas as &lt;code class=&quot;highlighter-rouge&quot;&gt;stores&lt;/code&gt; serão destruídas e criadas novamente. Quando não informado, o valor &lt;code class=&quot;highlighter-rouge&quot;&gt;1&lt;/code&gt; será o padrão utilizado. Seu retorno será uma referência para a própria instância de &lt;code class=&quot;highlighter-rouge&quot;&gt;manager&lt;/code&gt;.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;register&lt;/strong&gt;: recebe uma lista de objetos de mapeamento com as propriedades &lt;code class=&quot;highlighter-rouge&quot;&gt;clazz&lt;/code&gt; e &lt;code class=&quot;highlighter-rouge&quot;&gt;converter&lt;/code&gt;. A primeira recebe a classe que terá uma &lt;code class=&quot;highlighter-rouge&quot;&gt;store&lt;/code&gt; criada no banco. A segunda é a lógica de mapeamento dos dados retornados do banco para sua respectiva classe que será utilizado pelo método &lt;code class=&quot;highlighter-rouge&quot;&gt;list()&lt;/code&gt;. As &lt;code class=&quot;highlighter-rouge&quot;&gt;stores&lt;/code&gt; serão criadas apenas quando o banco for criado pela primeira vez ou quando a versão informada por &lt;code class=&quot;highlighter-rouge&quot;&gt;setDbVersion&lt;/code&gt; for superior a versão vigente do banco. Seu retorno será uma Promise.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;save&lt;/strong&gt;: recebe a instância do objeto que desejamos persistir. Internamente identifica a classe a qual o objeto pertence para decidir em qual &lt;code class=&quot;highlighter-rouge&quot;&gt;store&lt;/code&gt; deve ser salvo. Retorna uma Promise.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;list&lt;/strong&gt;: recebe como primeiro parâmetro a classe que representa a &lt;code class=&quot;highlighter-rouge&quot;&gt;store&lt;/code&gt; que desejarmos obter todos os seus dados armazenados.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Um ponto a se destacar é que &lt;strong&gt;podemos usar a mesma conexão durante toda a aplicação sem que seja necessário fechá-la&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Agora que já sabemos até onde queremos chegar, vamos dar início a nossa implementação.&lt;/p&gt;

&lt;h2 id=&quot;implementando-nosso-manager&quot;&gt;Implementando nosso manager&lt;/h2&gt;

&lt;p&gt;Vamos criar o módulo &lt;code class=&quot;highlighter-rouge&quot;&gt;app/manager.js&lt;/code&gt; que terá em seu escopo as variáveis &lt;code class=&quot;highlighter-rouge&quot;&gt;dbName&lt;/code&gt; e &lt;code class=&quot;highlighter-rouge&quot;&gt;dbVersion&lt;/code&gt;, ambas inicializadas com valores padrões. Em seguida, definiremos a classe &lt;code class=&quot;highlighter-rouge&quot;&gt;Manager&lt;/code&gt; com métodos acessadores para essas variáveis encapsuladas pelo módulo. No lugar de exportarmos a classe &lt;code class=&quot;highlighter-rouge&quot;&gt;Manager&lt;/code&gt;, vamos exportar uma instância dessa classe:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;// app/manager.js&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;// variáveis encapsuladas pelo módulo&lt;/span&gt;

&lt;span class=&quot;kd&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;dbName&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'default'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;dbVersion&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;kd&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Manager&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;

    &lt;span class=&quot;nx&quot;&gt;setDbName&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;nx&quot;&gt;dbName&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;c1&quot;&gt;// retorna a própria instância&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; 
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;nx&quot;&gt;setDbVersion&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;version&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;nx&quot;&gt;dbVersion&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;version&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;c1&quot;&gt;// retorna a própria instância&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; 
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;// exporta a instância da classe&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;manager&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Manager&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;blockquote&gt;
  &lt;p&gt;&lt;em&gt;Declarar uma variável no escopo do módulo sem exportá-la com a instrução &lt;code class=&quot;highlighter-rouge&quot;&gt;export&lt;/code&gt; torna sua visibilidade privada, desta forma, apenas a instância de &lt;code class=&quot;highlighter-rouge&quot;&gt;manager&lt;/code&gt; exportada pelo módulo terá acesso à variável, como é o caso das variáveis &lt;code class=&quot;highlighter-rouge&quot;&gt;dbName&lt;/code&gt; e &lt;code class=&quot;highlighter-rouge&quot;&gt;dbVersion&lt;/code&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Um ponto a destacar é o &lt;code class=&quot;highlighter-rouge&quot;&gt;return this&lt;/code&gt; dos métodos da classe que criamos até agora. É esse retorno que permitirá o encadeamento das chamadas desses métodos.&lt;/p&gt;

&lt;p&gt;Vamos criar a página &lt;code class=&quot;highlighter-rouge&quot;&gt;index.html&lt;/code&gt; que importará o módulo &lt;code class=&quot;highlighter-rouge&quot;&gt;app/app.js&lt;/code&gt; utilizando o sistema de importação de módulos nativo do Chrome:&lt;/p&gt;

&lt;div class=&quot;language-html highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c&quot;&gt;&amp;lt;!-- index.html --&amp;gt;&lt;/span&gt;
&lt;span class=&quot;cp&quot;&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;html&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;meta&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;charset=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;UTF-8&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;meta&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;name=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;viewport&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;content=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;width=device-width, initial-scale=1.0&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;meta&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;http-equiv=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;X-UA-Compatible&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;content=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;ie=edge&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;title&amp;gt;&lt;/span&gt;Manager&lt;span class=&quot;nt&quot;&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
&lt;span class=&quot;c&quot;&gt;&amp;lt;!-- importou o módulo --&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;script &lt;/span&gt;&lt;span class=&quot;na&quot;&gt;type=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;module&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;src=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;app/app.js&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;em&gt;É necessário servir a página através de um servidor Web de sua escolha, caso contrário o carregamento dos módulos não funcionará.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Vejamos como fica o uso inicial do nosso manager no módulo &lt;code class=&quot;highlighter-rouge&quot;&gt;app/app.js&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;// app/app.js&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;manager&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'./manager.js'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;// encadeando as chamadas de métodos&lt;/span&gt;
&lt;span class=&quot;nx&quot;&gt;manager&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;setDbName&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'cangaceiro'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;setDbVersion&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;blockquote&gt;
  &lt;p&gt;&lt;em&gt;Todos os módulos que importarem nosso &lt;code class=&quot;highlighter-rouge&quot;&gt;manager&lt;/code&gt; trabalharão com a mesma instância. Isso é importante, pois precisamos ter centralizado em um único local sua configuração. Nesse sentido, podemos dizer que &lt;code class=&quot;highlighter-rouge&quot;&gt;manager&lt;/code&gt; implementa o padrão de projeto &lt;code class=&quot;highlighter-rouge&quot;&gt;Singleton&lt;/code&gt;, porém, utilizando os próprios recursos da linguagem sem grandes mistérios como no &lt;a href=&quot;https://pt.wikipedia.org/wiki/Singleton&quot; target=&quot;_blank&quot;&gt;pattern original&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Agora vamos partir para a implementação de um dos métodos mais importante da nossa API de persistência, o método &lt;code class=&quot;highlighter-rouge&quot;&gt;register&lt;/code&gt;.&lt;/p&gt;

&lt;h2 id=&quot;implementando-o-método-register&quot;&gt;Implementando o método register&lt;/h2&gt;

&lt;p&gt;Vamos implementar agora a função &lt;code class=&quot;highlighter-rouge&quot;&gt;register&lt;/code&gt;, uma dos mais importantes métodos do nosso &lt;code class=&quot;highlighter-rouge&quot;&gt;manager&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;// app/manager.js&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;dbName&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'default'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;dbVersion&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;// novo dado!&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;stores&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;Map&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt; 

&lt;span class=&quot;kd&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Manager&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;

    &lt;span class=&quot;nx&quot;&gt;setDbName&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;nx&quot;&gt;dbName&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;nx&quot;&gt;setDbVersion&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;version&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;nx&quot;&gt;dbVersion&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;version&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;c1&quot;&gt;// novo método&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;register&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(...&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;mappers&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;nx&quot;&gt;mappers&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;forEach&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;mapper&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; 
            &lt;span class=&quot;nx&quot;&gt;stores&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;kd&quot;&gt;set&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;
                &lt;span class=&quot;nx&quot;&gt;mapper&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;clazz&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; 
                &lt;span class=&quot;nx&quot;&gt;mapper&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;converter&lt;/span&gt;
            &lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;manager&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Manager&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;blockquote&gt;
  &lt;p&gt;&lt;em&gt;É necessário que o leitor tenha algum conhecimento da API do IndexedDB, por mais ínfimo que seja para que compreenda com mais clareza as vantagens da abordagem aqui utilizada.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A função &lt;code class=&quot;highlighter-rouge&quot;&gt;register&lt;/code&gt;, através do &lt;em&gt;Rest Operator&lt;/em&gt;, recebe uma quantidade indefinida de objetos que chamaremos de &lt;code class=&quot;highlighter-rouge&quot;&gt;mappers&lt;/code&gt; (mapeadores). Cada objeto identifica a classe e a lógica de conversão a ser aplicada toda vez que objetos dessa classe forem obtidos de uma &lt;code class=&quot;highlighter-rouge&quot;&gt;store&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;em&gt;Objetos recuperados da store só possuem propriedades e nenhum método, por isso é importante definir a lógica de conversão dos dados trazidos do banco para sua respectiva classe.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Para cada item da lista de &lt;code class=&quot;highlighter-rouge&quot;&gt;mappers&lt;/code&gt; recebida utilizaremos o valor da propriedade &lt;code class=&quot;highlighter-rouge&quot;&gt;clazz&lt;/code&gt; como &lt;em&gt;key&lt;/em&gt; e o valor da propriedade &lt;code class=&quot;highlighter-rouge&quot;&gt;converter&lt;/code&gt; como seu valor no &lt;code class=&quot;highlighter-rouge&quot;&gt;Map&lt;/code&gt; batizado de &lt;code class=&quot;highlighter-rouge&quot;&gt;stores&lt;/code&gt;. Esse dado é importante, pois é através dele que saberemos quais stores serão criadas e qual lógica de conversão será utilizada ao obter seus dados.&lt;/p&gt;

&lt;p&gt;Nosso &lt;code class=&quot;highlighter-rouge&quot;&gt;app/app.js&lt;/code&gt; por enquanto estará assim:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;// app/app.js&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;manager&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'./manager.js'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Person&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'./Person.js'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Animal&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'./Animal.js'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;nx&quot;&gt;manager&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;setDbName&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'cangaceiro'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;setDbVersion&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; 
&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;register&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; 
        &lt;span class=&quot;na&quot;&gt;clazz&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Person&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;converter&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;data&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Person&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;data&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;_name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; 
        &lt;span class=&quot;na&quot;&gt;clazz&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Animal&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;converter&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;data&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Animal&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;data&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;_name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Excelente, mas no ato de realizarmos o registro precisamos criar a conexão com o banco.&lt;/p&gt;

&lt;h2 id=&quot;obtendo-uma-conexão&quot;&gt;Obtendo uma conexão&lt;/h2&gt;

&lt;p&gt;Vamos criar uma função responsável pela criação da conexão. Ela viverá no escopo do módulo &lt;code class=&quot;highlighter-rouge&quot;&gt;manager.js&lt;/code&gt; e apenas a instância de &lt;code class=&quot;highlighter-rouge&quot;&gt;Manager&lt;/code&gt; poderá acessá-la.&lt;/p&gt;

&lt;p&gt;Como a obtenção de uma conexão é uma operação assíncrona, retornaremos uma &lt;code class=&quot;highlighter-rouge&quot;&gt;Promise&lt;/code&gt; como resposta, reduzindo assim a complexidade de termos que trabalhar com &lt;em&gt;callbacks&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Vamos criar a variável &lt;code class=&quot;highlighter-rouge&quot;&gt;conn&lt;/code&gt;, também encapsulada pelo módulo &lt;code class=&quot;highlighter-rouge&quot;&gt;manager.js&lt;/code&gt;. Ela guardará uma referência para a conexão criada. Seu valor será atribuído através da função &lt;code class=&quot;highlighter-rouge&quot;&gt;createConnection&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kd&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;dbName&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'default'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;dbVersion&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;stores&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;Map&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt; 
&lt;span class=&quot;c1&quot;&gt;// nova variável&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;conn&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;createConnection&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; 
    &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;Promise&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;((&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;resolve&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;reject&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    
    &lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;

&lt;span class=&quot;c1&quot;&gt;// definição da classe omitido&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Vamos solicitar à função &lt;code class=&quot;highlighter-rouge&quot;&gt;indexedDB.open()&lt;/code&gt; a abertura da conexão com o banco usando as configurações definidas em &lt;code class=&quot;highlighter-rouge&quot;&gt;dbName&lt;/code&gt; e &lt;code class=&quot;highlighter-rouge&quot;&gt;dbVersion&lt;/code&gt;. Porém, não temos a garantia de que a conexão foi efetuada, motivo pelo qual precisamos lidar com os eventos &lt;code class=&quot;highlighter-rouge&quot;&gt;onupgradeneeded&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;onsuccess&lt;/code&gt; e &lt;code class=&quot;highlighter-rouge&quot;&gt;onerror&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kd&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;dbName&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'default'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;dbVersion&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;stores&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;Map&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt; 
&lt;span class=&quot;kd&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;conn&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;createConnection&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; 
    &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;Promise&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;((&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;resolve&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;reject&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;c1&quot;&gt;// requisitamos a abertura, um evento assíncrono!&lt;/span&gt;
        &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;request&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;indexedDB&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;open&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;dbName&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;dbVersion&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;

        &lt;span class=&quot;nx&quot;&gt;request&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;onupgradeneeded&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;e&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{};&lt;/span&gt;

        &lt;span class=&quot;nx&quot;&gt;request&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;onsuccess&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;e&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{};&lt;/span&gt;

        &lt;span class=&quot;nx&quot;&gt;request&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;onerror&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;e&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{};&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;

&lt;span class=&quot;c1&quot;&gt;// código posterior omitido&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;O evento &lt;code class=&quot;highlighter-rouge&quot;&gt;onupgradeneeded&lt;/code&gt; disponibiliza uma conexão transacional que nos permite criar todas as &lt;code class=&quot;highlighter-rouge&quot;&gt;stores&lt;/code&gt; do banco. Utilizaremos as chaves do nosso &lt;code class=&quot;highlighter-rouge&quot;&gt;Map&lt;/code&gt; &lt;code class=&quot;highlighter-rouge&quot;&gt;stores&lt;/code&gt; como nome das &lt;code class=&quot;highlighter-rouge&quot;&gt;stores&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kd&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;dbName&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'default'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;dbVersion&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;stores&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;Map&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt; 
&lt;span class=&quot;kd&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;conn&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;createConnection&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; 
    &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;Promise&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;((&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;resolve&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;reject&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;

        &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;request&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;indexedDB&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;open&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;dbName&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;dbVersion&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;

        &lt;span class=&quot;nx&quot;&gt;request&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;onupgradeneeded&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;e&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;

            &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;transactionalConn&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;target&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;result&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
            &lt;span class=&quot;c1&quot;&gt;// utilizando for...of e destructuring ao mesmo tempo&lt;/span&gt;
            &lt;span class=&quot;c1&quot;&gt;// para ter acesso ao valor da key&lt;/span&gt;
            &lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kd&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;key&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;of&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;stores&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
                &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;store&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;key&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
                &lt;span class=&quot;c1&quot;&gt;// se já existe, apagamos&lt;/span&gt;
                &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;transactionalConn&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;objectStoreNames&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;contains&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;store&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt; 
                    &lt;span class=&quot;nx&quot;&gt;transactionalConn&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;deleteObjectStore&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;store&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
                &lt;span class=&quot;nx&quot;&gt;transactionalConn&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;createObjectStore&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;store&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;autoIncrement&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;
            &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;     
        &lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;

        &lt;span class=&quot;nx&quot;&gt;request&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;onsuccess&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;e&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;nx&quot;&gt;conn&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;target&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;result&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;// guarda uma referência para a conexão&lt;/span&gt;
            &lt;span class=&quot;nx&quot;&gt;resolve&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;// tudo certo, resolve a Promise!&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
        &lt;span class=&quot;c1&quot;&gt;// lida com erros, retornando uma mensagem de alto nível&lt;/span&gt;
        &lt;span class=&quot;nx&quot;&gt;request&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;onerror&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;e&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;nx&quot;&gt;console&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;target&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;error&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
            &lt;span class=&quot;nx&quot;&gt;reject&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'Não foi possível obter a conexão com o banco'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;};&lt;/span&gt; 
    &lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;// código posterior omitido&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;blockquote&gt;
  &lt;p&gt;&lt;em&gt;A estratégia utilizada durante um eventual upgrade do banco é derrubar todas as stores para em seguida criá-las novamente.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Excelente, agora precisamos chamar a função &lt;code class=&quot;highlighter-rouge&quot;&gt;createConnection&lt;/code&gt; através do método &lt;code class=&quot;highlighter-rouge&quot;&gt;register&lt;/code&gt; de &lt;code class=&quot;highlighter-rouge&quot;&gt;Manager&lt;/code&gt;. Vamos tornar o método &lt;code class=&quot;highlighter-rouge&quot;&gt;async&lt;/code&gt; para que possamos utilizar a instrução &lt;code class=&quot;highlighter-rouge&quot;&gt;await&lt;/code&gt; com a Promise retornada por &lt;code class=&quot;highlighter-rouge&quot;&gt;createConnection&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;// app/manager.js&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;// código anterior omitido&lt;/span&gt;

&lt;span class=&quot;kd&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Manager&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;

    &lt;span class=&quot;nx&quot;&gt;setDbName&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;nx&quot;&gt;dbName&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;nx&quot;&gt;setDbVersion&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;version&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;nx&quot;&gt;dbVersion&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;version&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;c1&quot;&gt;// tornou o método async&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;async&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;register&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(...&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;mappers&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;nx&quot;&gt;mappers&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;forEach&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;mapper&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; 
            &lt;span class=&quot;nx&quot;&gt;stores&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;kd&quot;&gt;set&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;mapper&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;clazz&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;mapper&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;converter&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;));&lt;/span&gt;
        &lt;span class=&quot;c1&quot;&gt;// utilizou a instrução await, só é possível porque&lt;/span&gt;
        &lt;span class=&quot;c1&quot;&gt;// register é um método async&lt;/span&gt;
        &lt;span class=&quot;kr&quot;&gt;await&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;createConnection&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;manager&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Manager&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Agora, em &lt;code class=&quot;highlighter-rouge&quot;&gt;app/app.js&lt;/code&gt;, criaremos um wrapper &lt;code class=&quot;highlighter-rouge&quot;&gt;async&lt;/code&gt; para que possamos utilizar a instrução &lt;code class=&quot;highlighter-rouge&quot;&gt;await&lt;/code&gt; com o método &lt;code class=&quot;highlighter-rouge&quot;&gt;register&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;// app/app.js&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;manager&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'./manager.js'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Person&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'./Person.js'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Animal&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'./Animal.js'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;// wrapper async&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;async&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;c1&quot;&gt;// instrução await!&lt;/span&gt;
    &lt;span class=&quot;kr&quot;&gt;await&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;manager&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;setDbName&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'cangaceiro'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;setDbVersion&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; 
        &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;register&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;
            &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; 
                &lt;span class=&quot;na&quot;&gt;clazz&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Person&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
                &lt;span class=&quot;na&quot;&gt;converter&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;data&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Person&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;data&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;_name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
            &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;
            &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; 
                &lt;span class=&quot;na&quot;&gt;clazz&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Animal&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
                &lt;span class=&quot;na&quot;&gt;converter&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;data&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Animal&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;data&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;_name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
            &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;

&lt;span class=&quot;p&quot;&gt;})().&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;catch&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;console&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;// captura possíveis erros&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;em&gt;Toda função async retorna uma Promise, independente se retornamos uma ou não. É por isso que precisamos usar &lt;code class=&quot;highlighter-rouge&quot;&gt;await&lt;/code&gt; na chamada de &lt;code class=&quot;highlighter-rouge&quot;&gt;manager.register&lt;/code&gt;. Além disso, lidamos com qualquer exceção através &lt;code class=&quot;highlighter-rouge&quot;&gt;().catch(console.log);&lt;/code&gt;. Outra alternativa era usarmos a instrução &lt;code class=&quot;highlighter-rouge&quot;&gt;try/catch&lt;/code&gt; no bloco do código, porém o autor preferiu a primeira abordagem por ser menos verbosa, além do tempo do dojo ter sido curto!&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Recarregando a página &lt;code class=&quot;highlighter-rouge&quot;&gt;index.html&lt;/code&gt; no Chrome, na aba &lt;em&gt;Application -&amp;gt; Storage -&amp;gt; IndexedDB&lt;/em&gt; podemos constatar a criação do banco.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;em&gt;Abra outra aba no Chrome para que possa verificar os dados mais atualizados, pois este autor constatou que o Chrome não realiza o refresh automático da aba Application -&amp;gt; Storage -&amp;gt; IndexedDB.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div style=&quot;text-align: center; margin-bottom: 20px&quot;&gt;
&lt;img src=&quot;data:image/png;base64,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&quot; alt=&quot;stores criadas no banco cangaceiro&quot; /&gt;
&lt;/div&gt;
&lt;p&gt;Agora vamos implementar o método &lt;code class=&quot;highlighter-rouge&quot;&gt;save&lt;/code&gt;.&lt;/p&gt;

&lt;h2 id=&quot;implementando-o-método-save&quot;&gt;Implementando o método save&lt;/h2&gt;

&lt;p&gt;O método &lt;code class=&quot;highlighter-rouge&quot;&gt;save&lt;/code&gt; da nossa classe &lt;code class=&quot;highlighter-rouge&quot;&gt;Manager&lt;/code&gt; também retornará uma &lt;code class=&quot;highlighter-rouge&quot;&gt;Promise&lt;/code&gt;, pois a operação de persistência também é uma operação assíncrona:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;// app/manager.js&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;// código anterior omitido &lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Manager&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;c1&quot;&gt;// métodos anteriores omitidos&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;save&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;object&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        
        &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;Promise&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;((&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;resolve&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;reject&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;

            &lt;span class=&quot;c1&quot;&gt;// falhando rapidamente, &quot;fail fast&quot;&lt;/span&gt;
            &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;conn&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;reject&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'Você precisa registrar o banco antes de utilizá-lo'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
            
            &lt;span class=&quot;c1&quot;&gt;// obtem o nome da store através do nome da classe&lt;/span&gt;
            &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;store&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;object&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;kd&quot;&gt;constructor&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
            
            &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;request&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;conn&lt;/span&gt;
                &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;transaction&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;([&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;store&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;],&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;readwrite&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
                &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;objectStore&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;store&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
                &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;add&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;object&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
            
            &lt;span class=&quot;c1&quot;&gt;// resolve a Promise no sucesso&lt;/span&gt;
            &lt;span class=&quot;nx&quot;&gt;request&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;onsuccess&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;resolve&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;

            &lt;span class=&quot;nx&quot;&gt;request&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;onerror&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;e&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
                &lt;span class=&quot;nx&quot;&gt;console&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;target&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;error&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
                &lt;span class=&quot;nx&quot;&gt;reject&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'Não foi possível persistir o objeto'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
            &lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; 
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Vamos analisar o código anterior. A Promise retornada verifica se a variável &lt;code class=&quot;highlighter-rouge&quot;&gt;conn&lt;/code&gt; possui algum valor e caso não possua, rejeitamos a &lt;code class=&quot;highlighter-rouge&quot;&gt;Promise&lt;/code&gt; imediatamente. Esse &lt;em&gt;fail fast&lt;/em&gt; é importante, pois sinalizará para o desenvolvedor que ele deve realizar antes o registro do banco.&lt;/p&gt;

&lt;p&gt;O restante do código é padrão da API do IndexedDB, todavia vale lembrar que precisamos solicitar uma transação de escrita para a &lt;code class=&quot;highlighter-rouge&quot;&gt;store&lt;/code&gt; que desejamos armazenar nosso objeto. Aliás, obtemos o nome da &lt;code class=&quot;highlighter-rouge&quot;&gt;store&lt;/code&gt; do objeto a ser persistido através de &lt;code class=&quot;highlighter-rouge&quot;&gt;object.constructor.name&lt;/code&gt;:&lt;/p&gt;

&lt;p&gt;Agora chegou a hora de implementarmos o método &lt;code class=&quot;highlighter-rouge&quot;&gt;list()&lt;/code&gt;, aquele que retornará os dados persistidos.&lt;/p&gt;

&lt;h2 id=&quot;implementando-o-método-list&quot;&gt;Implementando o método list&lt;/h2&gt;

&lt;p&gt;Assim como o método &lt;code class=&quot;highlighter-rouge&quot;&gt;save()&lt;/code&gt;, o método &lt;code class=&quot;highlighter-rouge&quot;&gt;list()&lt;/code&gt; retornará uma &lt;code class=&quot;highlighter-rouge&quot;&gt;Promise&lt;/code&gt;. Ele receberá como parâmetro uma classe e, a partir dela, extrairá o nome da sua respectiva &lt;code class=&quot;highlighter-rouge&quot;&gt;store&lt;/code&gt;. Sabemos que o nome da &lt;code class=&quot;highlighter-rouge&quot;&gt;store&lt;/code&gt; é a &lt;em&gt;key&lt;/em&gt; do &lt;code class=&quot;highlighter-rouge&quot;&gt;Map&lt;/code&gt; &lt;code class=&quot;highlighter-rouge&quot;&gt;stores&lt;/code&gt;. É através dessa &lt;code class=&quot;highlighter-rouge&quot;&gt;key&lt;/code&gt; que temos acesso a lógica de conversão, aquela que sabe converter os dados retornados da &lt;code class=&quot;highlighter-rouge&quot;&gt;store&lt;/code&gt; para uma instância da sua respectiva classe.&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;// app/manager.js&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;// código anterior omitido &lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Manager&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;c1&quot;&gt;// métodos anterior omitidos&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;list&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;clazz&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        
        &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;Promise&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;((&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;resolve&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;reject&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;c1&quot;&gt;// Identifica a store&lt;/span&gt;
            &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;store&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;clazz&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
            &lt;span class=&quot;c1&quot;&gt;// Cria uma transação de escrita&lt;/span&gt;
            &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;transaction&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;conn&lt;/span&gt;
                &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;transaction&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;([&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;store&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;],&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'readwrite'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
                &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;objectStore&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;store&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt; 
            
            &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;cursor&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;transaction&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;openCursor&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
            &lt;span class=&quot;c1&quot;&gt;// Converter da store&lt;/span&gt;
            &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;converter&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;stores&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;kd&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;store&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
            &lt;span class=&quot;c1&quot;&gt;// Array que receberá os dados convertidos&lt;/span&gt;
            &lt;span class=&quot;c1&quot;&gt;// com auxílio do nosso converter&lt;/span&gt;
            &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;list&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[];&lt;/span&gt;
            &lt;span class=&quot;c1&quot;&gt;// Será chamado uma vez para cada &lt;/span&gt;
            &lt;span class=&quot;c1&quot;&gt;// objeto armazenado no banco&lt;/span&gt;
            &lt;span class=&quot;nx&quot;&gt;cursor&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;onsuccess&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;e&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    
                &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;current&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;target&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;result&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
                &lt;span class=&quot;c1&quot;&gt;// Se for null, não há mais dados&lt;/span&gt;
                 &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;current&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
                     &lt;span class=&quot;nx&quot;&gt;list&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;push&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;converter&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;current&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;));&lt;/span&gt;
                     &lt;span class=&quot;c1&quot;&gt;// vai para o próximo registro&lt;/span&gt;
                     &lt;span class=&quot;nx&quot;&gt;current&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;continue&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
                &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;resolve&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;list&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
            &lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;
    
            &lt;span class=&quot;nx&quot;&gt;cursor&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;onerror&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;e&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
                &lt;span class=&quot;nx&quot;&gt;console&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;target&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;error&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
                &lt;span class=&quot;nx&quot;&gt;reject&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;`Não foi possível lista os dados da store &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;store&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;.`&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
            &lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;  
        &lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;    
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Excelente, nosso módulo &lt;code class=&quot;highlighter-rouge&quot;&gt;app/app.js&lt;/code&gt; ficará assim:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;manager&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'./manager.js'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Person&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'./Person.js'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Animal&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'./Animal.js'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;async&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;kr&quot;&gt;await&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;manager&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;setDbName&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'cangaceiro'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;setDbVersion&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; 
        &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;register&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;
            &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; 
                &lt;span class=&quot;na&quot;&gt;clazz&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Person&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
                &lt;span class=&quot;na&quot;&gt;converter&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;data&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Person&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;data&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;_name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
            &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;
            &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; 
                &lt;span class=&quot;na&quot;&gt;clazz&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Animal&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
                &lt;span class=&quot;na&quot;&gt;converter&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;data&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Animal&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;data&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;_name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
            &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
        
    &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;person&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Person&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'Flávio Almeida'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;animal&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Animal&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'Calopsita'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;

    &lt;span class=&quot;kr&quot;&gt;await&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;manager&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;save&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;person&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    &lt;span class=&quot;kr&quot;&gt;await&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;manager&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;save&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;animal&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;

    &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;persons&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kr&quot;&gt;await&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;manager&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;list&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Person&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;persons&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;forEach&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;console&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;

    &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;animals&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kr&quot;&gt;await&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;manager&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;list&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Animal&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;animals&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;forEach&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;console&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;

&lt;span class=&quot;p&quot;&gt;})().&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;catch&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;console&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Melhor organizado do que se tivéssemos utilizado diretamente a API do IndexedDB. Você pode conferir o código completo deste artigo no &lt;a href=&quot;https://github.com/flaviohenriquealmeida/indexeddb-data-mapper-implementation-part1&quot; target=&quot;_blank&quot;&gt;meu github&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;conclusão&quot;&gt;Conclusão&lt;/h2&gt;

&lt;p&gt;O padrão de projeto Data Mapper pode ser aplicado não apenas com o IndexedDB, mas qualquer meio de persistência, inclusive banco de dados utilizados por API.&lt;/p&gt;

&lt;p&gt;E você? Já utilizou alguma biblioteca que faz uso desse padrão? Como lidava com persistência no IndexedDB? Deixe sua opinião.&lt;/p&gt;</content><author><name>Flávio Almeida</name></author><category term="javascript" /><category term="indexedDB" /><category term="data mapper" /><category term="persistence" /><category term="persistência" /><summary type="html">Os navegadores do mercado suportam o banco de dados IndexedDB, especificado pela W3C. Todavia, realizar operações de persistência através de sua API é uma tarefa um tanto árdua. Neste artigo implementaremos o padrão de projeto Data Mapper para reduzir bastante a complexidade da API do IndexedDB. É necessário que o leitor tenha algum conhecimento desta API para que aproveite melhor este artigo.</summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://cangaceirojavascript.com.br/logo.png" /></entry><entry><title type="html">Revisitando Set, pegadinha e truques para colocar em prática hoje</title><link href="http://cangaceirojavascript.com.br/revisitando-set-javascript-pegadinha-truques/" rel="alternate" type="text/html" title="Revisitando Set, pegadinha e truques para colocar em prática hoje" /><published>2018-01-29T15:00:00+00:00</published><updated>2018-01-29T15:00:00+00:00</updated><id>http://cangaceirojavascript.com.br/revisitando-set-em-javascript-pegadinha-truques-para-colocar-em-pratica-hoje</id><content type="html" xml:base="http://cangaceirojavascript.com.br/revisitando-set-javascript-pegadinha-truques/">&lt;p&gt;O ES2015 (ES6) introduziu a estrutura de dados &lt;code class=&quot;highlighter-rouge&quot;&gt;Set&lt;/code&gt; facilitando a vida dos desenvolvedores que antes precisavam empregar subterfúfios para emular características de conjuntos. Neste post revisitaremos essa estrutura tão útil para o desenvolvedor e também veremos pegadinhas e truques a respeito do seu uso.&lt;/p&gt;

&lt;h2 id=&quot;o-problema&quot;&gt;O problema&lt;/h2&gt;

&lt;p&gt;Precisamos criar um &lt;strong&gt;conjunto&lt;/strong&gt; com 20 números aleatórios de um a 100. Primeiro, vamos declarar a função &lt;code class=&quot;highlighter-rouge&quot;&gt;generateRandomInt&lt;/code&gt; que será a responsável pela geração de números aleatórios na faixa que indicarmos:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;generateRandomInt&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;min&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;max&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; 
    &lt;span class=&quot;nb&quot;&gt;Math&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;floor&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;Math&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;random&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;max&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;min&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;min&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Agora, através de &lt;code class=&quot;highlighter-rouge&quot;&gt;Array.from&lt;/code&gt;, criaremos um novo array já preenchido com números aleatórios:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;generateRandomInt&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;min&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;max&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; 
    &lt;span class=&quot;nb&quot;&gt;Math&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;floor&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;Math&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;random&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;max&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;min&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;min&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;numbers&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;Array&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;from&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;Array&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;20&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; 
    &lt;span class=&quot;nx&quot;&gt;generateRandomInt&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;100&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;));&lt;/span&gt;

&lt;span class=&quot;nx&quot;&gt;console&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;numbers&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;O código anterior só foi possível porque o segundo parâmetro da função &lt;code class=&quot;highlighter-rouge&quot;&gt;Array.from&lt;/code&gt; é uma função de &lt;em&gt;mapeamento&lt;/em&gt;, isto é, será aplicada em todos os elementos &lt;code class=&quot;highlighter-rouge&quot;&gt;undefined&lt;/code&gt; do Array criado por &lt;code class=&quot;highlighter-rouge&quot;&gt;new Array(20)&lt;/code&gt; resultando em um array com apenas números aleatórios. Todavia, se escrutinarmos o valor de &lt;code class=&quot;highlighter-rouge&quot;&gt;numbers&lt;/code&gt;, veremos que pode haver números duplicados:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;mi&quot;&gt;54&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;70&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;27&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;86&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;29&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;80&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;68&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;21&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;25&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;81&lt;/span&gt;
&lt;span class=&quot;mi&quot;&gt;49&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;93&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;49&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;39&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;77&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;86&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;47&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;87&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;95&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Essa duplicação não faz sentido pois um conjunto possui &lt;strong&gt;elementos distintos&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;em&gt;“&lt;a href=&quot;https://en.wikipedia.org/wiki/Set_(mathematics)&quot; target=&quot;blank&quot;&gt;In mathematics, a set is a collection of distinct objects”&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Precisamos alterar nosso código para que se coadune com a teoria dos conjuntos!&lt;/p&gt;

&lt;h2 id=&quot;primeira-solução&quot;&gt;Primeira solução&lt;/h2&gt;

&lt;p&gt;Uma solução clássica é verificar se o número existe no array antes de ser adicionado:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;generateRandomInt&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;min&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;max&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; 
    &lt;span class=&quot;nb&quot;&gt;Math&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;floor&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;Math&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;random&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;max&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;min&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;min&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;kd&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;counter&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;10&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;numbers&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[];&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;while&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;counter&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;randomNumber&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;generateRandomInt&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;100&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;numbers&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;some&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;number&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;number&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;===&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;randomNumber&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;nx&quot;&gt;numbers&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;push&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;randomNumber&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
        &lt;span class=&quot;nx&quot;&gt;counter&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;--&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; 
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;   
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Nossa solução funciona, todavia nada disso precisaria ser feito se tivéssemos utilizado a estrutura de dados &lt;code class=&quot;highlighter-rouge&quot;&gt;Set&lt;/code&gt; (conjunto) introduzida no ES2015 (ES6).&lt;/p&gt;

&lt;h2 id=&quot;utilizando-set&quot;&gt;Utilizando Set&lt;/h2&gt;

&lt;p&gt;Vamos alterar o código anterior para que faça uso do &lt;code class=&quot;highlighter-rouge&quot;&gt;Set&lt;/code&gt;. Criamos um conjunto através da instrução &lt;code class=&quot;highlighter-rouge&quot;&gt;new Set()&lt;/code&gt; e através do método &lt;code class=&quot;highlighter-rouge&quot;&gt;add&lt;/code&gt; da instância retornada adicionamos novos elementos. Todavia, caso o elemento já exista no conjunto, ele não será adicionado novamente:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;generateRandomInt&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;min&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;max&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; 
    &lt;span class=&quot;nb&quot;&gt;Math&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;floor&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;Math&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;random&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;max&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;min&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;min&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;numbers&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;Set&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;while&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;numbers&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;size&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;20&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; 
    &lt;span class=&quot;nx&quot;&gt;numbers&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;add&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;generateRandomInt&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;100&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;));&lt;/span&gt;
&lt;span class=&quot;nx&quot;&gt;console&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;numbers&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;A condição &lt;code class=&quot;highlighter-rouge&quot;&gt;numbers.size &amp;lt; 20&lt;/code&gt; é necessária para que tenhamos 20 elementos, pois o número gerado já pode ter sido incluído e, como vimos, o método &lt;code class=&quot;highlighter-rouge&quot;&gt;add()&lt;/code&gt; não permitirá sua inclusão.&lt;/p&gt;

&lt;p&gt;Consultar a propriedade &lt;code class=&quot;highlighter-rouge&quot;&gt;numbers.size&lt;/code&gt; pode não ser tão performático caso a lista tenha um tamanho considerável, nesse sentido vamos utilizar outra estratégia.&lt;/p&gt;

&lt;p&gt;Dessa vez, verificaremos se o elemento existe antes de incluído, pois precisamos dessa informação para saber se incrementamos ou não nosso contador. Verificamos a existência através do método &lt;code class=&quot;highlighter-rouge&quot;&gt;has()&lt;/code&gt; que retorna &lt;code class=&quot;highlighter-rouge&quot;&gt;true&lt;/code&gt; ou &lt;code class=&quot;highlighter-rouge&quot;&gt;false&lt;/code&gt; caso o elemento exista ou não:&lt;/p&gt;

&lt;p&gt;Vamos ao código:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;generateRandomInt&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;min&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;max&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; 
    &lt;span class=&quot;nb&quot;&gt;Math&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;floor&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;Math&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;random&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;max&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;min&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;min&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;numbers&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;Set&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;counter&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;while&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;counter&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;20&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;randomNumbers&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;generateRandomInt&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;100&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;numbers&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;has&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;randomNumbers&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;nx&quot;&gt;numbers&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;add&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;randomNumbers&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
        &lt;span class=&quot;o&quot;&gt;++&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;counter&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;  
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;  
&lt;span class=&quot;nx&quot;&gt;console&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;numbers&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Opcionalmente, podemos omitir a instrução &lt;code class=&quot;highlighter-rouge&quot;&gt;if&lt;/code&gt; da seguinte forma:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;generateRandomInt&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;min&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;max&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; 
    &lt;span class=&quot;nb&quot;&gt;Math&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;floor&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;Math&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;random&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;max&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;min&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;min&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;numbers&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;Set&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;counter&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;while&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;counter&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;20&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;randomNumbers&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;generateRandomInt&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;100&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    &lt;span class=&quot;o&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;numbers&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;has&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;randomNumbers&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;o&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;numbers&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;add&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;randomNumbers&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; 
    &lt;span class=&quot;o&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;++&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;counter&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;  
&lt;span class=&quot;nx&quot;&gt;console&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;numbers&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;A estrutura &lt;code class=&quot;highlighter-rouge&quot;&gt;Set&lt;/code&gt; possui &lt;a href=&quot;https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Global_Objects/Set&quot; target=&quot;_blank&quot;&gt;outros métodos&lt;/a&gt;, porém vale destacar &lt;code class=&quot;highlighter-rouge&quot;&gt;forEach&lt;/code&gt; e &lt;code class=&quot;highlighter-rouge&quot;&gt;clear&lt;/code&gt;. O primeiro itera no conjunto na &lt;strong&gt;ordem de inclusão&lt;/strong&gt; e o segundo remove todos os seus elementos:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;// código anterior omitido&lt;/span&gt;
&lt;span class=&quot;nx&quot;&gt;numbers&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;forEach&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;number&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;console&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;number&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;));&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;// imprime cada item &lt;/span&gt;
&lt;span class=&quot;nx&quot;&gt;numbers&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;clear&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;// esvaziou o conjunto&lt;/span&gt;
&lt;span class=&quot;nx&quot;&gt;console&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;numbers&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;// Set(0) {}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Realizamos um &lt;em&gt;overview&lt;/em&gt; sobre &lt;code class=&quot;highlighter-rouge&quot;&gt;Set&lt;/code&gt; em JavaScript, no entanto, há uma pegadinha que pode pregar uma peça no programador desavisado.&lt;/p&gt;

&lt;h2 id=&quot;pegadinha-no-uso-de-set&quot;&gt;Pegadinha no uso de Set&lt;/h2&gt;

&lt;p&gt;Temos um conjunto com dois elementos:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;livros&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;Set&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;([&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;nome&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'Cangaceiro JavaScript'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;isbn&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'9788594188014'&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;nome&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'MEAN'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;isbn&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'9788555190469'&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;]);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Vamos adicionar um livro repetido para logo em seguida verificarmos o tamanho do &lt;code class=&quot;highlighter-rouge&quot;&gt;Set&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;livros&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;Set&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;([&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;nome&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'Cangaceiro JavaScript'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;isbn&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'9788594188014'&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;nome&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'MEAN'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;isbn&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'9788555190469'&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;]);&lt;/span&gt;

&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;livro&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;nome&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'MEAN'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;isbn&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'9788555190469'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;})&lt;/span&gt;
&lt;span class=&quot;nx&quot;&gt;livros&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;add&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;livro&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;

&lt;span class=&quot;nx&quot;&gt;console&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;livros&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;size&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;// 3!!!&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Para a supressa de alguns, o método &lt;code class=&quot;highlighter-rouge&quot;&gt;add()&lt;/code&gt; adicionou um livro duplicado! Mesmo se tivéssemos utilizado o método &lt;code class=&quot;highlighter-rouge&quot;&gt;has()&lt;/code&gt; para verificar se o livro já existe ou não ele retornaria &lt;code class=&quot;highlighter-rouge&quot;&gt;false&lt;/code&gt;. Por que isso acontece?&lt;/p&gt;

&lt;p&gt;A explicação é a mesma que este autor utilizou para explicar o comportamento do método &lt;code class=&quot;highlighter-rouge&quot;&gt;Array.includes&lt;/code&gt; no artigo &lt;a href=&quot;http://cangaceirojavascript.com.br/array-includes-vs-array-some/&quot; target=&quot;_blank&quot;&gt;“Array.includes vs Array.some”&lt;/a&gt;. Vamos recordar.&lt;/p&gt;

&lt;p&gt;Internamente os métodos &lt;code class=&quot;highlighter-rouge&quot;&gt;has&lt;/code&gt; e &lt;code class=&quot;highlighter-rouge&quot;&gt;add&lt;/code&gt; utilizam o operador &lt;code class=&quot;highlighter-rouge&quot;&gt;===&lt;/code&gt; para comparar o novo elemento com os já existentes. Essa comparação será feita com base no valor primitivo dos seguintes tipos:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Boolean&lt;/li&gt;
  &lt;li&gt;Null&lt;/li&gt;
  &lt;li&gt;Undefined&lt;/li&gt;
  &lt;li&gt;Number&lt;/li&gt;
  &lt;li&gt;String&lt;/li&gt;
  &lt;li&gt;Symbol (ES2015)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Todavia, quando ocorre uma comparação com um elemento do tipo &lt;code class=&quot;highlighter-rouge&quot;&gt;Object&lt;/code&gt;, o interpretador verificará se ambos apontam para o mesmo endereço de memória. Sendo assim, por mais que tenhamos criado um novo objeto com estrutura idêntica ao objeto do nosso conjunto, eles serão diferentes.&lt;/p&gt;

&lt;p&gt;Voltando ao exemplo anterior, se tentarmos adicionar o mesmo livro que acabamos de adicionar, não conseguiremos, pois a variável de referência &lt;code class=&quot;highlighter-rouge&quot;&gt;livro&lt;/code&gt; aponta para o mesmo objeto que inserimos em nosso conjunto:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;livros&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;Set&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;([&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;nome&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'Cangaceiro JavaScript'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;isbn&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'9788594188014'&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;nome&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'MEAN'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;isbn&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'9788555190469'&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;]);&lt;/span&gt;

&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;livro&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;nome&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'MEAN'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;isbn&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'9788555190469'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;})&lt;/span&gt;

&lt;span class=&quot;nx&quot;&gt;livros&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;add&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;livro&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;nx&quot;&gt;console&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;livros&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;size&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;// 3!!! Incluiu!&lt;/span&gt;

&lt;span class=&quot;nx&quot;&gt;livros&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;has&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;livro&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;// true, existe no conjunto&lt;/span&gt;
&lt;span class=&quot;nx&quot;&gt;livros&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;add&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;livro&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;// não adiciona novamente&lt;/span&gt;
&lt;span class=&quot;nx&quot;&gt;console&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;livros&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;size&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;// continua 3&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Agora que passamos pela pegadinha que o &lt;code class=&quot;highlighter-rouge&quot;&gt;Set&lt;/code&gt; pode nos pregar, que tal aprendermos dois truques que podemos utilizar no dia a dia?&lt;/p&gt;

&lt;h2 id=&quot;truque-1-transformando-uma-lista-em-conjunto&quot;&gt;Truque 1: transformando uma lista em conjunto&lt;/h2&gt;

&lt;p&gt;Precisamos do total de ID’s não duplicados de um &lt;code class=&quot;highlighter-rouge&quot;&gt;Array&lt;/code&gt;. Uma maneira de resolver o problema é criando um novo &lt;code class=&quot;highlighter-rouge&quot;&gt;Array&lt;/code&gt; com elementos não duplicados:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;ids&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;100&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;110&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;100&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;200&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;300&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;100&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;uniqueIds&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[];&lt;/span&gt;

&lt;span class=&quot;nx&quot;&gt;ids&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;forEach&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;id&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; 
    &lt;span class=&quot;o&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;uniqueIds&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;some&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;uniqueId&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; 
        &lt;span class=&quot;nx&quot;&gt;uniqueId&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;===&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;uniqueIds&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;push&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;));&lt;/span&gt;

&lt;span class=&quot;nx&quot;&gt;console&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;uniqueIds&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;length&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Todavia, podemos criar um &lt;code class=&quot;highlighter-rouge&quot;&gt;Set&lt;/code&gt; a partir de um array passando-o diretamente para seu &lt;code class=&quot;highlighter-rouge&quot;&gt;constructor&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;ids&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;100&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;105&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;100&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;200&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;300&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;110&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;uniqueIds&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;Set&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;ids&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;// recebe um array como parâmetro&lt;/span&gt;
&lt;span class=&quot;nx&quot;&gt;console&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;uniqueIds&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;size&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;// 5&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Um código muito mais enxuto.&lt;/p&gt;

&lt;h2 id=&quot;truque-2-transformando-um-conjunto-em-uma-lista&quot;&gt;Truque 2: transformando um conjunto em uma lista&lt;/h2&gt;

&lt;p&gt;Vimos como descobrir a quantidade de elementos únicos dentro de uma lista convertendo-a para um conjunto. Mas se precisarmos filtrar ou realizar algum mapeamento nos valores do conjunto? Essas operações existem apenas no tipo &lt;code class=&quot;highlighter-rouge&quot;&gt;Array&lt;/code&gt;. E agora?&lt;/p&gt;

&lt;p&gt;A boa notícia é que através do &lt;em&gt;Spread Operator&lt;/em&gt; podemos transformar facilmente um conjunto (Set) em uma lista (Array):&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;ids&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;100&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;105&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;100&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;200&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;300&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;110&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;filteredIds&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[...&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;Set&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;ids&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)]&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;filter&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;uniqueId&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;uniqueId&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;100&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;

&lt;span class=&quot;nx&quot;&gt;console&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;filteredIds&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt; 
&lt;span class=&quot;c1&quot;&gt;// [105, 200, 300, 110]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Essa dica e a anterior simplificam demais a transformação de um conjunto para uma lista e de uma lista para conjunto.&lt;/p&gt;

&lt;h2 id=&quot;conclusão&quot;&gt;Conclusão&lt;/h2&gt;

&lt;p&gt;A introdução tipo &lt;code class=&quot;highlighter-rouge&quot;&gt;Set&lt;/code&gt; no ES2015 (ES6) ajudou a reduzir drásticamente a quantidade de código necessária para realizarmos determinadas tarefas do dia a dia.&lt;/p&gt;

&lt;p&gt;E você? Já utilizava &lt;code class=&quot;highlighter-rouge&quot;&gt;Set&lt;/code&gt; antes? Conhecia os truques apresentados? Deixe a sua opnião!&lt;/p&gt;</content><author><name>Flávio Almeida</name></author><category term="javascript" /><category term="set" /><category term="data structure" /><category term="tips" /><category term="tricks" /><category term="truques" /><category term="conjunto" /><summary type="html">O ES2015 (ES6) introduziu a estrutura de dados Set facilitando a vida dos desenvolvedores que antes precisavam empregar subterfúfios para emular características de conjuntos. Neste post revisitaremos essa estrutura tão útil para o desenvolvedor e também veremos pegadinhas e truques a respeito do seu uso.</summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://cangaceirojavascript.com.br/logo.png" /></entry></feed>