<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Manuel Gil @imgildev</title>
    <description>The latest articles on DEV Community by Manuel Gil @imgildev (@imgildev).</description>
    <link>https://dev.to/imgildev</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1042923%2F985ed8e9-e05c-45c1-868f-1df0062074cf.png</url>
      <title>DEV Community: Manuel Gil @imgildev</title>
      <link>https://dev.to/imgildev</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/imgildev"/>
    <language>en</language>
    <item>
      <title>SemVer: Qué es y por qué es importante para el desarrollo de software</title>
      <dc:creator>Manuel Gil @imgildev</dc:creator>
      <pubDate>Thu, 06 Apr 2023 05:11:33 +0000</pubDate>
      <link>https://dev.to/imgildev/semver-que-es-y-por-que-es-importante-para-el-desarrollo-de-software-4ic1</link>
      <guid>https://dev.to/imgildev/semver-que-es-y-por-que-es-importante-para-el-desarrollo-de-software-4ic1</guid>
      <description>&lt;h2&gt;
  
  
  Introducción
&lt;/h2&gt;

&lt;p&gt;En el mundo del desarrollo de software, la gestión de versiones es un aspecto fundamental para garantizar la calidad y la compatibilidad del software. A continuación veremos como funcionan estas versiones y como podemos aplicarla a nuestros proyectos.&lt;/p&gt;

&lt;h2&gt;
  
  
  ¿Qué es SemVer?
&lt;/h2&gt;

&lt;p&gt;El Versionamiento Semantico o &lt;strong&gt;SemVer&lt;/strong&gt; por su nombre en inglés (Semantic Versioning), es una de las convenciones de nomenclatura de versiones más populares para entender las versiones de un software, que proporciona una manera semántica y consistente etiquetas para rastrear las versiones de un proyecto de software.&lt;/p&gt;

&lt;p&gt;Esta nomenclatura nos permite conocer el estado de una aplicación de manera simple y la podemos encontrar como una serie de número dividido en tres grupos separados por un punto. Cada grupo se conoce como mayor, menor y parche respectivamente (&lt;em&gt;major&lt;/em&gt;, &lt;em&gt;minor&lt;/em&gt; y &lt;em&gt;patch&lt;/em&gt; en inglés o también como &lt;em&gt;x&lt;/em&gt;, &lt;em&gt;y&lt;/em&gt;, &lt;em&gt;z&lt;/em&gt;), por ejemplo: &lt;em&gt;1.0.1&lt;/em&gt;, &lt;em&gt;2.1.0&lt;/em&gt;, &lt;em&gt;14.2.9&lt;/em&gt;, etc…&lt;/p&gt;

