const fs = require('fs'), ts = require('typescript'), assert = require('node:assert/strict'); const code = ts.transpileModule(fs.readFileSync('assets/home_popup_queue/HomePopupQueue.ts', 'utf8'), { compilerOptions: { target: ts.ScriptTarget.ES2017, module: ts.ModuleKind.CommonJS, experimentalDecorators: true } }).outputText; const cc = { Component: class {}, _decorator: { ccclass: c => c }, isValid: () => true, error: e => { throw e; } }; const out = {}; new Function('exports', 'cc', code)(out, cc); for (const host of [null, {}, { isPopupActive: () => false }, { isPopupActive: () => true }]) { const queue = new out.default(); queue.node = { getComponent: name => name === 'CoinMadnessHost' ? host : null, getChildByName: () => null }; let ran = 0; queue.enqueue('automatic', 10, done => { ran++; done(); }); queue.update(); const blocked = !!host && typeof host.isPopupActive === 'function' && host.isPopupActive(); assert.equal(ran, blocked ? 0 : 1); if (blocked) { host.isPopupActive = () => false; queue.update(); assert.equal(ran, 1); } } console.log('PASS: missing/legacy host never throws; active manual panel blocks automatic popups until closed.');