UNPKG

@soymaycol/base64

Version:

Convertidor y ejecutor de archivos .may

58 lines (48 loc) 1.95 kB
const fs = require('fs'); const path = require('path'); const vm = require('vm'); class MayProcessor { static convert(inputFile) { if (!fs.existsSync(inputFile)) throw new Error(`Archivo no encontrado: ${inputFile}`); const fileExt = path.extname(inputFile); if (fileExt !== '.js') throw new Error('Solo se pueden convertir archivos .js'); const content = fs.readFileSync(inputFile, 'utf8'); const encoded = Buffer.from(content).toString('base64'); const fileName = path.basename(inputFile, '.js'); const outputFile = path.join(path.dirname(inputFile), `${fileName}.may`); fs.writeFileSync(outputFile, encoded); console.log(`✓ Archivo convertido exitosamente: ${outputFile}`); return outputFile; } static async execute(mayFile) { if (!fs.existsSync(mayFile)) throw new Error(`Archivo no encontrado: ${mayFile}`); const fileExt = path.extname(mayFile); if (fileExt !== '.may') throw new Error('Solo se pueden ejecutar archivos .may'); const encoded = fs.readFileSync(mayFile, 'utf8'); const decoded = Buffer.from(encoded, 'base64').toString('utf8'); const context = { require, module: { exports: {} }, exports: {}, console, process, __filename: mayFile, __dirname: path.dirname(mayFile), }; const script = new vm.Script(decoded); const vmContext = vm.createContext(context); // Ejecutar el script y esperar cualquier input async try { await script.runInContext(vmContext); return context.module.exports; } catch (err) { console.error(`Error al ejecutar archivo: ${err.message}`); throw err; } } } module.exports = { convert: MayProcessor.convert, execute: MayProcessor.execute, MayProcessor };