diff --git a/apps/blog/next.config.js b/apps/blog/next.config.js index dd90483..2af4984 100644 --- a/apps/blog/next.config.js +++ b/apps/blog/next.config.js @@ -3,6 +3,9 @@ const nextConfig = { output: "export", distDir: "build", images: { unoptimized: true }, + experimental: { + externalDir: true, + }, } module.exports = nextConfig diff --git a/apps/blog/src/app/Home.tsx b/apps/blog/src/app/Home.tsx index 030e400..1369633 100644 --- a/apps/blog/src/app/Home.tsx +++ b/apps/blog/src/app/Home.tsx @@ -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 diff --git a/apps/blog/src/app/[category]/[[...slug]]/helper.ts b/apps/blog/src/app/[category]/[[...slug]]/helper.ts index a3b881b..eb064de 100644 --- a/apps/blog/src/app/[category]/[[...slug]]/helper.ts +++ b/apps/blog/src/app/[category]/[[...slug]]/helper.ts @@ -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 { diff --git a/apps/blog/src/app/[category]/[[...slug]]/page.tsx b/apps/blog/src/app/[category]/[[...slug]]/page.tsx index 9754fb4..1a3447f 100644 --- a/apps/blog/src/app/[category]/[[...slug]]/page.tsx +++ b/apps/blog/src/app/[category]/[[...slug]]/page.tsx @@ -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" diff --git a/apps/blog/src/contentMap.ts b/apps/blog/src/contentMap.ts deleted file mode 100644 index d14663d..0000000 --- a/apps/blog/src/contentMap.ts +++ /dev/null @@ -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 diff --git a/apps/portfolio/src/app/page.tsx b/apps/portfolio/src/app/page.tsx index cb5f5a3..0050239 100644 --- a/apps/portfolio/src/app/page.tsx +++ b/apps/portfolio/src/app/page.tsx @@ -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) => ( ) - } - - return projects + ) } export const metadata: Metadata = { diff --git a/apps/portfolio/src/app/project/[id]/page.tsx b/apps/portfolio/src/app/project/[id]/page.tsx index ac4cc64..b781ded 100644 --- a/apps/portfolio/src/app/project/[id]/page.tsx +++ b/apps/portfolio/src/app/project/[id]/page.tsx @@ -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 { +async function getData(id: ProjectKey): Promise { 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 { } export async function generateStaticParams(): Promise { - 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 { diff --git a/packages/content/exports/contentMap.ts b/packages/content/exports/contentMap.ts new file mode 100644 index 0000000..f2d0115 --- /dev/null +++ b/packages/content/exports/contentMap.ts @@ -0,0 +1,4 @@ +import contentMap from "../dist/map.json" +import { type ContentMap } from "../src/types/types" + +export default contentMap as ContentMap diff --git a/packages/content/exports/portfolio.ts b/packages/content/exports/portfolio.ts new file mode 100644 index 0000000..269da66 --- /dev/null +++ b/packages/content/exports/portfolio.ts @@ -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 + } +} diff --git a/packages/content/exports/tsconfig.json b/packages/content/exports/tsconfig.json new file mode 100644 index 0000000..6880646 --- /dev/null +++ b/packages/content/exports/tsconfig.json @@ -0,0 +1,6 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "noEmit": true + } +}