Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .biomeignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
dist/
dist/**
scripts/
public/**
45 changes: 14 additions & 31 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,35 +27,18 @@ jobs:
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
cache: "pnpm"
node-version: "24"

- name: Install dependencies
run: pnpm install

- name: Compile TypeScript
run: pnpm tsc --project tsconfig.scripts.json

- name: Rename .js files to .mjs
run: |
for file in dist/scripts/**/*.js; do
mv "$file" "${file%.js}.mjs"
done

- name: Post-process scripts
run: |
for file in dist/scripts/scripts/content.mjs dist/scripts/lib/pageroutes.mjs; do
if [ -f "$file" ]; then
echo "Processing $file..."
sed -i 's|import { Documents } from "@/settings/documents"|import { Documents } from "../settings/documents.mjs"|g' "$file"
if [ $? -ne 0 ]; then
echo "Error: Failed to update $file"
exit 1
fi
echo "$file updated successfully."
else
echo "$file not found!"
fi
done

- name: Run content script
run: node dist/scripts/scripts/content.mjs
run: pnpm install --frozen-lockfile

- name: Generate content
run: sh .husky/post-process.sh

- name: Upload search data artifact
uses: actions/upload-artifact@v4
if: success()
with:
name: search-data
path: public/search-data/
retention-days: 30
34 changes: 16 additions & 18 deletions .husky/post-process.sh
Original file line number Diff line number Diff line change
@@ -1,26 +1,24 @@
#!/bin/sh

npx tsc --project tsconfig.scripts.json
npx tsc --project tsconfig.scripts.json || exit 1

for file in dist/scripts/**/*.js; do
find dist/scripts -name "*.js" -type f | while read file; do
mv "$file" "${file%.js}.mjs"
done

for file in dist/scripts/scripts/content.mjs dist/scripts/lib/pageroutes.mjs; do
if [ -f "$file" ]; then
echo "Processing $file..."
if [ -f "dist/scripts/scripts/content.mjs" ]; then
sed -i.bak 's|from '"'"'@/lib/pageroutes'"'"'|from '"'"'../../lib/pageroutes.mjs'"'"'|g' dist/scripts/scripts/content.mjs
sed -i.bak 's|from '"'"'@/settings/documents'"'"'|from '"'"'../settings/documents.mjs'"'"'|g' dist/scripts/scripts/content.mjs
sed -i.bak 's|from '"'"'@/\([^'"'"']*\)'"'"'|from '"'"'../../\1.mjs'"'"'|g' dist/scripts/scripts/content.mjs
rm -f dist/scripts/scripts/content.mjs.bak
fi

sed -i 's|import { Documents } from "@/settings/documents"|import { Documents } from "../settings/documents.mjs"|g' "$file"
if [ -f "dist/scripts/lib/pageroutes.mjs" ]; then
echo "Processing pageroutes.mjs..."
sed -i.bak 's|from '"'"'@/settings'"'"'|from '"'"'../settings/index.mjs'"'"'|g' dist/scripts/lib/pageroutes.mjs
sed -i.bak 's|from '"'"'@/settings/documents'"'"'|from '"'"'../settings/documents.mjs'"'"'|g' dist/scripts/lib/pageroutes.mjs
sed -i.bak 's|from '"'"'@/\([^'"'"']*\)'"'"'|from '"'"'../\1.mjs'"'"'|g' dist/scripts/lib/pageroutes.mjs
rm -f dist/scripts/lib/pageroutes.mjs.bak
fi

if [ $? -ne 0 ]; then
echo "Error: Failed to update $file"
exit 1
fi

echo "$file updated successfully."
else
echo "$file not found!"
fi
done

node dist/scripts/scripts/content.mjs || exit 1
node dist/scripts/scripts/content.mjs || exit 1
2 changes: 1 addition & 1 deletion .husky/pre-commit
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
#!/bin/sh

./.husky/post-process.sh || exit 1
sh ./.husky/post-process.sh || exit 1
28 changes: 0 additions & 28 deletions .prettierignore

This file was deleted.

33 changes: 14 additions & 19 deletions app/docs/[[...slug]]/page.tsx
Original file line number Diff line number Diff line change
@@ -1,21 +1,20 @@
import { notFound } from "next/navigation"

import { Settings } from "@/types/settings"
import { getDocument } from "@/lib/markdown"
import { PageRoutes } from "@/lib/pageroutes"
import { Separator } from "@/components/ui/separator"
import { Typography } from "@/components/ui/typography"
import { ArticleBreadcrumb } from "@/components/article/breadcrumb"
import { Pagination } from "@/components/article/pagination"
import { TableOfContents } from "@/components/toc"
import { notFound } from 'next/navigation'
import { ArticleBreadcrumb } from '@/components/article/breadcrumb'
import { Pagination } from '@/components/article/pagination'
import { TableOfContents } from '@/components/toc'
import { Separator } from '@/components/ui/separator'
import { Typography } from '@/components/ui/typography'
import { getDocument } from '@/lib/markdown'
import { PageRoutes } from '@/lib/pageroutes'
import { Settings } from '@/types/settings'

interface PageProps {
params: Promise<{ slug: string[] }>
}

export default async function Pages({ params }: PageProps) {
const { slug = [] } = await params
const pathName = slug.join("/")
const pathName = slug.join('/')
const res = await getDocument(pathName)

if (!res) notFound()
Expand All @@ -36,18 +35,14 @@ export default async function Pages({ params }: PageProps) {
<Pagination pathname={pathName} />
</Typography>
</section>
<TableOfContents
tocs={{ tocs }}
pathName={pathName}
frontmatter={frontmatter}
/>
<TableOfContents tocs={{ tocs }} pathName={pathName} frontmatter={frontmatter} />
</div>
)
}