&lt;p&gt;Cada uno de estos grupos sirve para describir un estado diferente en el proceso de desarrollo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Patch: el cambio de este número representa una reparación en el código. Esta actualización se realiza siempre que se soluciona un error en el código para asegura su estabilidad y seguridad, por ejemplo: &lt;code&gt;1.0.1&lt;/code&gt; → &lt;code&gt;1.0.2&lt;/code&gt;, &lt;code&gt;2.1.0&lt;/code&gt; → &lt;code&gt;2.1.1&lt;/code&gt;, &lt;code&gt;14.2.9&lt;/code&gt; → &lt;code&gt;14.2.10&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Menor: este número representa una característica nueva, lo que implica que la actualización es segura y agrega una funcionalidad o comportamiento nuevo que se puede implementar. Al agregar una característica nueva se actualiza este grupo y el número de patch pasa a cero, por ejemplo: &lt;code&gt;1.0.1&lt;/code&gt; → &lt;code&gt;1.1.0&lt;/code&gt;, &lt;code&gt;2.1.0&lt;/code&gt; → &lt;code&gt;2.2.0&lt;/code&gt;, &lt;code&gt;14.2.9&lt;/code&gt; → &lt;code&gt;14.3.0&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Major: cuando este número cambia está representando una ruptura, lo que implica que dicha actualización causará daños en el código ya que esta versión o es compatible con versiones anteriores. La actualización de este grupo requiere que los números tanto de menor como de patch sean restaurados a cero, por ejemplo: &lt;code&gt;1.0.1&lt;/code&gt; → &lt;code&gt;2.0.0&lt;/code&gt;, &lt;code&gt;2.1.0&lt;/code&gt; → &lt;code&gt;3.0.0&lt;/code&gt;, &lt;code&gt;14.2.9&lt;/code&gt; → &lt;code&gt;15.0.0&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;También es posible encontrar información acerca de la estabilidad de un proyecto como un dato adicional en el path:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Dev: esta etiqueta hace referencia a un código que aún se encuentra en un estado de desarrollo. Ejemplo: &lt;code&gt;1.0.1-dev&lt;/code&gt;, &lt;code&gt;2.1.0-dev&lt;/code&gt;, &lt;code&gt;14.2.9-dev&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Alpha: es la primera etapa de código que se prepara para ser parte de un release. Ejemplo: &lt;code&gt;1.0.1-alpha&lt;/code&gt;, &lt;code&gt;2.1.0-alpha&lt;/code&gt;, &lt;code&gt;14.2.9-alpha&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Beta: es una versión más estable pero que aún no cumple con la estabilidad suficiente para ser un release. Ejemplo: &lt;code&gt;1.0.1-beta&lt;/code&gt;, &lt;code&gt;2.1.0-beta&lt;/code&gt;, &lt;code&gt;14.2.9-beta&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;RC1: esta versión es una posible candidata a un para un release, aun siendo un pre-release cuenta con una gran estabilidad. Ejemplo: &lt;code&gt;1.0.1-RC1&lt;/code&gt;, &lt;code&gt;2.1.0-RC1&lt;/code&gt;, &lt;code&gt;14.2.9-RC1&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;RC2: aun cuando esta versión es un pre-release, es la más estable y cercana al release. Ejemplo: &lt;code&gt;1.0.1-RC2&lt;/code&gt;, &lt;code&gt;2.1.0-RC2&lt;/code&gt;, &lt;code&gt;14.2.9-RC2&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Stable: esta versión tiene toda la estabilidad y se considera como release, por el mismo motivo no requiere ser agregada en la etiqueta semántica ya que incurriría en una redundancia. Ejemplo: &lt;code&gt;1.0.1&lt;/code&gt;, &lt;code&gt;2.1.0&lt;/code&gt;, &lt;code&gt;14.2.9&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Todas aquellas versiones inferiores a la &lt;em&gt;1.0.0&lt;/em&gt; también son consideradas como pre-releases.&lt;/p&gt;

&lt;p&gt;Según esta nomenclatura, un proyecto iniciaría con un mínimo de una característica lo que implica que la versión mínima sería &lt;em&gt;0.1.0&lt;/em&gt;, de la misma manera, si un proyecto o producto ya se encuentra en producción su versión mínima sería &lt;em&gt;1.0.0&lt;/em&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  ¿Por qué es importante SemVer en el desarrollo de software?
&lt;/h2&gt;

&lt;p&gt;Ya que SemVer es una convención popular, al aplicarla a cualquier desarrollo mostrará el estado un software de manera rápida a las personas que contribuyen en él, al mismo tiempo que es posible crear o encontrar documentación que apoyan este tipo de versionamiento como son los llamados archivos de cambios o &lt;a href="%5Bhttps://keepachangelog.com/%5D(https://keepachangelog.com/en/1.0.0/)"&gt;&lt;code&gt;changelog&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;SemVer también es usado por muchos gestores de dependencias como &lt;code&gt;npm&lt;/code&gt; , &lt;code&gt;composer&lt;/code&gt; , &lt;code&gt;maven&lt;/code&gt; , entre otros; para describir el estado de las dependencias de un proyecto y sirve como apoyo a los grupos de desarrollo en cuanto a los beneficios o desventajas que se pueden encontrar al actualizar estas dependencias.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cómo funciona SemVer en los gestores de dependencias
&lt;/h2&gt;

&lt;p&gt;En muchos de los proyectos #OpenSource integran SemVer a través de etiquetas semánticas, las cuales podemos encontrar ordenadas de la versión más alta a la más baja y hacen referencia a un punto especifico del código.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;## v1.1.0

on Mar 7, 2023

- commit: 606e572

## v1.0.0

on Mar 1, 2023

- commit: e02581f

## v0.3.1

on Feb 16, 2023

- commit: d194c2e

## v0.3.0

on Feb 15, 2023

- commit: 570045b

## v0.3.0-RC2

on Feb 14, 2023

- commit: 28fe4ec

## v0.3.0-RC1

on Feb 12, 2023

