const assert = require('node:assert/strict') const fs = require('node:fs') const os = require('node:os') const path = require('node:path') const test = require('node:test') const { withXuqmConfig } = require('../metro') test('withXuqmConfig schedules automatic initialization before the app entry', () => { const projectRoot = fs.mkdtempSync(path.join(os.tmpdir(), 'xuqm-metro-')) const configDir = path.join(projectRoot, 'src/assets/config') const existingPrelude = path.join(projectRoot, 'existing-prelude.js') try { fs.mkdirSync(configDir, { recursive: true }) fs.writeFileSync(path.join(configDir, 'app.xuqmconfig'), 'XUQM-CONFIG-V1.test', 'utf8') const config = withXuqmConfig({ projectRoot, resolver: {}, serializer: { getModulesRunBeforeMainModule: () => [existingPrelude], }, }) const preludeModules = config.serializer.getModulesRunBeforeMainModule('index.js') assert.equal(preludeModules[0], existingPrelude) assert.match(preludeModules[1], /packages[\\/]common[\\/]src[\\/]internal\.ts$/) const virtualModule = config.resolver.resolveRequest( { resolveRequest: () => assert.fail('fallback resolver should not run') }, '@xuqm/autoinit-config', 'android', ) assert.equal(virtualModule.type, 'sourceFile') assert.match(fs.readFileSync(virtualModule.filePath, 'utf8'), /XUQM-CONFIG-V1\.test/) } finally { fs.rmSync(projectRoot, { recursive: true, force: true }) } }) test('withXuqmConfig leaves common-only hosts unchanged without a config file', () => { const projectRoot = fs.mkdtempSync(path.join(os.tmpdir(), 'xuqm-metro-')) const original = { projectRoot, serializer: { getModulesRunBeforeMainModule: () => ['existing-prelude.js'], }, } try { assert.equal(withXuqmConfig(original), original) } finally { fs.rmSync(projectRoot, { recursive: true, force: true }) } })