const assert = require('node:assert/strict') const { execFileSync } = require('node:child_process') const { createRequire } = require('node:module') const fs = require('node:fs') const os = require('node:os') const path = require('node:path') const test = require('node:test') test('common-only host bundles the default auto-init module with real Metro', async () => { const workspaceRoot = path.resolve(__dirname, '../../..') const outputDirectory = fs.mkdtempSync(path.join(os.tmpdir(), 'xuqm-common-only-')) const output = path.join(outputDirectory, 'common-only.bundle.js') try { const reactNativeRequire = createRequire( require.resolve('react-native/package.json', { paths: [workspaceRoot] }), ) const metro = reactNativeRequire('metro') const metroConfig = reactNativeRequire('metro-config') const config = await metroConfig.getDefaultConfig(workspaceRoot) config.watchFolders = [workspaceRoot] config.resolver.extraNodeModules = { 'metro-runtime': path.dirname(reactNativeRequire.resolve('metro-runtime/package.json')), } await metro.runBuild(config, { dev: false, entry: 'packages/common/tests/fixtures/common-only.js', minify: false, out: output, platform: 'android', }) assert.equal(fs.statSync(output).size > 0, true) } finally { fs.rmSync(outputDirectory, { recursive: true, force: true }) } }) test('public types expose no manual initialization entry', () => { const workspaceRoot = path.resolve(__dirname, '../../..') execFileSync( process.execPath, [ path.join(path.dirname(require.resolve('typescript', { paths: [workspaceRoot] })), 'tsc.js'), '-p', path.join(__dirname, 'fixtures/tsconfig.json'), ], { cwd: workspaceRoot, stdio: 'pipe' }, ) })