Rocky_Mountain_Vending/lib/wordpress-data-loader.ts
DMleadgen 46d973904b
Initial commit: Rocky Mountain Vending website
Next.js website for Rocky Mountain Vending company featuring:
- Product catalog with Stripe integration
- Service areas and parts pages
- Admin dashboard with Clerk authentication
- SEO optimized pages with JSON-LD structured data

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-12 16:22:15 -07:00

116 lines
2.7 KiB
TypeScript

import fs from 'fs';
import path from 'path';
let cachedData: any = null;
/**
* Load WordPress processed content
* This must only be called server-side (in getStaticProps, getServerSideProps, or API routes)
*/
export function loadWordPressData() {
if (cachedData) {
return cachedData;
}
try {
// In Next.js, process.cwd() returns the code directory (where Next.js runs from)
const dataPath = path.join(process.cwd(), 'lib', 'wordpress-data', 'processed-content.json');
// Check if file exists
if (!fs.existsSync(dataPath)) {
// Silently return empty data in production
if (process.env.NODE_ENV === 'development') {
console.error('WordPress data file not found at:', dataPath);
}
return { pages: [], posts: [], images: [] };
}
const data = JSON.parse(fs.readFileSync(dataPath, 'utf8'));
cachedData = data;
return data;
} catch (e) {
// Silently return empty data in production
if (process.env.NODE_ENV === 'development') {
console.error('Could not load WordPress data:', e);
}
return { pages: [], posts: [], images: [] };
}
}
/**
* Load image mapping
*/
export function loadImageMappingData() {
try {
const mappingPath = path.join(process.cwd(), 'lib', 'wordpress-data', 'image-mapping.json');
const mapping = JSON.parse(fs.readFileSync(mappingPath, 'utf8'));
return mapping;
} catch (e) {
// Silently return empty array in production
if (process.env.NODE_ENV === 'development') {
console.warn('Could not load image mapping:', e);
}
return [];
}
}
/**
* Get page by slug
*/
export function getPageBySlug(slug: string) {
const data = loadWordPressData();
return data.pages.find((p: any) => p.slug === slug);
}
/**
* Get post by slug and date
*/
export function getPostBySlugAndDate(
slug: string,
year: string,
month: string,
day: string
) {
const data = loadWordPressData();
return data.posts.find(
(p: any) =>
p.slug === slug &&
p.dateComponents?.year === year &&
p.dateComponents?.month === month &&
p.dateComponents?.day === day
);
}
/**
* Get all page slugs for static generation
*/
export function getAllPageSlugs() {
const data = loadWordPressData();
return data.pages.map((p: any) => p.slug);
}
/**
* Get all post params for static generation
*/
export function getAllPostParams() {
const data = loadWordPressData();
return data.posts
.map((p: any) => {
if (!p.dateComponents) return null;
return {
year: p.dateComponents.year,
month: p.dateComponents.month,
day: p.dateComponents.day,
slug: p.slug,
};
})
.filter(Boolean);
}