<?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: Hidayt Rahman</title>
    <description>The latest articles on DEV Community by Hidayt Rahman (@hidaytrahman).</description>
    <link>https://dev.to/hidaytrahman</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%2F418167%2F243f4ad5-fd26-4606-99d7-c7817d81d75f.jpeg</url>
      <title>DEV Community: Hidayt Rahman</title>
      <link>https://dev.to/hidaytrahman</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/hidaytrahman"/>
    <language>en</language>
    <item>
      <title>A Modern Alternative to Create React App</title>
      <dc:creator>Hidayt Rahman</dc:creator>
      <pubDate>Fri, 14 Mar 2025 12:26:08 +0000</pubDate>
      <link>https://dev.to/hidaytrahman/a-modern-alternative-to-create-react-app-4774</link>
      <guid>https://dev.to/hidaytrahman/a-modern-alternative-to-create-react-app-4774</guid>
      <description>&lt;h3&gt;
  
  
  Introducing &lt;code&gt;template-rtw&lt;/code&gt;: A Modern Alternative to Create React App
&lt;/h3&gt;

&lt;p&gt;With the &lt;strong&gt;deprecation of Create React App (CRA)&lt;/strong&gt;, many developers are left searching for a reliable, modern, and customizable way to set up React projects. Enter &lt;strong&gt;&lt;a href="https://github.com/hidaytrahman/template-rtw" rel="noopener noreferrer"&gt;&lt;code&gt;template-rtw&lt;/code&gt;&lt;/a&gt;&lt;/strong&gt;, a GitHub template repository designed to provide a &lt;strong&gt;production-ready, fully customizable React starter kit&lt;/strong&gt; using &lt;strong&gt;React 19&lt;/strong&gt;, &lt;strong&gt;TypeScript 5&lt;/strong&gt;, and &lt;strong&gt;Webpack 5&lt;/strong&gt;.  &lt;/p&gt;

&lt;p&gt;Whether you're building a small application or a large-scale project, this template is here to save you time and effort, so you can focus on writing great code instead of configuring your build tools. &lt;/p&gt;




&lt;h2&gt;
  
  
  Why I Built This
&lt;/h2&gt;

&lt;p&gt;CRA was a game-changer for React developers, offering a simple way to set up projects without worrying about configuration. However, with its deprecation, there’s a growing need for a modern alternative that balances simplicity with flexibility.  &lt;/p&gt;

&lt;p&gt;I created &lt;code&gt;template-RTW&lt;/code&gt; to address this gap. It’s a &lt;strong&gt;zero-config starter&lt;/strong&gt; that’s easy to use but fully customizable for advanced needs. Whether you're a beginner or an experienced developer, this template provides a solid foundation for your React projects.  &lt;/p&gt;




&lt;h2&gt;
  
  
  Key Features
&lt;/h2&gt;

&lt;p&gt;Here’s what makes &lt;code&gt;template-rtw&lt;/code&gt; stand out:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;React 19&lt;/strong&gt;: Leverage the latest features and improvements in React.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;TypeScript 5&lt;/strong&gt;: Write type-safe, scalable, and maintainable code.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Webpack 5&lt;/strong&gt;: Optimized build and bundling for modern web development.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MUI 6&lt;/strong&gt;: Pre-integrated Material-UI for beautiful, responsive designs.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;React Router v7&lt;/strong&gt;: Seamless routing out of the box.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Axios Integration&lt;/strong&gt;: Ready-to-use services for making API calls.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hot Reloading&lt;/strong&gt;: Faster development with a smooth dev server experience.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Production-Ready Build&lt;/strong&gt;: Optimized configuration for deployment.
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Getting Started
&lt;/h2&gt;

&lt;p&gt;Using &lt;code&gt;template-rtw&lt;/code&gt; is simple:  &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Click the "Use this template" button&lt;/strong&gt; on the &lt;a href="https://github.com/hidaytrahman/template-rtw" rel="noopener noreferrer"&gt;GitHub repository&lt;/a&gt; to create your own project.
&lt;/li&gt;
&lt;li&gt;Clone your new repository:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   git clone https://github.com/hidaytrahman/template-rtw.git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Final Thoughts
&lt;/h3&gt;

&lt;p&gt;The deprecation of CRA has left a void in the React ecosystem, but it also opens the door for better, more flexible solutions. template-rtw is my attempt to fill that void and provide developers with a modern, customizable, and production-ready alternative.&lt;/p&gt;

&lt;p&gt;Give it a try, and let me know what you think! Happy coding! 🚀&lt;/p&gt;

</description>
      <category>react</category>
      <category>webpack</category>
      <category>typescript</category>
      <category>rtw</category>
    </item>
    <item>
      <title>Serve localhost with custom domain</title>
      <dc:creator>Hidayt Rahman</dc:creator>
      <pubDate>Sat, 10 Feb 2024 09:26:11 +0000</pubDate>
      <link>https://dev.to/hidaytrahman/serve-localhost-with-custom-domain-3c3d</link>
      <guid>https://dev.to/hidaytrahman/serve-localhost-with-custom-domain-3c3d</guid>
      <description>&lt;p&gt;We are going to use your preferred custom domain in local instead of the dull localhost URL on our local system.&lt;/p&gt;

