Files
sanaz-goodarzi/scripts/generate-meshkee-config.mjs
T
2026-09-15 20:37:49 +03:30

33 lines
1.6 KiB
JavaScript

import { mkdir, readdir, writeFile } from 'node:fs/promises';
import { dirname, join, relative, resolve, sep } from 'node:path';
import { fileURLToPath } from 'node:url';
const projectRoot = resolve(dirname(fileURLToPath(import.meta.url)), '..');
const appRoot = join(projectRoot, 'app');
const outputFile = join(projectRoot, 'public', 'meshkee', 'sitemap-config.json');
const pageNames = new Set(['page.js','page.jsx','page.ts','page.tsx']);
async function findPages(directory) {
const entries = await readdir(directory,{withFileTypes:true});
const pages=[];
for(const entry of entries){
const full=join(directory,entry.name);
if(entry.isDirectory()) pages.push(...await findPages(full));
else if(pageNames.has(entry.name)) pages.push(full);
}
return pages;
}
function toRoute(file) {
const segments=relative(appRoot,dirname(file)).split(sep).filter(Boolean);
if(segments.some(segment=>segment.startsWith('[')||segment.startsWith('(')||segment==='api'))return null;
return segments.length?`/${segments.join('/')}`:'/';
}
const priorities={ '/':1, '/portfolios':.9, '/ourservices':.8, '/blog':.8, '/aboutus':.7, '/contactus':.6 };
const routes=(await findPages(appRoot)).map(toRoute).filter(Boolean).sort((a,b)=>a==='/'?-1:a.localeCompare(b));
const staticPages=[...new Set(routes)].map(path=>({path,...(path==='/'?{changefreq:'weekly'}:{}),priority:priorities[path]??.5}));
await mkdir(dirname(outputFile),{recursive:true});
await writeFile(outputFile,`${JSON.stringify({baseUrl:'https://sanazgoodarzi.ir',staticPages},null,2)}\n`,'utf8');
console.log(`Generated Meshkee sitemap config with ${staticPages.length} static routes.`);