spa_codegenerator
Version:
NPM:
136 lines (113 loc) • 5.44 kB
JavaScript
const generateCode = require('./functions/generateCode');
const _findCode = require('./functions/findCode');
const fs = require('fs');
let config = {};
class createBASE {
constructor(BASE_NAME, options = {
codesLength: Number, // Longitud del código que se generará.
generateInUTF8: Boolean, // Si el código será generato con caracteres. TRUE = Caracteres, false = Números
insertSomething: {
string: String, // La cadena que será insertada cada cierta longitud.
eachString: Number, // La longitud que se debe repetir hasta insertar otra cadena.
},
deepSave: Boolean // Si el código será guardado en ".../node_modules/spa_codegenerator/data"
}) {
if(!BASE_NAME) throw new Error('BASE_NAME: No se ha especificado el nombre de la base.');
if(!options.codesLength) options.codesLength = Math.floor(Math.random() * 9 + 1);
if(typeof options.codesLength != 'number') options.codesLength = Math.floor(Math.random() * 9 + 1);
if(!options.generateInUTF8) options.generateInUTF8 = false;
if(typeof options.generateInUTF8 != 'boolean') options.generateInUTF8 = false;
if(!options.insertSomething) options.insertSomething = {
string: 1,
eachString: 'ESTÁ ALTERADO, NO TOCAR'
};
if(options.insertSomething && options.insertSomething.string && !options.insertSomething.string) options.insertSomething.string = '.';
if(typeof options.insertSomething.string != 'string') options.insertSomething.string = '.';
if(options.insertSomething && options.insertSomething.eachString && !options.insertSomething.eachString) options.insertSomething.eachString = Math.floor(Math.random() * 9 + 1);
if(typeof options.insertSomething.eachString != 'number') options.insertSomething.eachString = Math.floor(Math.random() * 9 + 1);
if(!options.deepSave) options.deepSave = false;
if(typeof options.deepSave != 'boolean') options.deepSave = false;
options.insertSomething.eachString--;
options.BASE_NAME = BASE_NAME;
fs.readdir(__dirname + '/BASES/', function (err, files) {
if (err) throw new Error(`No se ha podido escanear el directorio '${__dirname}/BASES/'.`);
if(files.includes(`${config.BASE_NAME}.json`))return;
fs.writeFile(__dirname + `/BASES/${BASE_NAME}.json`, `{\n "codes": []\n}`,
function(err) {
if(err) throw new Error(err);
});
});
config = options;
}
async generateCode(amount, codeEndAtString) {
if(!amount) amount = 1;
if(!codeEndAtString) codeEndAtString = false;
let returned = await generateCode(amount, config, codeEndAtString);
fs.readdir(__dirname + '/BASES/', function (err, files) {
if(!files.includes(`${config.BASE_NAME}.json`) || config.deepSave == false)return;
let deep = require(`./BASES/${config.BASE_NAME}.json`);
let newArrayCodes = [];
for(let n = 0; n < deep.codes.length; n++) {
newArrayCodes.push(`"${deep.codes[n]}"`);
}
for(let n = 0; n < returned.length; n++) {
newArrayCodes.push(`"${returned[n]}"`);
}
fs.writeFile(__dirname + `/BASES/${config.BASE_NAME}.json`, `{\n "codes": [${newArrayCodes}]\n}`,
function(err) {
if(err) throw new Error(err);
});
});
return returned;
}
async findCode(code) {
fs.readdir(__dirname + '/BASES/', function (err, files) {
if(!files.includes(`${config.BASE_NAME}.json`) || config.deepSave == false)return undefined;
});
return await _findCode(code, config);
}
async findCodeAndUpdate(code, newCode) {
if(!newCode) throw new Error('No se ha especificado el nuevo valor.');
let _code = await findCode(code, config);
if(_code) {
let deep = require(`./BASES/${config.BASE_NAME}.json`);
let newArray = [];
newArray = await pulk(deep.codes, code);
newArray.push(`"${newCode}"`);
fs.writeFile(__dirname + `/BASES/${config.BASE_NAME}.json`, `{\n "codes": [${newArray}]\n}`,
function(err) {
if(err) throw new Error(err);
});
return true;
}
}
async findCodeAndDelete(code) {
let _code = await findCode(code, config);
if(_code) {
let deep = require(`./BASES/${config.BASE_NAME}.json`);
let newArray = [];
newArray = await pulk(deep.codes, code);
fs.writeFile(__dirname + `/BASES/${config.BASE_NAME}.json`, `{\n "codes": [${newArray}]\n}`,
function(err) {
if(err) throw new Error(err);
});
return true;
}
}
async getAllCodes() {
let deep = require(`./BASES/${config.BASE_NAME}.json`);
return deep.codes;
}
}
async function pulk(array, object) {
let newArray = [];
for(x of array) {
if(x != object) {
newArray.push(x);
}
}
return newArray;
}
module.exports = {
createBASE
}