- commit: ecffd4c
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Basado la información de estas etiquetas y algunos operadores matemáticos y lógicos, los gestores de dependencias son capaces de detectar las condiciones y restricciones para la instalación y actualización de las dependencias.&lt;/p&gt;

&lt;p&gt;Las restricciones que se pueden encontrar son:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Restricción de versión exacta: define una versión exacta a instalar de un paquete. Ejemplo &lt;code&gt;"someone/my-package": "2.1.3"&lt;/code&gt; instalará la versión 2.1.3.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Rango de versiones: es posible definir un rango superior e inferior para la instalación de una dependencia. Ejemplo: &lt;code&gt;"someone/my-package": "&amp;gt;=2.1.0 || &amp;lt;2.2.0"&lt;/code&gt; instalará cualquier versión entre la 2.1.0 y 2.2.0.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Intervalo de versiones con guiones: al igual que la restricción por rango podemos definir los límites de esta restricción separados por un guion. Ejemplo &lt;code&gt;"someone/my-package": "2.1.0 - 2.3.0"&lt;/code&gt; instalará cualquier versión entre la 2.1.0 y 2.3.0.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Rango de versión comodín: este restricción está provista con un comodín o wildcard para definir el rango de instalación de manera simple. Ejemplo: &lt;code&gt;"someone/my-package": "2.1.*"&lt;/code&gt; instalará cualquier versión desde la 2.1.0 hasta la 2.1.n disponible, &lt;code&gt;"someone/my-package": "2.*"&lt;/code&gt; instalará cualquier versión desde la 2.0.0 hasta la 2.n disponible.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Rango de versiones de tilde: el comportamiento de esta restricción es similar al uso de wildcard, sin embargo hace uso de una tilde o virgulilla para definir su rango. Ejemplo &lt;code&gt;"someone/my-package": "~2.1.0"&lt;/code&gt; instalará cualquier versión superior o igual a 2.1.0 e inferior a 2.2.0, &lt;code&gt;"someone/my-package": "~2.1"&lt;/code&gt; instalará cualquier versión superior o igual a 2.1.0 e inferior a la 3.0.0.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Rango de versión de caret: esta versión mejorada hace uso de un acento o caret realizará una instalación que no rompa con la estabilidad del proyecto. Ejemplo: &lt;code&gt;"someone/my-package": "^2.1.0"&lt;/code&gt; instalará cualquier versión superior o igual 2.1.0 e inferior a 3.0.0 ya que este cambio puede generar rupturas de código.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;También debemos tener en cuenta que los gestores de dependencias están en la capacidad de instalar versiones de desarrollo o pre-release dentro de los rangos definidos y dependiendo de su configuración.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cómo implementar SemVer en un proyecto de software
&lt;/h2&gt;

&lt;p&gt;Ya sea que deseemos o no publicar nuestro proyecto, los gestores de dependencias cuentan con una etiqueta para llevar el versionamiento de nuestro software, como ocurre en el caso de &lt;code&gt;npm&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"test"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1.0.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Etiqueta&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;para&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;uso&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;de&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;SemVer&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"main"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"index.js"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"scripts"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"test"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"echo &lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;Error: no test specified&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt; &amp;amp;&amp;amp; exit 1"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"keywords"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"author"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"license"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ISC"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Git y plataformas como GitHub también nos permite agregar etiquetas con las cuales podemos hacer referencia a nuestro código:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git tag &lt;span class="nt"&gt;-a&lt;/span&gt; v1.0.0 &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"version 1.0.0"&lt;/span&gt; &amp;lt;commit_sha&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;También existe herramientas que nos pueden facilitar la publicación de versiones en nuestro código, algunos ejemplos para proyectos con javascript:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/release-it/release-it"&gt;Release It!&lt;/a&gt;: herramienta CLI para la automatización de versionamiento y publicaciones.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/googleapis/release-please"&gt;Release Please&lt;/a&gt;: herramienta para la automatización de archivos changelog, versionamiento y publicación.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/SUI-Components/sui"&gt;Sui&lt;/a&gt;: paquete para gestión de commits y releases en proyectos monorepo.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusión
&lt;/h2&gt;

&lt;p&gt;En resumen, SemVer es una convención de nomenclatura de versiones que se utiliza para etiquetar y rastrear las versiones de un proyecto de software de manera semántica y consistente. Es importante para el desarrollo de software porque ayuda a los desarrolladores y usuarios a comprender los cambios en una nueva versión del software y a gestionar la compatibilidad del software. Implementar SemVer en un proyecto de software es una práctica recomendada para garantizar la calidad y la compatibilidad del software.&lt;/p&gt;

