The Curious Engineer

All blogs / JavaScript / TypeScript

Marcin Wanago Blog

wanago.io

JavaScript blog focused on covering practical issues and explaining how the language works under the hood.

JavaScript / TypeScriptWeb developmentTesting / QA

Posts
372 from 1 Feb 2018 to 10 Mar 2025
Posting
now and then
Kind
personal blog
Feed
https://wanago.io/feed/

2025 10

  1. Big O notation: Avoiding common performance pitfalls
  2. API with NestJS #187. Rate limiting using Throttler
  3. Web Scraping with Playwright
  4. Beginner’s guide to Web Scraping with Cheerio
  5. API with NestJS #186. What’s new in Express 5?
  6. Machine Learning with TypeScript and TensorFlow: Training your first model
  7. API with NestJS #185. Operations with PostGIS Polygons in PostgreSQL and Drizzle
  8. API with NestJS #184. Storing PostGIS Polygons in PostgreSQL with Drizzle ORM
  9. API with NestJS #183. Distance and radius in PostgreSQL with Drizzle ORM
  10. API with NestJS #182. Storing coordinates in PostgreSQL with Drizzle ORM

2024 53

  1. API with NestJS #181. Prepared statements in PostgreSQL with Drizzle ORM
  2. API with NestJS #180. Organizing Drizzle ORM schema with PostgreSQL
  3. API with NestJS #179. Pattern matching search with Drizzle ORM and PostgreSQL
  4. API with NestJS #178. Storing files inside of a PostgreSQL database with Drizzle
  5. API with NestJS #177. Response serialization with the Drizzle ORM
  6. API with NestJS #176. Database migrations with the Drizzle ORM
  7. API with NestJS #175. PUT and PATCH requests with PostgreSQL and Drizzle ORM
  8. API with NestJS #174. Multiple PostgreSQL schemas with Drizzle ORM
  9. API with NestJS #173. Storing money with Drizzle ORM and PostgreSQL
  10. API with NestJS #172. Database normalization with Drizzle ORM and PostgreSQL
  11. API with NestJS #171. Recursive relationships with Drizzle ORM and PostgreSQL
  12. API with NestJS #170. Polymorphic associations with PostgreSQL and Drizzle ORM
  13. API with NestJS #169. Unique IDs with UUIDs using Drizzle ORM and PostgreSQL
  14. API with NestJS #168. Integration tests with the Drizzle ORM
  15. API with NestJS #167. Unit tests with the Drizzle ORM
  16. API with NestJS #166. Logging with the Drizzle ORM
  17. API with NestJS #165. Time intervals with the Drizzle ORM and PostgreSQL
  18. API with NestJS #164. Improving the performance with indexes using Drizzle ORM
  19. API with NestJS #163. Full-text search with the Drizzle ORM and PostgreSQL
  20. API with NestJS #162. Identity columns with the Drizzle ORM and PostgreSQL
  21. API with NestJS #161. Generated columns with the Drizzle ORM and PostgreSQL
  22. API with NestJS #160. Using views with the Drizzle ORM and PostgreSQL
  23. API with NestJS #159. Date and time with PostgreSQL and the Drizzle ORM
  24. API with NestJS #158. Soft deletes with the Drizzle ORM
  25. API with NestJS #157. Handling JSON data with PostgreSQL and the Drizzle ORM
  26. API with NestJS #156. Arrays with PostgreSQL and the Drizzle ORM
  27. API with NestJS #155. Offset and keyset pagination with the Drizzle ORM
  28. API with NestJS #154. Many-to-many relationships with Drizzle ORM and PostgreSQL
  29. API with NestJS #153. SQL transactions with the Drizzle ORM
  30. API with NestJS #152. SQL constraints with the Drizzle ORM
  31. API with NestJS #151. Implementing many-to-one relationships with Drizzle ORM
  32. API with NestJS #150. One-to-one relationships with the Drizzle ORM
  33. API with NestJS #149. Introduction to the Drizzle ORM with PostgreSQL
  34. Translating React apps with i18next and testing them End-to-End with Playwright
  35. Drag and Drop with React. Writing E2E tests using Playwright
  36. Implementing infinite scrolling with React. Writing E2E tests with Playwright
  37. JavaScript testing #18. E2E Playwright tests for uploading and downloading files
  38. JavaScript testing #17. Introduction to End-to-End testing with Playwright
  39. JavaScript testing #16. Snapshot testing with React, Jest, and Vitest
  40. API with NestJS #148. Understanding the injection scopes
  41. JavaScript testing #15. Interpreting the code coverage metric
  42. Comparing ECMAScript Modules and CommonJS
  43. Monorepos with Yarn Workspaces
  44. API with NestJS #147. The data types to store money with PostgreSQL and Prisma
  45. Understanding native JavaScript modules
  46. API with NestJS #146. Polymorphic associations with PostgreSQL and Prisma
  47. API with NestJS #145. Securing applications with Helmet
  48. API with NestJS #144. Creating CLI applications with the Nest Commander
  49. API with NestJS #143. Optimizing queries with views using PostgreSQL and Kysely
  50. API with NestJS #142. A video chat with WebRTC and React
  51. API with NestJS #141. Getting distinct records with Prisma and PostgreSQL
  52. API with NestJS #140. Using multiple PostgreSQL schemas with Prisma
  53. API with NestJS #139. Using UUID as primary keys with Prisma and PostgreSQL

