33 lines
1.6 KiB
JavaScript
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.`);
|