</description>
      <category>spanish</category>
      <category>opensource</category>
      <category>programming</category>
      <category>semver</category>
    </item>
    <item>
      <title>Automatizando la generación de datos ficticios con Seed, Factory, Faker y TypeORM en NestJS</title>
      <dc:creator>Manuel Gil @imgildev</dc:creator>
      <pubDate>Fri, 31 Mar 2023 22:47:43 +0000</pubDate>
      <link>https://dev.to/imgildev/automatizando-la-generacion-de-datos-ficticios-con-seed-factory-faker-y-typeorm-en-nestjs-5fpc</link>
      <guid>https://dev.to/imgildev/automatizando-la-generacion-de-datos-ficticios-con-seed-factory-faker-y-typeorm-en-nestjs-5fpc</guid>
      <description>&lt;h2&gt;
  
  
  Introducción
&lt;/h2&gt;

&lt;p&gt;En muchas ocasiones necesitamos generar datos ficticios para probar nuestro desarrollo o llenar nuestra base de datos de pruebas. La creación manual de estos datos puede resultar tediosa y llevar mucho tiempo. En este artículo, hablaremos sobre cómo automatizar el proceso de generación de datos ficticios utilizando TypeORM.&lt;/p&gt;

&lt;p&gt;Para empezar es necesaria la instalación de una &lt;a href="https://typeorm-extension.tada5hi.net/" rel="noopener noreferrer"&gt;extensión&lt;/a&gt; adicional ya que TypeORM por si solo no cuenta con una opción para generar datos ficticios.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--save&lt;/span&gt; @nestjs/typeorm typeorm typeorm-extension


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

&lt;/div&gt;
&lt;p&gt;Adicional a esto se requiere la instalación de un driver de conexión a la base de datos.&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

npm &lt;span class="nb"&gt;install &lt;/span&gt;pg &lt;span class="nt"&gt;--save&lt;/span&gt;


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

&lt;/div&gt;
&lt;p&gt;En este caso se usará PosgreSQL por lo que realizamos la instalación del controlador recomendado por TypeORM en su &lt;a href="https://typeorm.io/#installation" rel="noopener noreferrer"&gt;sitio&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Para este ejemplo se tendrán dos entidades hipotéticas &lt;code&gt;user&lt;/code&gt; y &lt;code&gt;post&lt;/code&gt; .&lt;/p&gt;

&lt;p&gt;Por último se hace la instalación de dependencias necesarias para la ejecución del código.&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--save&lt;/span&gt; @nestjs/config @types/bcrypt bcrypt


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

&lt;/div&gt;
&lt;p&gt;Para el ejemplo se plantea la siguiente estructura de carpetas.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw5tns3nvubdyy40gkj3q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw5tns3nvubdyy40gkj3q.png" alt="Estructura de carpetas"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Definiendo un Factory
&lt;/h2&gt;

&lt;p&gt;Un factory es una función que nos sirve para establecer una estructura u objeto con datos aleatorios ficticios en tiempo de ejecución. Con el uso de Faker podemos generar nombres, direcciones, números de teléfono, correos electrónicos y muchos otros tipos de datos ficticios.&lt;/p&gt;

&lt;p&gt;En la definición de nuestro Factory se cuenta con una instancia de la librería Faker para generar datos aleatorios.&lt;/p&gt;

&lt;p&gt;Por ejemplo, el archivo &lt;code&gt;user.factory.ts&lt;/code&gt; contendría.&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;



&lt;p&gt;Se puede encontrar más información acerca de Faker y sus características en &lt;a href="https://fakerjs.dev/" rel="noopener noreferrer"&gt;fakerjs.dev&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Semilla o Seed
&lt;/h2&gt;

&lt;p&gt;A través de un seed o semilla se puede generar un set de datos aleatorios, para ello se hace uso de una clase seeder que se apoya de un Factory para la creación de datos.&lt;/p&gt;

&lt;p&gt;Lo podemos ver en el archivo &lt;code&gt;user.seeder.ts&lt;/code&gt;.&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;En el caso de la entidad post existe una relación que requiere de un usuario en la base de datos, por lo que se hace uso de un dato conocido para agregar esta relación, el archivo &lt;code&gt;post.seeder.ts&lt;/code&gt; sería el siguiente.&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;Para poder tener un mejor control de la ejecución del sets es importante definir un punto de entrada, el cual tiene el nombre &lt;code&gt;init.seeder.ts&lt;/code&gt; por convención y será llamado en las configuraciones de TypeORM.&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;h2&gt;
  
  
  Configuración de TypeORM
