32 lines
1.3 KiB
JavaScript
32 lines
1.3 KiB
JavaScript
#!/usr/bin/env node
|
|
const fs = require('fs');
|
|
const path = require('path');
|
|
|
|
const root = path.resolve(__dirname, '..');
|
|
const sourcePath = path.join(root, 'plugins', 'sync', 'frontend', 'src', 'SyncSettings.svelte');
|
|
const source = fs.readFileSync(sourcePath, 'utf8');
|
|
|
|
if (!source.includes('settings.lastError')) {
|
|
throw new Error('SyncSettings must render persisted settings.lastError');
|
|
}
|
|
if (!source.includes('function reportError')) {
|
|
throw new Error('SyncSettings must map technical failures to localized action-specific errors');
|
|
}
|
|
if (/sanitizeError\(/.test(source) || /\{ error: sanitizeError/.test(source)) {
|
|
throw new Error('SyncSettings must not interpolate raw technical errors into user-facing messages');
|
|
}
|
|
if (!source.includes("tr('ui.lastSyncError'")) {
|
|
throw new Error('SyncSettings must label the persisted sync error');
|
|
}
|
|
if (!source.includes("tr('ui.syncConflictItem'")) {
|
|
throw new Error('SyncSettings must hide technical conflict identifiers behind a user-facing summary');
|
|
}
|
|
if (!source.includes('conflictDetails')) {
|
|
throw new Error('SyncSettings must store sync conflict details after Sync Now');
|
|
}
|
|
if (!source.includes('Sync conflicts')) {
|
|
throw new Error('SyncSettings must label the conflict details section');
|
|
}
|
|
|
|
console.log('sync plugin smoke passed');
|