2023 52

  1. React with Vite and TypeScript and its common challenges
  2. API with NestJS #138. Filtering records with Prisma
  3. API with NestJS #137. Recursive relationships with Prisma and PostgreSQL
  4. API with NestJS #136. Raw SQL queries with Prisma and PostgreSQL range types
  5. API with NestJS #135. Referential actions and foreign keys in PostgreSQL with Prisma
  6. API with NestJS #134. Aggregating statistics with PostgreSQL and Prisma
  7. API with NestJS #133. Introducing database normalization with PostgreSQL and Prisma
  8. API with NestJS #132. Handling date and time in PostgreSQL with Kysely
  9. API with NestJS #131. Unit tests with PostgreSQL and Kysely
  10. API with NestJS #130. Avoiding storing sensitive information in API logs
  11. API with NestJS #129. Implementing soft deletes with SQL and Kysely
  12. API with NestJS #128. Managing JSON data with PostgreSQL and Kysely
  13. API with NestJS #127. Arrays with PostgreSQL and Kysely
  14. API with NestJS #126. Improving the database performance with indexes and Kysely
  15. API with NestJS #125. Offset and keyset pagination with Kysely
  16. API with NestJS #124. Handling SQL constraints with Kysely
  17. API with NestJS #123. SQL transactions with Kysely
  18. API with NestJS #122. Many-to-many relationships with Kysely and PostgreSQL
  19. API with NestJS #121. Many-to-one relationships with PostgreSQL and Kysely
  20. API with NestJS #120. One-to-one relationships with the Kysely query builder
  21. API with NestJS #119. Type-safe SQL queries with Kysely and PostgreSQL
  22. API with NestJS #118. Uploading and streaming videos
  23. Introduction to managing a private NPM registry with Verdaccio
  24. API with NestJS #117. CORS – Cross-Origin Resource Sharing
  25. API with NestJS #116. REST API versioning
  26. API with NestJS #115. Database migrations with Prisma
  27. API with NestJS #114. Modifying data using PUT and PATCH methods with Prisma
  28. API with NestJS #113. Logging with Prisma
  29. API with NestJS #112. Serializing the response with Prisma
  30. API with NestJS #111. Constraints with PostgreSQL and Prisma
  31. API with NestJS #110. Managing JSON data with PostgreSQL and Prisma
  32. API with NestJS #109. Arrays with PostgreSQL and Prisma
  33. API with NestJS #108. Date and time with Prisma and PostgreSQL
  34. API with NestJS #107. Offset and keyset pagination with Prisma
  35. API with NestJS #106. Improving performance through indexes with Prisma
  36. API with NestJS #105. Implementing soft deletes with Prisma and middleware
  37. API with NestJS #104. Writing transactions with Prisma
  38. API with NestJS #103. Integration tests with Prisma
  39. API with NestJS #102. Writing unit tests with Prisma
  40. API with NestJS #101. Managing sensitive data using the AWS Secrets Manager
  41. API with NestJS #100. The HTTPS protocol with Route 53 and AWS Certificate Manager
  42. API with NestJS #99. Scaling the number of application instances with Amazon ECS
  43. API with NestJS #98. Health checks with Terminus and Amazon ECS
  44. API with NestJS #97. Introduction to managing logs with Amazon CloudWatch
  45. API with NestJS #96. Running unit tests with CI/CD and GitHub Actions
  46. API with NestJS #95. CI/CD with Amazon ECS and GitHub Actions
  47. API with NestJS #94. Deploying multiple instances on AWS with a load balancer
  48. API with NestJS #93. Deploying a NestJS app with Amazon ECS and RDS
  49. API with NestJS #92. Increasing the developer experience with Docker Compose
  50. API with NestJS #91. Dockerizing a NestJS API with Docker Compose
  51. API with NestJS #90. Using various types of SQL joins
  52. API with NestJS #89. Replacing Express with Fastify

