Files
ai.interactive.fiction/scripts/run-engine.js
T

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);