[fix] Fix i18n collection script issues - Remove Nx from repository, fix TypeScript declare fields compilation, update Playwright configuration

This commit is contained in:
snomiao
2025-09-03 17:54:21 +00:00
parent f7889b514e
commit e1105ee22e
179 changed files with 4814 additions and 16421 deletions

View File

@@ -1,6 +1,6 @@
import * as fs from 'fs'
import { comfyPageFixture as test } from '../browser_tests/fixtures/ComfyPage'
import { test } from '@playwright/test'
import { CORE_MENU_COMMANDS } from '../src/constants/coreMenuCommands'
import { SERVER_CONFIG_ITEMS } from '../src/constants/serverConfig'
import type { ComfyCommandImpl } from '../src/stores/commandStore'
@@ -19,9 +19,26 @@ const extractMenuCommandLocaleStrings = (): Set<string> => {
return labels
}
test('collect-i18n-general', async ({ comfyPage }) => {
test('collect-i18n-general', async ({ page }) => {
// Navigate to the page and wait for app to be available
console.log('Navigating to page...')
await page.goto('/')
console.log('Waiting for app to be available...')
// Check if we're on electron page
const title = await page.title()
console.log('Page title:', title)
// Debug: Check what's available on window
const windowKeys = await page.evaluate(() => {
return Object.keys(window).filter(key => !key.startsWith('__')).slice(0, 20)
})
console.log('Window keys:', windowKeys)
await page.waitForFunction(() => window['app'] != null, { timeout: 30000 })
const commands = (
await comfyPage.page.evaluate(() => {
await page.evaluate(() => {
const workspace = window['app'].extensionManager
const commands = workspace.command.commands as ComfyCommandImpl[]
return commands.map((command) => ({
@@ -58,7 +75,7 @@ test('collect-i18n-general', async ({ comfyPage }) => {
)
// Settings
const settings = await comfyPage.page.evaluate(() => {
const settings = await page.evaluate(() => {
const workspace = window['app'].extensionManager
const settings = workspace.setting.settings as Record<string, SettingParams>
return Object.values(settings)

View File

@@ -1,6 +1,6 @@
import * as fs from 'fs'
import { comfyPageFixture as test } from '../browser_tests/fixtures/ComfyPage'
import { test } from '@playwright/test'
import type { ComfyNodeDef } from '../src/schemas/nodeDefSchema'
import type { ComfyApi } from '../src/scripts/api'
import { ComfyNodeDefImpl } from '../src/stores/nodeDefStore'
@@ -9,17 +9,23 @@ import { normalizeI18nKey } from '../src/utils/formatUtil'
const localePath = './src/locales/en/main.json'
const nodeDefsPath = './src/locales/en/nodeDefs.json'
test('collect-i18n-node-defs', async ({ comfyPage }) => {
test('collect-i18n-node-defs', async ({ page }) => {
// Navigate to the page
await page.goto('/')
// Mock view route
comfyPage.page.route('**/view**', async (route) => {
await page.route('**/view**', async (route) => {
await route.fulfill({
body: JSON.stringify({})
})
})
// Wait for app to be available
await page.waitForFunction(() => window['app'] != null, { timeout: 30000 })
const nodeDefs: ComfyNodeDefImpl[] = (
Object.values(
await comfyPage.page.evaluate(async () => {
await page.evaluate(async () => {
const api = window['app'].api as ComfyApi
return await api.getNodeDefs()
})
@@ -62,7 +68,7 @@ test('collect-i18n-node-defs', async ({ comfyPage }) => {
if (!inputNames.length) continue
try {
const widgetsMappings = await comfyPage.page.evaluate(
const widgetsMappings = await page.evaluate(
(args) => {
const [nodeName, displayName, inputNames] = args
const node = window['LiteGraph'].createNode(nodeName, displayName)
@@ -91,7 +97,7 @@ test('collect-i18n-node-defs', async ({ comfyPage }) => {
`Failed to extract widgets from ${nodeDef.name}: ${error}`
)
} finally {
await comfyPage.nextFrame()
await page.waitForTimeout(10)
}
}

50
scripts/debug-i18n.cjs Normal file
View File

@@ -0,0 +1,50 @@
const { chromium } = require('playwright');
(async () => {
const browser = await chromium.launch({ headless: true });
const page = await browser.newPage();
// Check console messages
page.on('console', msg => {
console.log(`[${msg.type()}]`, msg.text());
});
page.on('pageerror', error => {
console.log('Page error:', error.message);
});
console.log('Navigating to http://localhost:5173...');
await page.goto('http://localhost:5173');
const title = await page.title();
console.log('Page title:', title);
// Wait for page to load
await page.waitForTimeout(5000);
// Check console errors
page.on('console', msg => {
if (msg.type() === 'error') {
console.log('Console error:', msg.text());
}
});
// Wait a bit more and check again
await page.waitForTimeout(5000);
// Check what's on window
const windowInfo = await page.evaluate(() => {
const keys = Object.keys(window).filter(key => !key.startsWith('__'));
return {
hasApp: 'app' in window,
hasLiteGraph: 'LiteGraph' in window,
hasComfyApp: 'ComfyApp' in window,
topKeys: keys.slice(0, 30),
appType: typeof window['app']
};
});
console.log('Window info:', JSON.stringify(windowInfo, null, 2));
await browser.close();
})();

View File

@@ -0,0 +1,116 @@
#!/usr/bin/env node
/**
* Verification script to check if i18n collection setup is working properly
* This script performs basic checks to ensure the environment is ready for i18n collection
*/
const fs = require('fs');
const path = require('path');
console.log('🔍 Verifying i18n collection setup...\n');
let hasErrors = false;
// Check 1: Verify locale directories exist
console.log('1. Checking locale directories...');
const localeDir = path.join(__dirname, '../src/locales/en');
if (fs.existsSync(localeDir)) {
console.log(' ✅ Locale directory exists');
} else {
console.log(' ❌ Locale directory missing:', localeDir);
hasErrors = true;
}
// Check 2: Verify required locale files
console.log('\n2. Checking locale files...');
const requiredFiles = ['main.json', 'commands.json', 'settings.json', 'nodeDefs.json'];
requiredFiles.forEach(file => {
const filePath = path.join(localeDir, file);
if (fs.existsSync(filePath)) {
const stats = fs.statSync(filePath);
console.log(`${file} exists (${stats.size} bytes)`);
} else {
console.log(`${file} missing`);
hasErrors = true;
}
});
// Check 3: Verify TypeScript compilation works
console.log('\n3. Checking TypeScript compilation...');
const problematicFiles = [
'src/lib/litegraph/src/subgraph/SubgraphNode.ts',
'src/lib/litegraph/src/subgraph/SubgraphInput.ts',
'src/lib/litegraph/src/subgraph/SubgraphOutput.ts',
'src/lib/litegraph/src/subgraph/EmptySubgraphInput.ts',
'src/lib/litegraph/src/subgraph/EmptySubgraphOutput.ts'
];
problematicFiles.forEach(file => {
const filePath = path.join(__dirname, '..', file);
if (fs.existsSync(filePath)) {
const content = fs.readFileSync(filePath, 'utf-8');
// Check for problematic patterns that caused issues
if (content.includes('declare inputs:') && !content.includes('override inputs:')) {
console.log(` ⚠️ ${file} may have unfixed declare syntax`);
} else {
console.log(`${file} syntax looks correct`);
}
}
});
// Check 4: Verify Playwright configuration
console.log('\n4. Checking Playwright configuration...');
const playwrightConfig = path.join(__dirname, '../playwright.i18n.config.ts');
if (fs.existsSync(playwrightConfig)) {
const content = fs.readFileSync(playwrightConfig, 'utf-8');
if (content.includes('testDir: \'./browser_tests\'')) {
console.log(' ✅ Playwright config points to correct test directory');
} else {
console.log(' ⚠️ Playwright config may need adjustment');
}
} else {
console.log(' ❌ Playwright i18n config missing');
hasErrors = true;
}
// Check 5: Verify package.json scripts
console.log('\n5. Checking package.json scripts...');
const packageJson = JSON.parse(fs.readFileSync(path.join(__dirname, '../package.json'), 'utf-8'));
if (packageJson.scripts['collect-i18n']) {
console.log(` ✅ collect-i18n script exists: "${packageJson.scripts['collect-i18n']}"`);
} else {
console.log(' ❌ collect-i18n script missing from package.json');
hasErrors = true;
}
// Check 6: Verify Playwright version consistency
console.log('\n6. Checking Playwright versions...');
const devDeps = packageJson.devDependencies || {};
const playwrightVersion = devDeps['@playwright/test'];
if (playwrightVersion) {
console.log(` ✅ @playwright/test version: ${playwrightVersion}`);
// Check for potential conflicts
const mcpServer = devDeps['@executeautomation/playwright-mcp-server'];
if (mcpServer) {
console.log(` ⚠️ MCP server present - may have version conflicts`);
console.log(` Ensure both use compatible Playwright versions`);
}
} else {
console.log(' ❌ @playwright/test not found in devDependencies');
hasErrors = true;
}
// Final summary
console.log('\n' + '='.repeat(50));
if (hasErrors) {
console.log('❌ Verification failed - some issues need to be fixed');
process.exit(1);
} else {
console.log('✅ All checks passed - i18n collection should work!');
console.log('\nTo run i18n collection:');
console.log(' 1. Start dev server: pnpm dev:electron');
console.log(' 2. Run collection: pnpm collect-i18n');
process.exit(0);
}