2022 52

  1. API with NestJS #88. Testing a project with raw SQL using integration tests
  2. API with NestJS #87. Writing unit tests in a project with raw SQL
  3. API with NestJS #86. Logging with the built-in logger when using raw SQL
  4. API with NestJS #85. Defining constraints with raw SQL
  5. Introduction to Gatsby with TypeScript and GitHub Pages
  6. API with NestJS #84. Implementing filtering using subqueries with raw SQL
  7. API with NestJS #83. Text search with tsvector and raw SQL
  8. API with NestJS #82. Introduction to indexes with raw SQL queries
  9. API with NestJS #81. Soft deletes with raw SQL queries
  10. API with NestJS #80. Updating entities with PUT and PATCH using raw SQL queries
  11. API with NestJS #79. Implementing searching with pattern matching and raw SQL
  12. API with NestJS #78. Generating statistics using aggregate functions in raw SQL
  13. API with NestJS #77. Offset and keyset pagination with raw SQL queries
  14. API with NestJS #76. Working with transactions using raw SQL queries
  15. API with NestJS #75. Many-to-many relationships using raw SQL queries
  16. API with NestJS #74. Designing many-to-one relationships using raw SQL queries
  17. API with NestJS #73. One-to-one relationships with raw SQL queries
  18. API with NestJS #72. Working with PostgreSQL using raw SQL queries
  19. API with NestJS #71. Introduction to feature flags
  20. API with NestJS #70. Defining dynamic modules
  21. JavaScript testing #14. Mocking WebSockets using the mock-socket library
  22. JavaScript testing #13. Mocking a REST API with the Mock Service Worker
  23. API with NestJS #69. Database migrations with TypeORM
  24. API with NestJS #68. Interacting with the application through REPL
  25. API with NestJS #67. Migrating to TypeORM 0.3
  26. Introduction to performance testing with k6
  27. Rendering long lists using virtualization with React
  28. API with NestJS #66. Improving PostgreSQL performance with indexes using MikroORM
  29. API with NestJS #65. Implementing soft deletes using MikroORM and filters
  30. API with NestJS #64. Transactions with PostgreSQL and MikroORM
  31. API with NestJS #63. Relationships with PostgreSQL and MikroORM
  32. API with NestJS #62. Introduction to MikroORM with PostgreSQL
  33. Creating recursive and dynamic forms with React Hook Form and TypeScript
  34. Dynamic and recursive forms with Formik and TypeScript
  35. JavaScript testing #12. Testing downloaded files and file inputs with Cypress
  36. JavaScript testing #11. Spying on functions. Pitfalls of not resetting Jest mocks
  37. JavaScript testing #10. Advanced mocking with Jest and React Testing Library
  38. Using AbortController to deal with race conditions in React
  39. JavaScript testing #9. Replacing Enzyme with React Testing Library
  40. The Referer header and the importance of the Referrer-Policy
  41. The danger of iframe clickjacking and how to deal with it
  42. Countering MIME sniffing with X-Content-Type-Options and Content-Type headers
  43. Fighting cross-site-scripting (XSS) with content security policy
  44. API with NestJS #61. Dealing with circular dependencies
  45. Serial type versus identity columns in PostgreSQL and TypeORM
  46. API with NestJS #60. The OpenAPI specification and Swagger
  47. Measuring performance with Web Vitals and React
  48. API with NestJS #59. Introduction to a monorepo with Lerna and Yarn workspaces
  49. Managing objects with unknown structures in TypeScript using index signatures
  50. API with NestJS #58. Using ETag to implement cache and save bandwidth
  51. Preventing man-in-the-middle attacks with Strict Transport Security
  52. Managing WebSockets with Redux Toolkit Query and TypeScript

