Files
ember-market-frontend/scripts/fix-metadata.js
NotII a651bd3ec4 fix
2025-04-06 15:39:37 +01:00

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!');