&lt;h2&gt;
  
  
  How?
&lt;/h2&gt;

&lt;p&gt;For this example, I am using the domain name webtechpie.io, but you can use your own.&lt;/p&gt;

&lt;p&gt;Open the &lt;a href="https://en.wikipedia.org/wiki/Hosts_(file)" rel="noopener noreferrer"&gt;hosts file&lt;/a&gt; in your machine.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;For Window:&lt;/strong&gt;&lt;br&gt;
To update the hosts file in Windows, you can follow these steps:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Press the Windows key&lt;/li&gt;
&lt;li&gt;Type Notepad in the search field&lt;/li&gt;
&lt;li&gt;In the search results, right-click Notepad and select Run as - administrator&lt;/li&gt;
&lt;li&gt;Open the hosts file at C:\Windows\System32\Drivers\etc\hosts&lt;/li&gt;
&lt;li&gt;Make the necessary changes to the file&lt;/li&gt;
&lt;li&gt;Select File &amp;gt; Save to save your changes &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;For Mac:&lt;/strong&gt;&lt;br&gt;
Open terminal and run the command below&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ sudo nano /private/etc/hosts
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And update the hosts file, replace the domain name with your domain.&lt;/p&gt;

&lt;p&gt;Example&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting.  Do not change this entry.
##
127.0.0.1       webtechpie.io
255.255.255.255 broadcasthost
::1             localhost
# Added by Docker Desktop
# To allow the same kube context to work on the host and the container:
127.0.0.1 kubernetes.docker.internal
# End of section

# This entry was appended by Docker Desktop because `localhost` did not resolve
# to a list of addresses which included 127.0.0.1. This can happen due to a bug
# in the macOS migration assistant, or possibly because another tool has
# corrupted the file.
127.0.0.1       localhost
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Save the file and restart the machine.&lt;/p&gt;

&lt;p&gt;Try to access the localhost app by your domain, in my case it will be &lt;code&gt;webtechpie.io&lt;/code&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Do not forget to add the port &lt;code&gt;:PORT&lt;/code&gt;&lt;br&gt;
&lt;code&gt;http://YOUR_DOMAIN:PORT&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;http://webtechpie.io:8080
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It should start running the app with the custom domain.&lt;/p&gt;

&lt;p&gt;Happy.Coding :)&lt;/p&gt;

</description>
      <category>domain</category>
      <category>custom</category>
      <category>appconfig</category>
      <category>programming</category>
    </item>
    <item>
      <title>Prevent app crashes with ExpressJS</title>
      <dc:creator>Hidayt Rahman</dc:creator>
      <pubDate>Thu, 14 Sep 2023 09:57:22 +0000</pubDate>
      <link>https://dev.to/hidaytrahman/prevent-app-crashes-with-expressjs-545j</link>
      <guid>https://dev.to/hidaytrahman/prevent-app-crashes-with-expressjs-545j</guid>
      <description>&lt;p&gt;Most annoying experience of any app when it get crashed so basically it blocks the entire operation in expressJS&lt;/p&gt;

&lt;p&gt;Lets fix this using the middleware, so even if the app has some issue will work continually and wont impact user on other part of the app&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// An error handling middleware&lt;/span&gt;
&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;use&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;function &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;next&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;status&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;message&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Oops, something went wrong :(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;error&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;


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

&lt;/div&gt;



&lt;p&gt;Thats it!&lt;/p&gt;

&lt;p&gt;Let me know if you have any other suggestions :)&lt;/p&gt;

</description>
      <category>express</category>
      <category>javascript</category>
      <category>errors</category>
      <category>node</category>
    </item>
    <item>
      <title>Manual Trigger on Github action - #2</title>
      <dc:creator>Hidayt Rahman</dc:creator>
      <pubDate>Mon, 03 Jul 2023 15:15:12 +0000</pubDate>
      <link>https://dev.to/hidaytrahman/manual-trigger-on-github-action-2-501i</link>
      <guid>https://dev.to/hidaytrahman/manual-trigger-on-github-action-2-501i</guid>
      <description>&lt;h3&gt;
  
  
  Intro
&lt;/h3&gt;

&lt;p&gt;In the Github action session, In this article we will be learning about Manual Trigger action for the specific task.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why we need this?&lt;/strong&gt;&lt;br&gt;
We often require some short of actions that we only do when we need any specific action.&lt;br&gt;
For example, you wanna release your app from &lt;code&gt;dev&lt;/code&gt; env to &lt;code&gt;qa&lt;/code&gt; env after fixing a new bug.&lt;br&gt;
In this case we can use Manual trigger that will deploy app from &lt;code&gt;dev&lt;/code&gt; to &lt;code&gt;qa&lt;/code&gt; once we trigger the action.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Also Read&lt;/strong&gt;&lt;br&gt;
In the last article We learnt &lt;a href="https://dev.to/hidaytrahman/greet-to-the-new-pr-and-issue-creator-in-github-action-1-k89"&gt;Greet on first PR and Issue&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How can we do that?&lt;/strong&gt;&lt;br&gt;
We can achieve the manual trigger feature using &lt;a href="https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#workflow_dispatch" rel="noopener noreferrer"&gt;Workflow Dispatch&lt;/a&gt; It enables a workflow to be triggered manually, you need to configure the &lt;code&gt;workflow_dispatch&lt;/code&gt; event. You can manually trigger a workflow run using the &lt;code&gt;GitHub API&lt;/code&gt;, &lt;code&gt;GitHub CLI&lt;/code&gt;, or &lt;code&gt;GitHub browser&lt;/code&gt; interface&lt;/p&gt;

