81 lines
2.1 KiB
JavaScript
81 lines
2.1 KiB
JavaScript
/**
|
|
* CV Page Configuration Data
|
|
*
|
|
* API-first for split backend/frontend deployments:
|
|
* - Try Indiekit public API (`/cvapi/page.json`, fallback `/cv/page.json`)
|
|
* - Fallback to local plugin file (`content/.indiekit/cv-page.json`)
|
|
*
|
|
* Falls back to null so cv.njk can use the hardcoded default layout.
|
|
*/
|
|
|
|
import EleventyFetch from "@11ty/eleventy-fetch";
|
|
import { readFileSync } from "node:fs";
|
|
import { resolve, dirname } from "node:path";
|
|
import { fileURLToPath } from "node:url";
|
|
import cvPageConfigStatic from "./cvPageConfigStatic.js";
|
|
|
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
const INDIEKIT_URL =
|
|
process.env.INDIEKIT_URL || process.env.SITE_URL || "https://example.com";
|
|
|
|
async function fetchFromIndiekit(path) {
|
|
const urls = [
|
|
`${INDIEKIT_URL}/cvapi/${path}`,
|
|
`${INDIEKIT_URL}/cv/${path}`,
|
|
];
|
|
|
|
for (const url of urls) {
|
|
try {
|
|
console.log(`[cvPageConfig] Fetching from Indiekit: ${url}`);
|
|
const data = await EleventyFetch(url, {
|
|
duration: "15m",
|
|
type: "json",
|
|
});
|
|
console.log(`[cvPageConfig] Indiekit ${path} success via ${url}`);
|
|
return data;
|
|
} catch (error) {
|
|
console.log(
|
|
`[cvPageConfig] Indiekit API unavailable at ${url}: ${error.message}`
|
|
);
|
|
}
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
function readLocalConfigFile() {
|
|
try {
|
|
const configPath = resolve(
|
|
__dirname,
|
|
"..",
|
|
"content",
|
|
".indiekit",
|
|
"cv-page.json"
|
|
);
|
|
const raw = readFileSync(configPath, "utf8");
|
|
const config = JSON.parse(raw);
|
|
console.log("[cvPageConfig] Loaded local CV page builder config");
|
|
return config;
|
|
} catch {
|
|
return null;
|
|
}
|
|
}
|
|
|
|
export default async function () {
|
|
const apiConfig = await fetchFromIndiekit("page.json");
|
|
if (apiConfig && typeof apiConfig === "object") {
|
|
return apiConfig;
|
|
}
|
|
|
|
const localConfig = readLocalConfigFile();
|
|
if (localConfig && typeof localConfig === "object") {
|
|
return localConfig;
|
|
}
|
|
|
|
if (cvPageConfigStatic && typeof cvPageConfigStatic === "object") {
|
|
return cvPageConfigStatic;
|
|
}
|
|
|
|
return null;
|
|
}
|