2021 52

  1. Introduction to Redux Toolkit Query with TypeScript
  2. Redux middleware and how to use it with WebSockets
  3. API with NestJS #57. Composing classes with the mixin pattern
  4. Creating views with PostgreSQL and TypeORM
  5. Defining generated columns with PostgreSQL and TypeORM
  6. The basics of database normalization with TypeORM and PostgreSQL
  7. API with NestJS #56. Authorization with roles and claims
  8. API with NestJS #55. Uploading files to the server
  9. API with NestJS #54. Storing files inside a PostgreSQL database
  10. API with NestJS #53. Implementing soft deletes with PostgreSQL and TypeORM
  11. API with NestJS #52. Generating documentation with Compodoc and JSDoc
  12. API with NestJS #51. Health checks with Terminus and Datadog
  13. API with NestJS #50. Introduction to logging with the built-in logger and TypeORM
  14. API with NestJS #49. Updating with PUT and PATCH with MongoDB and Mongoose
  15. API with NestJS #48. Definining indexes with MongoDB and Mongoose
  16. API with NestJS #47. Implementing pagination with MongoDB and Mongoose
  17. API with NestJS #46. Managing transactions with MongoDB and Mongoose
  18. API with NestJS #45. Virtual properties with MongoDB and Mongoose
  19. API with NestJS #44. Implementing relationships with MongoDB
  20. API with NestJS #43. Introduction to MongoDB
  21. Defining constraints with PostgreSQL and TypeORM
  22. Getting geeky with Git #11. Keeping our Git history clean with fixup commits
  23. API with NestJS #42. Authenticating users with Google
  24. API with NestJS #41. Verifying phone numbers and sending SMS messages with Twilio
  25. API with NestJS #40. Confirming the email address
  26. API with NestJS #39. Reacting to Stripe events with webhooks
  27. API with NestJS #38. Setting up recurring payments via subscriptions with Stripe
  28. API with NestJS #37. Using Stripe to save credit cards for future use
  29. API with NestJS #36. Introduction to Stripe with React
  30. API with NestJS #35. Using server-side sessions instead of JSON Web Tokens
  31. Getting geeky with Git #10. The overview of Git hooks with Husky
  32. Getting geeky with Git #9. Understanding the revert feature
  33. Range types in PostgreSQL and TypeORM
  34. Uncaught errors in Node.js and the browser
  35. API with NestJS #34. Handling CPU-intensive tasks with queues
  36. A generic confirmation modal with Redux, Redux Toolkit, and TypeScript
  37. Comparing the HashRouter and the BrowserRouter in React applications
  38. Using React components written in JavaScript within TypeScript code
  39. API with NestJS #33. Managing PostgreSQL relationships with Prisma
  40. API with NestJS #32. Introduction to Prisma with PostgreSQL
  41. Time intervals with PostgreSQL and TypeORM
  42. Managing date and time with PostgreSQL and TypeORM
  43. API with NestJS #31. Two-factor authentication
  44. GraphQL on the client side with Apollo, React, and TypeScript
  45. API with NestJS #30. Scalar types in GraphQL
  46. API with NestJS #29. Real-time updates with GraphQL subscriptions
  47. API with NestJS #28. Dealing in the N + 1 problem in GraphQL
  48. API with NestJS #27. Introduction to GraphQL. Queries, mutations, and authentication
  49. API with NestJS #26. Real-time chat with WebSockets
  50. API with NestJS #25. Sending scheduled emails with cron and Nodemailer
  51. API with NestJS #24. Cache with Redis. Running the app in a Node.js cluster
  52. API with NestJS #23. Implementing in-memory cache to increase the performance

