import assert from 'node:assert/strict' import { mkdtempSync, rmSync, writeFileSync } from 'node:fs' import { tmpdir } from 'node:os' import path from 'node:path' import test from 'node:test' import { resolveVersionedModules, validateConfig } from './xuqm-config.mjs' function fixture() { const root = mkdtempSync(path.join(tmpdir(), 'xuqm-config-')) writeFileSync(path.join(root, 'package.json'), JSON.stringify({ version: '7.2.14' })) writeFileSync(path.join(root, 'common.ts'), '') writeFileSync(path.join(root, 'app.ts'), '') writeFileSync(path.join(root, 'metro.config.js'), 'module.exports = {}\n') return root } test('plugins start at the configured plugin version independently from the app version', () => { const root = fixture() try { const config = { appId: 'example', mainModuleName: 'Example', pluginVersion: '1.0.0', appVersionRange: '>=7.2.14 <8.0.0', metroConfig: './metro.config.js', modules: [ { id: 'common', type: 'common', entry: './common.ts' }, { id: 'app', type: 'app', entry: './app.ts' }, ], } assert.deepEqual(validateConfig(config, root), []) const resolved = resolveVersionedModules(config, root) assert.equal(resolved.appVersion, '7.2.14') assert.equal(resolved.modules[0].moduleVersion, '1.0.0') assert.equal(resolved.modules[1].moduleVersion, '1.0.0') assert.equal(resolved.modules[1].commonVersionRange, '>=1.0.0 <2.0.0') assert.equal(resolved.modules[1].minNativeApiLevel, 1) } finally { rmSync(root, { recursive: true, force: true }) } }) test('an explicitly independently released module keeps its own version', () => { const root = fixture() try { const resolved = resolveVersionedModules( { pluginVersion: '1.0.0', appVersionRange: '>=8.0.0 <9.0.0', modules: [ { id: 'common', type: 'common', moduleVersion: '3.0.0' }, { id: 'feature', type: 'buz', moduleVersion: '4.1.0' }, ], }, root, '8.0.0', ) assert.equal(resolved.appVersion, '8.0.0') assert.equal(resolved.modules[0].moduleVersion, '3.0.0') assert.equal(resolved.modules[1].moduleVersion, '4.1.0') assert.equal(resolved.modules[1].commonVersionRange, '>=3.0.0 <4.0.0') } finally { rmSync(root, { recursive: true, force: true }) } })