UNPKG

@napi-rs/cli

Version:

Cli tools for napi-rs

96 lines (84 loc) 2.61 kB
import { existsSync } from 'node:fs' import { mkdir, readFile, rm, writeFile } from 'node:fs/promises' import { tmpdir } from 'node:os' import { join } from 'node:path' import ava, { type TestFn } from 'ava' import { collectArtifacts } from '../artifacts.js' const test = ava as TestFn<{ tmpDir: string }> test.beforeEach(async (t) => { const tmpDir = join( tmpdir(), 'napi-rs-test', `artifacts-spec-${Date.now()}-${Math.random().toString(36).slice(2)}`, ) await mkdir(tmpDir, { recursive: true }) t.context = { tmpDir } }) test.afterEach.always(async (t) => { if (existsSync(t.context.tmpDir)) { await rm(t.context.tmpDir, { recursive: true, force: true }) } }) test('resolves a relative WASI build output directory from cwd', async (t) => { const { tmpDir } = t.context const binaryName = 'wasi-artifact' const packageName = '@napi-rs/wasi-artifact' const buildOutputDir = join(tmpDir, 'build-output') const wasiPackageDir = join(tmpDir, 'npm', 'wasm32-wasi') await Promise.all([ mkdir(join(tmpDir, 'artifacts'), { recursive: true }), mkdir(buildOutputDir, { recursive: true }), mkdir(wasiPackageDir, { recursive: true }), ]) await writeFile( join(tmpDir, 'package.json'), JSON.stringify({ name: packageName, version: '0.0.0', napi: { binaryName, targets: ['wasm32-wasi-preview1-threads'], }, }), ) const browserEntry = "const worker = new URL('./wasi-worker-browser.mjs', import.meta.url)\n" await Promise.all([ writeFile(join(buildOutputDir, `${binaryName}.wasi.cjs`), 'node binding'), writeFile(join(buildOutputDir, 'wasi-worker.mjs'), 'node worker'), writeFile( join(buildOutputDir, `${binaryName}.wasi-browser.js`), browserEntry, ), writeFile( join(buildOutputDir, 'wasi-worker-browser.mjs'), 'browser worker', ), ]) await collectArtifacts({ cwd: tmpDir, buildOutputDir: 'build-output', }) t.is( await readFile(join(wasiPackageDir, `${binaryName}.wasi.cjs`), 'utf8'), 'node binding', ) t.is( await readFile(join(wasiPackageDir, 'wasi-worker.mjs'), 'utf8'), 'node worker', ) t.is( await readFile(join(wasiPackageDir, 'wasi-worker-browser.mjs'), 'utf8'), 'browser worker', ) t.is( await readFile( join(wasiPackageDir, `${binaryName}.wasi-browser.js`), 'utf8', ), browserEntry.replace( "new URL('./wasi-worker-browser.mjs', import.meta.url)", `new URL('${packageName}-wasm32-wasi/wasi-worker-browser.mjs', import.meta.url)`, ), ) })