Skip to content

Instantly share code, notes, and snippets.

View DoctorDerek's full-sized avatar
☀️
https://linkedin.com/in/derek-austin Read my blog https://DoctorDerek.medium.com

Dr. Derek Austin DoctorDerek

☀️
https://linkedin.com/in/derek-austin Read my blog https://DoctorDerek.medium.com
View GitHub Profile
@DoctorDerek
DoctorDerek / import-sorter.json
Created August 23, 2021 03:23
import-sorter.json Prettier defaults -- How to Sort Imports in TypeScript Automatically in VS Code https://medium.com/p/f4fe4e499bb1
{
"generalConfiguration.sortOnBeforeSave": true,
"importStringConfiguration.maximumNumberOfImportExpressionsPerLine.type": "newLineEachExpressionAfterCountLimitExceptIfOnlyOne",
"importStringConfiguration.maximumNumberOfImportExpressionsPerLine.count": 80,
"importStringConfiguration.tabSize": 2,
"importStringConfiguration.quoteMark": "double"
}
@DoctorDerek
DoctorDerek / TypeScript imports -- after -- sorted.tsx.jsx
Created August 23, 2021 02:52
How to Sort Imports in TypeScript Automatically in VS Code https://medium.com/p/f4fe4e499bb1
import { MDXRemote } from "next-mdx-remote"
import ImageFixed from "next/image"
import { Fragment } from "react"
import Image from "@/components/CustomImage"
import HeadingsH2 from "@/components/HeadingsH2"
import HoverBullet from "@/components/HoverBullet"
import MDXComponents from "@/components/MDXComponents"
import { PageSeo } from "@/components/SEO"
import TitleJSXWithOptionalHighlighting from "@/components/TitleJSXWithOptionalHighlighting"
@DoctorDerek
DoctorDerek / TypeScript imports -- before -- unsorted.tsx.jsx
Created August 23, 2021 02:51
How to Sort Imports in TypeScript Automatically in VS Code https://medium.com/p/f4fe4e499bb1
import { PageSeo } from "@/components/SEO"
import siteMetadata from "@/data/siteMetadata.json"
import Image from "@/components/CustomImage"
import { MDXRemote } from "next-mdx-remote"
import MDXComponents from "@/components/MDXComponents"
import { Fragment } from "react"
import ImageFixed from "next/image"
import { BUTTON, DIVIDER } from "@/components/UTILS"
import TitleJSXWithOptionalHighlighting from "@/components/TitleJSXWithOptionalHighlighting"
import HeadingsH2 from "@/components/HeadingsH2"
const size = 5
<SocialSvg className={`fill-current h-${size} w-${size} m-2`} />
import Email from "./email.svg"
import Medium from "./medium.svg"
import Linkedin from "./linkedin.svg"
import Twitter from "./twitter.svg"
// Icons taken from: https://simpleicons.org/
const components = {
email: Email,
medium: Medium,
// ❌ import error due to leading underscore:
import _Document from "@/src/pages/_document"
// ✅ SCREAMING_SNAKE_CASE
import NEXT_DOCUMENT from "@/src/pages/_document"
// ✅ PascalCase
import NextDocument from "@/src/pages/_document"
@DoctorDerek
DoctorDerek / Kent C. Dodd's .filter() Trick Will Change How You Use JavaScript.js
Created June 28, 2021 20:41
This one-liner uses the Boolean constructor to magically remove all falsy values from an array ✨ https://medium.com/p/87b5112f9f6d
console.log([undefined,"👋",null,"","🌎",0].filter(Boolean)) // ["👋","🌎"]
console.log(["👋",0,"🌎"].filter((item)=>Boolean(item))) // ["👋","🌎"]
@DoctorDerek
DoctorDerek / [path]\[slug].tsx
Last active June 28, 2021 20:36
Real world use case for .filter(Boolean) by @DoctorDerek https://medium.com/p/87b5112f9f6d
export async function getStaticPaths() {
// search 1 level recursively in @/data/
const dataRegExpMarkdown = /(.+)?\\(.+)?\\(.+)?\.md/
// ["data\\hosting\\packages.md", "data", "hosting", "packages"]
const paths: any[] = getFilesRecursively("data")
.map((path: string) => dataRegExpMarkdown.exec(path))
.filter((item: any[]) => Boolean(item)) // remove falsy
.map((item: any[]) => ({
params: {
path: item[2], // "hosting" (supports 1 directory)
{"version":1,"resource":"file:///c%3A/dev/learn-penguin/pages/level/%5Bworld%5D/%5Bid%5D.page.tsx","entries":[{"id":"9tdt.tsx","timestamp":1653504720885},{"id":"jDGs.tsx","timestamp":1653504732111},{"id":"MBQa.tsx","timestamp":1653504747566},{"id":"GQjv.tsx","timestamp":1653504823082},{"id":"Lw3z.tsx","source":"undoRedo.source","timestamp":1653504827867},{"id":"r3mT.tsx","timestamp":1653504833056},{"id":"j0mh.tsx","source":"undoRedo.source","timestamp":1653504838631},{"id":"FV1x.tsx","timestamp":1653504845182},{"id":"NSBn.tsx","timestamp":1653504958300},{"id":"eXJ4.tsx","timestamp":1653504987900},{"id":"cQZy.tsx","source":"Workspace Edit","timestamp":1653516573565},{"id":"XC0w.tsx","timestamp":1653516595199},{"id":"5sZe.tsx","source":"Workspace Edit","timestamp":1653516620077},{"id":"Ndpg.tsx","timestamp":1653516622869},{"id":"QXsn.tsx","timestamp":1653516925743},{"id":"8BEe.tsx","timestamp":1653516937811},{"id":"w2EA.tsx","timestamp":1653516961799},{"id":"vkkV.tsx","timestamp":1653517188004},{"id":"gvlE.tsx"
Array size: 10 items 1,000 items 100,000 items 1,000,000 items
.includes() Fastest Fastest 47.07% slower 46.77% slower
.filter() 97.16% slower 99.99% slower 97.69% slower 97.66% slower
.some() 84.81% slower 99.98% slower 95.11% slower 95.01% slower
for loop 84.2% slower 99.62% slower Fastest Fastest
.find() 85.74% slower 99.98% slower 95.19% slower 95.06% slower