2020 52

  1. API with NestJS #22. Storing JSON with PostgreSQL and TypeORM
  2. Dealing with some CSRF attacks using the SameSite cookies
  3. Increasing security of Express applications with the Helmet middleware
  4. API with NestJS #21. An introduction to CQRS
  5. API with NestJS #20. Communicating with microservices using the gRPC framework
  6. API with NestJS #19. Using RabbitMQ to communicate with microservices
  7. API with NestJS #18. Exploring the idea of microservices
  8. API with NestJS #17. Offset and keyset pagination with PostgreSQL and TypeORM
  9. API with NestJS #16. Using the array data type with PostgreSQL and TypeORM
  10. API with NestJS #15. Defining transactions with PostgreSQL and TypeORM
  11. API with NestJS #14. Improving performance of our Postgres database with indexes
  12. Getting geeky with Git #8. Improving our debugging flow with Bisect and Worktree
  13. Building forms with React Hook Form and TypeScript
  14. React Context API with hooks and TypeScript
  15. API with NestJS #13. Implementing refresh tokens using JWT
  16. Getting geeky with Git #7. Cherry Pick with Reflog
  17. API with NestJS #12. Introduction to Elasticsearch
  18. Introduction to AWS Lambda. Managing a contact form with Simple Email Service
  19. Getting geeky with Git #6. Interactive Rebase
  20. Generating changelog automatically with Standard Version
  21. API with NestJS #11. Managing private files with Amazon S3
  22. API with NestJS #10. Uploading public files to Amazon S3
  23. Getting geeky with Git #5. Improving merge workflow with rebase
  24. Getting geeky with Git #4. Fast-forward merge and merge strategies
  25. API with NestJS #9. Testing services and controllers with integration tests
  26. API with NestJS #8. Writing unit tests
  27. Structural type system and polymorphism in TypeScript. Type guards with predicates
  28. API with NestJS #7. Creating relationships with Postgres and TypeORM
  29. API with NestJS #6. Looking into dependency injection and modules
  30. API with NestJS #5. Serializing the response with interceptors
  31. API with NestJS #4. Error handling and data validation
  32. API with NestJS #3. Authenticating users with bcrypt, Passport, JWT, and cookies
  33. API with NestJS #2. Setting up a PostgreSQL database with TypeORM
  34. API with NestJS #1. Controllers, routing and the module structure
  35. Getting geeky with Git #3. The branch is a reference
  36. TypeScript Express tutorial #15. Using PUT vs PATCH in MongoDB with Mongoose
  37. TypeScript Express tutorial #14. Code optimization with Mongoose Lean Queries
  38. Getting geeky with Git #2. Building blocks of a commit
  39. Getting geeky with Git #1. Remotes and upstream branches
  40. Building forms using Formik with the React Hooks API and TypeScript
  41. What’s the deal with immutability in JavaScript?
  42. TypeScript type inference with const assertions and the infer keyword
  43. Functional React components with generic props in TypeScript
  44. Race conditions in React and beyond. A race condition guard with TypeScript
  45. More advanced types with TypeScript generics
  46. TypeScript Generics. Discussing naming conventions
  47. TypeScript Express tutorial #13. Using Mongoose virtuals to populate documents
  48. Applying SOLID principles to your TypeScript code
  49. Understanding any and unknown in TypeScript. Difference between never and void
  50. JavaScript design patterns #5. The Observer pattern with TypeScript
  51. JavaScript testing #8. Integrating Cypress with Cucumber and Gherkin
  52. JavaScript testing #7. Diving deeper into commands and selectors in Cypress