&lt;p&gt;Lets create a brand new workflow under the &lt;code&gt;.github/workflows/manualTrigger.yml&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Paste the below code and push your changes to the &lt;code&gt;main&lt;/code&gt; branch.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Workflow Manual Trigger&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;

&lt;span class="nx"&gt;on&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; 
  &lt;span class="nx"&gt;workflow_dispatch&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nx"&gt;inputs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
      &lt;span class="nx"&gt;author&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
       &lt;span class="nx"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Choose author&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
       &lt;span class="nx"&gt;required&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
       &lt;span class="nx"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;choice&lt;/span&gt;
       &lt;span class="nx"&gt;options&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;admin&lt;/span&gt;
                &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;editor&lt;/span&gt;
                &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;contributor&lt;/span&gt;
      &lt;span class="nx"&gt;location&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="nx"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Choose Location&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;     
        &lt;span class="nx"&gt;required&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
        &lt;span class="k"&gt;default&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;in&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
        &lt;span class="nx"&gt;options&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;us&lt;/span&gt;
                &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;uk&lt;/span&gt;
                &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt;



&lt;span class="nx"&gt;jobs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
  &lt;span class="nx"&gt;printInputs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nx"&gt;runs&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;on&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ubuntu&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;latest&lt;/span&gt;
    &lt;span class="nx"&gt;steps&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;run&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;
        &lt;span class="nx"&gt;echo&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Author : ${{ github.event.inputs.author }}&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
        &lt;span class="nx"&gt;echo&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Location : ${{ github.event.inputs.location }}&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now go the &lt;code&gt;actions&lt;/code&gt; tab and select &lt;code&gt;Workflow Manual Trigger&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Click on the &lt;code&gt;Run Workflow&lt;/code&gt; button&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fdyzink0z1q5jtbrwoaxk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fdyzink0z1q5jtbrwoaxk.png" alt="Run workflow image" width="800" height="160"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Choose the fields.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fyhordekd6njdi0rc7e1b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fyhordekd6njdi0rc7e1b.png" alt="Opened workflow image" width="800" height="362"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After selecting the specific field click on green &lt;code&gt;Run workflow&lt;/code&gt; button&lt;/p&gt;

&lt;p&gt;It will start running the workflow. Once done you can verify the actions while opening the logs.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Ftf6l7cv3ikb56chsuunz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Ftf6l7cv3ikb56chsuunz.png" alt="Action logs" width="800" height="169"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can see we have the selected data in the logs.&lt;/p&gt;

&lt;p&gt;Feel free to utilise the action based on your requirement. &lt;/p&gt;

&lt;p&gt;Happy Action!&lt;/p&gt;

</description>
      <category>github</category>
      <category>githubactions</category>
      <category>triggers</category>
      <category>cicd</category>
    </item>
    <item>
      <title>Greet to the new PR and issue creator in Github Action - #1</title>
      <dc:creator>Hidayt Rahman</dc:creator>
      <pubDate>Thu, 25 May 2023 16:45:22 +0000</pubDate>
      <link>https://dev.to/hidaytrahman/greet-to-the-new-pr-and-issue-creator-in-github-action-1-k89</link>
      <guid>https://dev.to/hidaytrahman/greet-to-the-new-pr-and-issue-creator-in-github-action-1-k89</guid>
      <description>&lt;h2&gt;
  
  
  Github action greeting
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;Github action is the great tool to automate the manual stuff for your project.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  What
&lt;/h2&gt;

&lt;p&gt;The below action will greet to the contributor who will create first Pull Request and also the first issue.&lt;/p&gt;

&lt;h2&gt;
  
  
  How?
&lt;/h2&gt;

&lt;p&gt;Create a folder &lt;code&gt;.github/workflows&lt;/code&gt; in the root folder&lt;/p&gt;

&lt;p&gt;create a new workflow called &lt;code&gt;greeting.yml&lt;/code&gt; inside the &lt;code&gt;.github/workflows/&lt;/code&gt; directory.&lt;/p&gt;

&lt;p&gt;Copy the below code and paste in the &lt;code&gt;greeting.yml&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Greetings&lt;/span&gt;

&lt;span class="na"&gt;on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;pull_request_target&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;issues&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;

