const fs = require('fs'); const path = require('path'); // Define default viewport and themeColor values const defaultViewport = { width: "device-width", initialScale: 1, maximumScale: 1, }; const defaultThemeColor = [ { media: "(prefers-color-scheme: dark)", color: "#000000" }, { media: "(prefers-color-scheme: light)", color: "#D53F8C" }, ]; // List of files with metadata issues based on build log warnings const affectedPaths = [ 'app/dashboard/admin/page.tsx', 'app/dashboard/page.tsx', 'app/dashboard/products/page.tsx', 'app/dashboard/stock/page.tsx', 'app/_not-found.tsx', 'app/dashboard/orders/page.tsx', 'app/dashboard/shipping/page.tsx', 'app/dashboard/storefront/page.tsx', 'app/dashboard/categories/page.tsx', 'app/dashboard/chats/page.tsx', 'app/dashboard/promotions/page.tsx', 'app/page.tsx', 'app/auth/login/page.tsx', 'app/dashboard/storefront/customers/page.tsx', 'app/dashboard/chats/new/page.tsx', 'app/auth/register/page.tsx', ]; // Function to check if a file exists function fileExists(filePath) { try { fs.accessSync(filePath, fs.constants.F_OK); return true; } catch (error) { return false; } } // Function to transform file content function fixMetadataFile(filePath) { if (!fileExists(filePath)) { console.log(`File not found: ${filePath}`); return; } try { console.log(`Processing: ${filePath}`); let content = fs.readFileSync(filePath, 'utf8'); // Check if the file has metadata but no viewport const hasMetadata = content.includes('export const metadata'); const hasViewport = content.includes('export const viewport'); if (hasMetadata && !hasViewport) { // Ensure we import Viewport type if (content.includes('import { Metadata }')) { content = content.replace('import { Metadata }', 'import { Metadata, Viewport }'); } else if (!content.includes('import { Viewport }') && !content.includes('Viewport')) { // Add import if not already present if (content.includes('import ')) { // Find the last import statement const importRegex = /^import.*$/gm; const imports = [...content.matchAll(importRegex)]; if (imports.length > 0) { const lastImport = imports[imports.length - 1][0]; content = content.replace(lastImport, lastImport + '\nimport { Viewport } from "next";'); } else { content = 'import { Viewport } from "next";\n' + content; } } else { content = 'import { Viewport } from "next";\n' + content; } } // Add viewport export const viewportExport = ` export const viewport: Viewport = { width: "device-width", initialScale: 1, themeColor: [ { media: "(prefers-color-scheme: dark)", color: "#000000" }, { media: "(prefers-color-scheme: light)", color: "#D53F8C" }, ], };`; // Insert viewport export after metadata const metadataRegex = /export const metadata[^;]*;/s; content = content.replace(metadataRegex, match => `${match}\n${viewportExport}`); // Write the changes back to the file fs.writeFileSync(filePath, content, 'utf8'); console.log(`Fixed: ${filePath}`); } else { console.log(`No changes needed or already has viewport: ${filePath}`); } } catch (error) { console.error(`Error processing ${filePath}:`, error); } } // Process each affected file affectedPaths.forEach(relativePath => { const fullPath = path.join(process.cwd(), relativePath); fixMetadataFile(fullPath); }); console.log('Metadata fix script completed!');