{"version":3,"file":"static/chunks/887-9403f4f1b3b3269a.js","mappings":"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","sources":["webpack://_N_E//opt/buildhome/repo/layouts|sync|/^\\.\\/.*$/","webpack://_N_E/./components/Image.tsx","webpack://_N_E/./lib/utils/contentlayer.ts","webpack://_N_E/./components/TOCInline.tsx","webpack://_N_E/./components/Pre.tsx","webpack://_N_E/./components/NewsletterForm.tsx","webpack://_N_E/./components/MDXComponents.tsx","webpack://_N_E/./components/Video.tsx","webpack://_N_E/./components/PageTitle.tsx","webpack://_N_E/./components/SEO.tsx","webpack://_N_E/./components/Tag.tsx","webpack://_N_E/./layouts/AuthorLayout.tsx","webpack://_N_E/./components/Pagination.tsx","webpack://_N_E/./layouts/ListLayout.tsx","webpack://_N_E/./layouts/PostLayout.tsx","webpack://_N_E/./components/comments/index.tsx","webpack://_N_E/./components/ScrollTopAndComment.tsx","webpack://_N_E/./layouts/PostSimple.tsx","webpack://_N_E/./lib/utils/formatDate.ts","webpack://_N_E/./lib/utils/kebabCase.ts"],"sourcesContent":["var map = {\n\t\"./AuthorLayout\": 1322,\n\t\"./AuthorLayout.tsx\": 1322,\n\t\"./ListLayout\": 5717,\n\t\"./ListLayout.tsx\": 5717,\n\t\"./PostLayout\": 3605,\n\t\"./PostLayout.tsx\": 3605,\n\t\"./PostSimple\": 291,\n\t\"./PostSimple.tsx\": 291\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 9618;","import NextImage, { ImageLoaderProps, ImageProps } from 'next/image'\n\nexport const cfLoader = ({ src, width, quality }: Omit) => {\n const params = `width=${width},quality=${quality || 75},format=auto`\n let origin\n if (typeof window != 'undefined') {\n origin = window.location.origin\n } else {\n origin = 'https://staging.edgeseo.pro'\n }\n if (origin.includes('localhost')) {\n return `${src}?${params}`\n } else {\n return `${origin}/cdn-cgi/image/${params}/${origin}${src}`\n }\n}\n\nconst Image = ({ caption, ...rest }: { caption?: string } & ImageProps) => (\n
\n \n {caption &&
{caption}
}\n
\n)\n\nexport default Image\n","import kebabCase from '@/lib/utils/kebabCase'\nimport type { Blog, DocumentTypes } from 'contentlayer/generated'\n\nexport function dateSortDesc(a: string, b: string) {\n if (a > b) return -1\n if (a < b) return 1\n return 0\n}\n\nexport function sortedBlogPost(allBlogs: Blog[]) {\n return allBlogs.sort((a, b) => dateSortDesc(a.date, b.date))\n}\n\ntype ConvertUndefined = OrNull<{\n [K in keyof T as undefined extends T[K] ? K : never]-?: T[K]\n}>\ntype OrNull = { [K in keyof T]: Exclude | null }\ntype PickRequired = {\n [K in keyof T as undefined extends T[K] ? never : K]: T[K]\n}\ntype ConvertPick = ConvertUndefined & PickRequired\n\n/**\n *\n * https://github.com/contentlayerdev/contentlayer/issues/24\n */\nexport const pick = (\n obj: Obj,\n keys: Keys[]\n): ConvertPick<{ [K in Keys]: Obj[K] }> => {\n return keys.reduce((acc, key) => {\n acc[key] = obj[key] ?? null\n return acc\n }, {} as any)\n}\n\nexport const omit = (obj: Obj, keys: Keys[]): Omit => {\n const result = Object.assign({}, obj)\n keys.forEach((key) => {\n delete result[key]\n })\n return result\n}\n\nexport type CoreContent = Omit\n\nexport function coreContent(content: T) {\n return omit(content, ['body', '_raw', '_id'])\n}\n\nexport function allCoreContent(contents: T[]) {\n return contents.map((c) => coreContent(c))\n}\n\n// TODO: refactor into contentlayer once compute over all docs is enabled\nexport async function getAllTags(allBlogs: Blog[]) {\n const tagCount: Record = {}\n // Iterate through each post, putting all found tags into `tags`\n allBlogs.forEach((file) => {\n if (file.tags && file.draft !== true) {\n file.tags.forEach((tag) => {\n const formattedTag = kebabCase(tag)\n if (formattedTag in tagCount) {\n tagCount[formattedTag] += 1\n } else {\n tagCount[formattedTag] = 1\n }\n })\n }\n })\n\n return tagCount\n}\n","import { Toc } from 'types/Toc'\n\ninterface TOCInlineProps {\n toc: Toc\n indentDepth?: number\n fromHeading?: number\n toHeading?: number\n asDisclosure?: boolean\n exclude?: string | string[]\n}\n\n/**\n * Generates an inline table of contents\n * Exclude titles matching this string (new RegExp('^(' + string + ')$', 'i')).\n * If an array is passed the array gets joined with a pipe (new RegExp('^(' + array.join('|') + ')$', 'i')).\n *\n * @param {TOCInlineProps} {\n * toc,\n * indentDepth = 3,\n * fromHeading = 1,\n * toHeading = 6,\n * asDisclosure = false,\n * exclude = '',\n * }\n *\n */\nconst TOCInline = ({\n toc,\n indentDepth = 3,\n fromHeading = 1,\n toHeading = 6,\n asDisclosure = false,\n exclude = '',\n}: TOCInlineProps) => {\n const re = Array.isArray(exclude)\n ? new RegExp('^(' + exclude.join('|') + ')$', 'i')\n : new RegExp('^(' + exclude + ')$', 'i')\n\n const filteredToc = toc.filter(\n (heading) =>\n heading.depth >= fromHeading && heading.depth <= toHeading && !re.test(heading.value)\n )\n\n const tocList = (\n
    \n {filteredToc.map((heading) => (\n
  • = indentDepth && 'ml-6'}`}>\n {heading.value}\n
  • \n ))}\n
\n )\n\n return (\n <>\n {asDisclosure ? (\n
\n Table of Contents\n
{tocList}
\n
\n ) : (\n tocList\n )}\n \n )\n}\n\nexport default TOCInline\n","import { useState, useRef, ReactNode } from 'react'\n\ninterface Props {\n children: ReactNode\n}\n\nconst Pre = ({ children }: Props) => {\n const textInput = useRef(null)\n const [hovered, setHovered] = useState(false)\n const [copied, setCopied] = useState(false)\n\n const onEnter = () => {\n setHovered(true)\n }\n const onExit = () => {\n setHovered(false)\n setCopied(false)\n }\n const onCopy = () => {\n setCopied(true)\n navigator.clipboard.writeText(textInput.current.textContent)\n setTimeout(() => {\n setCopied(false)\n }, 2000)\n }\n\n return (\n
\n {hovered && (\n \n \n {copied ? (\n <>\n \n \n ) : (\n <>\n \n \n )}\n \n \n )}\n\n
{children}
\n
\n )\n}\n\nexport default Pre\n","import React, { useRef, useState } from 'react'\n\nimport siteMetadata from '@/data/siteMetadata'\n\nconst NewsletterForm = ({ title = 'Subscribe to the newsletter' }) => {\n const inputEl = useRef(null)\n const [error, setError] = useState(false)\n const [message, setMessage] = useState('')\n const [subscribed, setSubscribed] = useState(false)\n\n const subscribe = async (e: React.FormEvent) => {\n e.preventDefault()\n\n const res = await fetch(`/api/${siteMetadata.newsletter.provider}`, {\n body: JSON.stringify({\n email: inputEl.current.value,\n }),\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'POST',\n })\n\n const { error } = await res.json()\n if (error) {\n setError(true)\n setMessage('Your e-mail address is invalid or you are already subscribed!')\n return\n }\n\n inputEl.current.value = ''\n setError(false)\n setSubscribed(true)\n setMessage('Successfully! 🎉 You are now subscribed.')\n }\n\n return (\n
\n
{title}
\n
\n
\n \n \n
\n
\n \n {subscribed ? 'Thank you!' : 'Sign up'}\n \n
\n
\n {error && (\n
{message}
\n )}\n
\n )\n}\n\nexport default NewsletterForm\n\nexport const BlogNewsletterForm = ({ title }) => (\n
\n
\n \n
\n
\n)\n","/* eslint-disable react/display-name */\nimport React from 'react'\nimport { useMDXComponent } from 'next-contentlayer/hooks'\nimport { ComponentMap } from 'mdx-bundler/client'\nimport { coreContent } from '@/lib/utils/contentlayer'\nimport Image from './Image'\nimport { Video } from './Video'\nimport CustomLink from './Link'\nimport TOCInline from './TOCInline'\nimport Pre from './Pre'\nimport { BlogNewsletterForm } from './NewsletterForm'\nimport type { Blog, Authors } from 'contentlayer/generated'\n\ninterface MDXLayout {\n layout: string\n content: Blog | Authors\n [key: string]: unknown\n}\n\ninterface Wrapper {\n layout: string\n [key: string]: unknown\n}\n\nconst Wrapper = ({ layout, content, ...rest }: MDXLayout) => {\n const Layout = require(`../layouts/${layout}`).default\n return \n}\n\nexport const MDXComponents: ComponentMap = {\n Image,\n TOCInline,\n a: CustomLink,\n pre: Pre,\n wrapper: Wrapper,\n Video,\n BlogNewsletterForm,\n}\n\nexport const MDXLayoutRenderer = ({ layout, content, ...rest }: MDXLayout) => {\n const MDXLayout = useMDXComponent(content.body.code)\n const mainContent = coreContent(content)\n\n return \n}\n","/* eslint-disable @next/next/no-img-element */\nimport { PlayIcon } from '@heroicons/react/solid'\nimport React, { useRef, useState } from 'react'\nimport { cfLoader } from './Image'\n\nexport const Video: React.FC<{ src: string; alt: string; caption?: React.ReactNode }> = ({\n src,\n caption,\n alt,\n}) => {\n const video = useRef(null)\n const [isPlaying, setIsPlaying] = useState(false)\n\n const handleClick = () => {\n if (video.current) {\n if (video.current.paused) {\n video.current.play()\n } else {\n video.current.pause()\n }\n }\n }\n\n const handleVideoRef = (el) => {\n if (el) {\n video.current = el\n el.addEventListener('play', () => setIsPlaying(true))\n el.addEventListener('pause', () => setIsPlaying(false))\n }\n }\n\n return (\n
\n \n \n \n
\n {\n if (el) {\n // when page is rendered with next router, the image for some bizarre reason has width = 0\n // so let's override it here\n el.setAttribute('width', '100%')\n const resizeObserver = new ResizeObserver((entries) => {\n for (const entry of entries) {\n let width\n if (entry.contentBoxSize && entry.contentBoxSize.length > 0) {\n width = entry.contentBoxSize[0].inlineSize\n } else {\n width = entry.contentRect.width\n }\n const widths = [672, 762]\n const targetWidth = widths.find((w) => w > width) || widths.at(-1)\n el.src = cfLoader({ src: `${src}.png`, width: 762 })\n el.srcset = `${cfLoader({\n src: `${src}.png`,\n width: targetWidth,\n })} 1x, ${cfLoader({\n src: `${src}.png`,\n width: targetWidth * 2,\n })} 2x`\n }\n })\n\n resizeObserver.observe(el)\n }\n }}\n width=\"100%\"\n alt={alt}\n className=\"aspect-video\"\n />\n
\n \n \n \n \n {caption &&
{caption}
}\n
\n )\n}\n","import { ReactNode } from 'react'\n\ninterface Props {\n children: ReactNode\n}\n\nexport default function PageTitle({ children }: Props) {\n return (\n

\n {children}\n

\n )\n}\n","import Head from 'next/head'\nimport { useRouter } from 'next/router'\nimport siteMetadata from '@/data/siteMetadata'\nimport { CoreContent } from '@/lib/utils/contentlayer'\nimport type { Blog, Authors } from 'contentlayer/generated'\ninterface CommonSEOProps {\n title: string\n description: string\n ogType: string\n ogImage:\n | string\n | {\n '@type': string\n url: string\n }[]\n twImage: string\n canonicalUrl?: string\n}\n\nconst CommonSEO = ({\n title,\n description,\n ogType,\n ogImage,\n twImage,\n canonicalUrl,\n}: CommonSEOProps) => {\n const router = useRouter()\n return (\n \n {title}\n \n \n \n \n \n \n \n {Array.isArray(ogImage) ? (\n ogImage.map(({ url }) => )\n ) : (\n \n )}\n \n \n \n \n \n \n \n )\n}\n\ninterface PageSEOProps {\n title: string\n description: string\n}\n\nexport const PageSEO = ({ title, description }: PageSEOProps) => {\n const ogImageUrl = siteMetadata.siteUrl + siteMetadata.socialBanner\n const twImageUrl = siteMetadata.siteUrl + siteMetadata.socialBanner\n return (\n \n )\n}\n\nexport const TagSEO = ({ title, description }: PageSEOProps) => {\n const ogImageUrl = siteMetadata.siteUrl + siteMetadata.socialBanner\n const twImageUrl = siteMetadata.siteUrl + siteMetadata.socialBanner\n const router = useRouter()\n return (\n <>\n \n \n \n \n \n )\n}\n\ninterface BlogSeoProps extends CoreContent {\n authorDetails?: CoreContent[]\n url: string\n}\n\nexport const BlogSEO = ({\n authorDetails,\n title,\n summary,\n date,\n lastmod,\n url,\n images = [],\n canonicalUrl,\n}: BlogSeoProps) => {\n const publishedAt = new Date(date).toISOString()\n const modifiedAt = new Date(lastmod || date).toISOString()\n const imagesArr =\n images.length === 0\n ? [siteMetadata.socialBanner]\n : typeof images === 'string'\n ? [images]\n : images\n\n const featuredImages = imagesArr.map((img) => {\n return {\n '@type': 'ImageObject',\n url: `${siteMetadata.siteUrl}${img}`,\n }\n })\n\n let authorList\n if (authorDetails) {\n authorList = authorDetails.map((author) => {\n return {\n '@type': 'Person',\n name: author.name,\n }\n })\n } else {\n authorList = {\n '@type': 'Person',\n name: siteMetadata.author,\n }\n }\n\n const structuredData = {\n '@context': 'https://schema.org',\n '@type': 'Article',\n mainEntityOfPage: {\n '@type': 'WebPage',\n '@id': url,\n },\n headline: title,\n image: featuredImages,\n datePublished: publishedAt,\n dateModified: modifiedAt,\n author: authorList,\n publisher: {\n '@type': 'Organization',\n name: siteMetadata.author,\n logo: {\n '@type': 'ImageObject',\n url: `${siteMetadata.siteUrl}${siteMetadata.siteLogo}`,\n },\n },\n description: summary,\n }\n\n const twImageUrl = featuredImages[0].url\n\n return (\n <>\n \n \n {date && }\n {lastmod && }\n \n \n \n )\n}\n","import Link from 'next/link'\nimport kebabCase from '@/lib/utils/kebabCase'\n\ninterface Props {\n text: string\n}\n\nconst Tag = ({ text }: Props) => {\n return (\n \n \n {text.split(' ').join('-')}\n \n \n )\n}\n\nexport default Tag\n","import SocialIcon from '@/components/social-icons'\nimport Image from '@/components/Image'\nimport { PageSEO } from '@/components/SEO'\nimport { ReactNode } from 'react'\nimport type { Authors } from 'contentlayer/generated'\n\ninterface Props {\n children: ReactNode\n content: Omit\n}\n\nexport default function AuthorLayout({ children, content }: Props) {\n const { name, avatar, occupation, company, email, twitter, linkedin, github } = content\n\n return (\n <>\n \n
\n
\n

\n About\n

\n
\n
\n
\n \n

{name}

\n
{occupation}
\n
{company}
\n
\n \n \n \n \n
\n
\n
{children}
\n
\n
\n \n )\n}\n","import Link from '@/components/Link'\n\ninterface Props {\n totalPages: number\n currentPage: number\n}\n\nexport default function Pagination({ totalPages, currentPage }: Props) {\n const prevPage = currentPage - 1 > 0\n const nextPage = currentPage + 1 <= totalPages\n\n return (\n
\n \n
\n )\n}\n","import Link from '@/components/Link'\nimport Tag from '@/components/Tag'\nimport { ComponentProps, useState } from 'react'\nimport Pagination from '@/components/Pagination'\nimport formatDate from '@/lib/utils/formatDate'\nimport { CoreContent } from '@/lib/utils/contentlayer'\nimport type { Blog } from 'contentlayer/generated'\n\ninterface Props {\n posts: CoreContent[]\n title: string\n initialDisplayPosts?: CoreContent[]\n pagination?: ComponentProps\n}\n\nexport default function ListLayout({ posts, title, initialDisplayPosts = [], pagination }: Props) {\n const [searchValue, setSearchValue] = useState('')\n const filteredBlogPosts = posts.filter((post) => {\n const searchContent = post.title + post.summary + post.tags.join(' ')\n return searchContent.toLowerCase().includes(searchValue.toLowerCase())\n })\n\n // If initialDisplayPosts exist, display it if no searchValue is specified\n const displayPosts =\n initialDisplayPosts.length > 0 && !searchValue ? initialDisplayPosts : filteredBlogPosts\n\n return (\n <>\n
\n
\n

\n {title}\n

\n
\n setSearchValue(e.target.value)}\n placeholder=\"Search articles\"\n className=\"block w-full rounded-md border border-gray-300 bg-white px-4 py-2 text-gray-900 focus:border-primary-500 focus:ring-primary-500 dark:border-gray-900 dark:bg-gray-800 dark:text-gray-100\"\n />\n \n \n \n
\n
\n
    \n {!filteredBlogPosts.length && 'No posts found.'}\n {displayPosts.map((post) => {\n const { slug, date, title, summary, tags } = post\n return (\n
  • \n
    \n
    \n
    Published on
    \n
    \n \n
    \n
    \n
    \n
    \n

    \n \n {title}\n \n

    \n
    \n {tags.map((tag) => (\n \n ))}\n
    \n
    \n
    \n {summary}\n
    \n
    \n
    \n
  • \n )\n })}\n
\n
\n {pagination && pagination.totalPages > 1 && !searchValue && (\n \n )}\n \n )\n}\n","import Link from '@/components/Link'\nimport PageTitle from '@/components/PageTitle'\nimport SectionContainer from '@/components/SectionContainer'\nimport { BlogSEO } from '@/components/SEO'\nimport Image from '@/components/Image'\nimport Tag from '@/components/Tag'\nimport siteMetadata from '@/data/siteMetadata'\nimport Comments from '@/components/comments'\nimport ScrollTopAndComment from '@/components/ScrollTopAndComment'\nimport { CoreContent } from '@/lib/utils/contentlayer'\nimport { ReactNode } from 'react'\nimport type { Blog, Authors } from 'contentlayer/generated'\n\nconst editUrl = (slug) => `${siteMetadata.siteRepo}/blob/master/data/blog/${slug}`\nconst discussUrl = (slug) =>\n `https://mobile.twitter.com/search?q=${encodeURIComponent(\n `${siteMetadata.siteUrl}/blog/${slug}`\n )}`\n\nconst postDateTemplate: Intl.DateTimeFormatOptions = {\n weekday: 'long',\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n}\n\ninterface Props {\n content: CoreContent\n authorDetails: CoreContent[]\n next?: { slug: string; title: string }\n prev?: { slug: string; title: string }\n children: ReactNode\n}\n\nexport default function PostLayout({ content, authorDetails, next, prev, children }: Props) {\n const { slug, date, title, tags } = content\n\n return (\n
\n \n
\n
\n
\n
\n
\n
\n
Published on
\n
\n \n
\n
\n
\n
\n {title}\n
\n
\n
\n \n
\n
Authors
\n
\n
    \n {authorDetails.map((author) => (\n
  • \n {author.avatar && (\n \n )}\n
    \n
    Name
    \n
    {author.name}
    \n
    Twitter
    \n
    \n {author.twitter && (\n \n {author.twitter.replace('https://twitter.com/', '@')}\n \n )}\n
    \n
    \n
  • \n ))}\n
\n
\n
\n
\n
{children}
\n
\n Enjoyed the read? Join our community to stay on top of the game!\n
\n
\n
\n
\n \n
\n \n \n
\n\n
\n \n \n
\n\n
\n \n Join Edge SEO community\n \n
\n \n
\n
\n
\n

\n We’ll send you the link to the Slack workspace.\n

\n
\n
\n
\n
\n
\n {tags && (\n
\n

\n Tags\n

\n
\n {tags.map((tag) => (\n \n ))}\n
\n
\n )}\n {(next || prev) && (\n
\n {prev && (\n
\n

\n Previous Article\n

\n
\n {prev.title}\n
\n
\n )}\n {next && (\n
\n

\n Next Article\n

\n
\n {next.title}\n
\n
\n )}\n
\n )}\n
\n
\n \n ← Back to the blog\n \n
\n
\n
\n
\n \n \n )\n}\n","import siteMetadata from '@/data/siteMetadata'\nimport dynamic from 'next/dynamic'\nimport { CoreContent } from '@/lib/utils/contentlayer'\nimport type { Blog } from 'contentlayer/generated'\n\ninterface Props {\n frontMatter: CoreContent\n}\n\nconst UtterancesComponent = dynamic(\n () => {\n return import('@/components/comments/Utterances')\n },\n { ssr: false }\n)\nconst GiscusComponent = dynamic(\n () => {\n return import('@/components/comments/Giscus')\n },\n { ssr: false }\n)\nconst DisqusComponent = dynamic(\n () => {\n return import('@/components/comments/Disqus')\n },\n { ssr: false }\n)\n\nconst Comments = ({ frontMatter }: Props) => {\n const comment = siteMetadata?.comment\n if (!comment || Object.keys(comment).length === 0) return <>\n return (\n
\n {siteMetadata.comment && siteMetadata.comment.provider === 'giscus' && }\n {siteMetadata.comment && siteMetadata.comment.provider === 'utterances' && (\n \n )}\n {siteMetadata.comment && siteMetadata.comment.provider === 'disqus' && (\n \n )}\n
\n )\n}\n\nexport default Comments\n","import { useEffect, useState } from 'react'\n\nconst ScrollTopAndComment = () => {\n const [show, setShow] = useState(false)\n\n useEffect(() => {\n const handleWindowScroll = () => {\n if (window.scrollY > 50) setShow(true)\n else setShow(false)\n }\n\n window.addEventListener('scroll', handleWindowScroll)\n return () => window.removeEventListener('scroll', handleWindowScroll)\n }, [])\n\n const handleScrollTop = () => {\n window.scrollTo({ top: 0 })\n }\n const handleScrollToComment = () => {\n document.getElementById('comment').scrollIntoView()\n }\n return (\n