mirror of
https://github.com/samsonjs/vibetunnel.git
synced 2026-03-26 09:35:52 +00:00
66 lines
No EOL
2.3 KiB
JavaScript
Executable file
66 lines
No EOL
2.3 KiB
JavaScript
Executable file
#!/usr/bin/env node
|
|
|
|
/**
|
|
* Ensures native modules are built and available for tests
|
|
* This script handles pnpm's symlink structure where node-pty might be in .pnpm directory
|
|
*/
|
|
|
|
const fs = require('fs');
|
|
const path = require('path');
|
|
const { execSync } = require('child_process');
|
|
|
|
console.log('Ensuring native modules are built for tests...');
|
|
|
|
// Find the actual node-pty location (could be in .pnpm directory)
|
|
let nodePtyPath;
|
|
try {
|
|
nodePtyPath = require.resolve('node-pty/package.json');
|
|
} catch (e) {
|
|
console.error('Could not find node-pty module');
|
|
process.exit(1);
|
|
}
|
|
|
|
const nodePtyDir = path.dirname(nodePtyPath);
|
|
const buildDir = path.join(nodePtyDir, 'build');
|
|
const releaseDir = path.join(buildDir, 'Release');
|
|
|
|
console.log(`Found node-pty at: ${nodePtyDir}`);
|
|
|
|
// Check if native modules are built
|
|
if (!fs.existsSync(releaseDir) || !fs.existsSync(path.join(releaseDir, 'pty.node'))) {
|
|
console.log('Native modules not found, building...');
|
|
|
|
try {
|
|
// Build using node-gyp directly to avoid TypeScript issues
|
|
execSync(`cd "${nodePtyDir}" && npx node-gyp rebuild`, {
|
|
stdio: 'inherit',
|
|
shell: true
|
|
});
|
|
} catch (e) {
|
|
console.error('Failed to build native modules:', e.message);
|
|
process.exit(1);
|
|
}
|
|
}
|
|
|
|
// For pnpm, ensure the symlinked node_modules/node-pty has the build directory
|
|
const symlinkNodePty = path.join(__dirname, '../node_modules/node-pty');
|
|
if (fs.existsSync(symlinkNodePty) && fs.lstatSync(symlinkNodePty).isSymbolicLink()) {
|
|
const symlinkBuildDir = path.join(symlinkNodePty, 'build');
|
|
|
|
// If the symlinked location doesn't have a build directory, create a symlink to the real one
|
|
if (!fs.existsSync(symlinkBuildDir) && fs.existsSync(buildDir)) {
|
|
console.log('Creating symlink for build directory in node_modules/node-pty...');
|
|
try {
|
|
const symlinkType = process.platform === 'win32' ? 'junction' : 'dir';
|
|
fs.symlinkSync(buildDir, symlinkBuildDir, symlinkType);
|
|
console.log('Created build directory symlink');
|
|
} catch (e) {
|
|
// If symlink fails, try copying instead
|
|
console.log('Symlink failed, trying to copy build directory...');
|
|
fs.cpSync(buildDir, symlinkBuildDir, { recursive: true });
|
|
console.log('Copied build directory');
|
|
}
|
|
}
|
|
}
|
|
|
|
console.log('Native modules are ready for tests'); |