├── .yarnrc.yml ├── .env ├── src ├── components │ ├── common │ │ ├── index.ts │ │ └── Meta.tsx │ ├── layouts │ │ ├── index.ts │ │ └── Header.tsx │ ├── templates │ │ ├── index.ts │ │ └── BlogIndex.tsx │ ├── cards │ │ ├── index.ts │ │ ├── ArticleIndexCard.tsx │ │ └── ProfileCard.tsx │ ├── about │ │ ├── index.ts │ │ ├── AboutSection.tsx │ │ ├── About.tsx │ │ └── AboutItem.tsx │ ├── Title.tsx │ ├── index.ts │ ├── SkillList.tsx │ ├── ProfileIcon.tsx │ ├── LinkList.tsx │ ├── icons │ │ ├── ChevronLeftIcon.tsx │ │ ├── ChevronRightIcon.tsx │ │ ├── EmailIcon.tsx │ │ ├── ExternalLinkIcon.tsx │ │ ├── index.ts │ │ ├── ZennIcon.tsx │ │ ├── TwitterIcon.tsx │ │ ├── GithubIcon.tsx │ │ ├── ApolloIcon.tsx │ │ ├── Logo.tsx │ │ ├── JavaScriptIcon.tsx │ │ ├── HasuraIcon.tsx │ │ ├── CssIcon.tsx │ │ ├── BlitzIcon.tsx │ │ ├── HtmlIcon.tsx │ │ ├── TypeScriptIcon.tsx │ │ ├── GraphqlIcon.tsx │ │ ├── RailsIcon.tsx │ │ ├── ReactIcon.tsx │ │ └── RubyIcon.tsx │ ├── PostIcon.tsx │ ├── HackathonList.tsx │ ├── SkillIcon.tsx │ ├── PostList.tsx │ └── Pagination.tsx ├── lib │ ├── index.ts │ ├── data │ │ ├── index.ts │ │ ├── qualifications.ts │ │ ├── trainingPrograms.ts │ │ └── career.ts │ └── api │ │ └── index.ts ├── utils │ ├── constants.ts │ ├── index.ts │ ├── commonFuns.ts │ ├── member.ts │ └── skills.ts ├── pages │ ├── 404.tsx │ ├── api │ │ ├── clear-preview.ts │ │ └── preview.ts │ ├── _app.tsx │ ├── _document.tsx │ ├── blog │ │ ├── index.tsx │ │ ├── page │ │ │ └── [id].tsx │ │ └── [id].tsx │ ├── articles │ │ └── index.tsx │ └── index.tsx ├── types │ └── index.ts └── builder │ └── posts.ts ├── .husky └── pre-commit ├── public ├── m.ico ├── neko.jpg ├── favicon.ico ├── icon │ └── qiita.png └── vercel.svg ├── styles └── global.css ├── .yarn └── install-state.gz ├── postcss.config.js ├── next.config.js ├── next-env.d.ts ├── tsconfig.builder.json ├── .gitignore ├── .eslintrc.js ├── .vscode └── settings.json ├── tailwind.config.js ├── README.md ├── tsconfig.json ├── LICENSE ├── .contents └── posts.json ├── package.json └── tsconfig.tsbuildinfo /.yarnrc.yml: -------------------------------------------------------------------------------- 1 | nodeLinker: node-modules 2 | -------------------------------------------------------------------------------- /.env: -------------------------------------------------------------------------------- 1 | API_KEY=76694c73-c254-40a7-a82f-9a089525ad1d -------------------------------------------------------------------------------- /src/components/common/index.ts: -------------------------------------------------------------------------------- 1 | export * from "./Meta"; 2 | -------------------------------------------------------------------------------- /src/components/layouts/index.ts: -------------------------------------------------------------------------------- 1 | export * from "./Header"; 2 | -------------------------------------------------------------------------------- /src/components/templates/index.ts: -------------------------------------------------------------------------------- 1 | export * from "./BlogIndex" 2 | -------------------------------------------------------------------------------- /src/lib/index.ts: -------------------------------------------------------------------------------- 1 | export * from "./api" 2 | export * from "./data" 3 | -------------------------------------------------------------------------------- /.husky/pre-commit: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | . "$(dirname "$0")/_/husky.sh" 3 | 4 | yarn lint -------------------------------------------------------------------------------- /public/m.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/marina-ki/portfolio/HEAD/public/m.ico -------------------------------------------------------------------------------- /public/neko.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/marina-ki/portfolio/HEAD/public/neko.jpg -------------------------------------------------------------------------------- /styles/global.css: -------------------------------------------------------------------------------- 1 | @tailwind base; 2 | @tailwind components; 3 | @tailwind utilities; 4 | -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/marina-ki/portfolio/HEAD/public/favicon.ico -------------------------------------------------------------------------------- /public/icon/qiita.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/marina-ki/portfolio/HEAD/public/icon/qiita.png -------------------------------------------------------------------------------- /.yarn/install-state.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/marina-ki/portfolio/HEAD/.yarn/install-state.gz -------------------------------------------------------------------------------- /src/components/cards/index.ts: -------------------------------------------------------------------------------- 1 | export * from "./ArticleIndexCard" 2 | export * from "./ProfileCard" 3 | -------------------------------------------------------------------------------- /postcss.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: { 3 | tailwindcss: {}, 4 | autoprefixer: {}, 5 | }, 6 | } 7 | -------------------------------------------------------------------------------- /src/components/about/index.ts: -------------------------------------------------------------------------------- 1 | export * from "./About" 2 | export * from "./AboutItem" 3 | export * from "./AboutSection" 4 | -------------------------------------------------------------------------------- /src/lib/data/index.ts: -------------------------------------------------------------------------------- 1 | export * from "./career" 2 | export * from "./qualifications" 3 | export * from "./trainingPrograms" 4 | -------------------------------------------------------------------------------- /src/utils/constants.ts: -------------------------------------------------------------------------------- 1 | export const BLOG_API = "https://marina.microcms.io/api/v1/blog" 2 | 3 | export const BLOG_PER_PAGE = 12 4 | -------------------------------------------------------------------------------- /src/utils/index.ts: -------------------------------------------------------------------------------- 1 | export * from "./commonFuns" 2 | export * from "./constants" 3 | export * from "./member" 4 | export * from "./skills" 5 | -------------------------------------------------------------------------------- /next.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | experimental: { 3 | tsconfigPaths: true, // enables it for both jsconfig.json and tsconfig.json 4 | }, 5 | } 6 | -------------------------------------------------------------------------------- /src/pages/404.tsx: -------------------------------------------------------------------------------- 1 | export default function Custom404() { 2 | return ( 3 |
4 |

ページがありません。

5 |
6 | ); 7 | } 8 | -------------------------------------------------------------------------------- /src/utils/commonFuns.ts: -------------------------------------------------------------------------------- 1 | export const range = (start: number, end: number) => 2 | [...Array(end - start + 1)].map((_, i) => start + i) 3 | 4 | //range(2,6) -> [2,3,4,5,6] 5 | -------------------------------------------------------------------------------- /next-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | 4 | // NOTE: This file should not be edited 5 | // see https://nextjs.org/docs/basic-features/typescript for more information. 6 | -------------------------------------------------------------------------------- /tsconfig.builder.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "module": "commonjs", 5 | "outDir": "dist", 6 | "noEmit": false 7 | }, 8 | "exclude": ["node_modules"], 9 | "include": ["src/builder/*.ts"] 10 | } 11 | -------------------------------------------------------------------------------- /src/lib/data/qualifications.ts: -------------------------------------------------------------------------------- 1 | export const qualifications = [ 2 | { 3 | title: "Ruby技術者認定試験 Silver", 4 | link: "https://www.ruby.or.jp/ja/certification/examination/", 5 | }, 6 | { title: "応用情報技術者試験", link: "https://www.jitec.ipa.go.jp/1_11seido/ap.html" }, 7 | ] 8 | -------------------------------------------------------------------------------- /src/pages/api/clear-preview.ts: -------------------------------------------------------------------------------- 1 | import type { NextApiRequest, NextApiResponse } from "next"; 2 | export default async function exit(_: NextApiRequest, res: NextApiResponse) { 3 | res.clearPreviewData(); 4 | 5 | res.writeHead(307, { Location: "/" }); 6 | res.end(); 7 | } 8 | -------------------------------------------------------------------------------- /src/lib/data/trainingPrograms.ts: -------------------------------------------------------------------------------- 1 | export const trainingPrograms = [ 2 | { 3 | title: "Google STEP 2021", 4 | link: "https://buildyourfuture.withgoogle.com/programs/step/", 5 | }, 6 | { title: "Build@Mercari 2021", link: "https://mercan.mercari.com/articles/27087/" }, 7 | ] 8 | -------------------------------------------------------------------------------- /src/pages/_app.tsx: -------------------------------------------------------------------------------- 1 | import { AppProps } from "next/app" 2 | import "tailwindcss/tailwind.css" 3 | 4 | function MyApp({ Component, pageProps }: AppProps) { 5 | return ( 6 | <> 7 | 8 | 9 | ) 10 | } 11 | 12 | export default MyApp 13 | -------------------------------------------------------------------------------- /src/utils/member.ts: -------------------------------------------------------------------------------- 1 | import { Member } from "types" 2 | 3 | export const member: Member = { 4 | name: "malillu", 5 | avatarSrc: "hoge", 6 | githubUsername: "malillu", 7 | twitterUsername: "malillu", 8 | sources: ["https://zenn.dev/marin_a___/feed", "https://qiita.com/malillu/feed.atom"], 9 | } 10 | -------------------------------------------------------------------------------- /src/components/Title.tsx: -------------------------------------------------------------------------------- 1 | import React, { FC } from "react" 2 | 3 | type Props = { 4 | children: React.ReactNode 5 | } 6 | 7 | export const Title: FC = (props) => { 8 | const { children } = props 9 | 10 | return ( 11 |

{children}

