quickpostgres
Version:
An easy, beginner-friendly PostgreSQL database wrapper similar to quick.db.
65 lines • 2.53 kB
JavaScript
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const get_1 = __importDefault(require("lodash/get"));
const set_1 = __importDefault(require("lodash/set"));
exports.default = async (db, params, options) => {
// Fetch entry
let fetched = await db.query(`SELECT * FROM ${options.table} WHERE ID = ($1)`, [params.id]);
// If not found, create empty row
if (!fetched) {
await db.query(`INSERT INTO ${options.table} (ID,json) VALUES ($1,$2)`, [
params.id,
"{}",
]);
fetched = await db.query(`SELECT * FROM ${options.table} WHERE ID = ($1)`, [
params.id,
]);
}
// Check if a target was supplied
if (params.ops.target) {
fetched = JSON.parse(fetched.rows[0].json);
params.data = JSON.parse(params.data);
if (typeof fetched !== "object")
throw new TypeError(`Cannot push into a non-object. (ID: ${params.id})`);
let oldArray = (0, get_1.default)(fetched, params.ops.target);
if (oldArray === undefined)
oldArray = [];
else if (!Array.isArray(oldArray))
throw new TypeError(`Fetched value is not an array. (ID: ${params.id}`);
oldArray.push(params.data);
params.data = (0, set_1.default)(fetched, params.ops.target, oldArray);
}
else {
if (fetched.rows[0].json)
fetched.rows[0].json = [];
else
fetched.rows[0].json = JSON.parse(fetched.rows[0].json);
params.data = JSON.parse(params.data);
if (!Array.isArray(fetched.rows[0].json))
throw new TypeError(`Fetched value is not an array. (ID: ${params.id}`);
fetched.rows[0].push(params.data);
params.data = fetched.rows[0].json;
}
// Stringify data
if (typeof params.data !== "string")
params.data = JSON.stringify(params.data);
// Update entry with new data
await db.query(`UPDATE ${options.table} SET json = ($1) WHERE ID = ($2)`, [
params.data,
params.id,
]);
// Fetch and return with new data
let newData = (await db.query(`SELECT * FROM ${options.table} WHERE ID = ($1)`, [
params.id,
])).rows[0].json;
if (newData === "{}")
return null;
else {
newData = JSON.parse(newData);
return newData;
}
};
//# sourceMappingURL=push.js.map
;