&lt;span class="na"&gt;jobs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;greetings&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ubuntu-latest&lt;/span&gt;
    &lt;span class="na"&gt;permissions&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;issue&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;write&lt;/span&gt;
      &lt;span class="na"&gt;pull-requests&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;write&lt;/span&gt;
    &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/first-interaction@v1&lt;/span&gt;
        &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;repo-token&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${{secrets.GITHUB_TOKEN}}&lt;/span&gt;
          &lt;span class="na"&gt;issue-message&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;We&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;appreciate&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;you&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;pointing&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;us&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;to&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;the&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;problem,&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;and&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;as&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;soon&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;as&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;time&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;allows,&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;we&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;will&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;look&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;into&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;it.&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Thank&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;you!"&lt;/span&gt;
          &lt;span class="na"&gt;pr-message&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;We&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;appreciate&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;you&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;creating&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;your&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;first&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;pull&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;request&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;and&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;look&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;forward&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;to&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;reviewing&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;your&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;future&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;contributions."&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Push the file in the main branch and try to create a first issue and first Pull request.&lt;/p&gt;

&lt;p&gt;This will send a greeting message in the comment of the PR and issue.&lt;/p&gt;

&lt;p&gt;Happy Automation!&lt;/p&gt;

</description>
      <category>githubactions</category>
      <category>webdev</category>
      <category>beginners</category>
      <category>gh</category>
    </item>
    <item>
      <title>Handle protected page routes in NextJS using NextAuth</title>
      <dc:creator>Hidayt Rahman</dc:creator>
      <pubDate>Tue, 25 Apr 2023 13:44:39 +0000</pubDate>
      <link>https://dev.to/hidaytrahman/handle-protected-page-routes-in-nextjs-using-nextauth-4b69</link>
      <guid>https://dev.to/hidaytrahman/handle-protected-page-routes-in-nextjs-using-nextauth-4b69</guid>
      <description>&lt;p&gt;For this article, we will use the middleware technique.&lt;/p&gt;

&lt;p&gt;To use this functionality, you must have at least &lt;code&gt;NextAuth.js 4.2.0&lt;/code&gt; and &lt;code&gt;Next.js 12&lt;/code&gt; installed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Configuration
&lt;/h2&gt;

&lt;p&gt;Let's configure the server by adding a new environment variable to the &lt;code&gt;.env.local&lt;/code&gt; file.&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;h2&gt;
  
  
  Create a Middleware
&lt;/h2&gt;

&lt;p&gt;Create a file named &lt;code&gt;middleware.js&lt;/code&gt; or &lt;code&gt;.tsx&lt;/code&gt; in the &lt;code&gt;src&lt;/code&gt; folder.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Note: if you don't have &lt;code&gt;src&lt;/code&gt; folder create the &lt;code&gt;middleware.js&lt;/code&gt; on the root folder&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Lets add code for middleware&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Protect all routes&lt;/strong&gt;&lt;br&gt;
Use the piece of code below to make all pages protected.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;next-auth/middleware&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Protect selective routes&lt;/strong&gt;&lt;br&gt;
Lets protect profile and posts route with the help of &lt;code&gt;matcher&lt;/code&gt;. You can put the route based on your requirements&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;next-auth/middleware&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;config&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;matcher&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/profile&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/posts&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;

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

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Protect routes inside directory&lt;/strong&gt;&lt;br&gt;
Lets protect all routes inside dashboard folder.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;next-auth/middleware&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;config&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;matcher&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/dashboard/&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/dashboard/:path*&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;

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

&lt;/div&gt;



&lt;p&gt;Read more about &lt;a href="https://nextjs.org/docs/advanced-features/middleware#matcher" rel="noopener noreferrer"&gt;matcher&lt;/a&gt; and &lt;a href="https://next-auth.js.org/configuration/nextjs#middleware" rel="noopener noreferrer"&gt;NextAuth Middleware&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thats It! &lt;/p&gt;

&lt;p&gt;Happy Coding!&lt;/p&gt;

</description>
      <category>nextjs</category>
      <category>nextauth</category>
      <category>route</category>
    </item>
    <item>
      <title>Top 9 JavaScript Flavours</title>
      <dc:creator>Hidayt Rahman</dc:creator>
      <pubDate>Wed, 01 Mar 2023 06:33:33 +0000</pubDate>
      <link>https://dev.to/hidaytrahman/top-9-javascript-flavours-nb6</link>
      <guid>https://dev.to/hidaytrahman/top-9-javascript-flavours-nb6</guid>
      <description>&lt;h2&gt;
  
  
  1. TypeScript
&lt;/h2&gt;

&lt;p&gt;TypeScript is a strongly typed programming language that builds on JavaScript, giving you better tooling at any scale.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.typescriptlang.org/" rel="noopener noreferrer"&gt;https://www.typescriptlang.org/&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.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%2Ftyizn90hvger7podejzi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Ftyizn90hvger7podejzi.png" alt="Typescript js" width="800" height="246"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Reason
&lt;/h2&gt;

