45 行
1.7 KiB
JavaScript
45 行
1.7 KiB
JavaScript
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(
|
|
path.join(workspaceRoot, 'node_modules/.bin/tsc'),
|
|
['-p', path.join(__dirname, 'fixtures/tsconfig.json')],
|
|
{ cwd: workspaceRoot, stdio: 'pipe' },
|
|
)
|
|
})
|