From b9271d90da937f000d80b2dc434d1a7b572b507f Mon Sep 17 00:00:00 2001 From: yukyu30 Date: Sat, 30 Apr 2022 22:31:18 +0900 Subject: [PATCH] =?UTF-8?q?update:=20Pertterrc=E3=82=92=E5=B0=8E=E5=85=A5?= =?UTF-8?q?=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .eslintrc.js | 3 + .eslintrc.json | 3 - .prettierrc.js | 5 ++ package.json | 9 ++- src/.prettierrc | 0 src/builder/posts.ts | 79 +++++++++--------- src/components/ContentWrapper.tsx | 14 ++-- src/components/LinkBackHome.tsx | 4 +- src/components/PageSEO.tsx | 44 ++++------ src/components/PostList.tsx | 59 ++++++-------- src/components/ScrollableMembers.tsx | 18 ++--- src/components/SiteFooter.tsx | 6 +- src/components/SiteHeader.tsx | 45 +++++------ src/components/ThemeChanger.tsx | 27 ++----- src/pages/404.tsx | 14 ++-- src/pages/_app.tsx | 25 +++--- src/pages/_document.tsx | 7 +- src/pages/about.tsx | 18 ++--- src/pages/index.tsx | 33 +++----- src/pages/members/[id].tsx | 116 ++++++++------------------- src/pages/members/index.tsx | 43 ++++------ src/types.ts | 42 +++++----- src/utils/helper.ts | 20 ++--- yarn.lock | 51 ++++++++---- 24 files changed, 298 insertions(+), 387 deletions(-) create mode 100644 .eslintrc.js delete mode 100644 .eslintrc.json create mode 100644 .prettierrc.js create mode 100644 src/.prettierrc diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 0000000000..8a13e90bb8 --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,3 @@ +module.exports = { + "extends": ["next", "next/core-web-vitals"] +} \ No newline at end of file diff --git a/.eslintrc.json b/.eslintrc.json deleted file mode 100644 index bffb357a71..0000000000 --- a/.eslintrc.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "extends": "next/core-web-vitals" -} diff --git a/.prettierrc.js b/.prettierrc.js new file mode 100644 index 0000000000..eeb7d4b1f6 --- /dev/null +++ b/.prettierrc.js @@ -0,0 +1,5 @@ +module.exports = { + printWidth: 120, + singleQuote: true, + semi: false, +} diff --git a/package.json b/package.json index 9e44a2508f..97784130f0 100644 --- a/package.json +++ b/package.json @@ -8,14 +8,16 @@ "build:posts": "ts-node --project tsconfig.builder.json ./src/builder/posts.ts", "build:next": "next build", "start": "next start", - "lint": "next lint" + "lint": "next lint", + "fix": "yarn format && yarn lint:fix", + "format": "prettier --write ./src/**/**/*.{js,jsx,ts,tsx}" }, "dependencies": { "dayjs": "^1.9.3", "next": "^12.1.5", "next-themes": "^0.0.15", - "react": "^18.0.0", - "react-dom": "^18.0.0" + "react": "^18.1.0", + "react-dom": "^18.1.0" }, "devDependencies": { "@types/fs-extra": "^9.0.2", @@ -24,6 +26,7 @@ "@typescript-eslint/eslint-plugin": "^5.0.0", "@typescript-eslint/parser": "^5.0.0", "eslint": "^8.14.0", + "eslint-config-airbnb": "^18.2.1", "eslint-config-next": "12.1.5", "eslint-config-prettier": "^8.3.0", "eslint-plugin-prettier": "^4.0.0", diff --git a/src/.prettierrc b/src/.prettierrc new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/builder/posts.ts b/src/builder/posts.ts index 21721c1d46..6f9e9196e2 100644 --- a/src/builder/posts.ts +++ b/src/builder/posts.ts @@ -1,82 +1,81 @@ -import fs from "fs-extra"; -import Parser from "rss-parser"; -import { members } from "../../members"; -import { PostItem, Member } from "../types"; -export default {}; +import fs from 'fs-extra' +import Parser from 'rss-parser' +import { members } from '../../members' +import { PostItem, Member } from '../types' type FeedItem = { - title: string; - link: string; - contentSnippet?: string; - isoDate?: string; - dateMiliSeconds: number; -}; + title: string + link: string + contentSnippet?: string + isoDate?: string + dateMiliSeconds: number +} -const parser = new Parser(); -let allPostItems: PostItem[] = []; +const parser = new Parser() +let allPostItems: PostItem[] = [] async function fetchFeedItems(url: string) { - const feed = await parser.parseURL(url); - if (!feed?.items?.length) return []; + const feed = await parser.parseURL(url) + if (!feed?.items?.length) return [] // return item which has title and link return feed.items .map(({ title, contentSnippet, link, isoDate }) => { return { title, - contentSnippet: contentSnippet?.replace(/\n/g, ""), + contentSnippet: contentSnippet?.replace(/\n/g, ''), link, isoDate, dateMiliSeconds: isoDate ? new Date(isoDate).getTime() : 0, - }; + } }) - .filter(({ title, link }) => title && link) as FeedItem[]; + .filter(({ title, link }) => title && link) as FeedItem[] } async function getFeedItemsFromSources(sources: undefined | string[]) { - if (!sources?.length) return []; - let feedItems: FeedItem[] = []; + if (!sources?.length) return [] + let feedItems: FeedItem[] = [] for (const url of sources) { - const items = await fetchFeedItems(url); - if (items) feedItems = [...feedItems, ...items]; + const items = await fetchFeedItems(url) + if (items) feedItems = [...feedItems, ...items] } - return feedItems; + return feedItems } async function getMemberFeedItems(member: Member): Promise { - const { id, sources, name, includeUrlRegex, excludeUrlRegex } = member; - const feedItems = await getFeedItemsFromSources(sources); - if (!feedItems) return []; + const { id, sources, name, includeUrlRegex, excludeUrlRegex } = member + const feedItems = await getFeedItemsFromSources(sources) + if (!feedItems) return [] let postItems = feedItems.map((item) => { return { ...item, authorName: name, authorId: id, - }; - }); + } + }) // remove items which not matches includeUrlRegex if (includeUrlRegex) { postItems = postItems.filter((item) => { - return item.link.match(new RegExp(includeUrlRegex)); - }); + return item.link.match(new RegExp(includeUrlRegex)) + }) } // remove items which matches excludeUrlRegex if (excludeUrlRegex) { postItems = postItems.filter((item) => { - return !item.link.match(new RegExp(excludeUrlRegex)); - }); + return !item.link.match(new RegExp(excludeUrlRegex)) + }) } - return postItems; + return postItems } -(async function () { +;(async function () { for (const member of members) { - const items = await getMemberFeedItems(member); - if (items) allPostItems = [...allPostItems, ...items]; + const items = await getMemberFeedItems(member) + if (items) allPostItems = [...allPostItems, ...items] } - allPostItems.sort((a, b) => b.dateMiliSeconds - a.dateMiliSeconds); - fs.ensureDirSync(".contents"); - fs.writeJsonSync(".contents/posts.json", allPostItems); -})(); + allPostItems.sort((a, b) => b.dateMiliSeconds - a.dateMiliSeconds) + fs.ensureDirSync('.contents') + fs.writeJsonSync('.contents/posts.json', allPostItems) +})() diff --git a/src/components/ContentWrapper.tsx b/src/components/ContentWrapper.tsx index edc50e0e87..8ec2ff266e 100644 --- a/src/components/ContentWrapper.tsx +++ b/src/components/ContentWrapper.tsx @@ -1,11 +1,9 @@ -export const ContentWrapper: React.FC<{ children: React.ReactNode }> = ( - props -) => { - return
{props.children}
; -}; +export const ContentWrapper: React.FC<{ children: React.ReactNode }> = (props) => { + return
{props.children}
+} export const UndoWrapForScroll: React.FC<{ - children: React.ReactNode; + children: React.ReactNode }> = (props) => { - return
{props.children}
; -}; + return
{props.children}
+} diff --git a/src/components/LinkBackHome.tsx b/src/components/LinkBackHome.tsx index 50ede327de..b01cdbefd0 100644 --- a/src/components/LinkBackHome.tsx +++ b/src/components/LinkBackHome.tsx @@ -1,7 +1,7 @@ -import Link from "next/link"; +import Link from 'next/link' export const LinkBackHome: React.FC = () => ( Back Home -); +) diff --git a/src/components/PageSEO.tsx b/src/components/PageSEO.tsx index 13f7ccb52c..bac8359ea6 100644 --- a/src/components/PageSEO.tsx +++ b/src/components/PageSEO.tsx @@ -1,42 +1,28 @@ -import Head from "next/head"; -import { config } from "@site.config"; +import Head from 'next/head' +import { config } from '@site.config' // types type Props = { - title: string; - path?: string; - description?: string; - ogImageUrl?: string; - noindex?: boolean; - removeSiteNameFromTitle?: boolean; -}; + title: string + path?: string + description?: string + ogImageUrl?: string + noindex?: boolean + removeSiteNameFromTitle?: boolean +} export const PageSEO: React.FC = (props) => { - const { - path, - title, - description, - ogImageUrl, - noindex, - removeSiteNameFromTitle, - } = props; + const { path, title, description, ogImageUrl, noindex, removeSiteNameFromTitle } = props - const pageUrl = `${config.siteRoot}${path || ""}`; + const pageUrl = `${config.siteRoot}${path || ''}` return ( - - {removeSiteNameFromTitle - ? title - : `${title} | ${config.siteMeta.title}`} - + {removeSiteNameFromTitle ? title : `${title} | ${config.siteMeta.title}`} - + {!!description && ( <> @@ -46,5 +32,5 @@ export const PageSEO: React.FC = (props) => { {path && } {noindex && } - ); -}; + ) +} diff --git a/src/components/PostList.tsx b/src/components/PostList.tsx index 932230c758..f30f4a8705 100644 --- a/src/components/PostList.tsx +++ b/src/components/PostList.tsx @@ -1,37 +1,31 @@ -import { useState } from "react"; -import Link from "next/link"; -import Image from "next/image" -import dayjs from "dayjs"; -import relativeTime from "dayjs/plugin/relativeTime"; -import { PostItem } from "@src/types"; +import { useState } from 'react' +import Link from 'next/link' +import Image from 'next/image' +import dayjs from 'dayjs' +import relativeTime from 'dayjs/plugin/relativeTime' +import { PostItem } from '@src/types' import { getMemberByName, getHostFromURL, getFaviconSrcFromHostname, getMemberPath, getMemberById, -} from "@src/utils/helper"; +} from '@src/utils/helper' -dayjs.extend(relativeTime); +dayjs.extend(relativeTime) const PostLink: React.FC<{ item: PostItem }> = (props) => { - const { authorId, title, isoDate, link, dateMiliSeconds } = props.item; - const member = getMemberById(authorId); - if (!member) return null; + const { authorId, title, isoDate, link, dateMiliSeconds } = props.item + const member = getMemberById(authorId) + if (!member) return null - const hostname = getHostFromURL(link); + const hostname = getHostFromURL(link) return ( - ); -}; + ) +} export const PostList: React.FC<{ items: PostItem[] }> = (props) => { - const [displayItemsCount, setDisplayItemsCount] = useState(32); - const totalItemsCount = props.items?.length || 0; - const canLoadMore = totalItemsCount - displayItemsCount > 0; + const [displayItemsCount, setDisplayItemsCount] = useState(32) + const totalItemsCount = props.items?.length || 0 + const canLoadMore = totalItemsCount - displayItemsCount > 0 if (!totalItemsCount) { - return
No posts yet
; + return
No posts yet
} return ( @@ -73,14 +63,11 @@ export const PostList: React.FC<{ items: PostItem[] }> = (props) => { {canLoadMore && (
-
)} - ); -}; + ) +} diff --git a/src/components/ScrollableMembers.tsx b/src/components/ScrollableMembers.tsx index 4ab501d428..93d669a777 100644 --- a/src/components/ScrollableMembers.tsx +++ b/src/components/ScrollableMembers.tsx @@ -1,17 +1,13 @@ -import Link from "next/link"; -import Image from "next/image" -import { members } from "@members"; -import { getMemberPath } from "@src/utils/helper"; +import Link from 'next/link' +import Image from 'next/image' +import { members } from '@members' +import { getMemberPath } from '@src/utils/helper' export const ScrollableMembers: React.FC = () => { return (
{members.map((member, i) => ( - + { ))}
- ); -}; + ) +} diff --git a/src/components/SiteFooter.tsx b/src/components/SiteFooter.tsx index 8c05009c21..44cd798d48 100644 --- a/src/components/SiteFooter.tsx +++ b/src/components/SiteFooter.tsx @@ -1,5 +1,5 @@ -import { ContentWrapper } from "@src/components/ContentWrapper"; -import { config } from "@site.config"; +import { ContentWrapper } from '@src/components/ContentWrapper' +import { config } from '@site.config' export const SiteFooter: React.FC = () => (
@@ -7,4 +7,4 @@ export const SiteFooter: React.FC = () => (

© {config.siteMeta.teamName}

-); +) diff --git a/src/components/SiteHeader.tsx b/src/components/SiteHeader.tsx index 0ca808ee51..b456d188ca 100644 --- a/src/components/SiteHeader.tsx +++ b/src/components/SiteHeader.tsx @@ -1,8 +1,8 @@ -import Link from "next/link"; -import Image from "next/image"; -import { config } from "@site.config"; -import { ThemeChanger } from "@src/components/ThemeChanger"; -import { ContentWrapper } from "@src/components/ContentWrapper"; +import Link from 'next/link' +import Image from 'next/image' +import { config } from '@site.config' +import { ThemeChanger } from '@src/components/ThemeChanger' +import { ContentWrapper } from '@src/components/ContentWrapper' export const SiteHeader: React.FC = () => (
@@ -21,25 +21,24 @@ export const SiteHeader: React.FC = () => (
- {config.headerLinks.map((link, i) => { - const key = `header-link-${i}`; - if (link.href.startsWith("/")) { - return ( - - {link.title} - - ); - } - return ( - - {link.title} - - ); - })} - + {config.headerLinks.map((link, i) => { + const key = `header-link-${i}` + if (link.href.startsWith('/')) { + return ( + + {link.title} + + ) + } + return ( + + {link.title} + + ) + })} +
-
-); +) diff --git a/src/components/ThemeChanger.tsx b/src/components/ThemeChanger.tsx index ca95bfbedb..adbf51f36e 100644 --- a/src/components/ThemeChanger.tsx +++ b/src/components/ThemeChanger.tsx @@ -1,10 +1,9 @@ -import { useTheme } from "next-themes" -import Image from "next/image" -import { useState, useEffect } from "react"; +import { useTheme } from 'next-themes' +import Image from 'next/image' +import { useState, useEffect } from 'react' export const ThemeChanger = () => { const [mounted, setMounted] = useState(false) - // When mounted on client, now we can show the UI useEffect(() => setMounted(true), []) @@ -12,28 +11,18 @@ export const ThemeChanger = () => { if (!mounted) { return null } - - if(theme === 'dark'){ + + if (theme === 'dark') { return ( ) } return ( ) -} \ No newline at end of file +} diff --git a/src/pages/404.tsx b/src/pages/404.tsx index 7977a1327c..2a09b91da1 100644 --- a/src/pages/404.tsx +++ b/src/pages/404.tsx @@ -1,7 +1,7 @@ -import { NextPage } from "next"; -import { ContentWrapper } from "@src/components/ContentWrapper"; -import { LinkBackHome } from "@src/components/LinkBackHome"; -import { PageSEO } from "@src/components/PageSEO"; +import { NextPage } from 'next' +import { ContentWrapper } from '@src/components/ContentWrapper' +import { LinkBackHome } from '@src/components/LinkBackHome' +import { PageSEO } from '@src/components/PageSEO' const Page: NextPage = () => { return ( @@ -21,7 +21,7 @@ const Page: NextPage = () => { - ); -}; + ) +} -export default Page; +export default Page diff --git a/src/pages/_app.tsx b/src/pages/_app.tsx index 2efde4527a..aabc1efcf1 100644 --- a/src/pages/_app.tsx +++ b/src/pages/_app.tsx @@ -1,26 +1,21 @@ -import { AppProps } from "next/app"; -import Head from "next/head"; -import { config } from "@site.config"; -import { SiteHeader } from "@src/components/SiteHeader"; -import { SiteFooter } from "@src/components/SiteFooter"; -import { ThemeProvider } from 'next-themes'; -import { ThemeChanger } from '@src/components/ThemeChanger'; -import "@src/styles/globals.scss"; +import { AppProps } from 'next/app' +import Head from 'next/head' +import { config } from '@site.config' +import { SiteHeader } from '@src/components/SiteHeader' +import { SiteFooter } from '@src/components/SiteFooter' +import { ThemeProvider } from 'next-themes' +import { ThemeChanger } from '@src/components/ThemeChanger' +import '@src/styles/globals.scss' export default function MyApp({ Component, pageProps }: AppProps) { return ( - - + - ); + ) } diff --git a/src/pages/_document.tsx b/src/pages/_document.tsx index def6b4a127..9fb6324a36 100644 --- a/src/pages/_document.tsx +++ b/src/pages/_document.tsx @@ -4,10 +4,7 @@ export default function Document() { return ( - +
@@ -15,4 +12,4 @@ export default function Document() { ) -} \ No newline at end of file +} diff --git a/src/pages/about.tsx b/src/pages/about.tsx index cdaff4a2cc..d0b2440f48 100644 --- a/src/pages/about.tsx +++ b/src/pages/about.tsx @@ -1,7 +1,7 @@ -import { NextPage } from "next"; -import { ContentWrapper } from "@src/components/ContentWrapper"; -import { LinkBackHome } from "@src/components/LinkBackHome"; -import { PageSEO } from "@src/components/PageSEO"; +import { NextPage } from 'next' +import { ContentWrapper } from '@src/components/ContentWrapper' +import { LinkBackHome } from '@src/components/LinkBackHome' +import { PageSEO } from '@src/components/PageSEO' const Page: NextPage = () => { return ( @@ -13,9 +13,7 @@ const Page: NextPage = () => {

このサイトはチームのためのブログスターター - - Team Blog Hub - + Team Blog Hub をもとに作成されました。ブログのRSSのURLを登録することで、チームメンバーの投稿を一覧にまとめて表示します。

@@ -35,7 +33,7 @@ const Page: NextPage = () => { - ); -}; + ) +} -export default Page; +export default Page diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 4b1f191acf..2a0c9e0ed8 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -1,16 +1,13 @@ -import { NextPage } from "next"; -import Link from "next/link"; +import { NextPage } from 'next' +import Link from 'next/link' -import posts from "@.contents/posts.json"; -import { config } from "@site.config"; -import { PostItem } from "@src/types"; -import { ScrollableMembers } from "@src/components/ScrollableMembers"; -import { PostList } from "@src/components/PostList"; -import { PageSEO } from "@src/components/PageSEO"; -import { - ContentWrapper, - UndoWrapForScroll, -} from "@src/components/ContentWrapper"; +import posts from '@.contents/posts.json' +import { config } from '@site.config' +import { PostItem } from '@src/types' +import { ScrollableMembers } from '@src/components/ScrollableMembers' +import { PostList } from '@src/components/PostList' +import { PageSEO } from '@src/components/PageSEO' +import { ContentWrapper, UndoWrapForScroll } from '@src/components/ContentWrapper' const Page: NextPage = () => { return ( @@ -25,11 +22,7 @@ const Page: NextPage = () => {

{config.siteMeta.title}

- {!!config.siteMeta.description && ( -

- {config.siteMeta.description} -

- )} + {!!config.siteMeta.description &&

{config.siteMeta.description}

}
@@ -62,7 +55,7 @@ const Page: NextPage = () => { - ); -}; + ) +} -export default Page; +export default Page diff --git a/src/pages/members/[id].tsx b/src/pages/members/[id].tsx index a2d07b11fa..4ec4cc978e 100644 --- a/src/pages/members/[id].tsx +++ b/src/pages/members/[id].tsx @@ -1,32 +1,19 @@ -import { NextPage, GetStaticProps, GetStaticPaths } from "next"; -import Image from "next/image" -import { members } from "@members"; -import { PostItem, Member } from "@src/types"; -import { PostList } from "@src/components/PostList"; -import { ContentWrapper } from "@src/components/ContentWrapper"; -import { PageSEO } from "@src/components/PageSEO"; -import { - getMemberById, - getMemberPostsById, - getMemberPath, -} from "@src/utils/helper"; +import { NextPage, GetStaticProps, GetStaticPaths } from 'next' +import Image from 'next/image' +import { members } from '@members' +import { PostItem, Member } from '@src/types' +import { PostList } from '@src/components/PostList' +import { ContentWrapper } from '@src/components/ContentWrapper' +import { PageSEO } from '@src/components/PageSEO' +import { getMemberById, getMemberPostsById, getMemberPath } from '@src/utils/helper' type Props = { - postItems: PostItem[]; - member: Member; -}; + postItems: PostItem[] + member: Member +} const Page: NextPage = (props) => { - const { - id, - name, - bio, - avatarSrc, - twitterUsername, - githubUsername, - suzuriUsername, - websiteUrl, - } = props.member; + const { id, name, bio, avatarSrc, twitterUsername, githubUsername, suzuriUsername, websiteUrl } = props.member return ( <> @@ -35,64 +22,29 @@ const Page: NextPage = (props) => {
- {name} + {name}

{name}

{bio}

{twitterUsername && ( - - {`Twitterのユーザー@${twitterUsername}`} + + {`Twitterのユーザー@${twitterUsername}`} )} {githubUsername && ( - - {`GitHubのユーザー@${githubUsername}`} + + {`GitHubのユーザー@${githubUsername}`} )} {suzuriUsername && ( - - {`suzuriのユーザー@${suzuriUsername}`} + + {`suzuriのユーザー@${suzuriUsername}`} )} {websiteUrl && ( - {`ウェブサイトのリンク`} + {`ウェブサイトのリンク`} )}
@@ -104,37 +56,37 @@ const Page: NextPage = (props) => { - ); -}; + ) +} export const getStaticProps: GetStaticProps = async ({ params }) => { - const id = params?.id as string; - const member = getMemberById(id); - const postItems = getMemberPostsById(id); + const id = params?.id as string + const member = getMemberById(id) + const postItems = getMemberPostsById(id) - if (!member) throw "User not found"; + if (!member) throw 'User not found' return { props: { member, postItems, }, - }; -}; + } +} export const getStaticPaths: GetStaticPaths = async () => { - const memberNameList = members.map((member) => encodeURIComponent(member.id)); + const memberNameList = members.map((member) => encodeURIComponent(member.id)) const paths = memberNameList.map((id) => { return { params: { id, }, - }; - }); + } + }) return { paths, fallback: false, - }; -}; + } +} -export default Page; +export default Page diff --git a/src/pages/members/index.tsx b/src/pages/members/index.tsx index 3452f0bc95..81e7e3370b 100644 --- a/src/pages/members/index.tsx +++ b/src/pages/members/index.tsx @@ -1,33 +1,27 @@ -import { NextPage } from "next"; -import Link from "next/link"; -import Head from "next/head"; -import Image from "next/image"; -import { config } from "@site.config"; -import { members } from "@members"; -import { ContentWrapper } from "@src/components/ContentWrapper"; -import { PageSEO } from "@src/components/PageSEO"; -import { getMemberPath } from "@src/utils/helper"; -import { Member } from "@src/types"; +import { NextPage } from 'next' +import Link from 'next/link' +import Head from 'next/head' +import Image from 'next/image' +import { config } from '@site.config' +import { members } from '@members' +import { ContentWrapper } from '@src/components/ContentWrapper' +import { PageSEO } from '@src/components/PageSEO' +import { getMemberPath } from '@src/utils/helper' +import { Member } from '@src/types' const MemberCard: React.FC<{ member: Member }> = ({ member }) => { return (
- {member.name} + {member.name}

{member.name}

{member.bio}

- ); -}; + ) +} const Page: NextPage = () => { return ( @@ -36,10 +30,7 @@ const Page: NextPage = () => {

- Members{" "} - - @ {config.siteMeta.teamName} - + Members @ {config.siteMeta.teamName}

{members.map((member, i) => ( @@ -49,7 +40,7 @@ const Page: NextPage = () => {
- ); -}; + ) +} -export default Page; +export default Page diff --git a/src/types.ts b/src/types.ts index 95ee030496..cceefd5628 100644 --- a/src/types.ts +++ b/src/types.ts @@ -1,24 +1,24 @@ export type Member = { - id: string; - name: string; - avatarSrc: string; - role?: string; - bio?: string; - sources?: string[]; - includeUrlRegex?: string; - excludeUrlRegex?: string; - githubUsername?: string; - twitterUsername?: string; - suzuriUsername?: string; - websiteUrl?: string; -}; + id: string + name: string + avatarSrc: string + role?: string + bio?: string + sources?: string[] + includeUrlRegex?: string + excludeUrlRegex?: string + githubUsername?: string + twitterUsername?: string + suzuriUsername?: string + websiteUrl?: string +} export type PostItem = { - authorId: string; - authorName: string; - title: string; - link: string; - contentSnippet?: string; - isoDate?: string; - dateMiliSeconds: number; -}; + authorId: string + authorName: string + title: string + link: string + contentSnippet?: string + isoDate?: string + dateMiliSeconds: number +} diff --git a/src/utils/helper.ts b/src/utils/helper.ts index e58edbf9d9..59910c1aa2 100644 --- a/src/utils/helper.ts +++ b/src/utils/helper.ts @@ -1,25 +1,25 @@ -import { PostItem } from "@src/types"; -import { members } from "@members"; -import posts from "@.contents/posts.json"; +import { PostItem } from '@src/types' +import { members } from '@members' +import posts from '@.contents/posts.json' export function getMemberByName(name: string) { - return members.find((member) => member.name === name); + return members.find((member) => member.name === name) } export function getMemberById(id: string) { - return members.find((member) => member.id === id); + return members.find((member) => member.id === id) } export function getMemberPostsById(id: string) { - return (posts as PostItem[]).filter((item) => item.authorId === id); + return (posts as PostItem[]).filter((item) => item.authorId === id) } export function getHostFromURL(str: string) { - const url = new URL(str); - return url?.hostname || "blog"; + const url = new URL(str) + return url?.hostname || 'blog' } export function getFaviconSrcFromHostname(hostname: string) { - return `https://www.google.com/s2/favicons?domain=${hostname}`; + return `https://www.google.com/s2/favicons?domain=${hostname}` } export function getMemberPath(id: string) { - return `/members/${encodeURIComponent(id)}`; + return `/members/${encodeURIComponent(id)}` } diff --git a/yarn.lock b/yarn.lock index 4ec18fced9..8f7c2c3afc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -577,6 +577,11 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= +confusing-browser-globals@^1.0.10: + version "1.0.11" + resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz#ae40e9b57cdd3915408a2805ebd3a5585608dc81" + integrity sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA== + core-js-pure@^3.20.2: version "3.22.2" resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.22.2.tgz#c10bffdc3028d25c2aae505819a05543db61544f" @@ -783,6 +788,24 @@ escape-string-regexp@^4.0.0: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== +eslint-config-airbnb-base@^14.2.1: + version "14.2.1" + resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-14.2.1.tgz#8a2eb38455dc5a312550193b319cdaeef042cd1e" + integrity sha512-GOrQyDtVEc1Xy20U7vsB2yAoB4nBlfH5HZJeatRXHleO+OS5Ot+MWij4Dpltw4/DyIkqUfqz1epfhVR5XWWQPA== + dependencies: + confusing-browser-globals "^1.0.10" + object.assign "^4.1.2" + object.entries "^1.1.2" + +eslint-config-airbnb@^18.2.1: + version "18.2.1" + resolved "https://registry.yarnpkg.com/eslint-config-airbnb/-/eslint-config-airbnb-18.2.1.tgz#b7fe2b42f9f8173e825b73c8014b592e449c98d9" + integrity sha512-glZNDEZ36VdlZWoxn/bUR1r/sdFKPd1mHPbqUtkctgNG4yT2DLLtJ3D+yCV+jzZCc2V1nBVkmdknOJBZ5Hc0fg== + dependencies: + eslint-config-airbnb-base "^14.2.1" + object.assign "^4.1.2" + object.entries "^1.1.2" + eslint-config-next@12.1.5: version "12.1.5" resolved "https://registry.yarnpkg.com/eslint-config-next/-/eslint-config-next-12.1.5.tgz#658cc61194a32dfd917a3db199351396ea5db1d1" @@ -1772,7 +1795,7 @@ object.assign@^4.1.2: has-symbols "^1.0.1" object-keys "^1.1.1" -object.entries@^1.1.4, object.entries@^1.1.5: +object.entries@^1.1.2, object.entries@^1.1.4, object.entries@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.5.tgz#e1acdd17c4de2cd96d5a08487cfb9db84d881861" integrity sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g== @@ -1971,23 +1994,23 @@ queue-microtask@^1.2.2: resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== -react-dom@^18.0.0: - version "18.0.0" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.0.0.tgz#26b88534f8f1dbb80853e1eabe752f24100d8023" - integrity sha512-XqX7uzmFo0pUceWFCt7Gff6IyIMzFUn7QMZrbrQfGxtaxXZIcGQzoNpRLE3fQLnS4XzLLPMZX2T9TRcSrasicw== +react-dom@^18.1.0: + version "18.1.0" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.1.0.tgz#7f6dd84b706408adde05e1df575b3a024d7e8a2f" + integrity sha512-fU1Txz7Budmvamp7bshe4Zi32d0ll7ect+ccxNu9FlObT605GOEB8BfO4tmRJ39R5Zj831VCpvQ05QPBW5yb+w== dependencies: loose-envify "^1.1.0" - scheduler "^0.21.0" + scheduler "^0.22.0" react-is@^16.13.1, react-is@^16.8.1: version "16.13.1" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== -react@^18.0.0: - version "18.0.0" - resolved "https://registry.yarnpkg.com/react/-/react-18.0.0.tgz#b468736d1f4a5891f38585ba8e8fb29f91c3cb96" - integrity sha512-x+VL6wbT4JRVPm7EGxXhZ8w8LTROaxPXOqhlGyVSrv0sB1jkyFGgXxJ8LVoPRLvPR6/CIZGFmfzqUa2NYeMr2A== +react@^18.1.0: + version "18.1.0" + resolved "https://registry.yarnpkg.com/react/-/react-18.1.0.tgz#6f8620382decb17fdc5cc223a115e2adbf104890" + integrity sha512-4oL8ivCz5ZEPyclFQXaNksK3adutVS8l2xzZU0cqEFrE9Sb7fC0EFK5uEk74wIreL1DERyjvsU915j1pcT2uEQ== dependencies: loose-envify "^1.1.0" @@ -2103,10 +2126,10 @@ sax@>=0.6.0: resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== -scheduler@^0.21.0: - version "0.21.0" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.21.0.tgz#6fd2532ff5a6d877b6edb12f00d8ab7e8f308820" - integrity sha512-1r87x5fz9MXqswA2ERLo0EbOAU74DpIUO090gIasYTqlVoJeMcl+Z1Rg7WHz+qtPujhS/hGIt9kxZOYBV3faRQ== +scheduler@^0.22.0: + version "0.22.0" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.22.0.tgz#83a5d63594edf074add9a7198b1bae76c3db01b8" + integrity sha512-6QAm1BgQI88NPYymgGQLCZgvep4FyePDWFpXVK+zNSUgHwlqpJy8VEh8Et0KxTACS4VWwMousBElAZOH9nkkoQ== dependencies: loose-envify "^1.1.0"