feat: dynamic pages to sitemap
This commit is contained in:
parent
b208b20186
commit
308562dc7a
9 changed files with 10064 additions and 67 deletions
52
scripts/sitemap-generate.mjs
Normal file
52
scripts/sitemap-generate.mjs
Normal file
|
@ -0,0 +1,52 @@
|
|||
import { createClient } from "@supabase/supabase-js";
|
||||
import { writeFileSync } from "fs";
|
||||
import dotenv from "dotenv";
|
||||
|
||||
dotenv.config({ path: ".env.local" });
|
||||
|
||||
const SUPABASE_URL = process.env.SUPABASE_URL;
|
||||
const SUPABASE_KEY = process.env.SUPABASE_KEY;
|
||||
const supabase = createClient(SUPABASE_URL, SUPABASE_KEY);
|
||||
|
||||
const PAGE_SIZE = 1000;
|
||||
|
||||
async function fetchPaginatedData() {
|
||||
let allEntries = [];
|
||||
let currentPage = 0;
|
||||
|
||||
while (true) {
|
||||
const { data, error } = await supabase
|
||||
.from("optimized_sitemap")
|
||||
.select("url, title, lastmod, changefreq, priority")
|
||||
.range(currentPage * PAGE_SIZE, (currentPage + 1) * PAGE_SIZE - 1);
|
||||
|
||||
if (error) throw new Error(`Error fetching sitemap data: ${error.message}`);
|
||||
|
||||
if (!data || data.length === 0) break;
|
||||
|
||||
allEntries = allEntries.concat(data);
|
||||
currentPage += 1;
|
||||
}
|
||||
|
||||
return allEntries;
|
||||
}
|
||||
|
||||
async function generateSitemap() {
|
||||
try {
|
||||
const data = await fetchPaginatedData();
|
||||
|
||||
const sitemapEntries = data.map((entry) => ({ loc: entry.url }));
|
||||
|
||||
writeFileSync(
|
||||
"src/utils/data/static/sitemapData.json",
|
||||
JSON.stringify(sitemapEntries, null, 2),
|
||||
"utf8"
|
||||
);
|
||||
|
||||
console.log("Sitemap data generated successfully!");
|
||||
} catch (error) {
|
||||
console.error("Error generating sitemap:", error);
|
||||
}
|
||||
}
|
||||
|
||||
generateSitemap();
|
Reference in a new issue