fj-js
Version:
Facilitation of JavaScript (FJ) - A simplified, powerful JS-based scripting language.
60 lines (50 loc) • 1.52 kB
JavaScript
const fs = require("fs")
const vm = require("vm")
const path = require("path")
const { parseFJ } = require("../lib/parser")
const interpreter = require("../lib/interpreter")
const args = process.argv.slice(2)
const command = args[0]
// Mostrar versión
if (command === "--versions") {
console.log("FJ Language v1.3.0")
console.log("Node.js", process.version)
console.log("Platform:", process.platform)
process.exit()
}
// Instalación de módulos externos con: fj install nombre
if (command === "install" && args[1]) {
const pkg = args[1]
console.log(`Instalando paquete: ${pkg}...`)
const { execSync } = require("child_process")
try {
execSync(`npm install ${pkg}`, { stdio: "inherit" })
console.log(`✅ Paquete '${pkg}' instalado correctamente.`)
} catch (err) {
console.error("Error al instalar el paquete:", err.message)
}
process.exit()
}
// Ejecutar archivo .fj
if (!command || !command.endsWith(".fj")) {
console.log("Uso: fj archivo.fj")
process.exit()
}
const filePath = path.resolve(process.cwd(), command)
if (!fs.existsSync(filePath)) {
console.error("❌ Archivo no encontrado:", filePath)
process.exit()
}
// Crear contexto seguro
const context = vm.createContext(interpreter)
async function ejecutarFJ() {
try {
const raw = fs.readFileSync(filePath, "utf-8")
const jsCode = parseFJ(raw)
await vm.runInContext(jsCode, context)
} catch (err) {
console.error("Error ejecutando FJ:", err.message)
}
}
ejecutarFJ()