&lt;p&gt;Reason lets you write simple, fast and quality type safe code while leveraging both the JavaScript &amp;amp; OCaml ecosystems.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://reasonml.github.io/" rel="noopener noreferrer"&gt;https://reasonml.github.io/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F4ljn4gqncax34mzj0kz9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F4ljn4gqncax34mzj0kz9.png" alt="Reasonjs" width="800" height="354"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Flow
&lt;/h2&gt;

&lt;p&gt;FLOW IS A STATIC TYPE CHECKER FOR JAVASCRIPT.&lt;br&gt;
&lt;a href="https://flow.org/" rel="noopener noreferrer"&gt;https://flow.org/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Flsabnmw5hvj39ehb2kcy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Flsabnmw5hvj39ehb2kcy.png" alt="Flow js" width="800" height="256"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Elm
&lt;/h2&gt;

&lt;p&gt;Elm uses type inference to detect corner cases and give friendly hints. ... benchmarks show that this helps us generate particularly fast JavaScript code.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://elm-lang.org/" rel="noopener noreferrer"&gt;https://elm-lang.org/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fyd98nuryrnw863k0m9z4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fyd98nuryrnw863k0m9z4.png" alt="Elm js" width="800" height="386"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  5. ClojureScript
&lt;/h2&gt;

&lt;p&gt;Clojure is a dynamic, general-purpose programming language supporting interactive development. Clojure is a functional programming language featuring a rich set of immutable, persistent data structures. As a dialect of Lisp, it has a code-as-data philosophy and a powerful macro system.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://clojurescript.org/" rel="noopener noreferrer"&gt;https://clojurescript.org/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F60ux6sq348bigqpmf0ax.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F60ux6sq348bigqpmf0ax.png" alt="ClojureScript" width="674" height="174"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  6. PureScript
&lt;/h2&gt;

&lt;p&gt;A strongly-typed functional programming language that compiles to JavaScript &lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.purescript.org/" rel="noopener noreferrer"&gt;https://www.purescript.org/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fxymf02vbex1ptcvmyijl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fxymf02vbex1ptcvmyijl.png" alt="PureScript" width="800" height="302"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  7. CoffeeScript
&lt;/h2&gt;

&lt;p&gt;CoffeeScript is a little language that compiles into JavaScript. Underneath that awkward Java-esque patina, JavaScript has always had a gorgeous heart.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://coffeescript.org/" rel="noopener noreferrer"&gt;https://coffeescript.org/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fa0yaue5ln3ip0eyw1syt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fa0yaue5ln3ip0eyw1syt.png" alt="CoffeeScript" width="800" height="415"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  8. ReScript
&lt;/h2&gt;

&lt;p&gt;ReScript is a robustly typed language that compiles to efficient and human-readable JavaScript.&lt;br&gt;
&lt;a href="https://rescript-lang.org/" rel="noopener noreferrer"&gt;https://rescript-lang.org/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fp3gskp90q8y8l4kx5xnw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fp3gskp90q8y8l4kx5xnw.png" alt="ReScript" width="800" height="331"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  9. Imba
&lt;/h2&gt;

&lt;p&gt;Imba is a Web programming language that's fast in two ways: Imba's time-saving syntax with built-in tags and styles results in less typing and switching files so you can build things fast. &lt;br&gt;
&lt;a href="https://imba.io/" rel="noopener noreferrer"&gt;https://imba.io/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fxxziroir3t434dnqe3gv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fxxziroir3t434dnqe3gv.png" alt="Imba" width="800" height="308"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Which one is your favorite ?&lt;/p&gt;

</description>
      <category>node</category>
      <category>softwaredevelopment</category>
      <category>sideprojects</category>
    </item>
    <item>
      <title>Outstanding Monorepo Tools</title>
      <dc:creator>Hidayt Rahman</dc:creator>
      <pubDate>Thu, 16 Feb 2023 17:10:11 +0000</pubDate>
      <link>https://dev.to/hidaytrahman/outstanding-monorepo-tools-49ae</link>
      <guid>https://dev.to/hidaytrahman/outstanding-monorepo-tools-49ae</guid>
      <description>&lt;p&gt;A &lt;code&gt;monorepo&lt;/code&gt; is a code repository with version control that houses several projects. Although they could be connected, these initiatives are frequently conceptually distinct and managed by several teams. Some businesses keep all of their &lt;strong&gt;source code in a single, public repository.&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://monorepo.tools/" rel="noopener noreferrer"&gt;https://monorepo.tools/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;These are Eight widely used monorepo utilities. &lt;/p&gt;

&lt;h2&gt;
  
  
  1. Rush
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fyisehbyxedavr49gdpus.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fyisehbyxedavr49gdpus.png" alt="Rush logo" width="292" height="146"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Rush: a scalable monorepo manager for the web&lt;/p&gt;

