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
+ }
+}