refactor: improve content json importing

This commit is contained in:
Kim, Jimin 2023-08-08 12:39:46 +09:00
parent a3c0990804
commit 36b1ecd8ec
Signed by: pomp
GPG key ID: CE1DDB8A4A765403
10 changed files with 43 additions and 28 deletions

View file

@ -3,6 +3,9 @@ const nextConfig = {
output: "export",
distDir: "build",
images: { unoptimized: true },
experimental: {
externalDir: true,
},
}
module.exports = nextConfig

View file

@ -1,10 +1,10 @@
"use client"
import contentMap from "@developomp-site/content/exports/contentMap"
import { type ReactNode, useEffect, useState } from "react"
import PostCard from "@/components/PostCard"
import ShowMoreButton from "@/components/ShowMoreButton"
import contentMap from "@/contentMap"
const totalPosts = Object.keys(contentMap.posts).length

View file

@ -1,7 +1,6 @@
import contentMap from "@developomp-site/content/exports/contentMap"
import type { PageData } from "@developomp-site/content/src/types/types"
import contentMap from "@/contentMap"
import type { Params } from "./page"
export enum PageType {

View file

@ -1,5 +1,6 @@
import "./Page.scss"
import contentMap from "@developomp-site/content/exports/contentMap"
import { type Metadata } from "next"
import { type ParsedUrlQuery } from "querystring"
@ -8,7 +9,6 @@ import Card from "@/components/Card"
import PostCard from "@/components/PostCard"
import Tag from "@/components/Tag"
import TagList from "@/components/TagList"
import contentMap from "@/contentMap"
import { getData, PageType } from "./helper"
import Meta from "./Meta"

View file

@ -1,4 +0,0 @@
import contentMapJson from "@developomp-site/content/dist/map.json"
import { type ContentMap } from "@developomp-site/content/src/types/types"
export default contentMapJson as ContentMap

View file

@ -1,5 +1,5 @@
import portfolio from "@developomp-site/content/dist/portfolio.json"
import type { PortfolioProject } from "@developomp-site/content/src/types/types"
import type { ProjectKey } from "@developomp-site/content/exports/portfolio"
import portfolio from "@developomp-site/content/exports/portfolio"
import type { Metadata } from "next"
import Badge from "@/components/Badge"
@ -12,23 +12,15 @@ function getSkills(): JSX.Element[] {
}
function getProjects(): JSX.Element[] {
const projects = []
for (const projectID in portfolio.projects) {
projects.push(
return (Object.keys(portfolio.projects) as ProjectKey[]).map(
(projectID) => (
<ProjectCard
key={projectID}
projectID={projectID}
project={
portfolio.projects[
projectID as keyof typeof portfolio.projects
] as PortfolioProject
}
project={portfolio.projects[projectID]}
/>
)
}
return projects
)
}
export const metadata: Metadata = {

View file

@ -1,7 +1,8 @@
import "./style.scss"
import Toc from "@developomp-site/blog/src/app/[category]/[[...slug]]/Toc"
import portfolio from "@developomp-site/content/dist/portfolio.json"
import type { ProjectKey } from "@developomp-site/content/exports/portfolio"
import portfolio from "@developomp-site/content/exports/portfolio"
import { faGithub } from "@fortawesome/free-brands-svg-icons"
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"
import { type Metadata } from "next"
@ -21,14 +22,14 @@ interface Data {
}
interface Params {
id: keyof typeof portfolio.projects
id: ProjectKey
}
interface Props {
params: Params
}
async function getData(id: keyof typeof portfolio.projects): Promise<Data> {
async function getData(id: ProjectKey): Promise<Data> {
const content = await import(
`@developomp-site/content/dist/content/projects/${id}.json`
)
@ -46,9 +47,9 @@ async function getData(id: keyof typeof portfolio.projects): Promise<Data> {
}
export async function generateStaticParams(): Promise<Params[]> {
return (
Object.keys(portfolio.projects) as (keyof typeof portfolio.projects)[]
).map((id) => ({ id }))
return (Object.keys(portfolio.projects) as ProjectKey[]).map((id) => ({
id,
}))
}
export async function generateMetadata({ params }: Props): Promise<Metadata> {

View file

@ -0,0 +1,4 @@
import contentMap from "../dist/map.json"
import { type ContentMap } from "../src/types/types"
export default contentMap as ContentMap

View file

@ -0,0 +1,14 @@
import portfolio from "../dist/portfolio.json" assert { type: "json" }
import type { PortfolioProject } from "../src/types/types"
export type ProjectKey = keyof typeof portfolio.projects
// sort of like src/types/types.ts > PortfolioData but exported
export default portfolio as {
// waiting for https://github.com/microsoft/TypeScript/issues/32063
skills: string[]
projects: {
[key in ProjectKey]: PortfolioProject
}
}

View file

@ -0,0 +1,6 @@
{
"extends": "../tsconfig.json",
"compilerOptions": {
"noEmit": true
}
}