&lt;p&gt;&lt;a href="https://rushjs.io/" rel="noopener noreferrer"&gt;https://rushjs.io/&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Turborepo
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fcb7j3sb85t6bqsauo32d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fcb7j3sb85t6bqsauo32d.png" alt="Turborepo" width="752" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Turbo is an incremental bundler and build system optimized for JavaScript and TypeScript, written in Rust.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://turbo.build/" rel="noopener noreferrer"&gt;https://turbo.build/&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Yarn Workspaces
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fser0kol0w1ftlnebd2en.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fser0kol0w1ftlnebd2en.png" alt="Yarn workspaces" width="290" height="120"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Workspaces are a new way to set up your package architecture that's available by default starting from Yarn 1.0. It allows you to setup multiple packages in such a way that you only need to run yarn install once to install all of them in a single pass&lt;br&gt;
&lt;a href="https://classic.yarnpkg.com/lang/en/docs/workspaces/" rel="noopener noreferrer"&gt;Yarn Workspaces&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Yalc
&lt;/h2&gt;

&lt;p&gt;yalc acts as very simple local repository for your locally developed packages that you want to share across your local environment&lt;br&gt;
&lt;a href="https://www.npmjs.com/package/yalc" rel="noopener noreferrer"&gt;Yalc&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Lerna
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fkv6m5e5hx0s1xc4cjwpq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fkv6m5e5hx0s1xc4cjwpq.png" alt="Lerna" width="800" height="547"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Lerna is a tool for managing JavaScript projects with multiple packages. Lerna manages monorepos, which can hold projects containing multiple packages within itself. Monorepos can be challenging to manage because sequential builds and publishing individual packages take a long time.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://lerna.js.org/" rel="noopener noreferrer"&gt;https://lerna.js.org/&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  6. npm Workspaces
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fxcql6gs8nhkj8h2e468t.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fxcql6gs8nhkj8h2e468t.png" alt="NPM workspace" width="144" height="116"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Workspaces is a generic term that refers to the set of features in the npm cli that provides support to managing multiple packages from your local file system from within a singular top-level, root package.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.npmjs.com/cli/v7/using-npm/workspaces" rel="noopener noreferrer"&gt;NPM Workspaces&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  7. pnpm
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fzotwj5bpc0plb65b0ac4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fzotwj5bpc0plb65b0ac4.png" alt="pnpm" width="800" height="272"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;What is PNPM? PNPM is an alternative package manager for Node. js which stands for “Performant NPM”. The main purpose of PNPM is to hold all the packages at a global (centralized) store and use them if needed by other projects too by creating hard links to it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://pnpm.io/" rel="noopener noreferrer"&gt;https://pnpm.io/&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  8. Nx
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F17ttkl5denst2470ysw3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F17ttkl5denst2470ysw3.png" alt="Nx" width="316" height="218"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Nx is a framework that allows you to architect, test, and build your project at any scale with the most popular modern Front-end frameworks like React and Angular, and Back-end ones like NestJs or Express. To make this possible, Nx comes shipped with a large toolset that simplifies your Monorepo management.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://nx.dev/" rel="noopener noreferrer"&gt;https://nx.dev/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>monorepo</category>
      <category>repo</category>
      <category>javascript</category>
      <category>git</category>
    </item>
    <item>
      <title>Deploy Vite React App on Github</title>
      <dc:creator>Hidayt Rahman</dc:creator>
      <pubDate>Tue, 07 Feb 2023 18:40:19 +0000</pubDate>
      <link>https://dev.to/hidaytrahman/deploy-vite-react-app-3f57</link>
      <guid>https://dev.to/hidaytrahman/deploy-vite-react-app-3f57</guid>
      <description>&lt;p&gt;Follow two step to publish&lt;/p&gt;

&lt;h2&gt;
  
  
  Step: 1
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Configure repo in &lt;code&gt;vite.config.js&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Set the &lt;code&gt;base&lt;/code&gt; in &lt;code&gt;vite.config.js&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;If you are deploying to &lt;code&gt;https://&amp;lt;USERNAME&amp;gt;.github.io/&lt;/code&gt;, you can omit base as it defaults to &lt;code&gt;"/"&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;If you are deploying to &lt;code&gt;https://&amp;lt;USERNAME&amp;gt;.github.io/&amp;lt;YOUR_REPO_NAME&amp;gt;/&lt;/code&gt;, for example your repository is at &lt;code&gt;https://github.com/hidaytrahman/chepo&lt;/code&gt;, then set base to &lt;code&gt;"/chepo/"&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nf"&gt;defineConfig&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;base&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/&amp;lt;YOUR_REPO_NAME&amp;gt;/&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// add the base as repo name as "/yourRepoName/"&lt;/span&gt;
  &lt;span class="na"&gt;plugins&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nf"&gt;react&lt;/span&gt;&lt;span class="p"&gt;()],&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step: 2
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Install and setup &lt;code&gt;gh-pages&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Now, Install the &lt;code&gt;gh-pages&lt;/code&gt; package&lt;/p&gt;