export async function generateMetadata({ params }: PageProps) {
const { slug = [] } = await params
const pathName = slug.join("/")
const pathName = slug.join('/')
const res = await getDocument(pathName)

if (!res) return null
Expand All @@ -66,7 +61,7 @@ export async function generateMetadata({ params }: PageProps) {
description: frontmatter.description || Settings.openGraph.description,
url: `${Settings.metadataBase}/docs/${pathName}`,
siteName: Settings.openGraph.siteName,
type: "article",
type: 'article',
images: Settings.openGraph.images.map((image) => ({
...image,
url: `${Settings.metadataBase}${image.url}`,
Expand All @@ -90,6 +85,6 @@ export async function generateMetadata({ params }: PageProps) {

export function generateStaticParams() {
return PageRoutes.filter((item) => item.href).map((item) => ({
slug: item.href.split("/").slice(1),
slug: item.href.split('/').slice(1),
}))
}
2 changes: 1 addition & 1 deletion app/docs/layout.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { Sidebar } from "@/components/sidebar"
import { Sidebar } from '@/components/sidebar'

export default function Documents({
children,
Expand Down
9 changes: 4 additions & 5 deletions app/error.tsx
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
"use client"
'use client'

import { useEffect } from "react"
import { useEffect } from 'react'
import { Button } from '@/components/ui/button'

import { Button } from "@/components/ui/button"

export default function Error({
export default function ErrorBoundary({
error,
reset,
}: {
Expand Down
21 changes: 10 additions & 11 deletions app/layout.tsx
Original file line number Diff line number Diff line change
@@ -1,17 +1,16 @@
import type { Metadata } from "next"
import { Inter } from "next/font/google"
import { Providers } from "@/providers"
import { GoogleTagManager } from "@next/third-parties/google"
import { GoogleTagManager } from '@next/third-parties/google'
import type { Metadata } from 'next'
import { Inter } from 'next/font/google'
import { Footer } from '@/components/navigation/footer'
import { Navbar } from '@/components/navigation/navbar'
import { Providers } from '@/providers'
import { Settings } from '@/types/settings'

import { Settings } from "@/types/settings"
import { Footer } from "@/components/navigation/footer"
import { Navbar } from "@/components/navigation/navbar"

import "@/styles/globals.css"
import '@/styles/globals.css'

const inter = Inter({
variable: "--font-inter",
subsets: ["latin"],
variable: '--font-inter',
subsets: ['latin'],
})

const baseUrl = Settings.metadataBase
Expand Down
8 changes: 3 additions & 5 deletions app/not-found.tsx
Original file line number Diff line number Diff line change
@@ -1,14 +1,12 @@
import { Link } from "lib/transition"
import { Link } from 'lib/transition'

import { Button } from "@/components/ui/button"
import { Button } from '@/components/ui/button'

export default function NotFound() {
return (
<div className="flex min-h-[86.5vh] flex-col items-center justify-center px-2 py-8 text-center">
<h1 className="mb-4 text-4xl font-bold sm:text-7xl">404</h1>
<p className="mb-8 max-w-150 text-foreground sm:text-base">
Page not found
</p>
<p className="mb-8 max-w-150 text-foreground sm:text-base">Page not found</p>
<div className="flex items-center">
<Button variant="default" size="lg" asChild>
<Link title="Return Home" aria-label="Return Home" href="/">
Expand Down
13 changes: 6 additions & 7 deletions app/page.tsx
Original file line number Diff line number Diff line change
@@ -1,21 +1,20 @@
import { Link } from "lib/transition"

import { PageRoutes } from "@/lib/pageroutes"
import { buttonVariants } from "@/components/ui/button"
import { Link } from 'lib/transition'
import { buttonVariants } from '@/components/ui/button'
import { PageRoutes } from '@/lib/pageroutes'

export default function Home() {
return (
<section className="flex min-h-[86.5vh] flex-col items-center justify-center px-2 py-8 text-center">
<h1 className="mb-4 text-4xl font-bold sm:text-7xl">Documents</h1>
<p className="mb-8 max-w-150 text-foreground sm:text-base">
A simple open-source product documentation platform. That&apos;s simple
to use and easy to customize.
A simple open-source product documentation platform. That&apos;s simple to use and easy to
customize.
</p>

<div className="flex items-center gap-5">
<Link
href={`/docs${PageRoutes[0].href}`}
className={buttonVariants({ className: "px-6", size: "lg" })}
className={buttonVariants({ className: 'px-6', size: 'lg' })}
>
Get Started
</Link>
Expand Down
8 changes: 4 additions & 4 deletions app/robots.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
import type { MetadataRoute } from "next"
import type { MetadataRoute } from 'next'

import { Settings } from "@/types/settings"
import { Settings } from '@/types/settings'

export default function robots(): MetadataRoute.Robots {
return {
rules: [
{
userAgent: "*",
allow: "/",
userAgent: '*',
allow: '/',
},
],
sitemap: `${Settings.metadataBase}/sitemap.xml`,
Expand Down
9 changes: 4 additions & 5 deletions app/sitemap.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,12 @@
import type { MetadataRoute } from "next"

import { Settings } from "@/types/settings"
import { PageRoutes } from "@/lib/pageroutes"
import type { MetadataRoute } from 'next'
import { PageRoutes } from '@/lib/pageroutes'
import { Settings } from '@/types/settings'

export default function sitemap(): MetadataRoute.Sitemap {
return PageRoutes.map((page) => ({
url: `${Settings.metadataBase}${page.href}`,
lastModified: new Date().toISOString(),
changeFrequency: "monthly",
changeFrequency: 'monthly',
priority: 0.8,
}))
}
Loading