fix(menu): require('../main') → require('../index') after main.js→index.js rename

The menu items file was using require('../main') which resolved to a
non-existent src/main/main.js. After the 054ce23 refactor that renamed
main.js → index.js, every menu click tried to require a missing module.

All 65 occurrences fixed; fileItems() now loads cleanly at app startup
and the menu doesn't throw on construction.

Caught by user clicking File → Open: showOpenDialogSync emitted through
to the lazy require at items.js:52, which failed with module-not-found
before main process handlers ran.
This commit is contained in:
2026-06-06 22:42:42 +05:30
parent ab16998922
commit f36d918871
+65 -65
View File
@@ -16,7 +16,7 @@ function buildRecentFilesMenu(mainWindow) {
const items = existing.map(file => ({ const items = existing.map(file => ({
label: path.basename(file), label: path.basename(file),
click: () => { click: () => {
const { openFileFromPath } = require('../main'); const { openFileFromPath } = require('../index');
openFileFromPath(file); openFileFromPath(file);
} }
})); }));
@@ -48,7 +48,7 @@ function fileItems(mainWindow) {
label: 'Open', label: 'Open',
accelerator: 'CmdOrCtrl+O', accelerator: 'CmdOrCtrl+O',
click: () => { click: () => {
const { openFile } = require('../main'); const { openFile } = require('../index');
openFile(); openFile();
} }
}, },
@@ -56,7 +56,7 @@ function fileItems(mainWindow) {
label: 'Open PDF', label: 'Open PDF',
accelerator: 'CmdOrCtrl+Shift+O', accelerator: 'CmdOrCtrl+Shift+O',
click: () => { click: () => {
const { openPdfFile } = require('../main'); const { openPdfFile } = require('../index');
openPdfFile(); openPdfFile();
} }
}, },
@@ -69,7 +69,7 @@ function fileItems(mainWindow) {
label: 'Save As', label: 'Save As',
accelerator: 'CmdOrCtrl+Shift+S', accelerator: 'CmdOrCtrl+Shift+S',
click: () => { click: () => {
const { saveAsFile } = require('../main'); const { saveAsFile } = require('../index');
saveAsFile(); saveAsFile();
} }
}, },
@@ -101,7 +101,7 @@ function fileItems(mainWindow) {
label: 'Import Document...', label: 'Import Document...',
accelerator: 'CmdOrCtrl+I', accelerator: 'CmdOrCtrl+I',
click: () => { click: () => {
const { importDocument } = require('../main'); const { importDocument } = require('../index');
importDocument(); importDocument();
} }
}, },
@@ -110,64 +110,64 @@ function fileItems(mainWindow) {
submenu: [ submenu: [
{ {
label: 'HTML', click: () => { label: 'HTML', click: () => {
const { exportFile } = require('../main'); const { exportFile } = require('../index');
exportFile('html'); exportFile('html');
} }
}, },
{ {
label: 'PDF', click: () => { label: 'PDF', click: () => {
const { exportFile } = require('../main'); const { exportFile } = require('../index');
exportFile('pdf'); exportFile('pdf');
} }
}, },
{ {
label: 'PDF (Enhanced)', click: () => { label: 'PDF (Enhanced)', click: () => {
const { exportPDFViaWordTemplate } = require('../main'); const { exportPDFViaWordTemplate } = require('../index');
exportPDFViaWordTemplate(); exportPDFViaWordTemplate();
}, accelerator: 'Ctrl+Shift+P' }, accelerator: 'Ctrl+Shift+P'
}, },
{ {
label: 'DOCX', click: () => { label: 'DOCX', click: () => {
const { exportFile } = require('../main'); const { exportFile } = require('../index');
exportFile('docx'); exportFile('docx');
} }
}, },
{ {
label: 'DOCX (Enhanced)', click: () => { label: 'DOCX (Enhanced)', click: () => {
const { exportWordWithTemplate } = require('../main'); const { exportWordWithTemplate } = require('../index');
exportWordWithTemplate(); exportWordWithTemplate();
}, accelerator: 'Ctrl+Shift+W' }, accelerator: 'Ctrl+Shift+W'
}, },
{ label: 'LaTeX', click: () => { const { exportFile } = require('../main'); exportFile('latex'); } }, { label: 'LaTeX', click: () => { const { exportFile } = require('../index'); exportFile('latex'); } },
{ label: 'RTF', click: () => { const { exportFile } = require('../main'); exportFile('rtf'); } }, { label: 'RTF', click: () => { const { exportFile } = require('../index'); exportFile('rtf'); } },
{ label: 'ODT', click: () => { const { exportFile } = require('../main'); exportFile('odt'); } }, { label: 'ODT', click: () => { const { exportFile } = require('../index'); exportFile('odt'); } },
{ label: 'EPUB', click: () => { const { exportFile } = require('../main'); exportFile('epub'); } }, { label: 'EPUB', click: () => { const { exportFile } = require('../index'); exportFile('epub'); } },
{ type: 'separator' }, { type: 'separator' },
{ label: 'PowerPoint (PPTX)', click: () => { const { exportFile } = require('../main'); exportFile('pptx'); } }, { label: 'PowerPoint (PPTX)', click: () => { const { exportFile } = require('../index'); exportFile('pptx'); } },
{ label: 'OpenDocument Presentation (ODP)', click: () => { const { exportFile } = require('../main'); exportFile('odp'); } }, { label: 'OpenDocument Presentation (ODP)', click: () => { const { exportFile } = require('../index'); exportFile('odp'); } },
{ type: 'separator' }, { type: 'separator' },
{ label: 'CSV (Tables)', click: () => { const { exportSpreadsheet } = require('../main'); exportSpreadsheet('csv'); } }, { label: 'CSV (Tables)', click: () => { const { exportSpreadsheet } = require('../index'); exportSpreadsheet('csv'); } },
{ type: 'separator' }, { type: 'separator' },
{ label: 'JSON (.json)', click: () => { const { exportFile } = require('../main'); exportFile('json'); } }, { label: 'JSON (.json)', click: () => { const { exportFile } = require('../index'); exportFile('json'); } },
{ label: 'YAML (.yaml)', click: () => { const { exportFile } = require('../main'); exportFile('yaml'); } }, { label: 'YAML (.yaml)', click: () => { const { exportFile } = require('../index'); exportFile('yaml'); } },
{ label: 'XML (.xml)', click: () => { const { exportFile } = require('../main'); exportFile('xml'); } }, { label: 'XML (.xml)', click: () => { const { exportFile } = require('../index'); exportFile('xml'); } },
{ type: 'separator' }, { type: 'separator' },
{ label: 'Confluence Wiki (.txt)', click: () => { const { exportFile } = require('../main'); exportFile('confluence'); } }, { label: 'Confluence Wiki (.txt)', click: () => { const { exportFile } = require('../index'); exportFile('confluence'); } },
{ label: 'MOBI E-book (.mobi)', click: () => { const { exportFile } = require('../main'); exportFile('mobi'); } } { label: 'MOBI E-book (.mobi)', click: () => { const { exportFile } = require('../index'); exportFile('mobi'); } }
] ]
}, },
{ type: 'separator' }, { type: 'separator' },
{ {
label: 'Select Word Template...', label: 'Select Word Template...',
click: () => { click: () => {
const { selectWordTemplate } = require('../main'); const { selectWordTemplate } = require('../index');
selectWordTemplate(); selectWordTemplate();
} }
}, },
{ {
label: 'Template Settings...', label: 'Template Settings...',
click: () => { click: () => {
const { showTemplateSettings } = require('../main'); const { showTemplateSettings } = require('../index');
showTemplateSettings(); showTemplateSettings();
} }
}, },
@@ -240,32 +240,32 @@ function viewItems(mainWindow) {
{ {
label: 'Theme', label: 'Theme',
submenu: [ submenu: [
{ label: 'Atom One Light (Default)', click: () => { const { setTheme } = require('../main'); setTheme('atomonelight'); } }, { label: 'Atom One Light (Default)', click: () => { const { setTheme } = require('../index'); setTheme('atomonelight'); } },
{ label: 'GitHub Light', click: () => { const { setTheme } = require('../main'); setTheme('github'); } }, { label: 'GitHub Light', click: () => { const { setTheme } = require('../index'); setTheme('github'); } },
{ label: 'Light', click: () => { const { setTheme } = require('../main'); setTheme('light'); } }, { label: 'Light', click: () => { const { setTheme } = require('../index'); setTheme('light'); } },
{ label: 'Solarized Light', click: () => { const { setTheme } = require('../main'); setTheme('solarized'); } }, { label: 'Solarized Light', click: () => { const { setTheme } = require('../index'); setTheme('solarized'); } },
{ label: 'Gruvbox Light', click: () => { const { setTheme } = require('../main'); setTheme('gruvbox-light'); } }, { label: 'Gruvbox Light', click: () => { const { setTheme } = require('../index'); setTheme('gruvbox-light'); } },
{ label: 'Ayu Light', click: () => { const { setTheme } = require('../main'); setTheme('ayu-light'); } }, { label: 'Ayu Light', click: () => { const { setTheme } = require('../index'); setTheme('ayu-light'); } },
{ label: 'Sepia', click: () => { const { setTheme } = require('../main'); setTheme('sepia'); } }, { label: 'Sepia', click: () => { const { setTheme } = require('../index'); setTheme('sepia'); } },
{ label: 'Paper', click: () => { const { setTheme } = require('../main'); setTheme('paper'); } }, { label: 'Paper', click: () => { const { setTheme } = require('../index'); setTheme('paper'); } },
{ label: 'Rose Pine Dawn', click: () => { const { setTheme } = require('../main'); setTheme('rosepine-dawn'); } }, { label: 'Rose Pine Dawn', click: () => { const { setTheme } = require('../index'); setTheme('rosepine-dawn'); } },
{ label: 'Concrete Light', click: () => { const { setTheme } = require('../main'); setTheme('concrete-light'); } }, { label: 'Concrete Light', click: () => { const { setTheme } = require('../index'); setTheme('concrete-light'); } },
{ type: 'separator' }, { type: 'separator' },
{ label: 'Dark', click: () => { const { setTheme } = require('../main'); setTheme('dark'); } }, { label: 'Dark', click: () => { const { setTheme } = require('../index'); setTheme('dark'); } },
{ label: 'One Dark', click: () => { const { setTheme } = require('../main'); setTheme('onedark'); } }, { label: 'One Dark', click: () => { const { setTheme } = require('../index'); setTheme('onedark'); } },
{ label: 'Dracula', click: () => { const { setTheme } = require('../main'); setTheme('dracula'); } }, { label: 'Dracula', click: () => { const { setTheme } = require('../index'); setTheme('dracula'); } },
{ label: 'Nord', click: () => { const { setTheme } = require('../main'); setTheme('nord'); } }, { label: 'Nord', click: () => { const { setTheme } = require('../index'); setTheme('nord'); } },
{ label: 'Monokai', click: () => { const { setTheme } = require('../main'); setTheme('monokai'); } }, { label: 'Monokai', click: () => { const { setTheme } = require('../index'); setTheme('monokai'); } },
{ label: 'Material', click: () => { const { setTheme } = require('../main'); setTheme('material'); } }, { label: 'Material', click: () => { const { setTheme } = require('../index'); setTheme('material'); } },
{ label: 'Gruvbox Dark', click: () => { const { setTheme } = require('../main'); setTheme('gruvbox-dark'); } }, { label: 'Gruvbox Dark', click: () => { const { setTheme } = require('../index'); setTheme('gruvbox-dark'); } },
{ label: 'Tokyo Night', click: () => { const { setTheme } = require('../main'); setTheme('tokyonight'); } }, { label: 'Tokyo Night', click: () => { const { setTheme } = require('../index'); setTheme('tokyonight'); } },
{ label: 'Palenight', click: () => { const { setTheme } = require('../main'); setTheme('palenight'); } }, { label: 'Palenight', click: () => { const { setTheme } = require('../index'); setTheme('palenight'); } },
{ label: 'Ayu Dark', click: () => { const { setTheme } = require('../main'); setTheme('ayu-dark'); } }, { label: 'Ayu Dark', click: () => { const { setTheme } = require('../index'); setTheme('ayu-dark'); } },
{ label: 'Ayu Mirage', click: () => { const { setTheme } = require('../main'); setTheme('ayu-mirage'); } }, { label: 'Ayu Mirage', click: () => { const { setTheme } = require('../index'); setTheme('ayu-mirage'); } },
{ label: 'Oceanic Next', click: () => { const { setTheme } = require('../main'); setTheme('oceanic-next'); } }, { label: 'Oceanic Next', click: () => { const { setTheme } = require('../index'); setTheme('oceanic-next'); } },
{ label: 'Cobalt2', click: () => { const { setTheme } = require('../main'); setTheme('cobalt2'); } }, { label: 'Cobalt2', click: () => { const { setTheme } = require('../index'); setTheme('cobalt2'); } },
{ label: 'Concrete Dark', click: () => { const { setTheme } = require('../main'); setTheme('concrete-dark'); } }, { label: 'Concrete Dark', click: () => { const { setTheme } = require('../index'); setTheme('concrete-dark'); } },
{ label: 'Concrete Warm', click: () => { const { setTheme } = require('../main'); setTheme('concrete-warm'); } } { label: 'Concrete Warm', click: () => { const { setTheme } = require('../index'); setTheme('concrete-warm'); } }
] ]
}, },
{ type: 'separator' }, { type: 'separator' },
@@ -327,7 +327,7 @@ function batchItems(mainWindow) {
{ {
label: 'Convert Markdown Folder...', label: 'Convert Markdown Folder...',
click: () => { click: () => {
const { showBatchConversionDialog } = require('../main'); const { showBatchConversionDialog } = require('../index');
showBatchConversionDialog(); showBatchConversionDialog();
} }
}, },
@@ -357,7 +357,7 @@ function convertItems(mainWindow) {
label: 'Universal File Converter...', label: 'Universal File Converter...',
accelerator: 'CmdOrCtrl+Shift+C', accelerator: 'CmdOrCtrl+Shift+C',
click: () => { click: () => {
const { showUniversalConverterDialog } = require('../main'); const { showUniversalConverterDialog } = require('../index');
showUniversalConverterDialog(); showUniversalConverterDialog();
} }
} }
@@ -370,7 +370,7 @@ function pdfEditorItems(mainWindow) {
label: 'Open PDF File...', label: 'Open PDF File...',
accelerator: 'CmdOrCtrl+Shift+O', accelerator: 'CmdOrCtrl+Shift+O',
click: () => { click: () => {
const { openPdfFile } = require('../main'); const { openPdfFile } = require('../index');
openPdfFile(); openPdfFile();
} }
}, },
@@ -378,21 +378,21 @@ function pdfEditorItems(mainWindow) {
{ {
label: 'Merge PDFs...', label: 'Merge PDFs...',
click: () => { click: () => {
const { showPDFEditorDialog } = require('../main'); const { showPDFEditorDialog } = require('../index');
showPDFEditorDialog('merge'); showPDFEditorDialog('merge');
} }
}, },
{ {
label: 'Split PDF...', label: 'Split PDF...',
click: () => { click: () => {
const { showPDFEditorDialog } = require('../main'); const { showPDFEditorDialog } = require('../index');
showPDFEditorDialog('split'); showPDFEditorDialog('split');
} }
}, },
{ {
label: 'Compress PDF...', label: 'Compress PDF...',
click: () => { click: () => {
const { showPDFEditorDialog } = require('../main'); const { showPDFEditorDialog } = require('../index');
showPDFEditorDialog('compress'); showPDFEditorDialog('compress');
} }
}, },
@@ -400,21 +400,21 @@ function pdfEditorItems(mainWindow) {
{ {
label: 'Rotate Pages...', label: 'Rotate Pages...',
click: () => { click: () => {
const { showPDFEditorDialog } = require('../main'); const { showPDFEditorDialog } = require('../index');
showPDFEditorDialog('rotate'); showPDFEditorDialog('rotate');
} }
}, },
{ {
label: 'Delete Pages...', label: 'Delete Pages...',
click: () => { click: () => {
const { showPDFEditorDialog } = require('../main'); const { showPDFEditorDialog } = require('../index');
showPDFEditorDialog('delete'); showPDFEditorDialog('delete');
} }
}, },
{ {
label: 'Reorder Pages...', label: 'Reorder Pages...',
click: () => { click: () => {
const { showPDFEditorDialog } = require('../main'); const { showPDFEditorDialog } = require('../index');
showPDFEditorDialog('reorder'); showPDFEditorDialog('reorder');
} }
}, },
@@ -422,7 +422,7 @@ function pdfEditorItems(mainWindow) {
{ {
label: 'Add Watermark...', label: 'Add Watermark...',
click: () => { click: () => {
const { showPDFEditorDialog } = require('../main'); const { showPDFEditorDialog } = require('../index');
showPDFEditorDialog('watermark'); showPDFEditorDialog('watermark');
} }
}, },
@@ -433,21 +433,21 @@ function pdfEditorItems(mainWindow) {
{ {
label: 'Add Password Protection...', label: 'Add Password Protection...',
click: () => { click: () => {
const { showPDFEditorDialog } = require('../main'); const { showPDFEditorDialog } = require('../index');
showPDFEditorDialog('encrypt'); showPDFEditorDialog('encrypt');
} }
}, },
{ {
label: 'Remove Password...', label: 'Remove Password...',
click: () => { click: () => {
const { showPDFEditorDialog } = require('../main'); const { showPDFEditorDialog } = require('../index');
showPDFEditorDialog('decrypt'); showPDFEditorDialog('decrypt');
} }
}, },
{ {
label: 'Set Permissions...', label: 'Set Permissions...',
click: () => { click: () => {
const { showPDFEditorDialog } = require('../main'); const { showPDFEditorDialog } = require('../index');
showPDFEditorDialog('permissions'); showPDFEditorDialog('permissions');
} }
} }
@@ -457,7 +457,7 @@ function pdfEditorItems(mainWindow) {
{ {
label: 'About PDF Editor', label: 'About PDF Editor',
click: () => { click: () => {
const { showAboutDialog } = require('../main'); const { showAboutDialog } = require('../index');
showAboutDialog(); showAboutDialog();
} }
} }
@@ -482,7 +482,7 @@ function helpItems(mainWindow) {
{ {
label: 'About MarkdownConverter', label: 'About MarkdownConverter',
click: () => { click: () => {
const { showAboutDialog } = require('../main'); const { showAboutDialog } = require('../index');
showAboutDialog(); showAboutDialog();
} }
}, },
@@ -490,7 +490,7 @@ function helpItems(mainWindow) {
{ {
label: 'Dependencies & Requirements', label: 'Dependencies & Requirements',
click: () => { click: () => {
const { showDependenciesDialog } = require('../main'); const { showDependenciesDialog } = require('../index');
showDependenciesDialog(); showDependenciesDialog();
} }
}, },