coders.db
Version:
A better sqlite3 system that is easy to install and easy to use, easy to config, non-locking. Made in coders code (https://discord.gg/cxJbCaqBPu)
271 lines (232 loc) • 9.35 kB
JavaScript
const sqlite_Module = require("better-sqlite3");
const langs = ["tr", "en"];
let db = new sqlite_Module("./codersdb.sqlite");
var methods = {
get: require("../methods/get.js"),
set: require("../methods/set.js"),
add: require("../methods/add.js"),
subtract: require("../methods/subtract.js"),
push: require("../methods/push.js"),
delete: require("../methods/delete.js"),
has: require("../methods/has.js"),
all: require("../methods/all.js"),
deleteFile: require("../methods/deleteFile.js"),
move: require("../methods/move.js"),
unpush: require("../methods/unpush.js")
};
var codersdb = require("../package.json")
this.messages = this.lang ? require(`../language/${this.lang.toLowerCase()}.json`) : require(`../language/en.json`);
//console.log(this.messages["start"].startMsg)
/* new options is soon */
module.exports = {
version: codersdb.version + "",
get: function(key, ops) {
this.messages = this.lang ? require(`../language/${this.lang.toLowerCase()}.json`) : require(`../language/en.json`);
if (!key) throw new TypeError(console.message["errors"].dontKey);
return arbitrate("get", { id: key, ops: ops || {} });
},
set: function(key, value, ops) {
this.messages = this.lang ? require(`../language/${this.lang.toLowerCase()}.json`) : require(`../language/en.json`);
if (!key) throw new TypeError(this.messages["errors"].dontKey);
if (value === undefined) throw new TypeError(this.messages["errors"].dontSetValue);
return arbitrate("set", {
stringify: true,
id: key,
data: value,
ops: ops || {}
});
},
add: function(key, value, ops) {
this.messages = this.lang ? require(`../language/${this.lang.toLowerCase()}.json`) : require(`../language/en.json`);
if (!key) throw new TypeError(this.messages["errors"].dontKey);
if (isNaN(value)) throw new TypeError(this.messages["errors"].dontAddValue);
return arbitrate("add", { id: key, data: value, ops: ops || {} });
},
subtract: function(key, value, ops) {
this.messages = this.lang ? require(`../language/${this.lang.toLowerCase()}.json`) : require(`../language/en.json`);
if (!key) throw new TypeError(this.messages["errors"].dontKey);
if (isNaN(value)) throw new TypeError(this.messages["errors"].dontSubtractValue);
return arbitrate("subtract", { id: key, data: value, ops: ops || {} });
},
push: function(key, value, ops) {
this.messages = this.lang ? require(`../language/${this.lang.toLowerCase()}.json`) : require(`../language/en.json`);
if (!key) throw new TypeError(this.messages["errors"].dontKey);
if (!value && value != 0) throw new TypeError(this.messages["errors"].dontPushValue);
return arbitrate("push", {
stringify: true,
id: key,
data: value,
ops: ops || {}
});
},
unpush: function(key, value, ops) {
this.messages = this.lang ? require(`../language/${this.lang.toLowerCase()}.json`) : require(`../language/en.json`);
if (!key) throw new TypeError(this.messages["errors"].dontKey);
if (!value && value != 0) throw new TypeError(this.messages["errors"].dontUnPushValue);
var emptyArray = [];
var newArray = [];
if(this.has(key)) {
emptyArray = this.get(key);
}else return false;
if(require("util").isArray(emptyArray)){
emptyArray = emptyArray.filter((XXXX) => XXXX !== value);
newArray = emptyArray
return arbitrate("set", {
stringify: true,
id: key,
data: newArray,
ops: ops || {}
});
}
},
delete: function(key, ops) {
this.messages = this.lang ? require(`../language/${this.lang.toLowerCase()}.json`) : require(`../language/en.json`);
if (!key) throw new TypeError(this.messages["errors"].dontKey);
return arbitrate("delete", { id: key, ops: ops || {} });
},
has: function(key, ops) {
this.messages = this.lang ? require(`../language/${this.lang.toLowerCase()}.json`) : require(`../language/en.json`);
if (!key) throw new TypeError(this.messages["errors"].dontKey);
return arbitrate("has", { id: key, ops: ops || {} });
},
allData: function(ops) {
return arbitrate("all", { ops: ops || {} });
},
deleteFile: function() {
require("fs").unlink('codersdb.sqlite', function (err) {
if (err) throw err;
return true;
});
return module.delMsg ? false : true;
},
move: function(qdb) {
qdb.all().map((data) => {
this.set(data.ID, data.data)
})
return true;
},
setLanguage: function(lang){
this.lang = lang ? (langs.includes(lang.toLowerCase()) ? lang.toLowerCase() : "en") : "en";
this.messages = require(`../language/${this.lang.toLowerCase()}.json`);
return lang;
},
language: this.lang ? this.lang : "en"
};
this.get = function(key, ops) {
this.messages = this.lang ? require(`../language/${this.lang.toLowerCase()}.json`) : require(`../language/en.json`);
if (!key) throw new TypeError(this.messages["errors"].dontKey);
return arbitrate("get", { id: key, ops: ops || {} }, this.tableName);
}; //dont promise is function .get()
this.set = function(key, value, ops) {
this.messages = this.lang ? require(`../language/${this.lang.toLowerCase()}.json`) : require(`../language/en.json`);
if (!key) throw new TypeError(this.messages["errors"].dontKey);
if (!value && value != 0) throw new TypeError(this.messages["errors"].dontSetValue);
return arbitrate(
"set",
{ stringify: true, id: key, data: value, ops: ops || {} },
this.tableName
);
};
this.add = function(key, value, ops) {
this.messages = this.lang ? require(`../language/${this.lang.toLowerCase()}.json`) : require(`../language/en.json`);
if (!key) throw new TypeError(this.messages["errors"].dontKey);
if (isNaN(value)) throw new TypeError(this.messages["errors"].dontAddValue);
return arbitrate(
"add",
{ id: key, data: value, ops: ops || {} },
this.tableName
);
};
this.subtract = function(key, value, ops) {
this.messages = this.lang ? require(`../language/${this.lang.toLowerCase()}.json`) : require(`../language/en.json`);
if (!key) throw new TypeError(this.messages["errors"].dontKey);
if (isNaN(value)) throw new TypeError(this.messages["errors"].dontSubtractValue);
return arbitrate(
"subtract",
{ id: key, data: value, ops: ops || {} },
this.tableName
);
};
this.push = function(key, value, ops) {
this.messages = this.lang ? require(`../language/${this.lang.toLowerCase()}.json`) : require(`../language/en.json`);
if (!key) throw new TypeError(this.messages["errors"].dontKey);
if (!value && value != 0) throw new TypeError(this.messages["errors"].dontPushValue);
return arbitrate(
"push",
{ stringify: true, id: key, data: value, ops: ops || {} },
this.tableName
);
};
this.unpush = function(key, value, ops) {
this.messages = this.lang ? require(`../language/${this.lang.toLowerCase()}.json`) : require(`../language/en.json`);
if (!key) throw new TypeError(this.messages["errors"].dontKey);
if (!value && value != 0) throw new TypeError(this.messages["errors"].dontUnPushValue);
var emptyArray = [];
var newArray = [];
if(this.has(key)) {
emptyArray = this.get(key);
}
emptyArray = emptyArray.filter((XXXX) => XXXX !== value);
newArray = emptyArray
return arbitrate("set", {
stringify: true,
id: key,
data: newArray,
ops: ops || {}
});
};
this.delete = function(key, ops) {
this.messages = this.lang ? require(`../language/${this.lang.toLowerCase()}.json`) : require(`../language/en.json`);
if (!key) throw new TypeError(this.messages["errors"].dontKey);
return arbitrate("delete", { id: key, ops: ops || {} }, this.tableName);
};
this.deleteFile = function() {
require("fs").unlink('codersdb.sqlite', function (err) {
if (err) throw err;
return true;
});
return module.delMsg ? false : true;
};
this.move = function(qdb) {
qdb.all().map(async (qdbData) => {
this.set(qdbData.ID, qdbData.data)
})
return true;
}
this.has = function(key, ops) {
this.messages = this.lang ? require(`../language/${this.lang.toLowerCase()}.json`) : require(`../language/en.json`);
if (!key) throw new TypeError(this.messages["errors"].dontKey);
return arbitrate("has", { id: key, ops: ops || {} }, this.tableName);
};
this.allData = function(ops) {
return arbitrate("all", { ops: ops || {} }, this.tableName);
};
function arbitrate(method, params, tableName) {
let options = {
table: tableName || "codersdb"
};
db.prepare(
`CREATE TABLE IF NOT EXISTS ${options.table} (ID TEXT, json TEXT)`
).run();
if (params.ops.target && params.ops.target[0] === ".")
params.ops.target = params.ops.target.slice(1);
if (params.data && params.data === Infinity)
throw new TypeError(
`You cannot set Infinity into the database @ ID: ${params.id}`
);
if (params.stringify) {
try {
params.data = JSON.stringify(params.data);
} catch (e) {
throw new TypeError(
`Please supply a valid input @ ID: ${params.id}\nError: ${e.message}`
);
}
}
if (params.id && params.id.includes(".")) {
let unparsed = params.id.split(".");
params.id = unparsed.shift();
params.ops.target = unparsed.join(".");
}
return methods[method](db, params, options);
}