&lt;/h2&gt;

&lt;p&gt;Para este ejemplo se define un archivo &lt;code&gt;typeorm.config.ts&lt;/code&gt; en el que se hace uso de las entidades, migraciones y seeds.&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;Esta configuración requiere de las variables de entorno por lo que se hace uso del &lt;code&gt;ConfigModule&lt;/code&gt; .&lt;/p&gt;

&lt;p&gt;En el archivo &lt;code&gt;.env&lt;/code&gt; se deben actualizar las variables para la conexión a la base de datos.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

DATABASE_HOST=localhost
DATABASE_PORT=5432
DATABASE_USERNAME=postgres
DATABASE_PASSWORD=root
DATABASE_DATABASE=test


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

&lt;/div&gt;
&lt;h2&gt;
  
  
  Ejecución
&lt;/h2&gt;

&lt;p&gt;Para ejecutar las migraciones y generación de datos aleatorios se agregan las configuraciones requeridas en el archivo &lt;code&gt;package.json&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="nl"&gt;"scripts"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="err"&gt;...&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"typeorm"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ts-node -r tsconfig-paths/register node_modules/typeorm/cli.js -d database/config/typeorm.config.ts"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mig-gen"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"npm run typeorm migration:generate -- "&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mig-run"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"npm run typeorm migration:run"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mig-rev"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"npm run typeorm migration:revert"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"seed"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ts-node -r tsconfig-paths/register node_modules/typeorm-extension/dist/cli/index.js seed -d database/config/typeorm.config.ts"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="w"&gt;


&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;Para iniciar ejecutamos el comando &lt;code&gt;migration:generate&lt;/code&gt; a través del atajo que se acaba de ingresar.&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

npm run mig-gen &lt;span class="nt"&gt;--&lt;/span&gt; database/migrations/init


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

&lt;/div&gt;
&lt;p&gt;Una vez creado el archivo con la migración inicial, corremos esta migración con el atajo de &lt;code&gt;migration:run&lt;/code&gt;.&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

npm run mig-run


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

&lt;/div&gt;
&lt;p&gt;Por último ejecutamos la semilla con el comando &lt;code&gt;seed&lt;/code&gt;.&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

npm run seed


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

&lt;/div&gt;
&lt;p&gt;Esto generaría un set de datos aleatorios con en la base de datos con el que podemos probar la aplicación.&lt;/p&gt;

&lt;p&gt;El código completo de este ejemplo se encuentra publicado en &lt;a href="https://github.com/ManuelGil/nest-typeorm-seed-example" rel="noopener noreferrer"&gt;github&lt;/a&gt; si desea descargarlo.&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/ManuelGil" rel="noopener noreferrer"&gt;
        ManuelGil
      &lt;/a&gt; / &lt;a href="https://github.com/ManuelGil/nest-typeorm-seed-example" rel="noopener noreferrer"&gt;
        nest-typeorm-seed-example
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      This is a example of seeding with TypeOrm and NestJS
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;p&gt;
  &lt;a href="http://nestjs.com/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/4b0000b8e7a6449a924fe0212093b9f3936ef80cc8fdfbb770baad58f58b8c2c/68747470733a2f2f6e6573746a732e636f6d2f696d672f6c6f676f2d736d616c6c2e737667" width="200" alt="Nest Logo"&gt;&lt;/a&gt;
&lt;/p&gt;
  &lt;p&gt;A progressive &lt;a href="http://nodejs.org" rel="nofollow noopener noreferrer"&gt;Node.js&lt;/a&gt; framework for building efficient and scalable server-side applications.&lt;/p&gt;
    &lt;p&gt;