2019 52

  1. JavaScript testing #6. Introduction to End-to-End testing with Cypress
  2. JavaScript design patterns #4. Decorators and their implementation in TypeScript
  3. JavaScript testing #5. Testing hooks with react-hooks-testing-library and Redux
  4. JavaScript design patterns #3. The Facade pattern and applying it to React Hooks
  5. JavaScript design patterns #2. Factories and their implementation in TypeScript
  6. Exploring the caching in the browser. Clarifying the cache-control header
  7. Understanding the useEffect hook in React. Designing custom hooks
  8. JavaScript design patterns #1. Singleton and the Module
  9. Current state of the Concurrent Mode in React
  10. Writing React forms with Formik. Validating data using Yup
  11. Understanding JavaScript Proxy. Preserving backward compatibility in a library
  12. TypeScript Express tutorial #12. Creating a CI/CD pipeline with Travis and Heroku
  13. Measuring the quality of the User Experience with the User Timing API
  14. Improving our code with pure functions
  15. Regex course – part four. Avoiding catastrophic backtracking using lookahead
  16. Bug-proofing our application with Error Boundaries and the Strict Mode
  17. Installing a Progressive Web App. Writing a Web App Manifest
  18. Internationalization API built into your browser
  19. Introduction to Data-Driven Documents. The basics of D3.js
  20. Making the job of garbage collector easier by replacing the Map with the WeakMap
  21. The process of rendering a page. Increasing the performance by reducing browser reflow
  22. Improving our performance, accessibility, and SEO with Lighthouse audits
  23. Creating a Material Design slider with Web Components. The Shadow DOM concept
  24. TypeScript Express tutorial #11. Node.js Two-Factor Authentication
  25. Node.js TypeScript #15. Benefits of the HTTP/2 protocol
  26. Algorithm React uses to update the view. Increasing the performance of a component
  27. What are symbols and how they can be useful to you
  28. Creating a simple drawing app using canvas. Saving and loading images
  29. Using Push Notifications with Service Workers and Node.js
  30. The basics of Service Workers: how should our application behave when offline?
  31. React SSR with Next.js #2. Prefetching the data with getInitialProps
  32. React SSR with Next.js #1. Concept of Server Side Rendering & basics of routing
  33. Node.js TypeScript #14. Measuring processes & worker threads with Performance Hooks
  34. Node.js TypeScript #13. Sending data between Worker Threads
  35. Node.js TypeScript #12. Introduction to Worker Threads with TypeScript
  36. Node.js TypeScript #11. Harnessing the power of many processes using a cluster
  37. Node.js TypeScript #10. Is Node.js single-threaded? Creating child processes
  38. Creating malicious packages and dealing with them using npm audit
  39. Node.js TypeScript #9. The Event Loop in Node.js
  40. Node.js TypeScript #8. Implementing HTTPS with our own OpenSSL certificate
  41. Node.js TypeScript #7. Creating a server and receiving requests
  42. Node.js TypeScript #6. Sending HTTP requests, understanding multipart/form-data
  43. Node.js TypeScript #5. Writable streams, pipes, and the process streams
  44. Node.js TypeScript #4. Paused and flowing modes of a readable stream
  45. Node.js TypeScript #3. Explaining the Buffer
  46. Node.js TypeScript #2. The synchronous nature of the EventEmitter
  47. Node.js TypeScript #1. Modules, process arguments, basics of the File System
  48. TypeScript Express tutorial #10. Testing Express applications
  49. TypeScript Express tutorial #9. The basics of migrations using TypeORM and Postgres
  50. TypeScript Express tutorial #8. Types of relationships with Postgres and TypeORM
  51. TypeScript Express tutorial #7. Relational databases with Postgres and TypeORM
  52. TypeScript Express tutorial #6. Basic data processing with MongoDB aggregation