&lt;p&gt;&lt;code&gt;yarn add -D gh-pages&lt;/code&gt; or &lt;code&gt;npm install gh-pages --save-dev&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Add below line in the &lt;code&gt;package.json&lt;/code&gt; file&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; "homepage": "https://&amp;lt;USERNAME&amp;gt;.github.io/&amp;lt;YOUR_REPO_NAME&amp;gt;/",
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Also add these beautiful scripts&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;predeploy&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;npm run build&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
 &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;deploy&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;gh-pages -d dist&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;we are done with the configuration, let's run the command to deploy.&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;yarn run deploy&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;Or&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;npm run deploy&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;Yayyy!!! see it in action in 2-3 minutes.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmedia1.giphy.com%2Fmedia%2F2wYYlHuEw1UcsJYgAA%2Fgiphy.gif%3Fcid%3Decf05e470dtk70zo6wrnggvdxx8c9tvhns0bpqoya78vu8by%26rid%3Dgiphy.gif%26ct%3Dg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmedia1.giphy.com%2Fmedia%2F2wYYlHuEw1UcsJYgAA%2Fgiphy.gif%3Fcid%3Decf05e470dtk70zo6wrnggvdxx8c9tvhns0bpqoya78vu8by%26rid%3Dgiphy.gif%26ct%3Dg" width="480" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>devops</category>
      <category>vite</category>
      <category>react</category>
      <category>typescript</category>
    </item>
    <item>
      <title>Rendering Frameworks JavaScript</title>
      <dc:creator>Hidayt Rahman</dc:creator>
      <pubDate>Tue, 31 Jan 2023 10:18:31 +0000</pubDate>
      <link>https://dev.to/hidaytrahman/rendering-frameworks-javascript-2hpf</link>
      <guid>https://dev.to/hidaytrahman/rendering-frameworks-javascript-2hpf</guid>
      <description>&lt;h2&gt;
  
  
  Next.js
&lt;/h2&gt;

&lt;p&gt;Next.js is an open-source web development framework created by Vercel enabling React-based web applications with server-side rendering and generating static websites&lt;br&gt;
&lt;a href="https://nextjs.org/" rel="noopener noreferrer"&gt;https://nextjs.org/&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Nuxt
&lt;/h2&gt;

&lt;p&gt;Nuxt.js is a free and open source JavaScript library based on Vue.js, Node.js, Webpack and Babel.js. Nuxt is inspired by Next.js, which is a framework of similar purpose, based on React.js. The framework is advertised as a "Meta-framework for universal applications"&lt;br&gt;
&lt;a href="https://nuxtjs.org/" rel="noopener noreferrer"&gt;https://nuxtjs.org/&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Gatsby
&lt;/h2&gt;

&lt;p&gt;Gatsby is an open-source static site generator built on top of Node.js using React and GraphQL. It provides over 2500 plugins to create static sites based on sources as Markdown documents, MDX, images, and numerous Content Management Systems such as WordPress, Drupal and more&lt;br&gt;
&lt;a href="https://www.gatsbyjs.com/" rel="noopener noreferrer"&gt;https://www.gatsbyjs.com/&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Remix
&lt;/h2&gt;

&lt;p&gt;Focused on web standards and modern web app UX, you’re simply going to build better websites&lt;br&gt;
&lt;a href="https://remix.run/" rel="noopener noreferrer"&gt;https://remix.run/&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Astro
&lt;/h2&gt;

&lt;p&gt;Astro Islands represent a leading paradigm shift for frontend web architecture. Astro extracts your UI into smaller, isolated components on the page. Unused JavaScript is replaced with lightweight HTML, guaranteeing faster loads and time-to-interactive (TTI).&lt;br&gt;
&lt;a href="https://astro.build/" rel="noopener noreferrer"&gt;https://astro.build/&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Eleventy
&lt;/h2&gt;

&lt;p&gt;Eleventy, a simpler static site generator.&lt;br&gt;
&lt;a href="https://www.11ty.dev/" rel="noopener noreferrer"&gt;https://www.11ty.dev/&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  SvelteKit
&lt;/h2&gt;

&lt;p&gt;While Svelte handles code that runs in the browser — like interactivity and reactivity — SvelteKit gives you infrastructure for the server hosting your app. SvelteKit will provide routing, layouts, static-site generation, API endpoints, and other app features that can only run on a server&lt;br&gt;
&lt;a href="https://kit.svelte.dev/" rel="noopener noreferrer"&gt;https://kit.svelte.dev/&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Docusaurus
&lt;/h2&gt;

&lt;p&gt;Docusaurus is a tool designed to make it easy for teams to publish documentation websites without having to worry about the infrastructure and design details.&lt;br&gt;
&lt;a href="https://docusaurus.io/" rel="noopener noreferrer"&gt;https://docusaurus.io/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>frameworks</category>
      <category>javascript</category>
      <category>serverside</category>
      <category>webdev</category>
    </item>
    <item>
      <title>flat array from the multi dimensional zig-zag array</title>
      <dc:creator>Hidayt Rahman</dc:creator>
      <pubDate>Thu, 29 Dec 2022 09:15:39 +0000</pubDate>
      <link>https://dev.to/hidaytrahman/flat-array-from-the-multi-dimensional-zig-zag-array-4l4e</link>
      <guid>https://dev.to/hidaytrahman/flat-array-from-the-multi-dimensional-zig-zag-array-4l4e</guid>
      <description>&lt;p&gt;To flatten a multi-dimensional zig-zag array in JavaScript, you can use a combination of loops and array manipulation techniques.&lt;/p&gt;

