115 lines
3.6 KiB
JavaScript
115 lines
3.6 KiB
JavaScript
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!');
|