&lt;a href="https://www.npmjs.com/~nestjscore" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/24dfd27aa1b2b7b9b523f5eaf2c6abf33084588f7f567553ad9e4b36113b5717/68747470733a2f2f696d672e736869656c64732e696f2f6e706d2f762f406e6573746a732f636f72652e737667" alt="NPM Version"&gt;&lt;/a&gt;
&lt;a href="https://www.npmjs.com/~nestjscore" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/b7c951e242d9686b460a9eab8b265d7240f84b29a79c299c648aa95d64bf8440/68747470733a2f2f696d672e736869656c64732e696f2f6e706d2f6c2f406e6573746a732f636f72652e737667" alt="Package License"&gt;&lt;/a&gt;
&lt;a href="https://www.npmjs.com/~nestjscore" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/7b83739222090e241d71c5fd4938703c7dedfafef0cde0d96022c3cf9b3a57ca/68747470733a2f2f696d672e736869656c64732e696f2f6e706d2f646d2f406e6573746a732f636f6d6d6f6e2e737667" alt="NPM Downloads"&gt;&lt;/a&gt;
&lt;a href="https://circleci.com/gh/nestjs/nest" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/90e78bdb27156e5275cdb3028402d4cc16b313c300b8dfdadd865455164d68ad/68747470733a2f2f696d672e736869656c64732e696f2f636972636c6563692f6275696c642f6769746875622f6e6573746a732f6e6573742f6d6173746572" alt="CircleCI"&gt;&lt;/a&gt;
&lt;a href="https://coveralls.io/github/nestjs/nest?branch=master" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/3c5d9fe3d2b47c6e02dd884319a0049859d22493dc47665d219edfaa4412632b/68747470733a2f2f636f766572616c6c732e696f2f7265706f732f6769746875622f6e6573746a732f6e6573742f62616467652e7376673f6272616e63683d6d61737465722339" alt="Coverage"&gt;&lt;/a&gt;
&lt;a href="https://discord.gg/G7Qnnhy" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/418492403803275197fbce1084b95b08d56ad9c7d2a0d6d3fa70dea12ff31284/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f646973636f72642d6f6e6c696e652d627269676874677265656e2e737667" alt="Discord"&gt;&lt;/a&gt;
&lt;a href="https://opencollective.com/nest#backer" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/ebdc9e103775edc0db99103676102f341ba228170356d4e069dfef64ef635593/68747470733a2f2f6f70656e636f6c6c6563746976652e636f6d2f6e6573742f6261636b6572732f62616467652e737667" alt="Backers on Open Collective"&gt;&lt;/a&gt;
&lt;a href="https://opencollective.com/nest#sponsor" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/9e95a1e851cf02fe970fce3fd496498c907a566aef7b32edbe699fb701e1fdbc/68747470733a2f2f6f70656e636f6c6c6563746976652e636f6d2f6e6573742f73706f6e736f72732f62616467652e737667" alt="Sponsors on Open Collective"&gt;&lt;/a&gt;
  &lt;a href="https://paypal.me/kamilmysliwiec" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/4f9ed737abe81e3e0c3278f57f87fe09674513cb858c4a7dd0712c795e75c39b/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f446f6e6174652d50617950616c2d6666336635392e737667"&gt;&lt;/a&gt;
    &lt;a href="https://opencollective.com/nest#sponsor" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/fab509818f8e438f1f2e4d7b42baf9d12b6bf45b2ad80fd338a764334867bf47/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f537570706f727425323075732d4f70656e253230436f6c6c6563746976652d3431423838332e737667" alt="Support us"&gt;&lt;/a&gt;
  &lt;a href="https://twitter.com/nestframework" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/e984f5b62ec34062df9b35352b3c756486e5b83f9dc33d14116286cd40f5f071/68747470733a2f2f696d672e736869656c64732e696f2f747769747465722f666f6c6c6f772f6e6573746672616d65776f726b2e7376673f7374796c653d736f6369616c266c6162656c3d466f6c6c6f77"&gt;&lt;/a&gt;
&lt;/p&gt;
  
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Description&lt;/h2&gt;

&lt;/div&gt;

&lt;p&gt;&lt;a href="https://github.com/nestjs/nest" rel="noopener noreferrer"&gt;Nest&lt;/a&gt; framework TypeScript starter repository.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Installation&lt;/h2&gt;

&lt;/div&gt;

&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;$ npm install&lt;/pre&gt;

&lt;/div&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Running the app&lt;/h2&gt;

&lt;/div&gt;

&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;&lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; development&lt;/span&gt;
$ npm run start

&lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; watch mode&lt;/span&gt;
$ npm run start:dev

&lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; production mode&lt;/span&gt;
$ npm run start:prod&lt;/pre&gt;

&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Test&lt;/h2&gt;

&lt;/div&gt;