12 | ) 13 | } 14 | -------------------------------------------------------------------------------- /src/components/index.ts: -------------------------------------------------------------------------------- 1 | export * from "./about" 2 | export * from "./cards" 3 | export * from "./common" 4 | export * from "./HackathonList" 5 | export * from "./icons" 6 | export * from "./layouts" 7 | export * from "./LinkList" 8 | export * from "./Pagination" 9 | export * from "./PostIcon" 10 | export * from "./PostList" 11 | export * from "./ProfileIcon" 12 | export * from "./SkillList" 13 | export * from "./templates" 14 | export * from "./Title" 15 | -------------------------------------------------------------------------------- /src/components/SkillList.tsx: -------------------------------------------------------------------------------- 1 | import React, { FC } from "react" 2 | import { skills } from "utils" 3 | import { SkillIcon } from "./SkillIcon" 4 | 5 | type Props = {} 6 | 7 | export const SkillList: FC = () => { 8 | return ( 9 |
10 | {skills.map((skill) => ( 11 | 12 | 13 | 14 | ))} 15 |
16 | ) 17 | } 18 | -------------------------------------------------------------------------------- /src/components/about/AboutSection.tsx: -------------------------------------------------------------------------------- 1 | import { Title } from "@src/components/Title" 2 | import React, { FC } from "react" 3 | 4 | type Props = { 5 | title: string 6 | children: React.ReactNode 7 | } 8 | 9 | export const AboutSection: FC = (props) => { 10 | const { children, title } = props 11 | 12 | return ( 13 |
14 | {title} 15 | {children} 16 |
17 | ) 18 | } 19 | -------------------------------------------------------------------------------- /src/pages/_document.tsx: -------------------------------------------------------------------------------- 1 | import Document, { Html, Head, Main, NextScript } from "next/document"; 2 | 3 | type Props = {}; 4 | 5 | export default class MyDocument extends Document { 6 | render() { 7 | return ( 8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | ); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | 8 | # testing 9 | /coverage 10 | 11 | # next.js 12 | /.next/ 13 | /out/ 14 | 15 | # production 16 | /build 17 | 18 | # misc 19 | .DS_Store 20 | *.pem 21 | 22 | # debug 23 | npm-debug.log* 24 | yarn-debug.log* 25 | yarn-error.log* 26 | 27 | # local env files 28 | .env.local 29 | .env.development.local 30 | .env.test.local 31 | .env.production.local 32 | 33 | # vercel 34 | .vercel 35 | -------------------------------------------------------------------------------- /src/components/ProfileIcon.tsx: -------------------------------------------------------------------------------- 1 | import React, { FC } from "react" 2 | 3 | type Props = { 4 | href: string 5 | name: string 6 | children: React.ReactNode 7 | } 8 | 9 | export const ProfileIcon: FC = (props) => { 10 | const { href, name, children } = props 11 | 12 | return ( 13 |
  • 14 | 19 | {children} 20 | 21 |
  • 22 | ) 23 | } 24 | -------------------------------------------------------------------------------- /.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | env: { 3 | es2020: true, 4 | }, 5 | extends: ["react-app", "plugin:jsx-a11y/recommended"], 6 | plugins: ["jsx-a11y"], 7 | rules: { 8 | "import/no-webpack-loader-syntax": "off", 9 | "jsx-a11y/anchor-is-valid": "off", //Doesn't play well with Next usage 10 | }, 11 | overrides: [ 12 | { 13 | files: ["**/components/**/*.tsx"], 14 | excludedFiles: ["**/*.stories.tsx"], 15 | rules: { 16 | "import/no-default-export": "warn", 17 | }, 18 | }, 19 | ], 20 | } 21 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "editor.formatOnSave": true, 3 | "editor.defaultFormatter": "esbenp.prettier-vscode", 4 | "[javascript]": { 5 | "editor.defaultFormatter": "esbenp.prettier-vscode" 6 | }, 7 | "editor.codeActionsOnSave": { 8 | "source.fixAll.eslint": "explicit" 9 | }, 10 | "eslint.validate": ["html", "javascriptreact", "typescriptreact"], 11 | "css.validate": false, 12 | "less.validate": false, 13 | "scss.validate": false, 14 | "stylelint.enable": true, 15 | "tailwindCSS.includeLanguages": { 16 | "typescriptreact": "html" 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/components/LinkList.tsx: -------------------------------------------------------------------------------- 1 | import React, { FC } from "react" 2 | 3 | type Props = { 4 | items: { 5 | title: string 6 | link: string 7 | }[] 8 | } 9 | 10 | export const LinkList: FC = (props) => { 11 | const { items } = props 12 | 13 | return ( 14 |
    15 | 24 |
    25 | ) 26 | } 27 | -------------------------------------------------------------------------------- /src/components/icons/ChevronLeftIcon.tsx: -------------------------------------------------------------------------------- 1 | import React, { FC, SVGAttributes } from "react" 2 | 3 | type Props = { 4 | className?: SVGAttributes["className"] 5 | } 6 | 7 | export const ChevronLeftIcon: FC = ({ className }) => { 8 | return ( 9 | 16 | 17 | 18 | ) 19 | } 20 | -------------------------------------------------------------------------------- /src/components/icons/ChevronRightIcon.tsx: -------------------------------------------------------------------------------- 1 | import React, { FC, SVGAttributes } from "react" 2 | 3 | type Props = { 4 | className?: SVGAttributes["className"] 5 | } 6 | 7 | export const ChevronRightIcon: FC = ({ className }) => { 8 | return ( 9 | 16 | 17 | 18 | ) 19 | } 20 | -------------------------------------------------------------------------------- /src/components/icons/EmailIcon.tsx: -------------------------------------------------------------------------------- 1 | import React, { FC } from "react"; 2 | 3 | type Props = {}; 4 | 5 | export const EmailIcon: FC = () => { 6 | 7 | return ( 8 | 14 | 15 | 19 | 20 | ); 21 | }; 22 | -------------------------------------------------------------------------------- /src/components/PostIcon.tsx: -------------------------------------------------------------------------------- 1 | import { ZennIcon } from "@src/components/icons" 2 | import { PostItem } from "@src/types" 3 | import Image from "next/image" 4 | import React, { FC } from "react" 5 | 6 | type Props = { 7 | sourceType: PostItem["sourceType"] 8 | } 9 | 10 | export const PostIcon: FC = (props) => { 11 | const { sourceType } = props 12 | 13 | if (sourceType === "zenn") { 14 | return 15 | } else if (sourceType === "qiita") { 16 | return qiita 17 | } else { 18 | return null 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/components/icons/ExternalLinkIcon.tsx: -------------------------------------------------------------------------------- 1 | import React, { FC } from "react" 2 | 3 | type Props = {} 4 | 5 | export const ExternalLinkIcon: FC = () => { 6 | return ( 7 | 14 | 20 | 21 | ) 22 | } 23 | -------------------------------------------------------------------------------- /src/utils/skills.ts: -------------------------------------------------------------------------------- 1 | export const skills: { name: string; href?: string }[] = [ 2 | { name: "React", href: "https://reactjs.org/" }, 3 | { name: "GraphQL", href: "https://graphql.org/" }, 4 | { name: "Apollo", href: "https://www.apollographql.com/docs/react/" }, 5 | { name: "TypeScript", href: "https://www.typescriptlang.org/" }, 6 | { name: "JavaScript" }, 7 | { name: "html" }, 8 | { name: "css" }, 9 | { name: "blitz", href: "https://github.com/blitz-js/blitz" }, 10 | { name: "Ruby", href: "https://www.ruby-lang.org/en/documentation/" }, 11 | { name: "RubyOnRails", href: "https://rubyonrails.org/" }, 12 | ] 13 | -------------------------------------------------------------------------------- /tailwind.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | purge: ["./src/**/*.tsx"], 3 | darkMode: false, // or 'media' or 'class' 4 | theme: { 5 | extend: {}, 6 | }, 7 | variants: { 8 | extend: { 9 | textColor: ["responsive", "hover", "focus", "group-hover"], 10 | borderColor: ["responsive", "hover", "focus", "group-hover"], 11 | borderWidth: ["responsive", "hover", "focus", "group-hover"], 12 | margin: ["responsive", "hover", "focus", "group-hover"], 13 | padding: ["responsive", "hover", "focus", "group-hover"], 14 | }, 15 | }, 16 | plugins: [require("@tailwindcss/typography")], 17 | } 18 | -------------------------------------------------------------------------------- /src/components/icons/index.ts: -------------------------------------------------------------------------------- 1 | export * from "./ApolloIcon" 2 | export * from "./BlitzIcon" 3 | export * from "./ChevronLeftIcon" 4 | export * from "./ChevronRightIcon" 5 | export * from "./CssIcon" 6 | export * from "./EmailIcon" 7 | export * from "./ExternalLinkIcon" 8 | export * from "./GithubIcon" 9 | export * from "./GraphqlIcon" 10 | export * from "./HasuraIcon" 11 | export * from "./HtmlIcon" 12 | export * from "./JavaScriptIcon" 13 | export * from "./Logo" 14 | export * from "./RailsIcon" 15 | export * from "./ReactIcon" 16 | export * from "./RubyIcon" 17 | export * from "./TwitterIcon" 18 | export * from "./TypeScriptIcon" 19 | export * from "./ZennIcon" 20 | -------------------------------------------------------------------------------- /src/components/icons/ZennIcon.tsx: -------------------------------------------------------------------------------- 1 | import React, { FC } from "react"; 2 | 3 | type Props = { size?: number; color?: string }; 4 | 5 | export const ZennIcon: FC = (props) => { 6 | const { size = 30, color = "#3EA8FF" } = props; 7 | 8 | return ( 9 | 10 | 15 | 16 | ); 17 | }; 18 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## Getting Started 2 | 3 | First, run the development server: 4 | 5 | ```bash 6 | yarn dev 7 | ``` 8 | 9 | Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. 10 | 11 | You can start editing the page by modifying `pages/index.js`. The page auto-updates as you edit the file. 12 | 13 | [API routes](https://nextjs.org/docs/api-routes/introduction) can be accessed on [http://localhost:3000/api/hello](http://localhost:3000/api/hello). This endpoint can be edited in `pages/api/hello.js`. 14 | 15 | The `pages/api` directory is mapped to `/api/*`. Files in this directory are treated as [API routes](https://nextjs.org/docs/api-routes/introduction) instead of React pages. 16 | 17 | # portfolio 18 | -------------------------------------------------------------------------------- /src/components/icons/TwitterIcon.tsx: -------------------------------------------------------------------------------- 1 | import React, { FC } from "react"; 2 | 3 | type Props = {}; 4 | 5 | export const TwitterIcon: FC = () => { 6 | 7 | return ( 8 | 9 | 13 | 14 | ); 15 | }; 16 | -------------------------------------------------------------------------------- /src/components/icons/GithubIcon.tsx: -------------------------------------------------------------------------------- 1 | import React, { FC } from "react"; 2 | 3 | type Props = {}; 4 | 5 | export const GithubIcon: FC = () => { 6 | 7 | return ( 8 | 9 | 13 | 14 | ); 15 | }; 16 | -------------------------------------------------------------------------------- /src/components/HackathonList.tsx: -------------------------------------------------------------------------------- 1 | import React, { FC } from "react" 2 | 3 | type Props = {} 4 | 5 | const hackathons = [ 6 | { title: "Open Hack U vol4", url: "https://hacku.yahoo.co.jp/hacku2020online4/", rank: "優秀賞" }, 7 | { 8 | title: "Cyber Agent 2days Webフロントインターン", 9 | url: "https://www.cyberagent.co.jp/careers/students/event/detail/id=25319", 10 | rank: "3位", 11 | }, 12 | ] 13 | 14 | export const HackathonList: FC = () => { 15 | return ( 16 |
    17 | 27 |
    28 | ) 29 | } 30 | -------------------------------------------------------------------------------- /src/pages/blog/index.tsx: -------------------------------------------------------------------------------- 1 | import { BlogIndex } from "components" 2 | import { getBlog } from "lib" 3 | import { GetStaticProps } from "next" 4 | import { Article } from "types" 5 | import { BLOG_PER_PAGE } from "utils" 6 | 7 | type Props = { 8 | contents: Article[] 9 | totalCount: number 10 | } 11 | 12 | export default function Blog({ contents, totalCount }: Props) { 13 | return 14 | } 15 | 16 | // データをテンプレートに受け渡す部分の処理を記述します 17 | export const getStaticProps: GetStaticProps = async (context) => { 18 | const data: { 19 | contents: Article[] 20 | totalCount: number 21 | } = await getBlog({ offset: 0, limit: BLOG_PER_PAGE }) 22 | return { 23 | props: { 24 | contents: data.contents, 25 | totalCount: data.totalCount, 26 | }, 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/lib/api/index.ts: -------------------------------------------------------------------------------- 1 | import { BLOG_API } from "utils" 2 | 3 | // Next.js API route support: https://nextjs.org/docs/api-routes/introduction 4 | const key = { 5 | headers: { "X-API-KEY": process.env.API_KEY ?? "" }, 6 | } 7 | 8 | export const getBlog = async (args?: { offset: number; limit: number }) => { 9 | const params = args ? `?offset=${args.offset}&limit=${args.limit}` : "" 10 | try { 11 | return await fetch(`${BLOG_API}${params}`, key) 12 | .then((res) => res.json()) 13 | .catch(() => null) 14 | } catch (error) {} 15 | } 16 | 17 | export const getArticle = async (id: string, draftKey?: string) => { 18 | const params = draftKey ? `?draftKey=${draftKey}` : "" 19 | try { 20 | return await fetch(`${BLOG_API}/${id}${params}`, key) 21 | .then((res) => res.json()) 22 | .catch(() => null) 23 | } catch (error) {} 24 | } 25 | -------------------------------------------------------------------------------- /src/pages/api/preview.ts: -------------------------------------------------------------------------------- 1 | import type { NextApiRequest, NextApiResponse } from "next" 2 | import fetch from "node-fetch" 3 | 4 | export default async function preview(req: NextApiRequest, res: NextApiResponse) { 5 | if (!req.query.slug) { 6 | return res.status(404).end() 7 | } 8 | const content = (await fetch( 9 | `https://marina.microcms.io/api/v1/blog/${req.query.slug}?fields=id&draftKey=${req.query.draftKey}`, 10 | { headers: { "X-API-KEY": process.env.API_KEY || "" } } 11 | ) 12 | .then((res) => res.json()) 13 | .catch((error) => null)) as { id: string } 14 | 15 | if (!content) { 16 | return res.status(401).json({ message: "Invalid slug" }) 17 | } 18 | 19 | res.setPreviewData({ 20 | slug: content.id, 21 | draftKey: req.query.draftKey, 22 | }) 23 | res.writeHead(307, { Location: `/blog/${content.id}` }) //リダイレクト 24 | res.end("Preview mode enabled") 25 | } 26 | -------------------------------------------------------------------------------- /src/types/index.ts: -------------------------------------------------------------------------------- 1 | export type Member = { 2 | name: string; 3 | avatarSrc: string; 4 | sources: string[]; 5 | githubUsername: string; 6 | twitterUsername: string; 7 | }; 8 | export type PostItem = { 9 | authorName: string; 10 | title: string; 11 | link: string; 12 | contentSnippet?: string; 13 | isoDate?: string; 14 | dateMiliSeconds: number; 15 | sourceType?: "qiita" | "zenn"; 16 | }; 17 | 18 | export type FeedItem = { 19 | title: string; 20 | link: string; 21 | contentSnippet?: string; 22 | isoDate?: string; 23 | dateMiliSeconds: number; 24 | }; 25 | 26 | export type Category = { 27 | name: string; 28 | }; 29 | 30 | export type Article = { 31 | id: string; 32 | title: string; 33 | body: string; 34 | publishedAt: string; 35 | category: Category | null; 36 | }; 37 | 38 | export type Draft = Article & { 39 | publishedAt?: string; 40 | }; 41 | 42 | export type Skill = { 43 | name: string; 44 | }; 45 | -------------------------------------------------------------------------------- /src/components/templates/BlogIndex.tsx: -------------------------------------------------------------------------------- 1 | import { ArticleIndexCard } from "components" 2 | import { FC } from "react" 3 | import { Article } from "types" 4 | 5 | type Props = { 6 | contents: Article[] 7 | totalCount: number 8 | currentPage: number 9 | } 10 | 11 | export const BlogIndex: FC = ({ contents, totalCount, currentPage }) => { 12 | return ( 13 | <> 14 |
      15 | {contents?.map((article) => ( 16 |
    • 17 | 18 |
    • 19 | ))} 20 |
    21 | {/* */} 22 | {/*
    23 | Others 24 | 25 |
    26 |

    読んだ記事一覧

    27 | 28 |
    29 | 30 |
    */} 31 | 32 | ) 33 | } 34 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es5", 4 | "lib": [ 5 | "dom", 6 | "dom.iterable", 7 | "esnext" 8 | ], 9 | "allowJs": true, 10 | "skipLibCheck": true, 11 | "strict": true, 12 | "forceConsistentCasingInFileNames": true, 13 | "noEmit": true, 14 | "esModuleInterop": true, 15 | "module": "esnext", 16 | "moduleResolution": "node", 17 | "resolveJsonModule": true, 18 | "isolatedModules": true, 19 | "jsx": "preserve", 20 | "baseUrl": ".", 21 | "paths": { 22 | "@*": [ 23 | "./*" 24 | ], 25 | "components": [ 26 | "./src/components" 27 | ], 28 | "lib": [ 29 | "./src/lib" 30 | ], 31 | "types": [ 32 | "./src/types" 33 | ], 34 | "utils": [ 35 | "./src/utils" 36 | ] 37 | }, 38 | "incremental": true 39 | }, 40 | "include": [ 41 | "next-env.d.ts", 42 | "**/*.ts", 43 | "**/*.tsx", 44 | "src/pages/api/user.js" 45 | ], 46 | "exclude": [ 47 | "node_modules" 48 | ] 49 | } 50 | -------------------------------------------------------------------------------- /public/vercel.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | -------------------------------------------------------------------------------- /src/components/SkillIcon.tsx: -------------------------------------------------------------------------------- 1 | import React, { FC } from "react" 2 | import { skills } from "utils" 3 | import { 4 | ApolloIcon, 5 | BlitzIcon, 6 | CssIcon, 7 | GraphqlIcon, 8 | HtmlIcon, 9 | JavaScriptIcon, 10 | RailsIcon, 11 | ReactIcon, 12 | RubyIcon, 13 | TypeScriptIcon, 14 | } from "./icons" 15 | 16 | type Props = { 17 | name: typeof skills[number]["name"] 18 | } 19 | 20 | export const SkillIcon: FC = (props) => { 21 | const { name } = props 22 | 23 | switch (name) { 24 | case "React": 25 | return 26 | case "GraphQL": 27 | return 28 | case "Apollo": 29 | return 30 | case "TypeScript": 31 | return 32 | case "JavaScript": 33 | return 34 | case "html": 35 | return 36 | case "css": 37 | return 38 | case "blitz": 39 | return 40 | case "Ruby": 41 | return 42 | case "RubyOnRails": 43 | return 44 | default: 45 | return null 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 marina 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /src/pages/blog/page/[id].tsx: -------------------------------------------------------------------------------- 1 | import { BlogIndex } from "components" 2 | import { getBlog } from "lib" 3 | import { GetStaticProps } from "next" 4 | import { Article } from "types" 5 | import { BLOG_PER_PAGE, range } from "utils" 6 | 7 | type Props = { 8 | contents: Article[] 9 | totalCount: number 10 | currentPage: number 11 | } 12 | 13 | export default function BlogPageId({ contents, totalCount, currentPage }: Props) { 14 | return 15 | } 16 | 17 | // 動的なページを作成 18 | export const getStaticPaths = async () => { 19 | const data = await getBlog() 20 | const paths = range(1, Math.ceil(data.totalCount / BLOG_PER_PAGE)).map( 21 | (repo) => `/blog/page/${repo}` 22 | ) 23 | return { paths, fallback: false } 24 | } 25 | 26 | // データを取得 27 | export const getStaticProps: GetStaticProps = async (context) => { 28 | const id = context.params?.id as string 29 | const offset = (Number(id) - 1) * BLOG_PER_PAGE 30 | const data: { 31 | contents: Article[] 32 | totalCount: number 33 | } = await getBlog({ offset, limit: BLOG_PER_PAGE }) 34 | return { 35 | props: { 36 | contents: data.contents, 37 | totalCount: data.totalCount, 38 | currentPage: Number(id), 39 | }, 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /src/components/cards/ArticleIndexCard.tsx: -------------------------------------------------------------------------------- 1 | import { format } from "date-fns" 2 | import Link from "next/link" 3 | import { FC } from "react" 4 | import { Article } from "types" 5 | 6 | type Props = { 7 | article: Article 8 | } 9 | 10 | export const ArticleIndexCard: FC = (props): JSX.Element => { 11 | const { 12 | article: { id, title, publishedAt, category }, 13 | } = props 14 | 15 | return ( 16 | 17 |
    21 |
    {title}
    22 |
    23 | {category ? ( 24 |
    25 |
    26 | {category.name} 27 |
    28 |
    29 | ) : ( 30 |
    31 | )} 32 | 33 | {format(new Date(publishedAt), "yyyy/MM/dd")} 34 | 35 |
    36 |
    37 | 38 | ) 39 | } 40 | -------------------------------------------------------------------------------- /src/components/icons/ApolloIcon.tsx: -------------------------------------------------------------------------------- 1 | import React, { FC } from "react"; 2 | 3 | type Props = {}; 4 | 5 | export const ApolloIcon: FC = () => { 6 | 7 | return ( 8 | 15 | 16 | 20 | 21 | 22 | ); 23 | }; 24 | -------------------------------------------------------------------------------- /src/components/layouts/Header.tsx: -------------------------------------------------------------------------------- 1 | import { Logo } from "@src/components/icons" 2 | import Link from "next/link" 3 | import { FC } from "react" 4 | 5 | type Props = {} 6 | 7 | export const Header: FC = (props) => { 8 | return ( 9 |
    10 |
    11 |
    12 | 13 |
    14 | 15 |
    16 | 17 |
    18 | 19 |
    20 | {/* 21 | 25 | Blog 26 | 27 | */} 28 | {/* 29 |
    33 | Articles 34 |
    35 | */} 36 | {/* 37 | 38 | Contact 39 | 40 | */} 41 |
    42 |
    43 |
    44 | ) 45 | } 46 | -------------------------------------------------------------------------------- /src/components/common/Meta.tsx: -------------------------------------------------------------------------------- 1 | import Head from "next/head" 2 | 3 | type Props = { 4 | children?: React.ReactNode 5 | title?: string 6 | description?: string 7 | image?: string 8 | type?: string 9 | } 10 | 11 | export const Meta: React.FC = (props) => { 12 | const { image, type, children } = props 13 | const description = props.description ?? "" 14 | const title = props.title ? `${props.title} - marinya.dev` : `marinya.dev` 15 | return ( 16 | 17 | {title} 18 | 19 | 20 | 21 | 29 | 30 | 31 | 32 | 33 | 41 | {children} 42 | 43 | ) 44 | } 45 | -------------------------------------------------------------------------------- /src/components/cards/ProfileCard.tsx: -------------------------------------------------------------------------------- 1 | import { EmailIcon, GithubIcon, ProfileIcon, TwitterIcon, ZennIcon } from "components" 2 | import Image from "next/image" 3 | import { FC } from "react" 4 | 5 | type Props = {} 6 | 7 | export const ProfileCard: FC = () => { 8 | return ( 9 |
    10 |
    11 | neko icon 18 |
    19 | 20 |

    Malillu (Marina)

    21 |

    Software Engineer

    22 | 23 |

    React Native Lover

    24 | 25 |
      26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 |
    39 |
    40 | ) 41 | } 42 | -------------------------------------------------------------------------------- /src/components/icons/Logo.tsx: -------------------------------------------------------------------------------- 1 | import React, { FC } from "react"; 2 | 3 | type Props = {}; 4 | 5 | export const Logo: FC = () => { 6 | 7 | return ( 8 | 15 | 19 | 20 | ); 21 | }; 22 | -------------------------------------------------------------------------------- /src/pages/articles/index.tsx: -------------------------------------------------------------------------------- 1 | import posts from "@.contents/posts.json" 2 | import { Header, Meta, PostList, Title } from "@src/components" 3 | import { PostItem } from "@src/types" 4 | import { BlogIndex } from "components" 5 | import { getBlog } from "lib" 6 | import { GetStaticProps } from "next" 7 | import React from "react" 8 | import { Article } from "types" 9 | import { BLOG_PER_PAGE } from "utils" 10 | 11 | type Props = { 12 | contents: any 13 | totalCount: number 14 | } 15 | 16 | export default function Articles(props: Props) { 17 | const { contents, totalCount } = props 18 | 19 | return ( 20 | <> 21 | 26 |
    27 |
    28 |
    29 | Articles 30 | 31 |
    32 |
    33 | Blog 34 | 35 |
    36 |
    37 | 38 | ) 39 | } 40 | 41 | export const getStaticProps: GetStaticProps = async (context) => { 42 | const data: { 43 | contents: Article[] 44 | totalCount: number 45 | } = await getBlog({ offset: 0, limit: BLOG_PER_PAGE }) 46 | return { 47 | props: { 48 | contents: data.contents, 49 | totalCount: data.totalCount, 50 | }, 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /src/pages/index.tsx: -------------------------------------------------------------------------------- 1 | import { getBlog } from "@src/lib" 2 | import { Article } from "@src/types" 3 | import { BLOG_PER_PAGE } from "@src/utils" 4 | import { About, Header, Meta, ProfileCard } from "components" 5 | import { GetStaticProps } from "next" 6 | import { useEffect } from "react" 7 | 8 | type Props = { 9 | contents: any 10 | totalCount: number 11 | } 12 | 13 | export default function Home(props: Props) { 14 | console.log("please Enter s on window") 15 | 16 | useEffect(() => { 17 | const escFunction = (e: KeyboardEvent) => { 18 | if (e.keyCode === 83) { 19 | const log = "🍺".repeat(10000) 20 | console.log(log) 21 | } 22 | } 23 | document.addEventListener("keydown", escFunction, false) 24 | }, []) 25 | 26 | return ( 27 | <> 28 | 33 |
    34 |
    35 |
    36 | 37 |
    38 | 39 | 40 |
    41 | 42 | ) 43 | } 44 | 45 | export const getStaticProps: GetStaticProps = async (context) => { 46 | const data: { 47 | contents: Article[] 48 | totalCount: number 49 | } = await getBlog({ offset: 0, limit: BLOG_PER_PAGE }) 50 | return { 51 | props: { 52 | contents: data.contents, 53 | totalCount: data.totalCount, 54 | }, 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /src/builder/posts.ts: -------------------------------------------------------------------------------- 1 | import fs from "fs-extra" 2 | import Parser from "rss-parser" 3 | import { FeedItem, PostItem } from "types" 4 | import { member } from "../utils" 5 | 6 | const POSTS_BUILDER = {} 7 | export default POSTS_BUILDER 8 | 9 | const parser = new Parser() 10 | 11 | async function fetchFeedItems(url: string) { 12 | const feed = await parser.parseURL(url) 13 | let sourceType: PostItem["sourceType"] 14 | if (url.indexOf("zenn") !== -1) { 15 | sourceType = "zenn" 16 | } else if (url.indexOf("qiita") !== -1) { 17 | sourceType = "qiita" 18 | } 19 | 20 | if (!feed?.items?.length) return [] 21 | 22 | // return item which has title and link 23 | return feed.items 24 | .map(({ title, contentSnippet, link, isoDate }) => { 25 | return { 26 | title, 27 | contentSnippet: contentSnippet?.replace(/\n/g, ""), 28 | link, 29 | isoDate, 30 | dateMiliSeconds: isoDate ? new Date(isoDate).getTime() : 0, 31 | sourceType, 32 | } 33 | }) 34 | .filter(({ title, link }) => title && link) as FeedItem[] 35 | } 36 | 37 | async function getFeedItemsFromSources(sources: undefined | string[]) { 38 | if (!sources?.length) return [] 39 | let feedItems: FeedItem[] = [] 40 | try { 41 | for (const url of sources) { 42 | const items = await fetchFeedItems(url) 43 | if (items) feedItems = [...feedItems, ...items] 44 | } 45 | return feedItems 46 | } catch (error) {} 47 | } 48 | 49 | ;(async function () { 50 | const items = (await getFeedItemsFromSources(member.sources)) ?? [] 51 | items.sort((a, b) => b.dateMiliSeconds - a.dateMiliSeconds) 52 | fs.ensureDirSync(".contents") 53 | fs.writeJsonSync(".contents/posts.json", items) 54 | })() 55 | -------------------------------------------------------------------------------- /.contents/posts.json: -------------------------------------------------------------------------------- 1 | [{"title":"TypeScript:空オブジェクト用の型をつくりたい","contentSnippet":"やりたいことconst a: EmptyObject = {} //OKconst b: EmptyObject = {hoge: \"aaa\"} //NGconst c: EmptyObjec…","link":"https://qiita.com/malillu/items/992b0c6bcec8ffc74347","isoDate":"2021-02-27T01:27:30.000Z","dateMiliSeconds":1614389250000,"sourceType":"qiita"},{"title":"TypeScript:関数の引数に同じ長さの配列を渡したい","contentSnippet":"やりたいことrequireTwoSameLengthArrays([1, 2], [3, 4]); // okrequireTwoSameLengthArrays([1, 2], [3]); /…","link":"https://qiita.com/malillu/items/f2c6ef4e73fdabf607a2","isoDate":"2021-01-25T13:44:02.000Z","dateMiliSeconds":1611582242000,"sourceType":"qiita"},{"title":"Blitz.jsの議論から学ぶ,formik vs react-final-form vs react-hook-form","contentSnippet":"What should the default form library be in Blitz apps?BlitzがどのFormライブラリをデフォルトにするかの議論が参考になったので要約しまし…","link":"https://qiita.com/malillu/items/eee408c5e99d5b53416e","isoDate":"2021-01-07T03:35:13.000Z","dateMiliSeconds":1609990513000,"sourceType":"qiita"},{"title":"ExpoのOTA updateの仕様について","contentSnippet":"この記事は React Native アドベントカレンダーの24日目の記事です。ExpoのOTA updateの仕様が分かりづらく,はまりどころが多いので,注意点や自分でアレンジする方法をまとめました。 OTA updateとはOver The Air updateの略。App Store(またはGoogle Play)からアップデートしなくても最新のバージョンに更新できます。審査を通す必要がないので素早く最新のバージョンをユーザーに届けることができます。 OTA updateのやりかた$ expo publishたったこれだけです。 release-channe...","link":"https://zenn.dev/marin_a___/articles/7eec197a8c3579","isoDate":"2020-12-24T03:33:21.000Z","dateMiliSeconds":1608780801000,"sourceType":"zenn"},{"title":"Apollo Client × codegen でのLocalStateの使い方","contentSnippet":"この記事は GraphQL Advent Calendar 2020 19日目の記事です。前回の記事は @policeman-kh さんの GraphQLサーバーをJavaで実装してみる でした。Apollo ClientのLocal Stateと…","link":"https://qiita.com/malillu/items/9f47bf04ddc44aec4247","isoDate":"2020-12-19T15:39:48.000Z","dateMiliSeconds":1608392388000,"sourceType":"qiita"}] 2 | -------------------------------------------------------------------------------- /src/lib/data/career.ts: -------------------------------------------------------------------------------- 1 | export const career = [ 2 | { 3 | title: "株式会社Porme", 4 | since: "2019.08", 5 | until: "2019.11", 6 | body: "友人の起業したスタートアップでバックエンドエンジニアとして携わる。主にRailsを使用。", 7 | }, 8 | { 9 | title: "株式会社Palan", 10 | since: "2019.12", 11 | until: "2022.01", 12 | body: "バックエンド(3ヶ月)→モバイル(1年)→フロントエンド(半年)と一通り経験。Rails、React Native、Blitz.js、GraphQLなどを使用。", 13 | }, 14 | { 15 | title: "Appify Technologies, Inc.", 16 | since: "2021.05", 17 | until: "2021.08", 18 | body: "フロントエンド。ReactやGraphQLを使用。", 19 | }, 20 | { 21 | title: "株式会社サイバーエージェント", 22 | since: "2021.06", 23 | body: "Amebaマンガでパフォーマンスを改善。Reactを使用。", 24 | }, 25 | { 26 | title: "株式会社メルカリ", 27 | since: "2021.08", 28 | until: "2021.09", 29 | body: "メルカリのweb版でフロントエンドをやる。Reactを使用。", 30 | }, 31 | { 32 | title: "ピクシブ株式会社", 33 | since: "2021.10", 34 | until: "2021.11", 35 | body: "pixiv小説でフロントエンドとバックエンドをやる。React、Vue、PHPを使用。", 36 | }, 37 | { 38 | title: "株式会社Flatt Security", 39 | since: "2021.11", 40 | until: "2022.02", 41 | body: "Webのセキュリティからインフラのセキュリティまで、セキュリティ全般を学ぶ。", 42 | }, 43 | { 44 | title: "奈良先端科学技術大学院大学(NAIST)", 45 | since: "2022.02", 46 | until: "2022.03", 47 | body: "情報セキュリティ工学研究室のインターンシップでハードウェアセキュリティを学ぶ", 48 | }, 49 | { 50 | title: "???(secret)", 51 | since: "2022.03", 52 | until: "2022.09", 53 | body: "内定者インターン。バックエンドエンジニアでGoを使用。", 54 | }, 55 | { 56 | title: "株式会社Mentally", 57 | since: "2022.05", 58 | until: "2022.10", 59 | body: "メンタルケアのサービスを提供する。フルスタックエンジニアとして携わる。", 60 | }, 61 | { 62 | title: "ソニーグループ株式会社", 63 | since: "2022.09", 64 | body: "R&Dセンターでレーザの研究開発に携わる。", 65 | }, 66 | { 67 | title: "???(secret)", 68 | since: "2023.04", 69 | body: "新卒", 70 | isActive: true, 71 | }, 72 | ].reverse() 73 | -------------------------------------------------------------------------------- /src/components/icons/JavaScriptIcon.tsx: -------------------------------------------------------------------------------- 1 | import React, { FC } from "react"; 2 | 3 | type Props = {}; 4 | 5 | export const JavaScriptIcon: FC = () => { 6 | 7 | return ( 8 | 15 | 16 | 17 | 21 | 25 | 26 | 27 | ); 28 | }; 29 | -------------------------------------------------------------------------------- /src/components/PostList.tsx: -------------------------------------------------------------------------------- 1 | import { PostItem } from "@src/types" 2 | import { format } from "date-fns" 3 | import Link from "next/link" 4 | import { useState } from "react" 5 | import { PostIcon } from "./PostIcon" 6 | 7 | const PostLink: React.FC<{ item: PostItem }> = (props) => { 8 | const { title, isoDate, link, sourceType } = props.item 9 | return ( 10 |
  • 11 | 12 |
    13 | 14 |
    15 |

    {title}

    16 | 19 |
    20 |
    21 | 22 |
  • 23 | ) 24 | } 25 | 26 | export const PostList: React.FC<{ items: PostItem[] }> = (props) => { 27 | const [displayItemsCount, setDisplayItemsCount] = useState(32) 28 | const totalItemsCount = props.items?.length || 0 29 | const canLoadMore = totalItemsCount - displayItemsCount > 0 30 | 31 | if (!totalItemsCount) { 32 | return
    No posts yet
    33 | } 34 | 35 | return ( 36 | <> 37 |
      38 | {props.items.slice(0, displayItemsCount).map((item, i) => ( 39 | 40 | ))} 41 |
    42 | {canLoadMore && ( 43 |
    44 | 50 |
    51 | )} 52 | 53 | ) 54 | } 55 | -------------------------------------------------------------------------------- /src/components/about/About.tsx: -------------------------------------------------------------------------------- 1 | import posts from "@.contents/posts.json" 2 | import { career, qualifications, trainingPrograms } from "@src/lib" 3 | import { PostItem } from "@src/types" 4 | import { 5 | AboutItem, 6 | AboutSection, 7 | BlogIndex, 8 | HackathonList, 9 | LinkList, 10 | PostList, 11 | SkillList, 12 | } from "components" 13 | type Props = { 14 | contents: any 15 | totalCount: number 16 | } 17 | export const About = (props: Props) => { 18 | const { contents, totalCount } = props 19 | 20 | return ( 21 | <> 22 | 23 |
    24 |
      25 |
    • 東京大学2023年卒
    • 26 |
    27 |
    28 |
    29 | 30 |
      31 | {career.map((content, i) => ( 32 | 42 | ))} 43 |
    44 |
    45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | ) 68 | } 69 | -------------------------------------------------------------------------------- /src/components/Pagination.tsx: -------------------------------------------------------------------------------- 1 | import { range } from "@src/utils/commonFuns" 2 | import { ChevronLeftIcon, ChevronRightIcon } from "components" 3 | import Link from "next/link" 4 | import { FC } from "react" 5 | 6 | type Props = { 7 | totalCount: number 8 | currentPage: number 9 | perPage?: number 10 | } 11 | 12 | export const Pagination: FC = ({ totalCount, currentPage, perPage = 5 }) => { 13 | if (totalCount <= perPage) return null 14 | const maxPage = Math.ceil(totalCount / perPage) 15 | return ( 16 |
    17 |
    18 | {currentPage > 1 && ( 19 | 20 |
    21 | 22 |
    23 | 24 | )} 25 |
    26 |
      27 | {range(1, maxPage).map((number, index) => { 28 | const isActive = currentPage === number 29 | return ( 30 |
    • 31 | 32 |
      39 | {number} 40 |
      41 | 42 |
    • 43 | ) 44 | })} 45 |
    46 |
    47 | {currentPage < maxPage && ( 48 | 49 |
    50 | 51 |
    52 | 53 | )} 54 |
    55 |
    56 | ) 57 | } 58 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "microcms-next-jamstack-blog", 3 | "version": "0.1.0", 4 | "private": true, 5 | "engines": { 6 | "node": "22.x" 7 | }, 8 | "scripts": { 9 | "dev": "next dev", 10 | "build": "run-s build:posts build:next", 11 | "build:posts": "ts-node --project tsconfig.builder.json ./src/builder/posts.ts", 12 | "build:next": "next build", 13 | "start": "next start", 14 | "lint": "eslint --ignore-path .gitignore --ext .js,.ts,.tsx ." 15 | }, 16 | "prettier": { 17 | "semi": false, 18 | "printWidth": 100 19 | }, 20 | "prepare": "husky install", 21 | "husky": { 22 | "hooks": { 23 | "pre-commit": "lint-staged && pretty-quick --staged", 24 | "pre-push": "tsc && npm run lint" 25 | } 26 | }, 27 | "lint-staged": { 28 | "*.{js,ts,tsx}": [ 29 | "eslint --fix" 30 | ], 31 | "*.{ts,tsx}": [ 32 | "organize-imports-cli" 33 | ] 34 | }, 35 | "dependencies": { 36 | "@tailwindcss/typography": "^0.5.8", 37 | "@typescript-eslint/eslint-plugin": "^5.47.1", 38 | "@typescript-eslint/parser": "^5.47.1", 39 | "autoprefixer": "^10.4.13", 40 | "babel-eslint": "^10.1.0", 41 | "date-fns": "^2.29.3", 42 | "eslint": "^8.31.0", 43 | "eslint-config-react-app": "^7.0.1", 44 | "eslint-plugin-flowtype": "^8.0.3", 45 | "eslint-plugin-import": "^2.26.0", 46 | "eslint-plugin-jsx-a11y": "^6.6.1", 47 | "eslint-plugin-react": "^7.31.11", 48 | "eslint-plugin-react-hooks": "^4.6.0", 49 | "fs-extra": "^11.1.0", 50 | "husky": "^8.0.2", 51 | "lint-staged": "^13.1.0", 52 | "next": "^13.1.1", 53 | "node-fetch": "^3.3.0", 54 | "organize-imports-cli": "^0.10.0", 55 | "postcss": "^8.4.20", 56 | "prettier": "^2.8.1", 57 | "pretty-quick": "^3.1.3", 58 | "react": "^18.2.0", 59 | "react-dom": "^18.2.0", 60 | "rss-parser": "^3.12.0", 61 | "tailwindcss": "^3.2.4" 62 | }, 63 | "devDependencies": { 64 | "@types/fs-extra": "^9.0.13", 65 | "@types/node": "^18.11.18", 66 | "@types/node-fetch": "^2.6.2", 67 | "@types/react": "^18.0.26", 68 | "npm-run-all": "^4.1.5", 69 | "ts-node": "^10.9.1", 70 | "typescript": "^4.9.4" 71 | } 72 | } 73 | -------------------------------------------------------------------------------- /src/components/icons/HasuraIcon.tsx: -------------------------------------------------------------------------------- 1 | import React, { FC } from "react"; 2 | 3 | type Props = {}; 4 | 5 | export const HasuraIcon: FC = () => { 6 | 7 | return ( 8 | 15 | 16 | 23 | 27 | 31 | 32 | 33 | ); 34 | }; 35 | -------------------------------------------------------------------------------- /src/pages/blog/[id].tsx: -------------------------------------------------------------------------------- 1 | import { Header, Meta } from "components" 2 | import { format } from "date-fns" 3 | import { getArticle, getBlog } from "lib" 4 | import type { GetStaticProps } from "next" 5 | import { useEffect, useState } from "react" 6 | import { Article, Draft } from "types" 7 | 8 | // pages/blog/[id].js 9 | export default function BlogId({ blog, preview }: { blog: Article | Draft; preview: boolean }) { 10 | const url = `https://og-image-1.vercel.app/${blog.title}.png` 11 | const [loaded, setLoaded] = useState(false) 12 | useEffect(() => { 13 | const s = document.createElement("script") 14 | s.setAttribute("src", "https://platform.twitter.com/widgets.js") 15 | s.setAttribute("async", "true") 16 | document.head.appendChild(s) 17 | setLoaded(true) 18 | }, []) 19 | 20 | return ( 21 | <> 22 | 23 |
    24 | {preview && ( 25 | 26 | プレビューモードを解除 27 | 28 | )} 29 |
    30 | {loaded && ( 31 |
    32 |
    33 |

    34 | {preview ? "※下書き" : format(new Date(blog.publishedAt), "yyyy/MM/dd")} 35 |

    36 |

    37 | {blog.title} 38 |

    39 | {blog.category &&
    #{blog.category.name}
    } 40 |
    41 |
    47 |
    48 | )} 49 |
    50 | 51 | ) 52 | } 53 | 54 | // 静的生成のためのパスを指定します 55 | export const getStaticPaths = async () => { 56 | const data = await getBlog() 57 | const paths = data.contents.map((content: { id: string }) => `/blog/${content.id}`) 58 | return { paths, fallback: false } 59 | } 60 | 61 | // データをテンプレートに受け渡す部分の処理を記述します 62 | export const getStaticProps: GetStaticProps = async (context) => { 63 | const draftKey = (context.previewData as any)?.draftKey 64 | const id = context.params?.id 65 | const data = typeof id === "string" ? await getArticle(id, draftKey) : null 66 | return { 67 | props: { 68 | blog: data, 69 | preview: context.params?.preview || false, 70 | }, 71 | } 72 | } 73 | -------------------------------------------------------------------------------- /src/components/about/AboutItem.tsx: -------------------------------------------------------------------------------- 1 | import React, { FC } from "react" 2 | 3 | type Props = { 4 | since: string 5 | until?: string 6 | title: string 7 | body?: string 8 | isLast?: boolean 9 | isFirst?: boolean 10 | isActive?: boolean 11 | } 12 | 13 | export const AboutItem: FC = (props) => { 14 | const { title, since, until, body, isLast, isFirst, isActive } = props 15 | const hasUpperLine = !isFirst 16 | const hasBottomLine = !isLast 17 | 18 | return ( 19 |
  • 20 |
    21 |
    22 |

    23 | {title} 24 |

    25 | 78 | {body && ( 79 |

    80 | {body} 81 |

    82 | )} 83 |
    84 |
    85 |
  • 86 | ) 87 | } 88 | -------------------------------------------------------------------------------- /src/components/icons/CssIcon.tsx: -------------------------------------------------------------------------------- 1 | import React, { FC } from "react"; 2 | 3 | type Props = {}; 4 | 5 | export const CssIcon: FC = () => { 6 | 7 | return ( 8 | 15 | 16 | 20 | 24 | 28 | 32 | 36 | 40 | 44 | 48 | 52 | 53 | 54 | ); 55 | }; 56 | -------------------------------------------------------------------------------- /src/components/icons/BlitzIcon.tsx: -------------------------------------------------------------------------------- 1 | import React, { FC } from "react"; 2 | 3 | type Props = {}; 4 | 5 | export const BlitzIcon: FC = () => { 6 | 7 | return ( 8 | 15 | 16 | 20 | 21 | 25 | 26 | 27 | 28 | 37 | 38 | 43 | 44 | 45 | 49 | 54 | 60 | 61 | 69 | 70 | 71 | 72 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | ); 89 | }; 90 | -------------------------------------------------------------------------------- /src/components/icons/HtmlIcon.tsx: -------------------------------------------------------------------------------- 1 | import React, { FC } from "react"; 2 | 3 | type Props = {}; 4 | 5 | export const HtmlIcon: FC = () => { 6 | 7 | return ( 8 | 15 | 16 | 20 | 24 | 28 | 32 | 36 | 40 | 44 | 48 | 52 | 56 | 57 | 58 | ); 59 | }; 60 | -------------------------------------------------------------------------------- /src/components/icons/TypeScriptIcon.tsx: -------------------------------------------------------------------------------- 1 | import React, { FC } from "react"; 2 | 3 | type Props = {}; 4 | 5 | export const TypeScriptIcon: FC = () => { 6 | 7 | return ( 8 | 16 | 17 | 22 | 27 | 32 | 33 | 34 | ); 35 | }; 36 | -------------------------------------------------------------------------------- /src/components/icons/GraphqlIcon.tsx: -------------------------------------------------------------------------------- 1 | import React, { FC } from "react"; 2 | 3 | type Props = {}; 4 | 5 | export const GraphqlIcon: FC = () => { 6 | 7 | return ( 8 | 15 | 16 | 20 | 21 | 22 | ); 23 | }; 24 | -------------------------------------------------------------------------------- /src/components/icons/RailsIcon.tsx: -------------------------------------------------------------------------------- 1 | import React, { FC } from "react"; 2 | 3 | type Props = {}; 4 | 5 | export const RailsIcon: FC = () => { 6 | 7 | return ( 8 | 15 | 16 | 17 | 18 | 19 | 20 | ); 21 | }; 22 | -------------------------------------------------------------------------------- /src/components/icons/ReactIcon.tsx: -------------------------------------------------------------------------------- 1 | import React, { FC } from "react"; 2 | 3 | type Props = {}; 4 | 5 | export const ReactIcon: FC = () => { 6 | 7 | return ( 8 | 15 | 16 | 20 | 21 | 22 | ); 23 | }; 24 | -------------------------------------------------------------------------------- /src/components/icons/RubyIcon.tsx: -------------------------------------------------------------------------------- 1 | import React, { FC } from "react"; 2 | 3 | type Props = {}; 4 | 5 | export const RubyIcon: FC = () => { 6 | 7 | return ( 8 | 15 | 16 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 36 | 37 | 38 | 39 | 40 | 41 | 48 | 49 | 50 | 51 | 52 | 53 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 159 | 160 | 161 | 162 | 163 | 164 | 171 | 172 | 173 | 174 | 175 | 176 | 184 | 185 | 186 | 187 | 188 | 189 | 197 | 198 | 199 | 200 | 201 | 202 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | 234 | 238 | 242 | 246 | 250 | 254 | 258 | 262 | 266 | 270 | 274 | 278 | 282 | 286 | 290 | 294 | 298 | 302 | 303 | 304 | ); 305 | }; 306 | -------------------------------------------------------------------------------- /tsconfig.tsbuildinfo: -------------------------------------------------------------------------------- 1 | {"program":{"fileNames":["./node_modules/typescript/lib/lib.es5.d.ts","./node_modules/typescript/lib/lib.es2015.d.ts","./node_modules/typescript/lib/lib.es2016.d.ts","./node_modules/typescript/lib/lib.es2017.d.ts","./node_modules/typescript/lib/lib.es2018.d.ts","./node_modules/typescript/lib/lib.es2019.d.ts","./node_modules/typescript/lib/lib.es2020.d.ts","./node_modules/typescript/lib/lib.es2021.d.ts","./node_modules/typescript/lib/lib.es2022.d.ts","./node_modules/typescript/lib/lib.esnext.d.ts","./node_modules/typescript/lib/lib.dom.d.ts","./node_modules/typescript/lib/lib.dom.iterable.d.ts","./node_modules/typescript/lib/lib.es2015.core.d.ts","./node_modules/typescript/lib/lib.es2015.collection.d.ts","./node_modules/typescript/lib/lib.es2015.generator.d.ts","./node_modules/typescript/lib/lib.es2015.iterable.d.ts","./node_modules/typescript/lib/lib.es2015.promise.d.ts","./node_modules/typescript/lib/lib.es2015.proxy.d.ts","./node_modules/typescript/lib/lib.es2015.reflect.d.ts","./node_modules/typescript/lib/lib.es2015.symbol.d.ts","./node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","./node_modules/typescript/lib/lib.es2016.array.include.d.ts","./node_modules/typescript/lib/lib.es2017.object.d.ts","./node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2017.string.d.ts","./node_modules/typescript/lib/lib.es2017.intl.d.ts","./node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","./node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","./node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","./node_modules/typescript/lib/lib.es2018.intl.d.ts","./node_modules/typescript/lib/lib.es2018.promise.d.ts","./node_modules/typescript/lib/lib.es2018.regexp.d.ts","./node_modules/typescript/lib/lib.es2019.array.d.ts","./node_modules/typescript/lib/lib.es2019.object.d.ts","./node_modules/typescript/lib/lib.es2019.string.d.ts","./node_modules/typescript/lib/lib.es2019.symbol.d.ts","./node_modules/typescript/lib/lib.es2019.intl.d.ts","./node_modules/typescript/lib/lib.es2020.bigint.d.ts","./node_modules/typescript/lib/lib.es2020.date.d.ts","./node_modules/typescript/lib/lib.es2020.promise.d.ts","./node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2020.string.d.ts","./node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","./node_modules/typescript/lib/lib.es2020.intl.d.ts","./node_modules/typescript/lib/lib.es2020.number.d.ts","./node_modules/typescript/lib/lib.es2021.promise.d.ts","./node_modules/typescript/lib/lib.es2021.string.d.ts","./node_modules/typescript/lib/lib.es2021.weakref.d.ts","./node_modules/typescript/lib/lib.es2021.intl.d.ts","./node_modules/typescript/lib/lib.es2022.array.d.ts","./node_modules/typescript/lib/lib.es2022.error.d.ts","./node_modules/typescript/lib/lib.es2022.intl.d.ts","./node_modules/typescript/lib/lib.es2022.object.d.ts","./node_modules/typescript/lib/lib.es2022.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2022.string.d.ts","./node_modules/typescript/lib/lib.esnext.intl.d.ts","./node_modules/next/dist/styled-jsx/types/css.d.ts","./node_modules/@types/react/global.d.ts","./node_modules/csstype/index.d.ts","./node_modules/@types/prop-types/index.d.ts","./node_modules/@types/scheduler/tracing.d.ts","./node_modules/@types/react/index.d.ts","./node_modules/next/dist/styled-jsx/types/index.d.ts","./node_modules/next/dist/styled-jsx/types/macro.d.ts","./node_modules/next/dist/styled-jsx/types/style.d.ts","./node_modules/next/dist/styled-jsx/types/global.d.ts","./node_modules/next/dist/shared/lib/amp.d.ts","./node_modules/next/amp.d.ts","./node_modules/@types/node/assert.d.ts","./node_modules/@types/node/assert/strict.d.ts","./node_modules/@types/node/globals.d.ts","./node_modules/@types/node/async_hooks.d.ts","./node_modules/@types/node/buffer.d.ts","./node_modules/@types/node/child_process.d.ts","./node_modules/@types/node/cluster.d.ts","./node_modules/@types/node/console.d.ts","./node_modules/@types/node/constants.d.ts","./node_modules/@types/node/crypto.d.ts","./node_modules/@types/node/dgram.d.ts","./node_modules/@types/node/diagnostics_channel.d.ts","./node_modules/@types/node/dns.d.ts","./node_modules/@types/node/dns/promises.d.ts","./node_modules/@types/node/domain.d.ts","./node_modules/@types/node/dom-events.d.ts","./node_modules/@types/node/events.d.ts","./node_modules/@types/node/fs.d.ts","./node_modules/@types/node/fs/promises.d.ts","./node_modules/@types/node/http.d.ts","./node_modules/@types/node/http2.d.ts","./node_modules/@types/node/https.d.ts","./node_modules/@types/node/inspector.d.ts","./node_modules/@types/node/module.d.ts","./node_modules/@types/node/net.d.ts","./node_modules/@types/node/os.d.ts","./node_modules/@types/node/path.d.ts","./node_modules/@types/node/perf_hooks.d.ts","./node_modules/@types/node/process.d.ts","./node_modules/@types/node/punycode.d.ts","./node_modules/@types/node/querystring.d.ts","./node_modules/@types/node/readline.d.ts","./node_modules/@types/node/readline/promises.d.ts","./node_modules/@types/node/repl.d.ts","./node_modules/@types/node/stream.d.ts","./node_modules/@types/node/stream/promises.d.ts","./node_modules/@types/node/stream/consumers.d.ts","./node_modules/@types/node/stream/web.d.ts","./node_modules/@types/node/string_decoder.d.ts","./node_modules/@types/node/test.d.ts","./node_modules/@types/node/timers.d.ts","./node_modules/@types/node/timers/promises.d.ts","./node_modules/@types/node/tls.d.ts","./node_modules/@types/node/trace_events.d.ts","./node_modules/@types/node/tty.d.ts","./node_modules/@types/node/url.d.ts","./node_modules/@types/node/util.d.ts","./node_modules/@types/node/v8.d.ts","./node_modules/@types/node/vm.d.ts","./node_modules/@types/node/wasi.d.ts","./node_modules/@types/node/worker_threads.d.ts","./node_modules/@types/node/zlib.d.ts","./node_modules/@types/node/globals.global.d.ts","./node_modules/@types/node/index.d.ts","./node_modules/next/dist/server/get-page-files.d.ts","./node_modules/next/dist/compiled/webpack/webpack.d.ts","./node_modules/next/dist/server/config.d.ts","./node_modules/next/dist/lib/load-custom-routes.d.ts","./node_modules/next/dist/shared/lib/image-config.d.ts","./node_modules/next/dist/build/webpack/plugins/subresource-integrity-plugin.d.ts","./node_modules/next/dist/server/config-shared.d.ts","./node_modules/next/dist/server/base-http/index.d.ts","./node_modules/next/dist/server/api-utils/index.d.ts","./node_modules/next/dist/server/initialize-require-hook.d.ts","./node_modules/next/dist/shared/lib/router/utils/route-regex.d.ts","./node_modules/next/dist/shared/lib/router/utils/route-matcher.d.ts","./node_modules/next/dist/server/body-streams.d.ts","./node_modules/next/dist/server/request-meta.d.ts","./node_modules/next/dist/server/router.d.ts","./node_modules/next/dist/build/analysis/get-page-static-info.d.ts","./node_modules/next/dist/build/webpack/loaders/get-module-build-info.d.ts","./node_modules/next/dist/build/webpack/plugins/middleware-plugin.d.ts","./node_modules/next/dist/server/render-result.d.ts","./node_modules/next/dist/server/web/next-url.d.ts","./node_modules/next/dist/server/web/spec-extension/cookies/types.d.ts","./node_modules/next/dist/server/web/spec-extension/cookies/request-cookies.d.ts","./node_modules/next/dist/server/web/spec-extension/cookies/response-cookies.d.ts","./node_modules/next/dist/server/web/spec-extension/cookies/index.d.ts","./node_modules/next/dist/server/web/spec-extension/request.d.ts","./node_modules/next/dist/server/web/spec-extension/fetch-event.d.ts","./node_modules/next/dist/server/web/spec-extension/response.d.ts","./node_modules/next/dist/server/web/types.d.ts","./node_modules/next/dist/build/index.d.ts","./node_modules/next/dist/build/webpack/plugins/pages-manifest-plugin.d.ts","./node_modules/next/dist/server/send-payload/revalidate-headers.d.ts","./node_modules/next/dist/server/send-payload/index.d.ts","./node_modules/next/dist/server/base-http/node.d.ts","./node_modules/next/dist/server/font-utils.d.ts","./node_modules/next/dist/server/load-components.d.ts","./node_modules/next/dist/build/webpack/plugins/font-loader-manifest-plugin.d.ts","./node_modules/next/dist/server/render.d.ts","./node_modules/next/dist/shared/lib/router/utils/parse-url.d.ts","./node_modules/next/dist/shared/lib/router/utils/middleware-route-matcher.d.ts","./node_modules/next/dist/server/response-cache/types.d.ts","./node_modules/next/dist/server/response-cache/index.d.ts","./node_modules/next/dist/server/lib/incremental-cache/index.d.ts","./node_modules/next/dist/server/base-server.d.ts","./node_modules/next/dist/server/image-optimizer.d.ts","./node_modules/next/dist/server/next-server.d.ts","./node_modules/next/dist/server/dev/static-paths-worker.d.ts","./node_modules/next/dist/server/dev/next-dev-server.d.ts","./node_modules/next/dist/server/next.d.ts","./node_modules/next/types/index.d.ts","./node_modules/next/dist/shared/lib/html-context.d.ts","./node_modules/@next/env/types/index.d.ts","./node_modules/next/dist/shared/lib/mitt.d.ts","./node_modules/next/dist/client/with-router.d.ts","./node_modules/next/dist/client/router.d.ts","./node_modules/next/dist/client/route-loader.d.ts","./node_modules/next/dist/client/page-loader.d.ts","./node_modules/next/dist/shared/lib/router/router.d.ts","./node_modules/next/dist/shared/lib/constants.d.ts","./node_modules/next/dist/shared/lib/utils.d.ts","./node_modules/next/dist/pages/_app.d.ts","./node_modules/next/app.d.ts","./node_modules/next/dist/shared/lib/runtime-config.d.ts","./node_modules/next/config.d.ts","./node_modules/next/dist/pages/_document.d.ts","./node_modules/next/document.d.ts","./node_modules/next/dist/shared/lib/dynamic.d.ts","./node_modules/next/dynamic.d.ts","./node_modules/next/dist/pages/_error.d.ts","./node_modules/next/error.d.ts","./node_modules/next/dist/shared/lib/head.d.ts","./node_modules/next/head.d.ts","./node_modules/next/dist/client/image.d.ts","./node_modules/next/image.d.ts","./node_modules/next/dist/client/link.d.ts","./node_modules/next/link.d.ts","./node_modules/next/router.d.ts","./node_modules/next/dist/client/script.d.ts","./node_modules/next/script.d.ts","./node_modules/next/dist/server/web/spec-extension/user-agent.d.ts","./node_modules/next/dist/compiled/@edge-runtime/primitives/url.d.ts","./node_modules/next/server.d.ts","./node_modules/next/types/global.d.ts","./node_modules/next/index.d.ts","./node_modules/next/image-types/global.d.ts","./next-env.d.ts","./node_modules/@types/fs-extra/index.d.ts","./node_modules/rss-parser/index.d.ts","./src/types/index.ts","./src/utils/commonfuns.ts","./src/utils/constants.ts","./src/utils/member.ts","./src/utils/skills.ts","./src/utils/index.ts","./src/builder/posts.ts","./src/lib/api/index.ts","./src/lib/data/career.ts","./src/lib/data/qualifications.ts","./src/lib/data/trainingprograms.ts","./src/lib/data/index.ts","./src/lib/index.ts","./src/components/about/about.tsx","./src/components/about/aboutitem.tsx","./src/components/title.tsx","./src/components/about/aboutsection.tsx","./src/components/about/index.ts","./node_modules/date-fns/typings.d.ts","./src/components/cards/articleindexcard.tsx","./src/components/cards/profilecard.tsx","./src/components/cards/index.ts","./src/components/common/meta.tsx","./src/components/common/index.ts","./src/components/hackathonlist.tsx","./src/components/icons/apolloicon.tsx","./src/components/icons/blitzicon.tsx","./src/components/icons/chevronlefticon.tsx","./src/components/icons/chevronrighticon.tsx","./src/components/icons/cssicon.tsx","./src/components/icons/emailicon.tsx","./src/components/icons/externallinkicon.tsx","./src/components/icons/githubicon.tsx","./src/components/icons/graphqlicon.tsx","./src/components/icons/hasuraicon.tsx","./src/components/icons/htmlicon.tsx","./src/components/icons/javascripticon.tsx","./src/components/icons/logo.tsx","./src/components/icons/railsicon.tsx","./src/components/icons/reacticon.tsx","./src/components/icons/rubyicon.tsx","./src/components/icons/twittericon.tsx","./src/components/icons/typescripticon.tsx","./src/components/icons/zennicon.tsx","./src/components/icons/index.ts","./src/components/layouts/header.tsx","./src/components/layouts/index.ts","./src/components/linklist.tsx","./src/components/pagination.tsx","./src/components/posticon.tsx","./src/components/postlist.tsx","./src/components/profileicon.tsx","./src/components/skillicon.tsx","./src/components/skilllist.tsx","./src/components/templates/blogindex.tsx","./src/components/templates/index.ts","./src/components/index.ts","./src/pages/api/clear-preview.ts","./node_modules/formdata-polyfill/esm.min.d.ts","./node_modules/fetch-blob/file.d.ts","./node_modules/fetch-blob/index.d.ts","./node_modules/fetch-blob/from.d.ts","./node_modules/node-fetch/@types/index.d.ts","./src/pages/api/preview.ts","./src/pages/404.tsx","./src/pages/_app.tsx","./src/pages/_document.tsx","./src/pages/index.tsx","./.contents/posts.json","./src/pages/articles/index.tsx","./src/pages/blog/[id].tsx","./src/pages/blog/index.tsx","./src/pages/blog/page/[id].tsx","./node_modules/@types/json-schema/index.d.ts","./node_modules/@types/json5/index.d.ts","./node_modules/@types/minimatch/index.d.ts","./node_modules/form-data/index.d.ts","./node_modules/@types/node-fetch/externals.d.ts","./node_modules/@types/node-fetch/index.d.ts","./node_modules/@types/parse-json/index.d.ts","./node_modules/@types/scheduler/index.d.ts","./node_modules/@types/semver/classes/semver.d.ts","./node_modules/@types/semver/functions/parse.d.ts","./node_modules/@types/semver/functions/valid.d.ts","./node_modules/@types/semver/functions/clean.d.ts","./node_modules/@types/semver/functions/inc.d.ts","./node_modules/@types/semver/functions/diff.d.ts","./node_modules/@types/semver/functions/major.d.ts","./node_modules/@types/semver/functions/minor.d.ts","./node_modules/@types/semver/functions/patch.d.ts","./node_modules/@types/semver/functions/prerelease.d.ts","./node_modules/@types/semver/functions/compare.d.ts","./node_modules/@types/semver/functions/rcompare.d.ts","./node_modules/@types/semver/functions/compare-loose.d.ts","./node_modules/@types/semver/functions/compare-build.d.ts","./node_modules/@types/semver/functions/sort.d.ts","./node_modules/@types/semver/functions/rsort.d.ts","./node_modules/@types/semver/functions/gt.d.ts","./node_modules/@types/semver/functions/lt.d.ts","./node_modules/@types/semver/functions/eq.d.ts","./node_modules/@types/semver/functions/neq.d.ts","./node_modules/@types/semver/functions/gte.d.ts","./node_modules/@types/semver/functions/lte.d.ts","./node_modules/@types/semver/functions/cmp.d.ts","./node_modules/@types/semver/functions/coerce.d.ts","./node_modules/@types/semver/classes/comparator.d.ts","./node_modules/@types/semver/classes/range.d.ts","./node_modules/@types/semver/functions/satisfies.d.ts","./node_modules/@types/semver/ranges/max-satisfying.d.ts","./node_modules/@types/semver/ranges/min-satisfying.d.ts","./node_modules/@types/semver/ranges/to-comparators.d.ts","./node_modules/@types/semver/ranges/min-version.d.ts","./node_modules/@types/semver/ranges/valid.d.ts","./node_modules/@types/semver/ranges/outside.d.ts","./node_modules/@types/semver/ranges/gtr.d.ts","./node_modules/@types/semver/ranges/ltr.d.ts","./node_modules/@types/semver/ranges/intersects.d.ts","./node_modules/@types/semver/ranges/simplify.d.ts","./node_modules/@types/semver/ranges/subset.d.ts","./node_modules/@types/semver/internals/identifiers.d.ts","./node_modules/@types/semver/index.d.ts","./node_modules/@types/strip-bom/index.d.ts","./node_modules/@types/strip-json-comments/index.d.ts","../../node_modules/@types/react-native/globals.d.ts","../../node_modules/@types/react-native/legacy-properties.d.ts","../../node_modules/@types/react-native/batchedbridge.d.ts","../../node_modules/@types/react-native/devtools.d.ts","../../node_modules/@types/react-native/launchscreen.d.ts","../../node_modules/@types/react/global.d.ts","../../node_modules/csstype/index.d.ts","../../node_modules/@types/prop-types/index.d.ts","../../node_modules/@types/scheduler/tracing.d.ts","../../node_modules/@types/react/index.d.ts","../../node_modules/@types/react-native/index.d.ts"],"fileInfos":[{"version":"8730f4bf322026ff5229336391a18bcaa1f94d4f82416c8b2f3954e2ccaae2ba","affectsGlobalScope":true},"dc47c4fa66b9b9890cf076304de2a9c5201e94b740cffdf09f87296d877d71f6","7a387c58583dfca701b6c85e0adaf43fb17d590fb16d5b2dc0a2fbd89f35c467","8a12173c586e95f4433e0c6dc446bc88346be73ffe9ca6eec7aa63c8f3dca7f9","5f4e733ced4e129482ae2186aae29fde948ab7182844c3a5a51dd346182c7b06","4b421cbfb3a38a27c279dec1e9112c3d1da296f77a1a85ddadf7e7a425d45d18","1fc5ab7a764205c68fa10d381b08417795fc73111d6dd16b5b1ed36badb743d9","746d62152361558ea6d6115cf0da4dd10ede041d14882ede3568bce5dc4b4f1f","d11a03592451da2d1065e09e61f4e2a9bf68f780f4f6623c18b57816a9679d17","aea179452def8a6152f98f63b191b84e7cbd69b0e248c91e61fb2e52328abe8c",{"version":"3aafcb693fe5b5c3bd277bd4c3a617b53db474fe498fc5df067c5603b1eebde7","affectsGlobalScope":true},{"version":"f3d4da15233e593eacb3965cde7960f3fddf5878528d882bcedd5cbaba0193c7","affectsGlobalScope":true},{"version":"adb996790133eb33b33aadb9c09f15c2c575e71fb57a62de8bf74dbf59ec7dfb","affectsGlobalScope":true},{"version":"8cc8c5a3bac513368b0157f3d8b31cfdcfe78b56d3724f30f80ed9715e404af8","affectsGlobalScope":true},{"version":"cdccba9a388c2ee3fd6ad4018c640a471a6c060e96f1232062223063b0a5ac6a","affectsGlobalScope":true},{"version":"c5c05907c02476e4bde6b7e76a79ffcd948aedd14b6a8f56e4674221b0417398","affectsGlobalScope":true},{"version":"5f406584aef28a331c36523df688ca3650288d14f39c5d2e555c95f0d2ff8f6f","affectsGlobalScope":true},{"version":"22f230e544b35349cfb3bd9110b6ef37b41c6d6c43c3314a31bd0d9652fcec72","affectsGlobalScope":true},{"version":"7ea0b55f6b315cf9ac2ad622b0a7813315bb6e97bf4bb3fbf8f8affbca7dc695","affectsGlobalScope":true},{"version":"3013574108c36fd3aaca79764002b3717da09725a36a6fc02eac386593110f93","affectsGlobalScope":true},{"version":"eb26de841c52236d8222f87e9e6a235332e0788af8c87a71e9e210314300410a","affectsGlobalScope":true},{"version":"3be5a1453daa63e031d266bf342f3943603873d890ab8b9ada95e22389389006","affectsGlobalScope":true},{"version":"17bb1fc99591b00515502d264fa55dc8370c45c5298f4a5c2083557dccba5a2a","affectsGlobalScope":true},{"version":"7ce9f0bde3307ca1f944119f6365f2d776d281a393b576a18a2f2893a2d75c98","affectsGlobalScope":true},{"version":"6a6b173e739a6a99629a8594bfb294cc7329bfb7b227f12e1f7c11bc163b8577","affectsGlobalScope":true},{"version":"81cac4cbc92c0c839c70f8ffb94eb61e2d32dc1c3cf6d95844ca099463cf37ea","affectsGlobalScope":true},{"version":"b0124885ef82641903d232172577f2ceb5d3e60aed4da1153bab4221e1f6dd4e","affectsGlobalScope":true},{"version":"0eb85d6c590b0d577919a79e0084fa1744c1beba6fd0d4e951432fa1ede5510a","affectsGlobalScope":true},{"version":"da233fc1c8a377ba9e0bed690a73c290d843c2c3d23a7bd7ec5cd3d7d73ba1e0","affectsGlobalScope":true},{"version":"d154ea5bb7f7f9001ed9153e876b2d5b8f5c2bb9ec02b3ae0d239ec769f1f2ae","affectsGlobalScope":true},{"version":"bb2d3fb05a1d2ffbca947cc7cbc95d23e1d053d6595391bd325deb265a18d36c","affectsGlobalScope":true},{"version":"c80df75850fea5caa2afe43b9949338ce4e2de086f91713e9af1a06f973872b8","affectsGlobalScope":true},{"version":"9d57b2b5d15838ed094aa9ff1299eecef40b190722eb619bac4616657a05f951","affectsGlobalScope":true},{"version":"6c51b5dd26a2c31dbf37f00cfc32b2aa6a92e19c995aefb5b97a3a64f1ac99de","affectsGlobalScope":true},{"version":"6e7997ef61de3132e4d4b2250e75343f487903ddf5370e7ce33cf1b9db9a63ed","affectsGlobalScope":true},{"version":"2ad234885a4240522efccd77de6c7d99eecf9b4de0914adb9a35c0c22433f993","affectsGlobalScope":true},{"version":"5e5e095c4470c8bab227dbbc61374878ecead104c74ab9960d3adcccfee23205","affectsGlobalScope":true},{"version":"09aa50414b80c023553090e2f53827f007a301bc34b0495bfb2c3c08ab9ad1eb","affectsGlobalScope":true},{"version":"d7f680a43f8cd12a6b6122c07c54ba40952b0c8aa140dcfcf32eb9e6cb028596","affectsGlobalScope":true},{"version":"3787b83e297de7c315d55d4a7c546ae28e5f6c0a361b7a1dcec1f1f50a54ef11","affectsGlobalScope":true},{"version":"e7e8e1d368290e9295ef18ca23f405cf40d5456fa9f20db6373a61ca45f75f40","affectsGlobalScope":true},{"version":"faf0221ae0465363c842ce6aa8a0cbda5d9296940a8e26c86e04cc4081eea21e","affectsGlobalScope":true},{"version":"06393d13ea207a1bfe08ec8d7be562549c5e2da8983f2ee074e00002629d1871","affectsGlobalScope":true},{"version":"2768ef564cfc0689a1b76106c421a2909bdff0acbe87da010785adab80efdd5c","affectsGlobalScope":true},{"version":"b248e32ca52e8f5571390a4142558ae4f203ae2f94d5bac38a3084d529ef4e58","affectsGlobalScope":true},{"version":"6c55633c733c8378db65ac3da7a767c3cf2cf3057f0565a9124a16a3a2019e87","affectsGlobalScope":true},{"version":"fb4416144c1bf0323ccbc9afb0ab289c07312214e8820ad17d709498c865a3fe","affectsGlobalScope":true},{"version":"5b0ca94ec819d68d33da516306c15297acec88efeb0ae9e2b39f71dbd9685ef7","affectsGlobalScope":true},{"version":"34c839eaaa6d78c8674ae2c37af2236dee6831b13db7b4ef4df3ec889a04d4f2","affectsGlobalScope":true},{"version":"34478567f8a80171f88f2f30808beb7da15eac0538ae91282dd33dce928d98ed","affectsGlobalScope":true},{"version":"ab7d58e6161a550ff92e5aff755dc37fe896245348332cd5f1e1203479fe0ed1","affectsGlobalScope":true},{"version":"6bda95ea27a59a276e46043b7065b55bd4b316c25e70e29b572958fa77565d43","affectsGlobalScope":true},{"version":"aedb8de1abb2ff1095c153854a6df7deae4a5709c37297f9d6e9948b6806fa66","affectsGlobalScope":true},{"version":"a4da0551fd39b90ca7ce5f68fb55d4dc0c1396d589b612e1902f68ee090aaada","affectsGlobalScope":true},{"version":"11ffe3c281f375fff9ffdde8bbec7669b4dd671905509079f866f2354a788064","affectsGlobalScope":true},{"version":"52d1bb7ab7a3306fd0375c8bff560feed26ed676a5b0457fa8027b563aecb9a4","affectsGlobalScope":true},"0990a7576222f248f0a3b888adcb7389f957928ce2afb1cd5128169086ff4d29",{"version":"bbdf156fea2fabed31a569445835aeedcc33643d404fcbaa54541f06c109df3f","affectsGlobalScope":true},"ea58e4cbcf3d760a15f9300978a360c46360f544b355c737b60c733a385b8858","a7e32dcb90bf0c1b7a1e4ac89b0f7747cbcba25e7beddc1ebf17be1e161842ad","f5a8b384f182b3851cec3596ccc96cb7464f8d3469f48c74bf2befb782a19de5",{"version":"ef8a481f9f2205fcc287eef2b4e461d2fc16bc8a0e49a844681f2f742d69747e","affectsGlobalScope":true},"cc69795d9954ee4ad57545b10c7bf1a7260d990231b1685c147ea71a6faa265c","8bc6c94ff4f2af1f4023b7bb2379b08d3d7dd80c698c9f0b07431ea16101f05f","1b61d259de5350f8b1e5db06290d31eaebebc6baafd5f79d314b5af9256d7153","57194e1f007f3f2cbef26fa299d4c6b21f4623a2eddc63dfeef79e38e187a36e","0f6666b58e9276ac3a38fdc80993d19208442d6027ab885580d93aec76b4ef00","05fd364b8ef02fb1e174fbac8b825bdb1e5a36a016997c8e421f5fab0a6da0a0","7e771891adaa85b690266bc37bd6eb43bc57eecc4b54693ead36467e7369952a","a69c09dbea52352f479d3e7ac949fde3d17b195abe90b045d619f747b38d6d1a",{"version":"ca72190df0eb9b09d4b600821c8c7b6c9747b75a1c700c4d57dc0bb72abc074c","affectsGlobalScope":true},"21a167fec8f933752fb8157f06d28fab6817af3ad9b0bdb1908a10762391eab9",{"version":"bb65c6267c5d6676be61acbf6604cf0a4555ac4b505df58ac15c831fcbff4e3e","affectsGlobalScope":true},"374ca798f244e464346f14301dc2a8b4b111af1a83b49fffef5906c338a1f922","5a94487653355b56018122d92392beb2e5f4a6c63ba5cef83bbe1c99775ef713",{"version":"d5135ad93b33adcce80b18f8065087934cdc1730d63db58562edcf017e1aad9b","affectsGlobalScope":true},"82408ed3e959ddc60d3e9904481b5a8dc16469928257af22a3f7d1a3bc7fd8c4","dab86d9604fe40854ef3c0a6f9e8948873dc3509213418e5e457f410fd11200f","bb9c4ffa5e6290c6980b63c815cdd1625876dadb2efaf77edbe82984be93e55e","489532ff54b714f0e0939947a1c560e516d3ae93d51d639ab02e907a0e950114","f30bb836526d930a74593f7b0f5c1c46d10856415a8f69e5e2fc3db80371e362","14b5aa23c5d0ae1907bc696ac7b6915d88f7d85799cc0dc2dcf98fbce2c5a67c","5c439dafdc09abe4d6c260a96b822fa0ba5be7203c71a63ab1f1423cd9e838ea",{"version":"6b526a5ec4a401ca7c26cfe6a48e641d8f30af76673bad3b06a1b4504594a960","affectsGlobalScope":true},{"version":"816ad2e607a96de5bcac7d437f843f5afd8957f1fa5eefa6bba8e4ed7ca8fd84","affectsGlobalScope":true},"cec36af22f514322f870e81d30675c78df82ae8bf4863f5fd4e4424c040c678d","d903fafe96674bc0b2ac38a5be4a8fc07b14c2548d1cdb165a80ea24c44c0c54","5eec82ac21f84d83586c59a16b9b8502d34505d1393393556682fe7e7fde9ef2","04eb6578a588d6a46f50299b55f30e3a04ef27d0c5a46c57d8fcc211cd530faa","8d3c583a07e0c37e876908c2d5da575019f689df8d9fa4c081d99119d53dba22","2c828a5405191d006115ab34e191b8474bc6c86ffdc401d1a9864b1b6e088a58",{"version":"e8b18c6385ff784228a6f369694fcf1a6b475355ba89090a88de13587a9391d5","affectsGlobalScope":true},"d076fede3cb042e7b13fc29442aaa03a57806bc51e2b26a67a01fbc66a7c0c12","7c013aa892414a7fdcfd861ae524a668eaa3ede8c7c0acafaf611948122c8d93","b0973c3cbcdc59b37bf477731d468696ecaf442593ec51bab497a613a580fe30",{"version":"4989e92ba5b69b182d2caaea6295af52b7dc73a4f7a2e336a676722884e7139d","affectsGlobalScope":true},{"version":"b3624aed92dab6da8484280d3cb3e2f4130ec3f4ef3f8201c95144ae9e898bb6","affectsGlobalScope":true},"5153a2fd150e46ce57bb3f8db1318d33f6ad3261ed70ceeff92281c0608c74a3","210d54cd652ec0fec8c8916e4af59bb341065576ecda039842f9ffb2e908507c","36b03690b628eab08703d63f04eaa89c5df202e5f1edf3989f13ad389cd2c091","0effadd232a20498b11308058e334d3339cc5bf8c4c858393e38d9d4c0013dcf","25846d43937c672bab7e8195f3d881f93495df712ee901860effc109918938cc","fd93cee2621ff42dabe57b7be402783fd1aa69ece755bcba1e0290547ae60513","1b952304137851e45bc009785de89ada562d9376177c97e37702e39e60c2f1ff","69ee23dd0d215b09907ad30d23f88b7790c93329d1faf31d7835552a10cf7cbf","44b8b584a338b190a59f4f6929d072431950c7bd92ec2694821c11bce180c8a5","23b89798789dffbd437c0c423f5d02d11f9736aea73d6abf16db4f812ff36eda","223c37f62ce09a3d99e77498acdee7b2705a4ae14552fbdb4093600cd9164f3f",{"version":"970a90f76d4d219ad60819d61f5994514087ba94c985647a3474a5a3d12714ed","affectsGlobalScope":true},"e10177274a35a9d07c825615340b2fcde2f610f53f3fb40269fd196b4288dda6","4c8525f256873c7ba3135338c647eaf0ca7115a1a2805ae2d0056629461186ce","3c13ef48634e7b5012fcf7e8fce7496352c2d779a7201389ca96a2a81ee4314d","5d0a25ec910fa36595f85a67ac992d7a53dd4064a1ba6aea1c9f14ab73a023f2",{"version":"f0900cd5d00fe1263ff41201fb8073dbeb984397e4af3b8002a5c207a30bdc33","affectsGlobalScope":true},{"version":"4c50342e1b65d3bee2ed4ab18f84842d5724ad11083bd666d8705dc7a6079d80","affectsGlobalScope":true},"06d7c42d256f0ce6afe1b2b6cfbc97ab391f29dadb00dd0ae8e8f23f5bc916c3","ec4bd1b200670fb567920db572d6701ed42a9641d09c4ff6869768c8f81b404c","e59a892d87e72733e2a9ca21611b9beb52977be2696c7ba4b216cbbb9a48f5aa",{"version":"da26af7362f53d122283bc69fed862b9a9fe27e01bc6a69d1d682e0e5a4df3e6","affectsGlobalScope":true},"8a300fa9b698845a1f9c41ecbe2c5966634582a8e2020d51abcace9b55aa959e",{"version":"ab9b9a36e5284fd8d3bf2f7d5fcbc60052f25f27e4d20954782099282c60d23e","affectsGlobalScope":true},"8dbe725f8d237e70310977afcfa011629804d101ebaa0266cafda6b61ad72236","30a1b56068b3820c91a055425a6af2294f8ef2bb10a59dcda413f6437093620d","db6d2d9daad8a6d83f281af12ce4355a20b9a3e71b82b9f57cddcca0a8964a96","6c445b9e5be7bfb024b4fd80f38f2d1f91bf206cd3a1e9af7b4eb142adef1b3f","625e5d5e9e25017d53e65c62ff944d812d48ec1bbaaf7395c8f8cdf6c9218061","dbe7db9a8a34bb2538505d52d7c24e3ea7cecb751a0b43347a4a9e1f5ae1aa5c","39a3fc61a65aee8c90cd81bb2c9b508be6c5cc745cd40eaed95954a07c11bb82","1b81396c11bd1073643d2d695af2f6d8da67f7fa54cb6c8926d754d55aebae1a","3150ee51540bdf0d4e0ccb05de6f905962dc3505bd28b7385c6924f7d9eeba11","2302818e3723d16f85c3d75de67247a1bacc23f5399b8235fde025737a6cc5b8","8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","6b54d9dc8b614a8112eeea74a5cfc3a6d45e67007d2da94ec96cbcec1bfe6c06","98e00fba67d4b527de2929778f96c7f9453fbbb8c50968ff096dddd29057450b","9f6caa8495de09a303e6290a3ee15650dbcc75af637449b8fc249ca2d2094004","139c4f4b86b2f19fb58ad7043d68032729ae50dc0fad52825e0466becd9c79eb","836c890ee7296666402f5f4a512f04187093fb134c7e5bc92a7b4528751682b7","6c8d48ede5f1fc63b6fe58c61c7cda35794ba05e11be8c1f1ed0780efedf8b28","22082ac39501b626f8b4322d6bd6fb0424de438777b141f663286cf8bd048398","f7c3d9fed586680437235e2ef6f6a1a69fb47d4524679d295355601edd71a18d","cfe1714064aa842b413125bb353c4625ce313fb0318f84e1015ad74c8f1c91f3","61716ffc5c1011548c0691798dbf9e5f4bebebddc3b7da3b83e93615c7cbb265","97023a8ac2c5d9c9cad96a374eceb49ce7df43ccd669c379c97f04fee55c25a0","efbb14c342884141e21966b812a10509167507a1a6dd86e3dce717a2642d6e6a","2631451ef83e2d263bf40de98dff80ac3852871da3d48531c6b71601b767de47","dce67ee42028e07a6801743d82aefc1531d35b2153a21f7764f73d3218c97709","6cad714c085fc87d55e67b3d269014c6722b8477187b366dfcf4cc2f7b1f9b2b","58902668adae2e5eb67efbccb4048afa02308fa684f1a4e4c7d47668ecf58c1b","3d365237792d79384c1315ad7fba7505b4355ba88d2032349ab437bf7b22e2e8","e5b2baacc2ebb20dcb570b5e6f99e60dd35a55ae490b096bce2efc29e3a96ce1","d114431b4eb5571072d8310555f0d937597ecf1935d98c840f56ad86887f5795","5e19d1888ba7d67fa01640154e32378896a8f3198cb227035afef565dd7e1588","17937316a2f7f362dd6375251a9ce9e4960cfdc0aa7ba6cbd00656f7ab92334b","575bc12d93a33c09e803375cd99a77f50c9272d01abe26d5de27af637c7427a3","39a9af32c7cfa9f1f96c5c8599b3e0ff5285edb41247272880aefe0daee5a43a","9b9a846c90d84dce215990a86a8b5ee7ad24ed7bac50d20d095de5d5627b212f","79832350f1a38cab037218ccbc04d5425b0d2cd330bc821db216f3e813457127","11bf67658477b5f9cf859f106e39be5ee8c5f5f63126bb839aedc9c559433e52","cc0edde838d15c6d272b7b610caf73803efc4e5974ab2079a22beb7b5f27f646","6e5f5cee603d67ee1ba6120815497909b73399842254fc1e77a0d5cdc51d8c9c","f6404e7837b96da3ea4d38c4f1a3812c96c9dcdf264e93d5bdb199f983a3ef4b","7a8940a18491e942d59713bdb6693a1df122615c7595f4a52e9bd808afd0228d","2882275baf937ce116e835d72c9248f6ebde5ce23ca9fb7cf82b7bff39f4e4fc","f9d5c11015ecb267eac5ab59606f75f763dc541d0ddc26e86c9f79b8b5810a8d","8e6d18b22da3989e94ed861d07c45e3a484fe88013970e6560203a46c1f0ae1b","5a2d21ca0e2019640e54a03b8768132a168a35e25e5957abce79cf8a4e10cfa8","0939e2e107705b9571a8fefecce568264d8136ea7c28cedd89176fb4a027481e","2c94dc2a39a7992b055d9c9d15c82a81a80b0f93c8c9ff2b69ea84c4337ce83a","08eaf47ee3150eba5afc0554771e68f01c43f76b8b1fda71367b4f89fa0b132c","5cab8fa167ee711e4dfcd22ed632c60be36bd49dc6eea8cfdd3613c59d00c43d",{"version":"901d4041ce6c4c901cafa0aeb1b511e72b21d6c6631214c5dc34e18ed796099f","affectsGlobalScope":true},"04a29c45b12f113812c7dcebdc2e8558f0775c70d35042f93616300b6b3550ec","00357bb70a10782936bbfdf7c87ad632e5c2694b6714224ea0995299db1885ed","2766dee26ea113e9b491b7842cb44df57c4d79b17057b42607e09fc174bd411d","cb4047ce260c2f4585b2d592d04a1d9a9c2a1ba32679a688523ec314a977989a","0511c61c22d677da1b6bab4d3844aead1d7e27028d2f0ed1ed315e0860ed5357",{"version":"b4610d904ab939109aa8bcee6f795de8da780b6b4a4d8ff2ff9d2e3b699f55b7","affectsGlobalScope":true},{"version":"6707b2ff066e782f676f90ba7abfca7d6f321eececbbecf3d42eebb7a8c28da2","affectsGlobalScope":true},{"version":"d65f4a1cdfc360ed6aefc52f050432b04f2f8e78ee33a71c5b91fe482ff999a7","affectsGlobalScope":true},"2d210643aff12f1beee1fe09bf5ebb2fcb1b6ca8d37e5f992299f4a0871d56c7","4d3cb51deb665532219e1011ecd468216e0df99ae3ed9d58a32e4fe07ebe353f","06dfd2ebf571b3df2cc23a70f031417eb77f7702f0ce727cec99a296242d6929","65c24a8baa2cca1de069a0ba9fba82a173690f52d7e2d0f1f7542d59d5eb4db0","b7fff2d004c5879cae335db8f954eb1d61242d9f2d28515e67902032723caeab","8303df69e9d100e3df8f2d67ec77348cb6494dc406356fdd9b56e61aa7c3c758","8de50542d92f9ac659c30ead0a97e9c107dd3404a3b4fd4bf3504589a026221a","4545c1a1ceca170d5d83452dd7c4994644c35cf676a671412601689d9a62da35","3e49cedfa8795f2959694f38c62f58c1354510a177ae1d22cfec757c4b8aba14","a2d648d333cf67b9aeac5d81a1a379d563a8ffa91ddd61c6179f68de724260ff","c3a905a7fa93ca648349e934fb19356cf7b40e48d65658de3e0c77d67696fd40","a3f41ed1b4f2fc3049394b945a68ae4fdefd49fa1739c32f149d32c0545d67f5","c2489c80994d62e5b51370a6f02f537db4c37af5f914fcb5b2755b81f1906cae","47699512e6d8bebf7be488182427189f999affe3addc1c87c882d36b7f2d0b0e","da5f632f5f82f60322089dc4f73fde31ba4c51d599d920d1cad0eef686c71f7c","42c686ce08bf5576ed178f4a6a62d1b580d941334fb53bdff7054e0980f2dc75","605b66155b4f222c5f5a48bf19224815e4bceb2966dfb1c5704692ed07e5fa0a","cdf21eee8007e339b1b9945abf4a7b44930b1d695cc528459e68a3adc39a622e","1d079c37fa53e3c21ed3fa214a27507bda9991f2a41458705b19ed8c2b61173d","26a451bf3a5f87ebaaa7694c5b664c3d9cec296f3fa8b797b872aee0f302b3a0","5835a6e0d7cd2738e56b671af0e561e7c1b4fb77751383672f4b009f4e161d70","c0eeaaa67c85c3bb6c52b629ebbfd3b2292dc67e8c0ffda2fc6cd2f78dc471e6","4b7f74b772140395e7af67c4841be1ab867c11b3b82a51b1aeb692822b76c872",{"version":"b57b61d9a3f3e4243d1bc307a14f7e678057a86710f2c30ec0cd254a55f36948","affectsGlobalScope":true},{"version":"57ad3ef8cd87e876021acbcabcc6457f21a721cb0c5388de700bd57ea32030c1","affectsGlobalScope":true},"9c00f78ac4e60d1c34d0fb415df6b2fea5f6eea200076dff4d782256a4c2802d","79d056984a8964d3917c7587067447d7565d9da696fcf6ecaa5e8437a214f04e","9269d492817e359123ac64c8205e5d05dab63d71a3a7a229e68b5d9a0e8150bf","ed19da84b7dbf00952ad0b98ce5c194f1903bcf7c94d8103e8e0d63b271543ae","6caa96a16ffe05cfef1e902c7846cdccc465910368563df521da6d7ae817136c","cb8ed8eebdd3d4b0e0ba5a31037274786312c4d85c4b269c892f53ba8028d52b","0f3bfc229ffd021ad8eb1648b1c6fc6be4cf567700f83ee6fe62e9d442313701","8357b0fc3bcdacf62845bcd3d42731f5067386df4e5d0b79b14aa7606388bf2f","3e70e9b5bfbc274e5e653af2469b33707ff0c5766a28e9cbecb36b2da95c89da","9d62ab1e7df5d231c9b95bb383492a63d8d00d4ddb0ed3056a673ee8cc0d7a7f","83635cd42293ffa434c4db5c4a441f744b73b51587bebdb929266e3cb1416db3","3bfa5cced1feb6d89f2989334fa72c43d9534587b056cf9f063c7efccfb8cd27","67b276decde8839a577a5dcb180df1350d007c2248d9a2ae6357bcc9e6cfe2c6","08b8b7c5de48a804d9244aaec2f539bbe1ea010f76e702d46888e563a5d5a178","1aa0d3c019600024e3e9cea3822c2492ff0f476ba6804b8a071c67baec12a86a","853b3f5b3def787b889644480074e2cd2dd72adc7efb5235185c9a8b51e21e49","02c1b074ee1fbc0265b7cecfbcf58727b752b7fdc4a07513beb50926e15c4c7a","1fa0fb63ca31c7f9ed571af3a146473193445521cae597a8e3e31d876feaefc6","5d6f1c4f4df2abe905f02483859efa216625ba6ce4dbe2d5af1c4d25182bfb57","e1bd644f5570747eb5ebf280253d317f08e786ccf05f1d674b94df03d44326bb","66681085731a96a0a038671f0dbbc4817b882e849d8a9a12cd3b654878806391","7bbb8a72fdf86e667af314c3a71b0867a2e720f9b304e3e42ac84ac5f9dbd48e","70fa05b657b9601435adb1fd05363d8d10c28b25da65b82ab87a8998f6f1639b",{"version":"d204bd5d20ca52a553f7ba993dc2a422e9d1fce0b8178ce2bfe55fbd027c11ae","affectsGlobalScope":true},"505f0ac86ae019757bd5c6ffbd8c24af7265e339407d034dabf4b079ea9873a5","96a9bc66e1f83db6425853e4f4fc353887390fd100716c5c69a8d263231a1bfb","6a9e5742226a90da7cbc1ad6f5b10567c0f254bc46d7a89b1d4cb9c5ac9410dd","3f6180f1015b3b4662cf566475f820ee9ae9d60bb538e864e72536066395e364","76419dbed0bc3a3349aeb2cf5e99932d36d94a2f6d92dc50fc96326bbf0cf467","312226425a2bd5632fa41eb2ffe42b198ce0d6fff76a26b6cfee02d41733e7cf","beac3c739ab1f0c879d81f9a0bbce5cce90ed9c8b0a52e366ddbba39b202698b","a25d6e5a784f6f815824d1789e44728a2302c575317eb28613e96f8b2750df9d","f2487f2d96c4ad3b460891eb8131d4134ee1b0ed2f7a51026e49e6dbec79f085","2473d084aedbdee3eb80f1199504c7939f1aed520c21fe4a55060a1ba38db5d8","a59e63fdac10698155f0312e93dbc1c6a7bca8ffaab886491b4da7430fb0dd97","b79fed71293ed947c61df2244bff732d123daa6e2744b4fc4b4e5e03e5a03643","d1a5af198c37f6e7988d48f51ab950a37b42c5b39f4b1acbc7dd891a1b7414cc","4ece6923ed5f998436b24174d7063d0bf032de9f83c6611766590cb2ed95c198","8f01e999646d84cce47598cc5f445723b4d33d11ccbfe42cf56bee13ebd16400","be385aa8122916c5ae23f11370ccc68107553fadfa50989042883d48c48e5a0d","f83f727de02ab088b74c1df3fad61d9515437648bccd5543775447e6b68a3e3b","281d05cbaa9e3cbd5e0071102d58cb306ec06d4f5d2f4b4caf986bf0365df0ce","d9c6681159a5c24845416171b7225a3daa01c9c3bf83ae841e3df14dff73b952","ac7e2c4baa52b4373601a39095c3254098a0fe95eea4a62cd53fb3c458efa4f0","310b5c1016794d64f6e631acd7b202a7b2f12099225a7eef7dbba8db4d7360d9","53929d14247def06047eb36b6e7de9487d5abca91b00b43aad039395cf3c6413","69bb2b9d75de9e00b8b85c1a3296b98bbd6930f17e478fa44e000df1d9f2c5b2","ce4d6c1d5a0dbd938daa0317dc83f4a265cf59c9153f839f3052405d4edda6a7","c179fe35f82344a152e224149682c15e49df4bf368089db43a11ee39a9478707","ac57b995a636106227b495e7e04e6f6e606e8336a46ca3ac77a82983bf925d52","41e3966c70343a7d06a3cc6a11748ce23ad77c70da02160f3b8811349629b6c3","999371004342e6810d4e0aee81ede505f4618a3ac646eb14b7cf420a29c19cb2","72b7d431d2eb9518fd718ac932c3066ff6e97195e17b77825c14f34978716c9d","19347607663f838ebd703db0b7fdbdbb3c86c0449540d93d8ec3c60b5f091b20","d660b5bcd074388f01e2998bc24187fff9a3184399a324cee8f3f16c91cda444","22fc094ae9f6b2aa46aa7ffd632389114dea893808b58339e1a6e4bbb41d5042",{"version":"d6252ece68d8f0944c150d6749a4934a8c147ff035d5d35e808a4ad7562df530","signature":"93582958e7e38d8325186fe5ee14a5b0ac92ebf9b5c22c4ae3bda006958453a9"},"4bcae7f71372085f81abeaf6fe908b7ac138a73d3c06beff558d667ebf6808a0","7dd38478a9c90e28f56b977afe234d61727f3633ee9823387762531a3013d034","b06afd8bec44c829677f29f2d1a28ac48764118f28a273b8c9733461401be5e9","12d01f2c725635d784eb7bfed4b3580cf2e29c4adb8562e8c82f72a62620b9d3","65702824ae708d8f87ef80f6deab735e745e1ec302eb06d7e678442e3862f2c0","f43210f2e479ed259926b2587ca9659177b8db5f4776ae8e73c26608f10cfd9f","d782e571cb7d6ec0f0645957ed843d00e3f8577e08cc2940f400c931bc47a8df","9167246623f181441e6116605221268d94e33a1ebd88075e2dc80133c928ae7e","dc1a838d8a514b6de9fbce3bd5e6feb9ccfe56311e9338bb908eb4d0d966ecaf","186f09ed4b1bc1d5a5af5b1d9f42e2d798f776418e82599b3de16423a349d184","b205cec404a568da6c1bad7d3308afdbe9f81dbfc74966f1a861d1661e63b7f4",{"version":"c44e4ce7e8cd087f67a85032256275fa1aa689945cb8ce5285e49a64b1071c51","signature":"3df99592e4ea87c2f31f49063ef1019144ebb99dcc67cebe2ba7aa2d23359e84"},"bfc83f1c33b445da90b404181562fcebe6ccb98c8de7ff1b3579ca6b5b700e9e","0f73cc798ce7caf61b66a326f33c837f6be97a0a4128654590c89aeee0fed6a5","b1382661074c2dcd53aef24b25b12cc4afb13f8b922471241445a44b4dc7fadf","de3c78d89b9d0fbfbb580b0ebede13be06816314c0f6f7c594de6bba4955df51","a85791ec364829f7ecbe1cff7607be967cc6af882ce88bdf7299cbcf7271fbac","5a8498ed4009c4c822503fc2c4de46cc5b42853d82fcb36c2186e959716ed677","71c1e25c81eea63795aae3edb41f47d586eed31905cc2e935fca7f3beb2f8b8a","161ad06bddc3f7203fac8e4f0c940208c175faa9338ba7e0838510c3c73d1539","a11365f528b78a31bcbc4d53c96b80b8fd971d9570bd09d3844740bb4cbd9990","f3e604694b624fa3f83f6684185452992088f5efb2cf136b62474aa106d6f1b6","96d14f21b7652903852eef49379d04dbda28c16ed36468f8c9fa08f7c14c9538","1d1e6bd176eee5970968423d7e215bfd66828b6db8d54d17afec05a831322633","cbb7029e32a6a72178cda8baa9129b1ee6d1d779a35e46c780e38b4909d42a89","3898e3dbe94b6fe529fbe8f0faee1309c1923100516d7a014b301955e52ece77","3663d1b50f356656a314e5df169bb51cb9d5fd75905fa703f75db6bb32030568","2b8264b2fefd7367e0f20e2c04eed5d3038831fe00f5efbc110ff0131aab899b","74b0245c42990ed8a849df955db3f4362c81b13f799ebc981b7bec2d5b414a57","2b93035328f7778d200252681c1d86285d501ed424825a18f81e4c3028aa51d9","2ac9c8332c5f8510b8bdd571f8271e0f39b0577714d5e95c1e79a12b2616f069","42c21aa963e7b86fa00801d96e88b36803188018d5ad91db2a9101bccd40b3ff","d31eb848cdebb4c55b4893b335a7c0cca95ad66dee13cbb7d0893810c0a9c301","77c1d91a129ba60b8c405f9f539e42df834afb174fe0785f89d92a2c7c16b77a","7a9e0a564fee396cacf706523b5aeed96e04c6b871a8bebefad78499fbffc5bc","906c751ef5822ec0dadcea2f0e9db64a33fb4ee926cc9f7efa38afe5d5371b2a","5387c049e9702f2d2d7ece1a74836a14b47fbebe9bbeb19f94c580a37c855351","c68391fb9efad5d99ff332c65b1606248c4e4a9f1dd9a087204242b56c7126d6","e9cf02252d3a0ced987d24845dcb1f11c1be5541f17e5daa44c6de2d18138d0c","e8b02b879754d85f48489294f99147aeccc352c760d95a6fe2b6e49cd400b2fe","9f6908ab3d8a86c68b86e38578afc7095114e66b2fc36a2a96e9252aac3998e0","0eedb2344442b143ddcd788f87096961cd8572b64f10b4afc3356aa0460171c6","71405cc70f183d029cc5018375f6c35117ffdaf11846c35ebf85ee3956b1b2a6","c68baff4d8ba346130e9753cefe2e487a16731bf17e05fdacc81e8c9a26aae9d","2cd15528d8bb5d0453aa339b4b52e0696e8b07e790c153831c642c3dea5ac8af","479d622e66283ffa9883fbc33e441f7fc928b2277ff30aacbec7b7761b4e9579","ade307876dc5ca267ca308d09e737b611505e015c535863f22420a11fffc1c54","f8cdefa3e0dee639eccbe9794b46f90291e5fd3989fcba60d2f08fde56179fb9","86c5a62f99aac7053976e317dbe9acb2eaf903aaf3d2e5bb1cafe5c2df7b37a8","2b300954ce01a8343866f737656e13243e86e5baef51bd0631b21dcef1f6e954","a2d409a9ffd872d6b9d78ead00baa116bbc73cfa959fce9a2f29d3227876b2a1","b288936f560cd71f4a6002953290de9ff8dfbfbf37f5a9391be5c83322324898","61178a781ef82e0ff54f9430397e71e8f365fc1e3725e0e5346f2de7b0d50dfa","6a6ccb37feb3aad32d9be026a3337db195979cd5727a616fc0f557e974101a54","c649ea79205c029a02272ef55b7ab14ada0903db26144d2205021f24727ac7a3","38e2b02897c6357bbcff729ef84c736727b45cc152abe95a7567caccdfad2a1d","d6610ea7e0b1a7686dba062a1e5544dd7d34140f4545305b7c6afaebfb348341","3dee35db743bdba2c8d19aece7ac049bde6fa587e195d86547c882784e6ba34c","b15e55c5fa977c2f25ca0b1db52cfa2d1fd4bf0baf90a8b90d4a7678ca462ff1","f41d30972724714763a2698ae949fbc463afb203b5fa7c4ad7e4de0871129a17","843dd7b6a7c6269fd43827303f5cbe65c1fecabc30b4670a50d5a15d57daeeb9","f06d8b8567ee9fd799bf7f806efe93b67683ef24f4dea5b23ef12edff4434d9d","6017384f697ff38bc3ef6a546df5b230c3c31329db84cbfe686c83bec011e2b2","e1a5b30d9248549ca0c0bb1d653bafae20c64c4aa5928cc4cd3017b55c2177b0","a593632d5878f17295bd53e1c77f27bf4c15212822f764a2bfc1702f4b413fa0","a868a534ba1c2ca9060b8a13b0ffbbbf78b4be7b0ff80d8c75b02773f7192c29","da7545aba8f54a50fde23e2ede00158dc8112560d934cee58098dfb03aae9b9d","34baf65cfee92f110d6653322e2120c2d368ee64b3c7981dff08ed105c4f19b0","6aee496bf0ecfbf6731aa8cca32f4b6e92cdc0a444911a7d88410408a45ecc5d","4006c872e38a2c4e09c593bc0cdd32b7b4f5c4843910bea0def631c483fff6c5","ab6aa3a65d473871ee093e3b7b71ed0f9c69e07d1d4295f45c9efd91a771241d",{"version":"4452f559618410bd9950973795fa657dbf3411cdc55c4c3460c5bab189903863","affectsGlobalScope":true},"9e9df0ee50fc117b15fd7815162a41c46e95996b513e4107b433d3e37dbe2ce8",{"version":"efd32b1ab5e3897f64ed3d0f236657c3c9c7bcc669449e608ebee1ad9dbe396a","affectsGlobalScope":true},"7fb3279c4bf36d993b1e8b339cded5908f7b2ec1b6e0ac2feaa842b5b6b143f1","234b97ac9af46707f2315ff395a9b340d37b7dbc8290d91f5d6bd97189d220f3",{"version":"ecf78e637f710f340ec08d5d92b3f31b134a46a4fcf2e758690d8c46ce62cba6","affectsGlobalScope":true},"381899b8d1d4c1be716f18cb5242ba39f66f4b1e31d45af62a32a99f8edcb39d","f7b46d22a307739c145e5fddf537818038fdfffd580d79ed717f4d4d37249380","f5a8b384f182b3851cec3596ccc96cb7464f8d3469f48c74bf2befb782a19de5",{"version":"1bc82f5b3bb93df76d19730c84467b0b346187198537135d63a672956f323720","affectsGlobalScope":true},{"version":"8c16ea6340758a0600bdff42d76114de8a44b9e9b797e8aa1ad1ff385cc99478","affectsGlobalScope":true}],"options":{"esModuleInterop":true,"jsx":1,"module":99,"skipLibCheck":true,"strict":true,"target":1},"fileIdsList":[[115,228],[115,228,336],[115,228,333,334,335,336,337,342],[115,228,334,343],[61,115,228,338,339,340],[115,205,206,228],[86,115,122,228],[88,114,115,122,228,286,287],[69,115,228],[72,115,228],[73,78,106,115,228],[74,85,86,93,103,114,115,228],[74,75,85,93,115,228],[76,115,228],[77,78,86,94,115,228],[78,103,111,115,228],[79,81,85,93,115,228],[80,115,228],[81,82,115,228],[85,115,228],[83,85,115,228],[85,86,87,103,114,115,228],[85,86,87,100,103,106,115,228],[115,119,228],[81,88,93,103,114,115,228],[85,86,88,89,93,103,111,114,115,228],[88,90,103,111,114,115,228],[69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,228],[85,91,115,228],[92,114,115,228],[81,85,93,103,115,228],[94,115,228],[95,115,228],[72,96,115,228],[97,113,115,119,228],[98,115,228],[99,115,228],[85,100,101,115,228],[100,102,115,117,228],[73,85,103,104,105,106,115,228],[73,103,105,115,228],[103,104,115,228],[106,115,228],[107,115,228],[85,109,110,115,228],[109,110,115,228],[78,93,103,111,115,228],[112,115,228],[93,113,115,228],[73,88,99,114,115,228],[78,115,228],[103,115,116,228],[115,117,228],[115,118,228],[73,78,85,87,96,103,114,115,117,119,228],[103,115,120,228],[58,59,60,61,115,228],[115,228,291,330],[115,228,291,315,330],[115,228,330],[115,228,291],[115,228,291,316,330],[115,228,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329],[115,228,316,330],[115,228,269,270],[88,103,115,122,228],[67,115,228],[115,182,228],[115,184,228],[115,126,129,171,228],[115,131,228],[115,124,138,228],[115,124,228],[115,124,138,139,228],[62,115,127,228],[62,114,115,122,228],[62,115,138,177,228],[62,115,138,228],[115,175,179,228],[62,115,228],[62,115,176,181,228],[115,125,228],[62,115,172,181,228],[62,115,181,228],[88,115,122,130,181,228],[88,115,122,129,131,228],[88,103,115,122,130,131,136,171,228],[88,99,114,115,122,125,126,127,129,130,131,134,136,137,138,141,151,152,154,156,157,158,159,161,163,164,171,228],[115,124,126,127,128,171,181,228],[115,129,228],[99,114,115,122,126,129,130,131,134,137,150,155,157,160,165,167,168,228],[88,114,115,122,129,136,163,228],[115,151,163,181,228],[115,123,171,181,228],[88,99,114,115,122,126,129,130,132,134,136,137,140,141,150,151,152,154,155,156,159,160,163,164,165,166,181,228],[88,115,122,136,167,169,228],[62,88,99,115,122,125,127,131,136,141,156,157,158,171,228],[88,99,114,115,122,130,135,228],[115,162,228],[115,122,141,228],[99,115,122,125,126,130,134,136,228],[88,115,122,141,153,228],[88,115,122,130,154,228],[115,143,144,145,228],[115,143,228],[115,147,228],[115,129,142,146,150,228],[115,129,142,146,228],[115,129,135,147,148,149,228],[62,115,123,156,158,171,181,228],[62,99,114,115,122,125,174,176,178,181,228],[115,130,134,138,228],[99,115,122,228],[115,133,228],[62,88,99,115,122,125,171,172,173,179,180,228],[57,62,63,64,65,115,171,228],[115,186,228],[115,188,228],[115,190,228],[115,192,228],[115,194,228],[66,68,115,171,183,185,187,189,191,193,195,197,198,200,203,204,228],[115,196,228],[115,176,228],[115,199,228],[72,115,147,148,149,150,201,202,228],[115,122,228],[62,66,88,99,115,122,125,131,170,181,228],[88,115,122,228,268,271],[90,115,228],[115,208,209,210,215,228],[115,222,228,266],[62,115,225,228],[115,223,224,226,228],[62,115,197,210,228],[115,228,229,230],[62,115,195,228,266],[115,228,232],[115,193,228],[115,228,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253],[115,225,227,228,231,233,234,254,256,257,258,259,260,261,263,265],[62,115,197,228,254],[115,228,255],[62,115,197,211,228,266],[62,115,195,210,228,254],[62,115,197,210,228,259],[62,115,215,228,254],[62,115,215,228,262],[62,115,197,210,228,266],[115,228,264],[115,215,228],[115,218,219,220,228],[115,217,221,228],[115,183,228],[115,187,228],[115,205,228],[115,205,228,272],[62,115,205,210,215,222,228,266,278],[62,115,205,210,222,228,266],[115,205,210,215,222,228,266],[62,115,228,266],[115,211,212,213,214,228],[115,210,228],[62],[205]],"referencedMap":[[340,1],[335,1],[336,2],[333,1],[343,3],[337,1],[334,4],[338,1],[342,5],[341,1],[339,1],[278,1],[207,6],[173,1],[208,7],[283,1],[284,1],[285,1],[287,1],[288,8],[69,9],[70,9],[72,10],[73,11],[74,12],[75,13],[76,14],[77,15],[78,16],[79,17],[80,18],[81,19],[82,19],[84,20],[83,21],[85,20],[86,22],[87,23],[71,24],[121,1],[88,25],[89,26],[90,27],[122,28],[91,29],[92,30],[93,31],[94,32],[95,33],[96,34],[97,35],[98,36],[99,37],[100,38],[101,38],[102,39],[103,40],[105,41],[104,42],[106,43],[107,44],[108,1],[109,45],[110,46],[111,47],[112,48],[113,49],[114,50],[115,51],[116,52],[117,53],[118,54],[119,55],[120,56],[289,1],[60,1],[58,1],[62,57],[290,1],[61,1],[315,58],[316,59],[291,60],[294,60],[313,58],[314,58],[304,58],[303,61],[301,58],[296,58],[309,58],[307,58],[311,58],[295,58],[308,58],[312,58],[297,58],[298,58],[310,58],[292,58],[299,58],[300,58],[302,58],[306,58],[317,62],[305,58],[293,58],[330,63],[329,1],[324,62],[326,64],[325,62],[318,62],[319,62],[321,62],[323,62],[327,64],[328,64],[320,64],[322,64],[331,1],[332,1],[59,1],[228,1],[269,1],[271,65],[270,1],[286,66],[268,1],[68,67],[183,68],[185,69],[138,70],[151,71],[139,72],[158,73],[140,74],[152,73],[128,73],[194,75],[196,76],[178,77],[177,78],[176,79],[199,80],[175,81],[202,1],[124,1],[126,82],[182,81],[186,83],[190,84],[131,85],[130,86],[155,87],[165,88],[135,66],[129,89],[125,90],[169,91],[168,90],[156,1],[123,1],[166,92],[132,1],[164,93],[157,94],[167,95],[170,96],[141,66],[159,97],[136,98],[163,99],[162,100],[137,101],[154,102],[153,103],[142,90],[146,104],[144,105],[145,105],[143,1],[148,106],[147,107],[149,108],[201,1],[150,109],[67,1],[180,1],[188,80],[192,80],[172,110],[127,1],[174,1],[179,111],[161,112],[160,113],[134,114],[133,1],[184,1],[181,115],[57,1],[66,116],[63,80],[64,1],[65,1],[187,117],[189,118],[191,119],[193,120],[206,121],[195,121],[205,122],[197,123],[198,124],[200,125],[203,126],[204,127],[171,128],[272,129],[209,130],[11,1],[12,1],[14,1],[13,1],[2,1],[15,1],[16,1],[17,1],[18,1],[19,1],[20,1],[21,1],[22,1],[3,1],[4,1],[26,1],[23,1],[24,1],[25,1],[27,1],[28,1],[29,1],[5,1],[30,1],[31,1],[32,1],[33,1],[6,1],[37,1],[34,1],[35,1],[36,1],[38,1],[7,1],[39,1],[44,1],[45,1],[40,1],[41,1],[42,1],[43,1],[8,1],[49,1],[46,1],[47,1],[48,1],[50,1],[9,1],[51,1],[52,1],[53,1],[54,1],[55,1],[1,1],[10,1],[56,1],[216,131],[223,132],[224,80],[226,133],[227,134],[229,135],[231,136],[230,137],[233,138],[232,139],[234,80],[235,80],[236,80],[237,80],[238,80],[239,80],[240,80],[241,80],[242,80],[243,80],[244,80],[245,80],[254,140],[246,80],[247,80],[248,80],[249,80],[250,80],[251,80],[252,80],[253,80],[266,141],[255,142],[256,143],[257,80],[258,144],[259,145],[260,146],[261,80],[262,147],[263,148],[264,149],[265,150],[225,80],[217,151],[218,1],[221,152],[219,1],[220,1],[222,153],[274,1],[275,154],[276,155],[267,156],[273,157],[279,158],[280,159],[281,160],[282,160],[277,161],[210,1],[211,1],[212,1],[215,162],[213,163],[214,1]],"exportedModulesMap":[[340,1],[335,1],[336,2],[333,1],[343,3],[337,1],[334,4],[338,1],[342,5],[341,1],[339,1],[278,1],[207,6],[173,1],[208,7],[283,1],[284,1],[285,1],[287,1],[288,8],[69,9],[70,9],[72,10],[73,11],[74,12],[75,13],[76,14],[77,15],[78,16],[79,17],[80,18],[81,19],[82,19],[84,20],[83,21],[85,20],[86,22],[87,23],[71,24],[121,1],[88,25],[89,26],[90,27],[122,28],[91,29],[92,30],[93,31],[94,32],[95,33],[96,34],[97,35],[98,36],[99,37],[100,38],[101,38],[102,39],[103,40],[105,41],[104,42],[106,43],[107,44],[108,1],[109,45],[110,46],[111,47],[112,48],[113,49],[114,50],[115,51],[116,52],[117,53],[118,54],[119,55],[120,56],[289,1],[60,1],[58,1],[62,57],[290,1],[61,1],[315,58],[316,59],[291,60],[294,60],[313,58],[314,58],[304,58],[303,61],[301,58],[296,58],[309,58],[307,58],[311,58],[295,58],[308,58],[312,58],[297,58],[298,58],[310,58],[292,58],[299,58],[300,58],[302,58],[306,58],[317,62],[305,58],[293,58],[330,63],[329,1],[324,62],[326,64],[325,62],[318,62],[319,62],[321,62],[323,62],[327,64],[328,64],[320,64],[322,64],[331,1],[332,1],[59,1],[228,1],[269,1],[271,65],[270,1],[286,66],[268,1],[68,67],[183,68],[185,69],[138,70],[151,71],[139,72],[158,73],[140,74],[152,73],[128,73],[194,75],[196,76],[178,77],[177,78],[176,79],[199,80],[175,81],[202,1],[124,1],[126,82],[182,81],[186,83],[190,84],[131,85],[130,86],[155,87],[165,88],[135,66],[129,89],[125,90],[169,91],[168,90],[156,1],[123,1],[166,92],[132,1],[164,93],[157,94],[167,95],[170,96],[141,66],[159,97],[136,98],[163,99],[162,100],[137,101],[154,102],[153,103],[142,90],[146,104],[144,105],[145,105],[143,1],[148,106],[147,107],[149,108],[201,1],[150,109],[67,1],[180,1],[188,80],[192,80],[172,110],[127,1],[174,1],[179,111],[161,112],[160,113],[134,114],[133,1],[184,1],[181,115],[57,1],[66,116],[63,80],[64,1],[65,1],[187,117],[189,118],[191,119],[193,120],[206,121],[195,121],[205,122],[197,123],[198,124],[200,125],[203,126],[204,127],[171,128],[272,129],[209,130],[11,1],[12,1],[14,1],[13,1],[2,1],[15,1],[16,1],[17,1],[18,1],[19,1],[20,1],[21,1],[22,1],[3,1],[4,1],[26,1],[23,1],[24,1],[25,1],[27,1],[28,1],[29,1],[5,1],[30,1],[31,1],[32,1],[33,1],[6,1],[37,1],[34,1],[35,1],[36,1],[38,1],[7,1],[39,1],[44,1],[45,1],[40,1],[41,1],[42,1],[43,1],[8,1],[49,1],[46,1],[47,1],[48,1],[50,1],[9,1],[51,1],[52,1],[53,1],[54,1],[55,1],[1,1],[10,1],[56,1],[216,131],[223,132],[224,80],[226,133],[227,134],[229,135],[231,136],[230,137],[233,138],[232,139],[234,80],[235,80],[236,80],[237,80],[238,80],[239,80],[240,80],[241,80],[242,80],[243,80],[244,80],[245,80],[254,140],[246,80],[247,80],[248,80],[249,80],[250,80],[251,80],[252,80],[253,80],[266,141],[255,142],[256,143],[257,80],[258,144],[259,145],[260,146],[261,164],[262,147],[263,148],[264,149],[265,150],[225,80],[217,151],[218,1],[221,152],[219,1],[220,1],[222,153],[274,1],[275,154],[276,155],[267,156],[273,165],[279,158],[280,159],[281,160],[282,160],[277,161],[210,1],[211,1],[212,1],[215,162],[213,163],[214,1]],"semanticDiagnosticsPerFile":[340,335,336,333,343,337,334,338,342,341,339,278,207,173,208,283,284,285,287,288,69,70,72,73,74,75,76,77,78,79,80,81,82,84,83,85,86,87,71,121,88,89,90,122,91,92,93,94,95,96,97,98,99,100,101,102,103,105,104,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,289,60,58,62,290,61,315,316,291,294,313,314,304,303,301,296,309,307,311,295,308,312,297,298,310,292,299,300,302,306,317,305,293,330,329,324,326,325,318,319,321,323,327,328,320,322,331,332,59,228,269,271,270,286,268,68,183,185,138,151,139,158,140,152,128,194,196,178,177,176,199,175,202,124,126,182,186,190,131,130,155,165,135,129,125,169,168,156,123,166,132,164,157,167,170,141,159,136,163,162,137,154,153,142,146,144,145,143,148,147,149,201,150,67,180,188,192,172,127,174,179,161,160,134,133,184,181,57,66,63,64,65,187,189,191,193,206,195,205,197,198,200,203,204,171,272,209,11,12,14,13,2,15,16,17,18,19,20,21,22,3,4,26,23,24,25,27,28,29,5,30,31,32,33,6,37,34,35,36,38,7,39,44,45,40,41,42,43,8,49,46,47,48,50,9,51,52,53,54,55,1,10,56,216,223,224,226,227,229,231,230,233,232,234,235,236,237,238,239,240,241,242,243,244,245,254,246,247,248,249,250,251,252,253,266,255,256,257,258,259,260,261,262,263,264,265,225,217,218,221,219,220,222,274,275,276,267,273,279,280,281,282,277,210,211,212,215,213,214],"affectedFilesPendingEmit":[[340,1],[335,1],[336,1],[333,1],[343,1],[337,1],[334,1],[338,1],[342,1],[341,1],[339,1],[278,1],[207,1],[173,1],[208,1],[283,1],[284,1],[285,1],[287,1],[288,1],[69,1],[70,1],[72,1],[73,1],[74,1],[75,1],[76,1],[77,1],[78,1],[79,1],[80,1],[81,1],[82,1],[84,1],[83,1],[85,1],[86,1],[87,1],[71,1],[121,1],[88,1],[89,1],[90,1],[122,1],[91,1],[92,1],[93,1],[94,1],[95,1],[96,1],[97,1],[98,1],[99,1],[100,1],[101,1],[102,1],[103,1],[105,1],[104,1],[106,1],[107,1],[108,1],[109,1],[110,1],[111,1],[112,1],[113,1],[114,1],[115,1],[116,1],[117,1],[118,1],[119,1],[120,1],[289,1],[60,1],[58,1],[62,1],[290,1],[61,1],[315,1],[316,1],[291,1],[294,1],[313,1],[314,1],[304,1],[303,1],[301,1],[296,1],[309,1],[307,1],[311,1],[295,1],[308,1],[312,1],[297,1],[298,1],[310,1],[292,1],[299,1],[300,1],[302,1],[306,1],[317,1],[305,1],[293,1],[330,1],[329,1],[324,1],[326,1],[325,1],[318,1],[319,1],[321,1],[323,1],[327,1],[328,1],[320,1],[322,1],[331,1],[332,1],[59,1],[228,1],[269,1],[271,1],[270,1],[286,1],[268,1],[68,1],[183,1],[185,1],[138,1],[151,1],[139,1],[158,1],[140,1],[152,1],[128,1],[194,1],[196,1],[178,1],[177,1],[176,1],[199,1],[175,1],[202,1],[124,1],[126,1],[182,1],[186,1],[190,1],[131,1],[130,1],[155,1],[165,1],[135,1],[129,1],[125,1],[169,1],[168,1],[156,1],[123,1],[166,1],[132,1],[164,1],[157,1],[167,1],[170,1],[141,1],[159,1],[136,1],[163,1],[162,1],[137,1],[154,1],[153,1],[142,1],[146,1],[144,1],[145,1],[143,1],[148,1],[147,1],[149,1],[201,1],[150,1],[67,1],[180,1],[188,1],[192,1],[172,1],[127,1],[174,1],[179,1],[161,1],[160,1],[134,1],[133,1],[184,1],[181,1],[57,1],[66,1],[63,1],[64,1],[65,1],[187,1],[189,1],[191,1],[193,1],[206,1],[195,1],[205,1],[197,1],[198,1],[200,1],[203,1],[204,1],[171,1],[272,1],[209,1],[2,1],[3,1],[4,1],[5,1],[6,1],[7,1],[8,1],[9,1],[10,1],[216,1],[223,1],[224,1],[226,1],[227,1],[229,1],[231,1],[230,1],[233,1],[232,1],[234,1],[235,1],[236,1],[237,1],[238,1],[239,1],[240,1],[241,1],[242,1],[243,1],[244,1],[245,1],[254,1],[246,1],[247,1],[248,1],[249,1],[250,1],[251,1],[252,1],[253,1],[266,1],[255,1],[256,1],[257,1],[258,1],[259,1],[260,1],[261,1],[262,1],[263,1],[264,1],[265,1],[225,1],[217,1],[218,1],[221,1],[219,1],[220,1],[222,1],[274,1],[275,1],[276,1],[267,1],[273,1],[279,1],[280,1],[281,1],[282,1],[277,1],[210,1],[211,1],[212,1],[215,1],[213,1],[214,1]]},"version":"4.9.4"} --------------------------------------------------------------------------------