Files
amayo/tmp_check.js
Shni 408ac0e3fb feat(dashboard): enhance dashboard settings UI and add item management scripts
- Updated the dashboard settings partial to include a semi-transparent background for better visibility.
- Introduced a new script for validating the syntax of dashboard item scripts, ensuring better error handling and diagnostics.
- Added a comprehensive JavaScript file for managing dashboard items, including fetching, rendering, editing, and deleting items.
- Implemented various utility functions for handling alerts, rewards, and modal interactions within the item management interface.
- Created temporary scripts for debugging and parsing errors in item scripts, aiding in development and maintenance.
2025-10-15 15:53:50 -05:00

44 lines
2.4 KiB
JavaScript

const fs = require('fs');
const path = '/home/shni/amayo/amayo/src/server/views/partials/dashboard/dashboard_items.ejs';
const s = fs.readFileSync(path,'utf8');
const m = s.match(/<script[^>]*>([\s\S]*?)<\/script>/i);
if(!m){ console.error('NO_SCRIPT'); process.exit(2); }
const src = m[1];
console.log('SCRIPT LENGTH:', src.length);
let stack = [];
const opens = {'(':')','[':']','{':'}'};
const closes = {')':'(',']':'[','}':'{'};
let inSingle=false, inDouble=false, inTemplate=false, inComment=false, inLineComment=false, escape=false;
let lastSingle=-1, lastDouble=-1, lastTemplate=-1;
for(let i=0;i<src.length;i++){
const ch = src[i];
const next = src[i+1] || '';
if(inComment){ if(ch==='*' && next==='/' ){ inComment=false; i++; continue; } else continue; }
if(inLineComment){ if(ch==='\n'){ inLineComment=false; continue; } else continue; }
if(escape){ escape=false; continue; }
if(ch==='\\') { escape=true; continue; }
if(!inSingle && !inDouble && !inTemplate){
if(ch==='/' && next==='*'){ inComment=true; i++; continue; }
if(ch==='/' && next==='/'){ inLineComment=true; i++; continue; }
}
if(!inDouble && !inTemplate && ch==="'") { inSingle = !inSingle; if(inSingle) lastSingle = i; continue; }
if(!inSingle && !inTemplate && ch==='"') { inDouble = !inDouble; if(inDouble) lastDouble = i; continue; }
if(!inSingle && !inDouble && ch==='`') { inTemplate = !inTemplate; if(inTemplate) lastTemplate = i; continue; }
if(inSingle || inDouble || inTemplate) continue;
if(opens[ch]){ stack.push({ch, i}); continue; }
if(closes[ch]){
if(stack.length===0){ console.error('UNMATCHED_CLOSE', ch, 'at', i); process.exit(3); }
const top = stack.pop();
if(top.ch !== closes[ch]){ console.error('MISMATCH', top, 'close', ch, 'at', i); process.exit(4); }
}
}
if(inSingle || inDouble || inTemplate) {
console.error('UNTERMINATED_STRING');
if(inSingle) console.error('lastSingle@', lastSingle, 'context=>', src.slice(Math.max(0,lastSingle-60), lastSingle+60));
if(inDouble) console.error('lastDouble@', lastDouble, 'context=>', src.slice(Math.max(0,lastDouble-60), lastDouble+60));
if(inTemplate) console.error('lastTemplate@', lastTemplate, 'context=>', src.slice(Math.max(0,lastTemplate-60), lastTemplate+60));
}
if(stack.length) console.error('UNMATCHED_OPEN', stack[stack.length-1], 'context=>', src.slice(Math.max(0,stack[stack.length-1].i-40), stack[stack.length-1].i+40));
console.log('DONE');
process.exit(0);