&lt;p&gt;Here is an example of how you might flatten a multi-dimensional zig-zag array:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;array&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;]];&lt;/span&gt;

&lt;span class="c1"&gt;// Flatten the array using a loop&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;flatArray&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[];&lt;/span&gt;
&lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;subArray&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nx"&gt;array&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;flatArray&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(...&lt;/span&gt;&lt;span class="nx"&gt;subArray&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;flatArray&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Outputs: [1, 2, 3, 4, 5, 6, 7, 8, 9]&lt;/span&gt;

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

&lt;/div&gt;



&lt;p&gt;In this example, the &lt;code&gt;flatArray&lt;/code&gt; array is initialized as an empty array. A loop is used to iterate over the elements of the array variable, which represents the multi-dimensional zig-zag array. For each element, the spread operator &lt;code&gt;(...)&lt;/code&gt; is used to add the elements of the subarray to the &lt;code&gt;flatArray&lt;/code&gt; array.&lt;/p&gt;

&lt;p&gt;This will result in a flattened array that contains all of the elements of the original array in the order they appear.&lt;/p&gt;

&lt;p&gt;Alternatively, you can use the &lt;code&gt;Array.prototype.flat&lt;/code&gt; method to flatten the array, as follows:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;array&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;]];&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;flatArray&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;array&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;flat&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;flatArray&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Outputs: [1, 2, 3, 4, 5, 6, 7, 8, 9]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The flat method will return a new array that is one level deeper than the input array. To flatten a multi-dimensional array with more than one level of nesting, you can call the flat method multiple times or pass it a depth parameter. For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;array&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;]];&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;flatArray&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;array&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;flat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;flatArray&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Outputs: [1, 2, 3, 4, 5, 6, 7, 8, 9]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will result in a flattened array that contains all of the elements of the original array in the order they appear.&lt;/p&gt;

</description>
      <category>performance</category>
      <category>webdev</category>
      <category>discuss</category>
    </item>
    <item>
      <title>Strict object type using Proxy in JavaScript</title>
      <dc:creator>Hidayt Rahman</dc:creator>
      <pubDate>Fri, 16 Dec 2022 15:12:08 +0000</pubDate>
      <link>https://dev.to/hidaytrahman/strict-object-type-using-proxy-in-javascript-32p0</link>
      <guid>https://dev.to/hidaytrahman/strict-object-type-using-proxy-in-javascript-32p0</guid>
      <description>&lt;p&gt;Javascript object field can be overwrited by any data types. Can we strict it? yes of course we can strict it with the help of &lt;code&gt;Proxy&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We have employee object which has some related keys&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;employee&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
 &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;hidayt rahman&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
 &lt;span class="na"&gt;salary&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;12000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
 &lt;span class="na"&gt;isActive&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We can overwrite the value with any data types.&lt;br&gt;
for example we can set salary with string value and JS will not complain any error because this is how it works.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;employee&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;salary&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;12000&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="c1"&gt;// it will overwrite number with string value&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Sadly, This is not weird for javascript, but its buggy if we are not using Typescript, So here is the solution in JS itself using &lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy" rel="noopener noreferrer"&gt;Proxy&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;lets create a target object where we will be using &lt;code&gt;set&lt;/code&gt; to configure the object keys according to the requirements.&lt;/p&gt;

&lt;p&gt;We will restrict data type for &lt;code&gt;salary&lt;/code&gt; and &lt;code&gt;name&lt;/code&gt; field that will only accept valid data type.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Name will only accept string&lt;/li&gt;
&lt;li&gt;Salary will not accept non integer data
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;target&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nf"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;target&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;prop&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

        &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;prop&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="nx"&gt;target&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;prop&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;name&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="k"&gt;typeof&lt;/span&gt; &lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;string&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Type '&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="k"&gt;typeof&lt;/span&gt; &lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;' is not assignable to type 'string' for '&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;prop&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;' field.`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

            &lt;span class="p"&gt;}&lt;/span&gt;

            &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;prop&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;salary&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="k"&gt;typeof&lt;/span&gt; &lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;number&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Type '&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="k"&gt;typeof&lt;/span&gt; &lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;' is not assignable to type 'number' for '&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;prop&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;' field.`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

            &lt;span class="p"&gt;}&lt;/span&gt;

             &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;target&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;prop&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

        &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`'&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;prop&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;' is not a valid prop`&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;strictedEmployee&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Proxy&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;employee&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;target&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

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

&lt;/div&gt;



&lt;p&gt;Now if we use the &lt;code&gt;strictedEmployee&lt;/code&gt; proxy object and set salary with non numeric data type, it will throw an error.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;strictedEmployee&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;salary&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;2000&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.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%2Fhliu6x7htc20je3untjf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fhliu6x7htc20je3untjf.png" alt="Uncaught Error: Type 'string' is not assignable to type 'number' for 'salary' field" width="800" height="24"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Uncaught Error: Type 'string' is not assignable to type 'number' for 'salary' field.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>javascript</category>
      <category>proxy</category>
      <category>oop</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