&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;&lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; unit tests&lt;/span&gt;
$ npm run &lt;span class="pl-c1"&gt;test&lt;/span&gt;

&lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; e2e tests&lt;/span&gt;
$ npm run test:e2e

&lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; test coverage&lt;/span&gt;
$ npm run test:cov&lt;/pre&gt;

&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Support&lt;/h2&gt;

&lt;/div&gt;

&lt;p&gt;Nest is an MIT-licensed open source project. It can grow thanks to the sponsors and support by the amazing backers. If you'd like to join them, please &lt;a href="https://docs.nestjs.com/support" rel="nofollow noopener noreferrer"&gt;read more here&lt;/a&gt;.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Stay in touch&lt;/h2&gt;

&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;Author - &lt;a href="https://kamilmysliwiec.com" rel="nofollow noopener noreferrer"&gt;Kamil Myśliwiec&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Website - &lt;a href="https://nestjs.com/" rel="nofollow noopener noreferrer"&gt;https://nestjs.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Twitter - &lt;a href="https://twitter.com/nestframework" rel="nofollow noopener noreferrer"&gt;@nestframework&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;License&lt;/h2&gt;

&lt;/div&gt;

&lt;p&gt;Nest is &lt;a href="https://github.com/ManuelGil/nest-typeorm-seed-exampleLICENSE" rel="noopener noreferrer"&gt;MIT licensed&lt;/a&gt;.&lt;/p&gt;

&lt;/div&gt;
&lt;br&gt;
&lt;br&gt;
  &lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/ManuelGil/nest-typeorm-seed-example" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;h2&gt;
  
  
  Conclusión
&lt;/h2&gt;

&lt;p&gt;La generación de datos ficticios es una parte importante del desarrollo de aplicaciones. Utilizando Seed, Factory y Faker podemos automatizar este proceso y ahorrar mucho tiempo. Con estos tres elementos se puede generar grandes cantidades de datos ficticios de forma rápida y eficiente.&lt;/p&gt;

</description>
      <category>spanish</category>
      <category>nestjs</category>
      <category>typeorm</category>
      <category>seed</category>
    </item>
    <item>
      <title>¿Qué es GitHub Pages?</title>
      <dc:creator>Manuel Gil @imgildev</dc:creator>
      <pubDate>Sat, 18 Mar 2023 18:58:34 +0000</pubDate>
      <link>https://dev.to/imgildev/que-es-github-pages-2e35</link>
      <guid>https://dev.to/imgildev/que-es-github-pages-2e35</guid>
      <description>&lt;p&gt;GitHub Pages es un servicio gratuito ofrecido por GitHub que permite a los usuarios alojar sitios web estáticos directamente desde sus repositorios de GitHub. Esto significa que cualquier usuario de GitHub puede publicar su propio sitio web sin tener que pagar por alojamiento web o preocuparse por la configuración del servidor.&lt;/p&gt;

&lt;p&gt;Para empezar a utilizar GitHub Pages, los usuarios simplemente necesitan crear un nuevo repositorio en GitHub y agregar archivos HTML, CSS y JavaScript a su proyecto. Luego, pueden habilitar GitHub Pages en la configuración del repositorio y elegir una rama o carpeta para alojar su sitio web.&lt;/p&gt;

&lt;p&gt;GitHub Pages también permite a los usuarios personalizar su sitio web utilizando plantillas de Jekyll, un generador de sitios web estáticos que se integra perfectamente con GitHub Pages. Los usuarios pueden elegir entre varias plantillas prediseñadas o crear la suya propia para personalizar completamente su sitio web.&lt;/p&gt;

&lt;p&gt;Además, GitHub Pages también incluye características avanzadas como soporte para SSL, redirección de URL y análisis web. Los usuarios también pueden agregar su propio dominio personalizado para su sitio web, lo que les permite crear una presencia en línea única y profesional.&lt;/p&gt;

&lt;p&gt;En resumen, GitHub Pages es una herramienta excelente para cualquier usuario que quiera crear un sitio web estático de manera rápida y fácil. Con su integración perfecta con GitHub y su amplia gama de características, GitHub Pages ofrece una solución de alojamiento web simple pero poderosa para cualquier persona que quiera compartir su trabajo en línea.&lt;/p&gt;

</description>
      <category>spanish</category>
      <category>latam</category>
      <category>opensource</category>
      <category>github</category>
    </item>
  </channel>
</rss>