2018 49

  1. TypeScript Express tutorial #5. MongoDB relationships between documents
  2. TypeScript Express tutorial #4. Registering users and authenticating with JWT
  3. TypeScript Express tutorial #3. Error handling and validating incoming data
  4. TypeScript Express tutorial #2. MongoDB, models and environment variables
  5. TypeScript Express tutorial #1. Middleware, routing, and controllers
  6. Using recursion to traverse data structures. Execution context and the call stack
  7. Is eval evil? Just In Time (JIT) compiling
  8. Handling errors in JavaScript with try…catch and finally
  9. Cross-Origin Resource Sharing. Avoiding Access-Control-Allow-Origin CORS error
  10. Comparing working with JSON using the XHR and the Fetch API
  11. Concatenating strings with template literals. Tagged templates
  12. Explaining the JavaScript array. Sparse and dense arrays.
  13. Fundamentals of storing data in the browser with IndexedDB
  14. Object property descriptors. Getters and setters
  15. Introduction to WebSockets. Creating a Node.js server and using WebSocket API in the browser
  16. JavaScript testing #4. Mocking API calls and simulating React components interactions
  17. JavaScript testing #3. Testing props, the mount function and snapshot tests.
  18. JavaScript testing #2. Introducing Enzyme and testing React components
  19. JavaScript testing #1. Explaining types of tests. Basics of unit testing with Jest
  20. Webpack 4 course – part eight. Dynamic imports with prefetch and preload
  21. Webpack 4 course – part seven. Decreasing the bundle size with tree shaking
  22. Webpack 4 course – part six. Increasing development experience
  23. Webpack 4 course – part five. Built-in optimization for production
  24. Webpack 4 course – part three. Working with plugins
  25. Webpack 4 course – part two. Using loaders to handle scss, image files and transpile JS
  26. Webpack 4 course – part one. Entry, output and ES6 modules
  27. Diving deeper into the Event object. Creating and using custom events
  28. Understanding events. Bubbling and capturing
  29. Understanding memory management and the garbage collector.
  30. Cookies: explaining document.cookie and the Set-Cookie header.
  31. Web Storage API: localStorage and sessionStorage
  32. Webpack 4 course – part four. Code splitting with SplitChunksPlugin
  33. Diving into functions. Passing by reference is a lie!
  34. Keeping your dependencies in order when using NPM.
  35. Regex course – part three. Grouping and using ES6 features.
  36. Regex course – part two. Writing more elegant and precise patterns.
  37. Regex course – part one. Basic concepts.
  38. Demystifying generators. Implementing async/await.
  39. Explaining async/await. Creating dummy promises.
  40. Explaining promises and callbacks while implementing a sorting algorithm.
  41. [1] + [2] – [3] === 9!? Looking into assembly code of coercion.
  42. Scopes in JavaScript. Different types of variable declarations.
  43. Prototype. The big bro behind ES6 class.
  44. Defining the undefined. A try/catch trick.
  45. Priority of CSS declarations. A smart way to avoid !important
  46. What is “this”? Arrow functions.
  47. Current state of compiling TypeScript to WebAssembly
  48. Cloning objects in JavaScript. Looking under the hood of reference and primitive types.
  49. When async is just not enough. An introduction to multithreading in the browser