DEV Community: alguerocode The latest articles on DEV Community by alguerocode (@alguercode). https://dev.to/alguercode 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%2F663562%2F71739203-da1f-4304-991d-b32238ba3542.jpg DEV Community: alguerocode https://dev.to/alguercode en javascript validation library - volder alguerocode Thu, 31 Mar 2022 12:39:54 +0000 https://dev.to/alguercode/javascript-validation-library-volder-31m2 https://dev.to/alguercode/javascript-validation-library-volder-31m2 <h3> Overview of My Submission </h3> <h3> Submission Category: javascript oss library </h3> <h3> Link to Code on GitHub <a href="proxy.php?url=https://github.com/devSupporters/volder">https://github.com/devSupporters/volder</a> </h3> <h3> Additional Resources (documentation and api): </h3> <p><a href="proxy.php?url=https://volder.vercel.app/">https://volder.vercel.app/</a></p> <h3> Introduction </h3> <p>this is my best project, i share it to you to see my my work.<br> I hope this project will help you. </p> <h3> My Deepgram Use-Case </h3> <p>javascript Object validation and schema builder and parsing</p> <h3> Dive into Details </h3> <p>volder is powerful Object schema validation, it lets you describe your data using a simple and readable schema and transform a value to match the requirements, it has custom error messages, custom types and nested schemas.</p> <h3> Conclusion </h3> <p>pls support me</p> hackwithdg javascript webdev beginners how to validate data in javascript alguerocode Sat, 12 Mar 2022 13:57:03 +0000 https://dev.to/alguercode/how-to-validate-data-in-javascript-3ngl https://dev.to/alguercode/how-to-validate-data-in-javascript-3ngl <h3> the complete blog in hashnode </h3> <p>the link: <a href="proxy.php?url=https://alguerocode.hashnode.dev/how-to-validate-data-in-javascript">https://alguerocode.hashnode.dev/how-to-validate-data-in-javascript</a></p> javascript beginners programming tutorial New React.js Hook - useLayoutEffect alguerocode Sat, 12 Mar 2022 13:55:10 +0000 https://dev.to/alguercode/new-reactjs-hook-uselayouteffect-3b8g https://dev.to/alguercode/new-reactjs-hook-uselayouteffect-3b8g <p>Hello | السلام عليكم Hi folks, in this blog we will cover useLayoutEffect React Hook. Hope you like it.</p> <h3> the complete blog in hashnode </h3> <p>the link: <a href="proxy.php?url=https://alguerocode.hashnode.dev/new-reactjs-hook-uselayouteffect">https://alguerocode.hashnode.dev/new-reactjs-hook-uselayouteffect</a></p> javascript programming react beginners How Node.js work in simple way alguerocode Sat, 05 Mar 2022 07:27:37 +0000 https://dev.to/alguercode/how-nodejs-work-in-simple-way-20kg https://dev.to/alguercode/how-nodejs-work-in-simple-way-20kg <p>hi folks, in this blog we will teach basic understanding of how Node.js work under the hood. hope you like it.</p> <h3> the complete article is in hashnode. </h3> <p>this is atricle link: <a href="proxy.php?url=https://alguerocode.hashnode.dev/">https://alguerocode.hashnode.dev/</a></p> building Node.js video streaming in 5 minutes alguerocode Thu, 03 Mar 2022 10:37:51 +0000 https://dev.to/alguercode/building-nodejs-video-streaming-in-5-minutes-24b3 https://dev.to/alguercode/building-nodejs-video-streaming-in-5-minutes-24b3 <p>hi folks, in this blog we will build a Node.js video streaming application in like 10 minutes.</p> <p><a href="proxy.php?url=https://res.cloudinary.com/practicaldev/image/fetch/s--atEQ2LBc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/y5q6x7div0uqhpxnblqz.gif" class="article-body-image-wrapper"><img src="proxy.php?url=https://res.cloudinary.com/practicaldev/image/fetch/s--atEQ2LBc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/y5q6x7div0uqhpxnblqz.gif" alt="Image description" width="748" height="417"></a></p> <h3> prerequisite </h3> <ul> <li>install Node.js in your computer</li> </ul> <h2> what is streaming </h2> <p>Streams are collections of data — just like arrays or strings. The difference is that streams might not be available all at once, and they don’t have to fit in memory. This makes streams really powerful when working with large amounts of data, or data that’s coming from an external source one chunk at a time.</p> <h2> setup [ 1 ] - Geting started </h2> <p>1 - create folder and name it <code>vido-streaming</code><br> 2 - initialize npm in your project <code>npm init -y</code><br> 3 - install this packages</p> <p>dependencies.<br> </p> <div class="highlight js-code-highlight"> <pre class="highlight plaintext"><code>#### npm install express </code></pre> </div> <h4> development dependencies. </h4> <div class="highlight js-code-highlight"> <pre class="highlight plaintext"><code>npm install -D nodemon </code></pre> </div> <h4> add this script to your <code>package.json</code> file. </h4> <div class="highlight js-code-highlight"> <pre class="highlight json"><code><span class="nl">"start"</span><span class="p">:</span><span class="w"> </span><span class="s2">"nodemon index.js"</span><span class="w"> </span></code></pre> </div> <h2> setup [2] - setup Node.js server </h2> <p>1 - create <code>index.js</code> file in your project root.<br> 2 - add this code below<br> </p> <div class="highlight js-code-highlight"> <pre class="highlight javascript"><code><span class="kd">const</span> <span class="nx">express</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="dl">"</span><span class="s2">express</span><span class="dl">"</span><span class="p">);</span> <span class="kd">const</span> <span class="nx">app</span> <span class="o">=</span> <span class="nx">express</span><span class="p">();</span> <span class="c1">// setup express application</span> <span class="kd">const</span> <span class="nx">PORT</span> <span class="o">=</span> <span class="nx">process</span><span class="p">.</span><span class="nx">env</span><span class="p">.</span><span class="nx">PORT</span> <span class="o">||</span> <span class="mi">3000</span><span class="p">;</span> <span class="nx">app</span><span class="p">.</span><span class="nx">listen</span><span class="p">(</span><span class="nx">PORT</span><span class="p">,</span> <span class="p">()</span> <span class="o">=&gt;</span> <span class="p">{</span> <span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="dl">"</span><span class="s2">SERVER STARTED AT PORT: </span><span class="dl">"</span> <span class="o">+</span> <span class="nx">PORT</span><span class="p">);</span> <span class="p">});</span> </code></pre> </div> <p>this code starting web server using <code>express</code> framework and listening to port: <code>3000</code>.</p> <h2> setup [3] - serving html page </h2> <p>now we want to serve an html page with video element to the Frontend.</p> <p>1 - create <code>public</code> folder in your project root.<br> 2 - create <code>index.html</code> file in created folder (<code>public</code>) and add this html code.<br> </p> <div class="highlight js-code-highlight"> <pre class="highlight html"><code> <span class="nt">&lt;html</span> <span class="na">lang=</span><span class="s">"en"</span><span class="nt">&gt;</span> <span class="nt">&lt;head&gt;</span> <span class="nt">&lt;meta</span> <span class="na">charset=</span><span class="s">"UTF-8"</span> <span class="nt">/&gt;</span> <span class="nt">&lt;meta</span> <span class="na">http-equiv=</span><span class="s">"X-UA-Compatible"</span> <span class="na">content=</span><span class="s">"IE=edge"</span> <span class="nt">/&gt;</span> <span class="nt">&lt;meta</span> <span class="na">name=</span><span class="s">"viewport"</span> <span class="na">content=</span><span class="s">"width=device-width, initial-scale=1.0"</span> <span class="nt">/&gt;</span> <span class="nt">&lt;title&gt;</span>Home | Video Streaming<span class="nt">&lt;/title&gt;</span> <span class="nt">&lt;/head&gt;</span> <span class="nt">&lt;body&gt;</span> <span class="nt">&lt;video</span> <span class="na">controls</span> <span class="na">src=</span><span class="s">"/video"</span> <span class="na">id=</span><span class="s">"video-stream"</span> <span class="na">poster=</span><span class="s">"/poster.jpeg"</span> <span class="na">width=</span><span class="s">"700"</span> <span class="nt">&gt;</span> <span class="nt">&lt;/video&gt;</span> <span class="nt">&lt;/body&gt;</span> <span class="nt">&lt;/html&gt;</span> </code></pre> </div> <ul> <li><p><code>controls</code> : Specifies that video controls should be displayed (such as a play/pause button etc).</p></li> <li><p><code>src</code> : Specifies the URL of the video file.</p></li> <li><p><code>poster</code>: Specifies an image to be shown while the video is downloading, or until the user hits the play button.</p></li> </ul> <h3> serving html file </h3> <p>we need to send the html page to the users. add this code below in <code>index.js</code> file.<br> </p> <div class="highlight js-code-highlight"> <pre class="highlight javascript"><code><span class="nx">app</span><span class="p">.</span><span class="kd">get</span><span class="p">(</span><span class="dl">"</span><span class="s2">/</span><span class="dl">"</span><span class="p">,</span> <span class="p">(</span><span class="nx">req</span><span class="p">,</span> <span class="nx">res</span><span class="p">)</span> <span class="o">=&gt;</span> <span class="p">{</span> <span class="k">try</span> <span class="p">{</span> <span class="nx">res</span><span class="p">.</span><span class="nx">sendFile</span><span class="p">(</span><span class="nx">__dirname</span> <span class="o">+</span> <span class="dl">"</span><span class="s2">/public/index.html</span><span class="dl">"</span><span class="p">);</span> <span class="p">}</span> <span class="k">catch</span> <span class="p">(</span><span class="nx">err</span><span class="p">)</span> <span class="p">{</span> <span class="nx">res</span><span class="p">.</span><span class="nx">status</span><span class="p">(</span><span class="mi">500</span><span class="p">).</span><span class="nx">send</span><span class="p">(</span><span class="dl">"</span><span class="s2">internal server error occurred</span><span class="dl">"</span><span class="p">)</span> <span class="p">}</span> <span class="p">});</span> </code></pre> </div> <p>what that code does, is listening to get request in base URL of the application, when it get the response will be send file by using <code>sendFile</code> and first parameter is html file path.</p> <p>note: <code>__dirname</code> is the root path of the current directory. </p> <h2> Serving Poster Image - setup [4] </h2> <p>poster is image will be shown until the video is downloading or user click the video.<br> note : you need to any image you want in public directory that you make.<br> see the code below<br> </p> <div class="highlight js-code-highlight"> <pre class="highlight javascript"><code><span class="nx">app</span><span class="p">.</span><span class="kd">get</span><span class="p">(</span><span class="dl">"</span><span class="s2">/:file_name</span><span class="dl">"</span><span class="p">,</span> <span class="p">(</span><span class="nx">req</span><span class="p">,</span> <span class="nx">res</span><span class="p">)</span> <span class="o">=&gt;</span> <span class="p">{</span> <span class="k">try</span> <span class="p">{</span> <span class="nx">res</span><span class="p">.</span><span class="nx">sendFile</span><span class="p">(</span><span class="nx">__dirname</span> <span class="o">+</span> <span class="nx">req</span><span class="p">.</span><span class="nx">params</span><span class="p">.</span><span class="nx">file_name</span><span class="p">);</span> <span class="p">}</span> <span class="k">catch</span> <span class="p">(</span><span class="nx">err</span><span class="p">)</span> <span class="p">{</span> <span class="nx">res</span><span class="p">.</span><span class="nx">status</span><span class="p">(</span><span class="mi">500</span><span class="p">).</span><span class="nx">send</span><span class="p">(</span><span class="dl">"</span><span class="s2">internal server error occurred</span><span class="dl">"</span><span class="p">);</span> <span class="p">}</span> <span class="p">});</span> </code></pre> </div> <h2> Streaming video - setup[5] and Final </h2> <h3> import required node.js modules </h3> <p>when streaming the video we need to import two Node.js build-in library in the top of file.<br> </p> <div class="highlight js-code-highlight"> <pre class="highlight javascript"><code><span class="kd">const</span> <span class="nx">fs</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="dl">"</span><span class="s2">fs</span><span class="dl">"</span><span class="p">);</span> <span class="kd">const</span> <span class="nx">path</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="dl">"</span><span class="s2">path</span><span class="dl">"</span><span class="p">);</span> </code></pre> </div> <p><code>fs</code> : <strong>file system module</strong> allows you to work with the file system on your computer. To include the File System module.</p> <p><code>path</code>: <strong>allows you to interact with file paths easily</strong>. The path module has many useful properties and methods to access and manipulate paths in the file system.</p> <h3> setup video API function </h3> <p>add this code before Serving Poster Image function, because nodejs will go throw the express middlewares and if the requested url is <code>/video</code> it will be match the Serving Poster Image middlewaree not the video middleware.<br> note : you need to add random video in public file.<br> </p> <div class="highlight js-code-highlight"> <pre class="highlight javascript"><code><span class="nx">app</span><span class="p">.</span><span class="kd">get</span><span class="p">(</span><span class="dl">"</span><span class="s2">/video</span><span class="dl">"</span><span class="p">,</span> <span class="p">(</span><span class="nx">req</span><span class="p">,</span> <span class="nx">res</span><span class="p">)</span> <span class="o">=&gt;</span> <span class="p">{</span> <span class="c1">// indicates the part of a document that the server should return</span> <span class="c1">// on this measure in bytes for example: range = 0-6 bytes.</span> <span class="kd">const</span> <span class="nx">range</span> <span class="o">=</span> <span class="nx">req</span><span class="p">.</span><span class="nx">headers</span><span class="p">.</span><span class="nx">range</span><span class="p">;</span> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="nx">range</span><span class="p">)</span> <span class="nx">res</span><span class="p">.</span><span class="nx">status</span><span class="p">(</span><span class="mi">400</span><span class="p">).</span><span class="nx">send</span><span class="p">(</span><span class="dl">"</span><span class="s2">Range must be provided</span><span class="dl">"</span><span class="p">);</span> <span class="kd">const</span> <span class="nx">videoPath</span> <span class="o">=</span> <span class="nx">path</span><span class="p">.</span><span class="nx">join</span><span class="p">(</span><span class="nx">__dirname</span><span class="p">,</span> <span class="dl">"</span><span class="s2">public</span><span class="dl">"</span><span class="p">,</span> <span class="dl">"</span><span class="s2">video.mp4</span><span class="dl">"</span><span class="p">);</span> <span class="c1">// extract video size by using statSyn()</span> <span class="kd">const</span> <span class="nx">videoSize</span> <span class="o">=</span> <span class="nx">fs</span><span class="p">.</span><span class="nx">statSync</span><span class="p">(</span><span class="nx">videoPath</span><span class="p">).</span><span class="nx">size</span><span class="p">;</span> <span class="c1">// 10 powered by 6 equal 1000000bytes = 1mb</span> <span class="kd">const</span> <span class="nx">chunkSize</span> <span class="o">=</span> <span class="mi">10</span> <span class="o">**</span> <span class="mi">6</span><span class="p">;</span> <span class="c1">// calculating video where to start and where to end.</span> <span class="kd">const</span> <span class="nx">start</span> <span class="o">=</span> <span class="nb">Number</span><span class="p">(</span><span class="nx">range</span><span class="p">.</span><span class="nx">replace</span><span class="p">(</span><span class="sr">/</span><span class="se">\D</span><span class="sr">/g</span><span class="p">,</span> <span class="dl">""</span><span class="p">));</span> <span class="kd">const</span> <span class="nx">end</span> <span class="o">=</span> <span class="nb">Math</span><span class="p">.</span><span class="nx">min</span><span class="p">(</span><span class="nx">start</span> <span class="o">+</span> <span class="nx">chunkSize</span><span class="p">,</span> <span class="nx">videoSize</span> <span class="o">-</span> <span class="mi">1</span><span class="p">);</span> <span class="kd">const</span> <span class="nx">contentLength</span> <span class="o">=</span> <span class="nx">end</span> <span class="o">-</span> <span class="nx">start</span> <span class="o">+</span> <span class="mi">1</span><span class="p">;</span> <span class="c1">// setup video headers</span> <span class="kd">const</span> <span class="nx">headers</span> <span class="o">=</span> <span class="p">{</span> <span class="dl">"</span><span class="s2">Content-Range</span><span class="dl">"</span><span class="p">:</span> <span class="s2">`bytes </span><span class="p">${</span><span class="nx">start</span><span class="p">}</span><span class="s2">-</span><span class="p">${</span><span class="nx">end</span><span class="p">}</span><span class="s2">/</span><span class="p">${</span><span class="nx">videoSize</span><span class="p">}</span><span class="s2">`</span><span class="p">,</span> <span class="dl">"</span><span class="s2">Accept-Ranges</span><span class="dl">"</span><span class="p">:</span> <span class="dl">"</span><span class="s2">bytes</span><span class="dl">"</span><span class="p">,</span> <span class="dl">"</span><span class="s2">Content-Length</span><span class="dl">"</span><span class="p">:</span> <span class="nx">contentLength</span><span class="p">,</span> <span class="dl">"</span><span class="s2">Content-Type</span><span class="dl">"</span><span class="p">:</span> <span class="dl">"</span><span class="s2">video/mp4</span><span class="dl">"</span><span class="p">,</span> <span class="p">};</span> <span class="nx">res</span><span class="p">.</span><span class="nx">writeHead</span><span class="p">(</span><span class="mi">206</span><span class="p">,</span> <span class="nx">headers</span><span class="p">);</span> <span class="c1">// creating readStream (stdin).</span> <span class="kd">const</span> <span class="nx">videoStream</span> <span class="o">=</span> <span class="nx">fs</span><span class="p">.</span><span class="nx">createReadStream</span><span class="p">(</span><span class="nx">videoPath</span><span class="p">,</span> <span class="p">{</span> <span class="nx">start</span><span class="p">,</span> <span class="nx">end</span> <span class="p">});</span> <span class="c1">// create live stream pipe line</span> <span class="nx">videoStream</span><span class="p">.</span><span class="nx">pipe</span><span class="p">(</span><span class="nx">res</span><span class="p">);</span> <span class="p">});</span> </code></pre> </div> <h3> and then run <code>npm run start</code>. to see your work. </h3> <h3> what is pipe() in streaming </h3> <p>Streams make for quite a handy abstraction, and there's a lot you can do with them - as an example, <code>stream.pipe()</code>, the method used to take a readable stream and connect it to a writeable stream. the writable stream is user we request him the data buffers.</p> <p>project source code: <a href="proxy.php?url=https://github.com/alguerocode/video-streaming">https://github.com/alguerocode/video-streaming</a><br> follow me in github: <a href="proxy.php?url=https://github.com/alguerocode">alguerocode</a></p> <p>thank you for reading.</p> javascript node tutorial wordpress All you need to master javascript alguerocode Tue, 01 Mar 2022 02:48:09 +0000 https://dev.to/alguercode/all-you-need-to-master-javascript-1old https://dev.to/alguercode/all-you-need-to-master-javascript-1old <h1> <a href="proxy.php?url=https://masterjs.vercel.app/">MasterJS</a> website will show your learning path </h1> <ul> <li>adding a star to the repository is really help me.</li> </ul> <p>hello everyone this is my new project to help peopole learning javascript</p> <h4> what is <a href="proxy.php?url=https://masterjs.vercel.app/">masterJS</a> </h4> <p>All-In-One, free resources and collections related to javascript. we provide useful links to help you learn JavaScript, web development and other related stuff along with some of the best resources available online.</p> <p>link to github: <a href="proxy.php?url=https://github.com/devSupporters/masterJS">devSupporters/masterJS</a></p> programming webdev javascript beginners javascript data validator (volder) alguerocode Sun, 27 Feb 2022 17:01:09 +0000 https://dev.to/alguercode/javascript-data-validator-volder-a2g https://dev.to/alguercode/javascript-data-validator-volder-a2g <h3> Overview of My Submission </h3> <p>I have been working in schema builder and data validator package name volder</p> <h5> what is volder </h5> <p>volder is powerful Object schema validation, it lets you describe your data using a simple and readable schema and transform a value to match the requirements, it has custom error messages, custom types and nested schemas.</p> <h3> Submission Category: </h3> <p>javascript package</p> <h3> Link to Code on GitHub </h3> <p>github link: <a href="proxy.php?url=https://github.com/devSupporters/volder">https://github.com/devSupporters/volder</a></p> <h3> Additional Resources / Info </h3> <p>this project by <a href="proxy.php?url=https://github.com/alguerocode">alguerocode</a></p> <p>link: <a href="proxy.php?url=https://github.com/alguerocode/js-volder">https://github.com/alguerocode/js-volder</a><br> <a href="proxy.php?url=https://res.cloudinary.com/practicaldev/image/fetch/s--2DjAA4lH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dnk2xm2r6hngfi2sdr08.gif" class="article-body-image-wrapper"><img src="proxy.php?url=https://res.cloudinary.com/practicaldev/image/fetch/s--2DjAA4lH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dnk2xm2r6hngfi2sdr08.gif" alt="Image description" width="621" height="528"></a></p> azuretrialhack javascript webdev programming easy way to validate data in javascript alguerocode Sat, 12 Feb 2022 13:57:01 +0000 https://dev.to/alguercode/easy-way-to-validate-data-in-javascript-3joh https://dev.to/alguercode/easy-way-to-validate-data-in-javascript-3joh <h2> introduction </h2> <p>we build project and websites , sometimes encounter problems that need solve, but what if we come out with problem of how we validate data in correct way, this is major question and what the data structure you want to validate!, like you want validate and email and password you want to add specific rules to keep users Entering emails correctly,but that too tough or you are not expert in validating strings or regex or anythings like that.</p> <h2> how to solve ? </h2> <p>developers like to use validation library to solve there problems and focus in there business, so this point help me to start building <a href="proxy.php?url=https://github.com/devSupporters/volder">volder</a> validation library helping people to describe data in good structure and well design. </p> <h2> what is volder </h2> <p><a href="proxy.php?url=https://github.com/devSupporters/volder"><strong>volder</strong></a> is javascript npm package, it's powerful Object schema validation, it lets you describe your data using a simple and readable schema and transform a value to match the requirements, it has custom error messages, custom types and nested schemas.</p> <ul> <li><a href="proxy.php?url=https://volder.vercel.app/">volder documentaion website</a></li> <li><a href="proxy.php?url=https://github.com/devSupporters/volder">volder github</a></li> </ul> <h2> let's take an example </h2> <p>in this example we use volder package for user login validation, first thing install volder package<br> <code>npm install --save volder</code></p> <p>volder package has </p> <ul> <li> <code>Volder</code> constructor to describe and structure your multiple data.</li> <li> <code>SingleVolder</code> function it's used for describe single data.</li> <li>volder support other types like <code>Email</code> or <code>CreditCard</code>.</li> </ul> <p>this code shows you how to describe your data for user validation<br> </p> <div class="highlight js-code-highlight"> <pre class="highlight javascript"><code><span class="k">import</span> <span class="p">{</span> <span class="nx">Volder</span><span class="p">,</span> <span class="nx">Email</span> <span class="p">}</span> <span class="k">from</span> <span class="dl">'</span><span class="s1">volder</span><span class="dl">'</span><span class="p">;</span> <span class="kd">const</span> <span class="nx">userSchema</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">Volder</span><span class="p">({</span> <span class="na">username</span><span class="p">:</span> <span class="p">{</span> <span class="na">type</span><span class="p">:</span> <span class="p">[</span><span class="nb">String</span><span class="p">,</span> <span class="dl">'</span><span class="s1">username must be in string</span><span class="dl">'</span><span class="p">],</span> <span class="na">alphanumeric</span><span class="p">:</span> <span class="p">[</span><span class="kc">true</span><span class="p">,</span> <span class="dl">'</span><span class="s1">username should only contain letters and numbers</span><span class="dl">'</span><span class="p">],</span> <span class="na">minLength</span><span class="p">:</span> <span class="p">[</span><span class="mi">4</span><span class="p">,</span> <span class="dl">'</span><span class="s1">username at least 4 characters</span><span class="dl">'</span><span class="p">],</span> <span class="na">maxLength</span><span class="p">:</span> <span class="p">[</span><span class="mi">16</span><span class="p">,</span> <span class="dl">'</span><span class="s1">username at most 16 characters</span><span class="dl">'</span><span class="p">],</span> <span class="na">required</span><span class="p">:</span> <span class="p">[</span><span class="kc">true</span><span class="p">,</span> <span class="dl">'</span><span class="s1">username is required</span><span class="dl">'</span><span class="p">],</span> <span class="na">trim</span><span class="p">:</span> <span class="kc">true</span> <span class="p">},</span> <span class="na">email</span><span class="p">:</span> <span class="p">{</span> <span class="na">type</span><span class="p">:</span> <span class="p">[</span><span class="nb">String</span> <span class="p">,</span><span class="dl">'</span><span class="s1">email must be in string</span><span class="dl">'</span><span class="p">],</span> <span class="na">pattern</span><span class="p">:</span> <span class="p">[</span><span class="nx">Email</span><span class="p">,</span> <span class="dl">'</span><span class="s1">not valid email</span><span class="dl">'</span><span class="p">],</span> <span class="na">maxLength</span><span class="p">:</span> <span class="p">[</span><span class="mi">150</span><span class="p">,</span> <span class="dl">'</span><span class="s1">email be at most 150 characters</span><span class="dl">'</span><span class="p">],</span> <span class="na">required</span><span class="p">:</span> <span class="p">[</span> <span class="kc">true</span><span class="p">,</span><span class="dl">'</span><span class="s1">email is required</span><span class="dl">'</span><span class="p">],</span> <span class="na">trim</span><span class="p">:</span> <span class="kc">true</span> <span class="p">},</span> <span class="na">password</span><span class="p">:</span> <span class="p">{</span> <span class="na">type</span><span class="p">:</span> <span class="p">[</span><span class="nb">String</span> <span class="p">,</span> <span class="dl">'</span><span class="s1">password must be in string</span><span class="dl">'</span><span class="p">],</span> <span class="na">minLength</span><span class="p">:[</span><span class="mi">8</span><span class="p">,</span> <span class="dl">'</span><span class="s1">password should be at least 8 characters</span><span class="dl">'</span><span class="p">],</span> <span class="na">maxLength</span><span class="p">:</span> <span class="p">[</span><span class="mi">30</span><span class="p">,</span> <span class="dl">'</span><span class="s1">password should be at most 30 characters</span><span class="dl">'</span><span class="p">],</span> <span class="na">required</span><span class="p">:</span> <span class="p">[</span> <span class="kc">true</span><span class="p">,</span> <span class="dl">'</span><span class="s1">password is required</span><span class="dl">'</span><span class="p">],</span> <span class="na">matches</span><span class="p">:</span> <span class="p">[</span><span class="dl">"</span><span class="s2">^(?=.*[A-Za-z])(?=.*</span><span class="se">\</span><span class="s2">d)[A-Za-z</span><span class="se">\</span><span class="s2">d]$</span><span class="dl">"</span><span class="p">,</span> <span class="dl">'</span><span class="s1">password must contain numbers and letters</span><span class="dl">'</span><span class="p">]</span> <span class="p">}</span> <span class="p">})</span> <span class="kd">const</span> <span class="p">{</span> <span class="nx">valid</span><span class="p">,</span> <span class="nx">errors</span><span class="p">,</span> <span class="nx">value</span> <span class="p">}</span> <span class="o">=</span> <span class="nx">userSchema</span><span class="p">.</span><span class="nx">validate</span><span class="p">(</span><span class="nx">input</span><span class="p">);</span> </code></pre> </div> <p>see more example: <a href="proxy.php?url=https://github.com/alguerocode/js-volder">https://github.com/alguerocode/js-volder</a></p> <h2> how to help me </h2> <p>there a variety of ways to help me for example install volder and use it in your project, contributing to <a href="proxy.php?url=https://github.com/devSupporters/volder">volder repository</a> or just add a ⭐ star ⭐ to <a href="proxy.php?url=https://github.com/devSupporters/volder">volder repository</a> and i will thank you very much.</p> <p>thank for reading</p> javascript webdev beginners programming how to validate data in javascript alguerocode Thu, 10 Feb 2022 19:11:06 +0000 https://dev.to/alguercode/how-to-validate-data-in-javascript-5eg7 https://dev.to/alguercode/how-to-validate-data-in-javascript-5eg7 <h2> introduction </h2> <p>we build project and websites , sometimes encounter problems that need solve, but what if we come out with problem of how we validate data in correct way, this is major question and what the data structure you want to validate!, like you want validate and email and password you want to add specific rules to keep users Entering emails correctly,but that too tough or you are not expert in validating strings or regex or anythings like that.</p> <h2> how to solve ? </h2> <p>developers like to use validation library to solve there problems and focus in there business, so this point help me to start building <a href="proxy.php?url=https://github.com/devSupporters/volder">volder</a> validation library helping people to describe data in good structure and well design. </p> <h2> what is volder </h2> <p><a href="proxy.php?url=https://github.com/devSupporters/volder"><strong>volder</strong></a> is javascript npm package, it's powerful Object schema validation, it lets you describe your data using a simple and readable schema and transform a value to match the requirements, it has custom error messages, custom types and nested schemas.</p> <ul> <li><a href="proxy.php?url=https://volder.vercel.app/">volder documentaion website</a></li> <li><a href="proxy.php?url=https://github.com/devSupporters/volder">volder github</a></li> </ul> <h2> let's take an example </h2> <p>in this example we use volder package for user login validation, first thing install volder package<br> <code>npm install --save volder</code></p> <p>volder package has </p> <ul> <li> <code>Volder</code> constructor to describe and structure your multiple data.</li> <li> <code>SingleVolder</code> function it's used for describe single data.</li> <li>volder support other types like <code>Email</code> or <code>CreditCard</code>.</li> </ul> <p>this code shows you how to describe your data for user validation<br> </p> <div class="highlight js-code-highlight"> <pre class="highlight javascript"><code><span class="k">import</span> <span class="p">{</span> <span class="nx">Volder</span><span class="p">,</span> <span class="nx">Email</span> <span class="p">}</span> <span class="k">from</span> <span class="dl">'</span><span class="s1">volder</span><span class="dl">'</span><span class="p">;</span> <span class="kd">const</span> <span class="nx">userSchema</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">Volder</span><span class="p">({</span> <span class="na">username</span><span class="p">:</span> <span class="p">{</span> <span class="na">type</span><span class="p">:</span> <span class="p">[</span><span class="nb">String</span><span class="p">,</span> <span class="dl">'</span><span class="s1">username must be in string</span><span class="dl">'</span><span class="p">],</span> <span class="na">alphanumeric</span><span class="p">:</span> <span class="p">[</span><span class="kc">true</span><span class="p">,</span> <span class="dl">'</span><span class="s1">username should only contain letters and numbers</span><span class="dl">'</span><span class="p">],</span> <span class="na">minLength</span><span class="p">:</span> <span class="p">[</span><span class="mi">4</span><span class="p">,</span> <span class="dl">'</span><span class="s1">username at least 4 characters</span><span class="dl">'</span><span class="p">],</span> <span class="na">maxLength</span><span class="p">:</span> <span class="p">[</span><span class="mi">16</span><span class="p">,</span> <span class="dl">'</span><span class="s1">username at most 16 characters</span><span class="dl">'</span><span class="p">],</span> <span class="na">required</span><span class="p">:</span> <span class="p">[</span><span class="kc">true</span><span class="p">,</span> <span class="dl">'</span><span class="s1">username is required</span><span class="dl">'</span><span class="p">],</span> <span class="na">trim</span><span class="p">:</span> <span class="kc">true</span> <span class="p">},</span> <span class="na">email</span><span class="p">:</span> <span class="p">{</span> <span class="na">type</span><span class="p">:</span> <span class="p">[</span><span class="nb">String</span> <span class="p">,</span><span class="dl">'</span><span class="s1">email must be in string</span><span class="dl">'</span><span class="p">],</span> <span class="na">pattern</span><span class="p">:</span> <span class="p">[</span><span class="nx">Email</span><span class="p">,</span> <span class="dl">'</span><span class="s1">not valid email</span><span class="dl">'</span><span class="p">],</span> <span class="na">maxLength</span><span class="p">:</span> <span class="p">[</span><span class="mi">150</span><span class="p">,</span> <span class="dl">'</span><span class="s1">email be at most 150 characters</span><span class="dl">'</span><span class="p">],</span> <span class="na">required</span><span class="p">:</span> <span class="p">[</span> <span class="kc">true</span><span class="p">,</span><span class="dl">'</span><span class="s1">email is required</span><span class="dl">'</span><span class="p">],</span> <span class="na">trim</span><span class="p">:</span> <span class="kc">true</span> <span class="p">},</span> <span class="na">password</span><span class="p">:</span> <span class="p">{</span> <span class="na">type</span><span class="p">:</span> <span class="p">[</span><span class="nb">String</span> <span class="p">,</span> <span class="dl">'</span><span class="s1">password must be in string</span><span class="dl">'</span><span class="p">],</span> <span class="na">minLength</span><span class="p">:[</span><span class="mi">8</span><span class="p">,</span> <span class="dl">'</span><span class="s1">password should be at least 8 characters</span><span class="dl">'</span><span class="p">],</span> <span class="na">maxLength</span><span class="p">:</span> <span class="p">[</span><span class="mi">30</span><span class="p">,</span> <span class="dl">'</span><span class="s1">password should be at most 30 characters</span><span class="dl">'</span><span class="p">],</span> <span class="na">required</span><span class="p">:</span> <span class="p">[</span> <span class="kc">true</span><span class="p">,</span> <span class="dl">'</span><span class="s1">password is required</span><span class="dl">'</span><span class="p">],</span> <span class="na">matches</span><span class="p">:</span> <span class="p">[</span><span class="dl">"</span><span class="s2">^(?=.*[A-Za-z])(?=.*</span><span class="se">\</span><span class="s2">d)[A-Za-z</span><span class="se">\</span><span class="s2">d]$</span><span class="dl">"</span><span class="p">,</span> <span class="dl">'</span><span class="s1">password must contain numbers and letters</span><span class="dl">'</span><span class="p">]</span> <span class="p">}</span> <span class="p">})</span> <span class="kd">const</span> <span class="p">{</span> <span class="nx">valid</span><span class="p">,</span> <span class="nx">errors</span><span class="p">,</span> <span class="nx">value</span> <span class="p">}</span> <span class="o">=</span> <span class="nx">userSchema</span><span class="p">.</span><span class="nx">validate</span><span class="p">(</span><span class="nx">input</span><span class="p">);</span> </code></pre> </div> <p>see more example: <a href="proxy.php?url=https://github.com/alguerocode/js-volder">https://github.com/alguerocode/js-volder</a></p> <h2> how to help me </h2> <p>there a variety of ways to help me for example install volder and use it in your project, contributing to <a href="proxy.php?url=https://github.com/devSupporters/volder">volder repository</a> or just add a ⭐ star ⭐ to <a href="proxy.php?url=https://github.com/devSupporters/volder">volder repository</a> and i will thank you very much.</p> <p>thank for reading</p> javascript beginners programming tutorial postman clone alguerocode Thu, 10 Feb 2022 01:19:17 +0000 https://dev.to/alguercode/postman-clone-5ce8 https://dev.to/alguercode/postman-clone-5ce8 <h1> postman-clone </h1> <h3> clone postman using reactjs and bootstrap and only json data transformations <a href="proxy.php?url=https://github.com/alguerocode/postman-clone">postman clone repository</a> </h3> <ul> <li>before we starting, support me by adding a star to the <a href="proxy.php?url=https://github.com/devSupporters/volder">volder repository</a> </li> </ul> <p> <a href="proxy.php?url=https://res.cloudinary.com/practicaldev/image/fetch/s--paOJuoAZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://user-images.githubusercontent.com/75932477/124395936-005d4c00-dd18-11eb-9fbb-9c5458cdf22e.png" class="article-body-image-wrapper"><img src="proxy.php?url=https://res.cloudinary.com/practicaldev/image/fetch/s--paOJuoAZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://user-images.githubusercontent.com/75932477/124395936-005d4c00-dd18-11eb-9fbb-9c5458cdf22e.png" width="370" height="136"></a> </p> <h2> library used </h2> <ul> <li>React</li> <li>Bootstrap</li> <li>nodejs(for test)</li> </ul> <h3> Clone the project </h3> <div class="highlight js-code-highlight"> <pre class="highlight shell"><code> git clone https://github.com/alguerocode/postman-clone.git </code></pre> </div> <h3> Go to the project directory </h3> <div class="highlight js-code-highlight"> <pre class="highlight shell"><code> <span class="nb">cd </span>postman-clone </code></pre> </div> <h3> Install dependencies </h3> <div class="highlight js-code-highlight"> <pre class="highlight shell"><code> npm <span class="nb">install</span> </code></pre> </div> <h3> Start the server </h3> <div class="highlight js-code-highlight"> <pre class="highlight shell"><code> npm run start </code></pre> </div> javascript webdev tutorial programming How to find new maintainers for your open source project alguerocode Wed, 09 Feb 2022 19:21:45 +0000 https://dev.to/alguercode/how-to-find-new-maintainers-for-your-open-source-project-48jc https://dev.to/alguercode/how-to-find-new-maintainers-for-your-open-source-project-48jc <p><strong>This open source software helps you build a healthy team of co-maintainers so that no project gets left behind.</strong></p> <ul> <li>before we starting, support me by adding a star to the <a href="proxy.php?url=https://github.com/devSupporters/volder">volder repository</a> </li> </ul> <h3> Table of Content </h3> <ul> <li>The problem of unmaintained open source projects</li> <li>The load of seemingly unmaintained projects</li> <li>Building Adoptoposs</li> <li>How you can help</li> <li>Looking for maintainers? Give Adoptoposs a try!</li> </ul> <p>If there's one thing you can say about open source software (OSS), it's that it quietly yet inarguably runs our world. Most of the internet is built on open source software, and, these days, millions of developers build and maintain hundreds of thousands of open source packages in more than 250 programming languages. If that's not enough, enterprise companies continue to grow their investments in open source in 2020.</p> <p>The more open source software permeates our everyday life, the more important it becomes to keep all these projects secure, compatible, and well-maintained.</p> <p>As we will see, this is not as easy as it sounds, especially if a great amount of open source is built by volunteers. To address the problem of open source maintenance, I built <a href="proxy.php?url=https://adoptoposs.org">Adoptoposs.org</a>, an app (open source of course!) that helps you find co-maintainers and keep open source projects and their maintainers healthy.</p> <h2> The problem of unmaintained open source projects </h2> <p>Many developers contribute to open source at work, whether it's a massive project like Kubernetes or an open source product like Ansible.</p> <p>However, the maintenance of a great amount of OSS projects is done by volunteers in their spare time. Many projects grow out of a personal side-project into popular and widely used libraries. With a lot of attraction, more issues and pull requests are opened by the community. A maintainer's growing responsibility is now to orchestrate incoming requests and changes and steer the whole project.</p> <p>There are loads of stories about the challenges and struggles of OSS maintainers. They talk about emotionally exhausting community management and the great effort that has to be put into triaging of issues and pull requests. When hearing these stories of (mostly voluntary) efforts, it's no surprise that maintainers sometimes feel overwhelmed by the amount of work and walk away from their projects.</p> <p>The reasons for dedicating less time to or even leaving an open source project are many and varied. Maintainers leave their company or lose interest. Changes in their personal lives give them less time to take care of the project, or they stop their activities in the open source scene entirely because of burnout or illness. In the worst case, they have passed away.</p> <p>In all these cases, projects are left behind, often with no one but the original author having administration rights or access to the publishing accounts. Of course, you can fork and publish a project under a new name. But ultimately, that leads to confusion about the state of the project and whether it can and should still be considered a stable piece of software.</p> <h2> The load of seemingly unmaintained projects </h2> <p>Over the last couple of years doing web development, I often found myself in situations where long-used libraries were no longer compatible with the latest version of a framework or programming language. It turned out that the original maintainers had lost access to the project after leaving their company or just could not dedicate enough time. It was always hard to contact anyone who could help with merging bug fixes and releasing a new version.</p> <h2> Building Adoptoposs </h2> <p>After I found that, on GitHub alone, there were more than 36,000 issues asking "Is this project abandoned?", I thought about how to tackle this problem. More than 15,000 of these were open issues. So, lots of projects need help with their maintenance.</p> <p>I was lucky that I was between jobs at the beginning of this year and had a lot of time to think about the problem and how I could help contribute to the health of open source projects and their maintainers. So I just started working on something.</p> <p>First, I thought it might be nice to have a dashboard that rates OSS projects by whether they needed help with their maintenance. When I had a prototype running after a couple of days' work, I found that it kind of worked but did not really overcome the problem of getting into contact with the maintainer. And when a maintainer was hard to reach when I needed support, it would already be too late.</p> <p>So, I reconsidered the actual goal. Because maintainers know first when they need help, they should be able to make their project visible to potential co-maintainers and ask for it. Likewise, people who considered becoming a co-maintainer should be able to find interesting projects and contact the maintainer.</p> <p>With these goals written down, I started building Adoptoposs in February 2020. I must say it went faster than I expected. As a tech stack, I chose Elixir and gave Phoenix LiveView a try, primarily because I wanted to learn more about it but also because I planned to publish Adoptoposs as open source from the beginning. This stack seemed perfect in terms of productivity and the resources I would have to spend on maintaining and hosting the app.</p> <p>Two months later, after I had learned a lot about Elixir, HTML, CSS, and user experience design, Adoptoposs went live on March 30. Since then, it has already found itself its first co-maintainer—by using Adoptoposs, of course!</p> <h2> How you can help </h2> <p>The philosophy of Adoptoposs is that each and every open source project of considerable popularity should have a team of co-maintainers to avoid sliding into neglect. Multiple people should have full access to the project and all related services—like package registries, hosting accounts, and third-party services—to ensure ongoing maintenance even as maintainers come and go.</p> <p>For your popular open source projects, I encourage you to build a team of co-maintainers to remove the single point of failure. There are great ways to do this while building trust.</p> <p>Your co-maintainers do not necessarily need to work on the project every day. They might only be an in-case-of-emergency contact, but at least they will be able to be there. This process often means giving new maintainers access when former maintainers want to step down. You can follow examples like the core-dev program for Python or look at project guides like the one at Homebrew for ideas and direction.</p> <h2> Looking for maintainers? Give Adoptoposs a try! </h2> <p>If you don't have co-maintainers for your open source project in mind yet, consider submitting your project to <a href="proxy.php?url=https://adoptoposs.org/">Adoptoposs.org</a>. Adoptoposs will list your project and also notify developers interested in the programming languages you use.</p> <p>Keep in mind to document important details about your project to make it easier for people to help you. Start seeking out help early on and build a team of co-maintainers to keep your open source projects and yourself healthy.</p> <p>If you are considering becoming a co-maintainer, you can explore projects that need help and contact the maintainers. You can be pretty certain that your help is needed, and it is a great way to level up your expertise or simply have some fun with code.</p> <p>And of course, if you find any issues with Adoptoposs or have suggestions on how to improve it, please let us know in our <a href="proxy.php?url=https://github.com/adoptoposs/adoptoposs/issues">GitHub repository</a>.</p> <p>support me by adding a star to <a href="proxy.php?url=https://github.com/devSupporters/volder">volder repository</a></p> webdev programming tutorial opensource 🌟new schema builder and data validation library🌟 alguerocode Wed, 09 Feb 2022 17:07:48 +0000 https://dev.to/alguercode/new-schema-builder-and-data-validation-library-23c3 https://dev.to/alguercode/new-schema-builder-and-data-validation-library-23c3 <p><a href="proxy.php?url=https://res.cloudinary.com/practicaldev/image/fetch/s--LKLeDy5b--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8htjffx6wxetuawue9zi.png" class="article-body-image-wrapper"><img src="proxy.php?url=https://res.cloudinary.com/practicaldev/image/fetch/s--LKLeDy5b--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8htjffx6wxetuawue9zi.png" alt="Image description" width="343" height="115"></a></p> <p>last day <code>alguerocode</code> publish new schema builder and data validation, it's very useful for user login validation. <strong>it's volder</strong>.</p> <p>visit <a href="proxy.php?url=https://volder.vercel.app">volder.vercel.app</a> to see more</p> <p>volder is powerful Object schema validation, it lets you describe your data using a simple and readable schema and transform a value to match the requirements, it has custom error messages, custom types and nested schemas.</p> <h4> example </h4> <div class="highlight js-code-highlight"> <pre class="highlight javascript"><code><span class="k">import</span> <span class="p">{</span> <span class="nx">Volder</span><span class="p">,</span> <span class="nx">Email</span> <span class="p">}</span> <span class="k">from</span> <span class="dl">'</span><span class="s1">volder</span><span class="dl">'</span><span class="p">;</span> <span class="kd">const</span> <span class="nx">userSchema</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">Volder</span><span class="p">({</span> <span class="na">username</span><span class="p">:</span> <span class="p">{</span> <span class="na">type</span><span class="p">:</span> <span class="p">[</span><span class="nb">String</span><span class="p">,</span> <span class="dl">'</span><span class="s1">username must be in string</span><span class="dl">'</span><span class="p">],</span> <span class="na">alphanumeric</span><span class="p">:</span> <span class="p">[</span><span class="kc">true</span><span class="p">,</span> <span class="dl">'</span><span class="s1">username should only contain letters and numbers</span><span class="dl">'</span><span class="p">],</span> <span class="na">minLength</span><span class="p">:</span> <span class="p">[</span><span class="mi">4</span><span class="p">,</span> <span class="dl">'</span><span class="s1">username at least 4 characters</span><span class="dl">'</span><span class="p">],</span> <span class="na">maxLength</span><span class="p">:</span> <span class="p">[</span><span class="mi">16</span><span class="p">,</span> <span class="dl">'</span><span class="s1">username at most 16 characters</span><span class="dl">'</span><span class="p">],</span> <span class="na">required</span><span class="p">:</span> <span class="p">[</span><span class="kc">true</span><span class="p">,</span> <span class="dl">'</span><span class="s1">username is required</span><span class="dl">'</span><span class="p">],</span> <span class="na">trim</span><span class="p">:</span> <span class="kc">true</span> <span class="p">},</span> <span class="na">email</span><span class="p">:</span> <span class="p">{</span> <span class="na">type</span><span class="p">:</span> <span class="p">[</span><span class="nb">String</span> <span class="p">,</span><span class="dl">'</span><span class="s1">email must be in string</span><span class="dl">'</span><span class="p">],</span> <span class="na">pattern</span><span class="p">:</span> <span class="p">[</span><span class="nx">Email</span><span class="p">,</span> <span class="dl">'</span><span class="s1">not valid email</span><span class="dl">'</span><span class="p">],</span> <span class="na">maxLength</span><span class="p">:</span> <span class="p">[</span><span class="mi">150</span><span class="p">,</span> <span class="dl">'</span><span class="s1">email be at most 150 characters</span><span class="dl">'</span><span class="p">],</span> <span class="na">required</span><span class="p">:</span> <span class="p">[</span> <span class="kc">true</span><span class="p">,</span><span class="dl">'</span><span class="s1">email is required</span><span class="dl">'</span><span class="p">],</span> <span class="na">trim</span><span class="p">:</span> <span class="kc">true</span> <span class="p">},</span> <span class="na">password</span><span class="p">:</span> <span class="p">{</span> <span class="na">type</span><span class="p">:</span> <span class="p">[</span><span class="nb">String</span> <span class="p">,</span> <span class="dl">'</span><span class="s1">password must be in string</span><span class="dl">'</span><span class="p">],</span> <span class="na">minLength</span><span class="p">:[</span><span class="mi">8</span><span class="p">,</span> <span class="dl">'</span><span class="s1">password should be at least 8 characters</span><span class="dl">'</span><span class="p">],</span> <span class="na">maxLength</span><span class="p">:</span> <span class="p">[</span><span class="mi">30</span><span class="p">,</span> <span class="dl">'</span><span class="s1">password should be at most 30 characters</span><span class="dl">'</span><span class="p">],</span> <span class="na">required</span><span class="p">:</span> <span class="p">[</span> <span class="kc">true</span><span class="p">,</span> <span class="dl">'</span><span class="s1">password is required</span><span class="dl">'</span><span class="p">],</span> <span class="na">matches</span><span class="p">:</span> <span class="p">[</span><span class="dl">"</span><span class="s2">^(?=.*[A-Za-z])(?=.*</span><span class="se">\</span><span class="s2">d)[A-Za-z</span><span class="se">\</span><span class="s2">d]$</span><span class="dl">"</span><span class="p">,</span> <span class="dl">'</span><span class="s1">password must contain numbers and letters</span><span class="dl">'</span><span class="p">]</span> <span class="p">}</span> <span class="p">})</span> <span class="kd">const</span> <span class="p">{</span> <span class="nx">valid</span><span class="p">,</span> <span class="nx">errors</span><span class="p">,</span> <span class="nx">value</span> <span class="p">}</span> <span class="o">=</span> <span class="nx">userSchema</span><span class="p">.</span><span class="nx">validate</span><span class="p">(</span><span class="nx">input</span><span class="p">);</span> </code></pre> </div> javascript webdev beginners tutorial