52 lines
1.6 KiB
JavaScript
52 lines
1.6 KiB
JavaScript
#!/usr/bin/env node
|
|
|
|
const { spawnSync } = require('child_process');
|
|
const fs = require('fs');
|
|
const path = require('path');
|
|
|
|
function loadDotEnv(filePath) {
|
|
if (!fs.existsSync(filePath)) return;
|
|
const lines = fs.readFileSync(filePath, 'utf8').split(/\r?\n/);
|
|
for (const line of lines) {
|
|
const trimmed = line.trim();
|
|
if (!trimmed || trimmed.startsWith('#')) continue;
|
|
const match = trimmed.match(/^([A-Za-z_][A-Za-z0-9_]*)=(.*)$/);
|
|
if (!match) continue;
|
|
const [, key, rawValue] = match;
|
|
if (process.env[key] != null) continue;
|
|
process.env[key] = rawValue.replace(/^["']|["']$/g, '');
|
|
}
|
|
}
|
|
|
|
const projectRoot = path.resolve(__dirname, '..');
|
|
loadDotEnv(path.join(projectRoot, '.env'));
|
|
|
|
const mode = process.argv[2] || 'dev';
|
|
const engine = String(process.env.DEFAULT_GAME_ENGINE || process.env.GAME_ENGINE || 'ink')
|
|
.trim()
|
|
.toLowerCase();
|
|
const allowedModes = new Set(['dev', 'start']);
|
|
const allowedEngines = new Set(['ink', 'yaml', 'zcode']);
|
|
|
|
if (!allowedModes.has(mode)) {
|
|
console.error(`Unsupported run mode "${mode}". Use "dev" or "start".`);
|
|
process.exit(1);
|
|
}
|
|
|
|
if (!allowedEngines.has(engine)) {
|
|
console.error(`Unsupported DEFAULT_GAME_ENGINE "${engine}". Use "ink", "yaml", or "zcode".`);
|
|
process.exit(1);
|
|
}
|
|
|
|
const npmCommand = process.platform === 'win32' ? 'npm.cmd' : 'npm';
|
|
const script = `${mode}:${engine}`;
|
|
console.log(`[run-engine] DEFAULT_GAME_ENGINE=${engine}; running npm run ${script}`);
|
|
|
|
const result = spawnSync(npmCommand, ['run', script], {
|
|
cwd: projectRoot,
|
|
env: process.env,
|
|
stdio: 'inherit',
|
|
});
|
|
|
|
process.exit(result.status == null ? 1 : result.status);
|